From: Alejandro Colomar Date: Mon, 29 Jan 2024 15:28:02 +0000 (+0100) Subject: src/sulogin.c: pw_entry(): Report errors by returning -1 X-Git-Tag: 4.15.0-rc1~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a377e318f5406808df87afc74dc909acd2f9b78;p=thirdparty%2Fshadow.git src/sulogin.c: pw_entry(): Report errors by returning -1 Cc: Samanta Navarro Reviewed-by: Serge Hallyn Signed-off-by: Alejandro Colomar --- diff --git a/src/sulogin.c b/src/sulogin.c index 6633dd5d9..c21f425dc 100644 --- a/src/sulogin.c +++ b/src/sulogin.c @@ -47,7 +47,7 @@ extern size_t newenvc; static void catch_signals (int); -static void pw_entry(const char *name, struct passwd *pwent); +static int pw_entry(const char *name, struct passwd *pwent); static void catch_signals (unused int sig) @@ -135,13 +135,12 @@ main(int argc, char **argv) while (true) { /* repeatedly get login/password pairs */ char *cp; - pw_entry ("root", &pwent); /* get entry from password file */ - if (pwent.pw_name == NULL) { + if (pw_entry("root", &pwent) == -1) { /* get entry from password file */ /* * Fail secure */ - (void) puts (_("No password entry for 'root'")); - exit (1); + (void) puts(_("No password entry for 'root'")); + exit(1); } /* @@ -192,17 +191,14 @@ main(int argc, char **argv) } -static void +static int pw_entry(const char *name, struct passwd *pwent) { struct spwd *spwd; struct passwd *passwd; - if (!(passwd = getpwnam(name))) { /* local, no need for xgetpwnam */ - free(pwent->pw_name); - pwent->pw_name = NULL; - return; - } + if (!(passwd = getpwnam(name))) /* local, no need for xgetpwnam */ + return -1; free(pwent->pw_name); pwent->pw_name = xstrdup(passwd->pw_name); @@ -219,9 +215,10 @@ pw_entry(const char *name, struct passwd *pwent) if ((spwd = getspnam(name))) { free(pwent->pw_passwd); pwent->pw_passwd = xstrdup(spwd->sp_pwdp); - return; + return 0; } #endif free(pwent->pw_passwd); pwent->pw_passwd = xstrdup(passwd->pw_passwd); + return 0; }