newusers: Add missing error handling

Some errors were being reported in stderr, but then they weren't really
being treated as errors.

If mkdir(2) for EEXIST, it's possible that the sysadmin pre-created the
user dir; don't fail.  However, let's keep a log line, for having some
notice that it happened.

Also, run chmod(2) if mkdir(2) failed for EEXIST (so transform the
'else if' into an 'if').

Cc: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
Alejandro Colomar 2023-02-04 20:52:54 +01:00 committed by Serge Hallyn
parent 6491fef1e0
commit 1957c8c881

View File

@ -1252,13 +1252,20 @@ int main (int argc, char **argv)
_("%s: line %d: mkdir %s failed: %s\n"), _("%s: line %d: mkdir %s failed: %s\n"),
Prog, line, newpw.pw_dir, Prog, line, newpw.pw_dir,
strerror (errno)); strerror (errno));
} else if (chown (newpw.pw_dir, if (errno != EEXIST) {
errors++;
continue;
}
}
if (chown (newpw.pw_dir,
newpw.pw_uid, newpw.pw_uid,
newpw.pw_gid) != 0) { newpw.pw_gid) != 0) {
fprintf (stderr, fprintf (stderr,
_("%s: line %d: chown %s failed: %s\n"), _("%s: line %d: chown %s failed: %s\n"),
Prog, line, newpw.pw_dir, Prog, line, newpw.pw_dir,
strerror (errno)); strerror (errno));
errors++;
continue;
} }
} }
@ -1285,12 +1292,15 @@ int main (int argc, char **argv)
fprintf (stderr, fprintf (stderr,
_("%s: failed to prepare new %s entry\n"), _("%s: failed to prepare new %s entry\n"),
Prog, sub_uid_dbname ()); Prog, sub_uid_dbname ());
errors++;
continue;
} }
} else { } else {
fprintf (stderr, fprintf (stderr,
_("%s: can't find subordinate user range\n"), _("%s: can't find subordinate user range\n"),
Prog); Prog);
errors++; errors++;
continue;
} }
} }
@ -1305,12 +1315,15 @@ int main (int argc, char **argv)
fprintf (stderr, fprintf (stderr,
_("%s: failed to prepare new %s entry\n"), _("%s: failed to prepare new %s entry\n"),
Prog, sub_uid_dbname ()); Prog, sub_uid_dbname ());
errors++;
continue;
} }
} else { } else {
fprintf (stderr, fprintf (stderr,
_("%s: can't find subordinate group range\n"), _("%s: can't find subordinate group range\n"),
Prog); Prog);
errors++; errors++;
continue;
} }
} }
#endif /* ENABLE_SUBIDS */ #endif /* ENABLE_SUBIDS */