LCOV - code coverage report
Current view: top level - machine-id-setup - machine-id-setup-main.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 0 56 0.0 %
Date: 2019-08-23 13:36:53 Functions: 0 5 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 51 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : 
       3                 :            : #include <errno.h>
       4                 :            : #include <getopt.h>
       5                 :            : #include <stdio.h>
       6                 :            : #include <stdlib.h>
       7                 :            : 
       8                 :            : #include "alloc-util.h"
       9                 :            : #include "id128-util.h"
      10                 :            : #include "log.h"
      11                 :            : #include "machine-id-setup.h"
      12                 :            : #include "main-func.h"
      13                 :            : #include "path-util.h"
      14                 :            : #include "pretty-print.h"
      15                 :            : #include "util.h"
      16                 :            : 
      17                 :            : static char *arg_root = NULL;
      18                 :            : static bool arg_commit = false;
      19                 :            : static bool arg_print = false;
      20                 :            : 
      21                 :          0 : STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
      22                 :            : 
      23                 :          0 : static int help(void) {
      24                 :          0 :         _cleanup_free_ char *link = NULL;
      25                 :            :         int r;
      26                 :            : 
      27                 :          0 :         r = terminal_urlify_man("systemd-machine-id-setup", "1", &link);
      28         [ #  # ]:          0 :         if (r < 0)
      29                 :          0 :                 return log_oom();
      30                 :            : 
      31                 :          0 :         printf("%s [OPTIONS...]\n\n"
      32                 :            :                "Initialize /etc/machine-id from a random source.\n\n"
      33                 :            :                "  -h --help             Show this help\n"
      34                 :            :                "     --version          Show package version\n"
      35                 :            :                "     --root=ROOT        Filesystem root\n"
      36                 :            :                "     --commit           Commit transient ID\n"
      37                 :            :                "     --print            Print used machine ID\n"
      38                 :            :                "\nSee the %s for details.\n"
      39                 :            :                , program_invocation_short_name
      40                 :            :                , link
      41                 :            :         );
      42                 :            : 
      43                 :          0 :         return 0;
      44                 :            : }
      45                 :            : 
      46                 :          0 : static int parse_argv(int argc, char *argv[]) {
      47                 :            : 
      48                 :            :         enum {
      49                 :            :                 ARG_VERSION = 0x100,
      50                 :            :                 ARG_ROOT,
      51                 :            :                 ARG_COMMIT,
      52                 :            :                 ARG_PRINT,
      53                 :            :         };
      54                 :            : 
      55                 :            :         static const struct option options[] = {
      56                 :            :                 { "help",      no_argument,       NULL, 'h'           },
      57                 :            :                 { "version",   no_argument,       NULL, ARG_VERSION   },
      58                 :            :                 { "root",      required_argument, NULL, ARG_ROOT      },
      59                 :            :                 { "commit",    no_argument,       NULL, ARG_COMMIT    },
      60                 :            :                 { "print",     no_argument,       NULL, ARG_PRINT     },
      61                 :            :                 {}
      62                 :            :         };
      63                 :            : 
      64                 :            :         int c, r;
      65                 :            : 
      66         [ #  # ]:          0 :         assert(argc >= 0);
      67         [ #  # ]:          0 :         assert(argv);
      68                 :            : 
      69         [ #  # ]:          0 :         while ((c = getopt_long(argc, argv, "hqcv", options, NULL)) >= 0)
      70                 :            : 
      71   [ #  #  #  #  :          0 :                 switch (c) {
                #  #  # ]
      72                 :            : 
      73                 :          0 :                 case 'h':
      74                 :          0 :                         return help();
      75                 :            : 
      76                 :          0 :                 case ARG_VERSION:
      77                 :          0 :                         return version();
      78                 :            : 
      79                 :          0 :                 case ARG_ROOT:
      80                 :          0 :                         r = parse_path_argument_and_warn(optarg, true, &arg_root);
      81         [ #  # ]:          0 :                         if (r < 0)
      82                 :          0 :                                 return r;
      83                 :          0 :                         break;
      84                 :            : 
      85                 :          0 :                 case ARG_COMMIT:
      86                 :          0 :                         arg_commit = true;
      87                 :          0 :                         break;
      88                 :            : 
      89                 :          0 :                 case ARG_PRINT:
      90                 :          0 :                         arg_print = true;
      91                 :          0 :                         break;
      92                 :            : 
      93                 :          0 :                 case '?':
      94                 :          0 :                         return -EINVAL;
      95                 :            : 
      96                 :          0 :                 default:
      97                 :          0 :                         assert_not_reached("Unhandled option");
      98                 :            :                 }
      99                 :            : 
     100         [ #  # ]:          0 :         if (optind < argc)
     101         [ #  # ]:          0 :                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
     102                 :            :                                        "Extraneous arguments");
     103                 :            : 
     104                 :          0 :         return 1;
     105                 :            : }
     106                 :            : 
     107                 :          0 : static int run(int argc, char *argv[]) {
     108                 :            :         char buf[SD_ID128_STRING_MAX];
     109                 :            :         sd_id128_t id;
     110                 :            :         int r;
     111                 :            : 
     112                 :          0 :         log_parse_environment();
     113                 :          0 :         log_open();
     114                 :            : 
     115                 :          0 :         r = parse_argv(argc, argv);
     116         [ #  # ]:          0 :         if (r <= 0)
     117                 :          0 :                 return r;
     118                 :            : 
     119         [ #  # ]:          0 :         if (arg_commit) {
     120                 :            :                 const char *etc_machine_id;
     121                 :            : 
     122                 :          0 :                 r = machine_id_commit(arg_root);
     123         [ #  # ]:          0 :                 if (r < 0)
     124                 :          0 :                         return r;
     125                 :            : 
     126   [ #  #  #  #  :          0 :                 etc_machine_id = prefix_roota(arg_root, "/etc/machine-id");
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
     127                 :          0 :                 r = id128_read(etc_machine_id, ID128_PLAIN, &id);
     128         [ #  # ]:          0 :                 if (r < 0)
     129         [ #  # ]:          0 :                         return log_error_errno(r, "Failed to read machine ID back: %m");
     130                 :            :         } else {
     131                 :          0 :                 r = machine_id_setup(arg_root, SD_ID128_NULL, &id);
     132         [ #  # ]:          0 :                 if (r < 0)
     133                 :          0 :                         return r;
     134                 :            :         }
     135                 :            : 
     136         [ #  # ]:          0 :         if (arg_print)
     137                 :          0 :                 puts(sd_id128_to_string(id, buf));
     138                 :            : 
     139                 :          0 :         return 0;
     140                 :            : }
     141                 :            : 
     142                 :          0 : DEFINE_MAIN_FUNCTION(run);

Generated by: LCOV version 1.14