chiark / gitweb /
treewide: auto-convert the simple cases to log_*_errno()
[elogind.git] / src / firstboot / firstboot.c
index 56893d0e37031f5db0670b561fdbf11524d3cace..1f11a2aec6cc5b52f701b4c34baa89d6d4edf98c 100644 (file)
@@ -68,7 +68,7 @@ static bool press_any_key(void) {
         printf("-- Press any key to proceed --");
         fflush(stdout);
 
-        read_one_char(stdin, &k, (usec_t) -1, &need_nl);
+        (void) read_one_char(stdin, &k, USEC_INFINITY, &need_nl);
 
         if (need_nl)
                 putchar('\n');
@@ -98,7 +98,7 @@ static void print_welcome(void) {
         }
 
         if (r < 0 && r != -ENOENT)
-                log_warning("Failed to read os-release file: %s", strerror(-r));
+                log_warning_errno(-r, "Failed to read os-release file: %m");
 
         printf("\nWelcome to your new installation of %s!\nPlease configure a few basic system settings:\n\n",
                isempty(pretty_name) ? "Linux" : pretty_name);
@@ -167,7 +167,7 @@ static int prompt_loop(const char *text, char **l, bool (*is_valid)(const char *
 
                 r = ask_string(&p, "%s %s (empty to skip): ", draw_special_char(DRAW_TRIANGULAR_BULLET), text);
                 if (r < 0) {
-                        log_error("Failed to query user: %s", strerror(-r));
+                        log_error_errno(-r, "Failed to query user: %m");
                         return r;
                 }
 
@@ -220,7 +220,7 @@ static int prompt_locale(void) {
 
         r = get_locales(&locales);
         if (r < 0) {
-                log_error("Cannot query locales list: %s", strerror(-r));
+                log_error_errno(-r, "Cannot query locales list: %m");
                 return r;
         }
 
@@ -263,7 +263,7 @@ static int process_locale(void) {
                 r = copy_file("/etc/locale.conf", etc_localeconf, 0, 0644);
                 if (r != -ENOENT) {
                         if (r < 0) {
-                                log_error("Failed to copy %s: %s", etc_localeconf, strerror(-r));
+                                log_error_errno(-r, "Failed to copy %s: %m", etc_localeconf);
                                 return r;
                         }
 
@@ -289,7 +289,7 @@ static int process_locale(void) {
         mkdir_parents(etc_localeconf, 0755);
         r = write_env_file(etc_localeconf, locales);
         if (r < 0) {
-                log_error("Failed to write %s: %s", etc_localeconf, strerror(-r));
+                log_error_errno(-r, "Failed to write %s: %m", etc_localeconf);
                 return r;
         }
 
@@ -309,7 +309,7 @@ static int prompt_timezone(void) {
 
         r = get_timezones(&zones);
         if (r < 0) {
-                log_error("Cannot query timezone list: %s", strerror(-r));
+                log_error_errno(-r, "Cannot query timezone list: %m");
                 return r;
         }
 
@@ -343,7 +343,7 @@ static int process_timezone(void) {
                 r = readlink_malloc("/etc/localtime", &p);
                 if (r != -ENOENT) {
                         if (r < 0) {
-                                log_error("Failed to read host timezone: %s", strerror(-r));
+                                log_error_errno(-r, "Failed to read host timezone: %m");
                                 return r;
                         }
 
@@ -394,7 +394,7 @@ static int prompt_hostname(void) {
 
                 r = ask_string(&h, "%s Please enter hostname for new system (empty to skip): ", draw_special_char(DRAW_TRIANGULAR_BULLET));
                 if (r < 0) {
-                        log_error("Failed to query hostname: %s", strerror(-r));
+                        log_error_errno(-r, "Failed to query hostname: %m");
                         return r;
                 }
 
@@ -434,7 +434,7 @@ static int process_hostname(void) {
         mkdir_parents(etc_hostname, 0755);
         r = write_string_file(etc_hostname, arg_hostname);
         if (r < 0) {
-                log_error("Failed to write %s: %s", etc_hostname, strerror(-r));
+                log_error_errno(-r, "Failed to write %s: %m", etc_hostname);
                 return r;
         }
 
@@ -451,16 +451,13 @@ static int process_machine_id(void) {
         if (faccessat(AT_FDCWD, etc_machine_id, F_OK, AT_SYMLINK_NOFOLLOW) >= 0)
                 return 0;
 
-        if (!arg_root)
-                return 0;
-
         if (sd_id128_equal(arg_machine_id, SD_ID128_NULL))
                 return 0;
 
         mkdir_parents(etc_machine_id, 0755);
         r = write_string_file(etc_machine_id, sd_id128_to_string(arg_machine_id, id));
         if (r < 0) {
-                log_error("Failed to write machine id: %s", strerror(-r));
+                log_error_errno(-r, "Failed to write machine id: %m");
                 return r;
         }
 
@@ -491,9 +488,9 @@ static int prompt_root_password(void) {
         for (;;) {
                 _cleanup_free_ char *a = NULL, *b = NULL;
 
-                r = ask_password_tty(msg1, 0, NULL, &a);
+                r = ask_password_tty(msg1, 0, false, NULL, &a);
                 if (r < 0) {
-                        log_error("Failed to query root password: %s", strerror(-r));
+                        log_error_errno(-r, "Failed to query root password: %m");
                         return r;
                 }
 
@@ -502,9 +499,9 @@ static int prompt_root_password(void) {
                         break;
                 }
 
-                r = ask_password_tty(msg2, 0, NULL, &b);
+                r = ask_password_tty(msg2, 0, false, NULL, &b);
                 if (r < 0) {
-                        log_error("Failed to query root password: %s", strerror(-r));
+                        log_error_errno(-r, "Failed to query root password: %m");
                         clear_string(a);
                         return r;
                 }
@@ -530,8 +527,8 @@ static int write_root_shadow(const char *path, const struct spwd *p) {
         assert(path);
         assert(p);
 
-        mkdir_parents(path, 0755);
-        f = fopen(path, "wex");
+        RUN_WITH_UMASK(0777)
+                f = fopen(path, "wex");
         if (!f)
                 return -errno;
 
@@ -559,6 +556,8 @@ static int process_root_password(void) {
                 .sp_expire = -1,
                 .sp_flag = (unsigned long) -1, /* this appears to be what everybody does ... */
         };
+
+        _cleanup_close_ int lock = -1;
         char salt[3+16+1+1];
         uint8_t raw[16];
         unsigned i;
@@ -571,6 +570,12 @@ static int process_root_password(void) {
         if (faccessat(AT_FDCWD, etc_shadow, F_OK, AT_SYMLINK_NOFOLLOW) >= 0)
                 return 0;
 
+        mkdir_parents(etc_shadow, 0755);
+
+        lock = take_password_lock(arg_root);
+        if (lock < 0)
+                return lock;
+
         if (arg_copy_root_password && arg_root) {
                 struct spwd *p;
 
@@ -587,7 +592,7 @@ static int process_root_password(void) {
 
                         r = write_root_shadow(etc_shadow, p);
                         if (r < 0) {
-                                log_error("Failed to write %s: %s", etc_shadow, strerror(-r));
+                                log_error_errno(-r, "Failed to write %s: %m", etc_shadow);
                                 return r;
                         }
 
@@ -605,7 +610,7 @@ static int process_root_password(void) {
 
         r = dev_urandom(raw, 16);
         if (r < 0) {
-                log_error("Failed to get salt: %s", strerror(-r));
+                log_error_errno(-r, "Failed to get salt: %m");
                 return r;
         }
 
@@ -631,7 +636,7 @@ static int process_root_password(void) {
 
         r = write_root_shadow(etc_shadow, &item);
         if (r < 0) {
-                log_error("Failed to write %s: %s", etc_shadow, strerror(-r));
+                log_error_errno(-r, "Failed to write %s: %m", etc_shadow);
                 return r;
         }
 
@@ -639,8 +644,7 @@ static int process_root_password(void) {
         return 0;
 }
 
-static int help(void) {
-
+static void help(void) {
         printf("%s [OPTIONS...]\n\n"
                "Configures basic settings of the system.\n\n"
                "  -h --help                    Show this help\n"
@@ -662,10 +666,8 @@ static int help(void) {
                "     --copy-timezone           Copy timezone from host\n"
                "     --copy-root-password      Copy root password from host\n"
                "     --copy                    Copy locale, timezone, root password\n"
-               "     --setup-machine-id        Generate a new random machine ID\n",
-               program_invocation_short_name);
-
-        return 0;
+               "     --setup-machine-id        Generate a new random machine ID\n"
+               , program_invocation_short_name);
 }
 
 static int parse_argv(int argc, char *argv[]) {
@@ -721,12 +723,13 @@ static int parse_argv(int argc, char *argv[]) {
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) {
+        while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
 
                 switch (c) {
 
                 case 'h':
-                        return help();
+                        help();
+                        return 0;
 
                 case ARG_VERSION:
                         puts(PACKAGE_STRING);
@@ -801,7 +804,7 @@ static int parse_argv(int argc, char *argv[]) {
 
                         r = read_one_line_file(optarg, &arg_root_password);
                         if (r < 0) {
-                                log_error("Failed to read %s: %s", optarg, strerror(-r));
+                                log_error_errno(-r, "Failed to read %s: %m", optarg);
                                 return r;
                         }
 
@@ -850,6 +853,7 @@ static int parse_argv(int argc, char *argv[]) {
 
                 case ARG_COPY:
                         arg_copy_locale = arg_copy_timezone = arg_copy_root_password = true;
+                        break;
 
                 case ARG_COPY_LOCALE:
                         arg_copy_locale = true;
@@ -867,7 +871,7 @@ static int parse_argv(int argc, char *argv[]) {
 
                         r = sd_id128_randomize(&arg_machine_id);
                         if (r < 0) {
-                                log_error("Failed to generate randomized machine ID: %s", strerror(-r));
+                                log_error_errno(-r, "Failed to generate randomized machine ID: %m");
                                 return r;
                         }
 
@@ -879,7 +883,6 @@ static int parse_argv(int argc, char *argv[]) {
                 default:
                         assert_not_reached("Unhandled option");
                 }
-        }
 
         return 1;
 }