X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ffirstboot%2Ffirstboot.c;h=fd73adbac8dff21db2359d8dc1c7fb35c3dbc87a;hb=4c94096027f21d4ed0efe991534a926d39d52369;hp=56893d0e37031f5db0670b561fdbf11524d3cace;hpb=418b9be50018303cde79b423d4701b7fd86ddbdc;p=elogind.git diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index 56893d0e3..fd73adbac 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -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); + read_one_char(stdin, &k, USEC_INFINITY, &need_nl); if (need_nl) putchar('\n'); @@ -530,8 +530,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 +559,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 +573,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; @@ -639,8 +647,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 +669,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 +726,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); @@ -879,7 +885,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; }