From 8ced1e5dc55b972addafb91e4c4f527d41b8ee8e Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 9 Jan 2010 22:21:55 +0100 Subject: passwd: do not complain about /etc/shadow needlessly Signed-off-by: Denys Vlasenko --- loginutils/passwd.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'loginutils') diff --git a/loginutils/passwd.c b/loginutils/passwd.c index c1481c65e..b447af2f5 100644 --- a/loginutils/passwd.c +++ b/loginutils/passwd.c @@ -128,12 +128,20 @@ int passwd_main(int argc UNUSED_PARAM, char **argv) /* getspnam_r may return 0 yet set result to NULL. * At least glibc 2.4 does this. Be extra paranoid here. */ struct spwd *result = NULL; - if (getspnam_r(pw->pw_name, &spw, buffer, sizeof(buffer), &result) - || !result || strcmp(result->sp_namp, pw->pw_name) != 0) { - /* LOGMODE_BOTH */ - bb_error_msg("no record of %s in %s, using %s", + errno = 0; + if (getspnam_r(pw->pw_name, &spw, buffer, sizeof(buffer), &result) != 0 + || !result /* no error, but no record found either */ + || strcmp(result->sp_namp, pw->pw_name) != 0 /* paranoia */ + ) { + if (errno != ENOENT) { + /* LOGMODE_BOTH */ + bb_perror_msg("no record of %s in %s, using %s", name, bb_path_shadow_file, bb_path_passwd_file); + } + /* else: /etc/shadow does not exist, + * apparently we are on a shadow-less system, + * no surprise there */ } else { pw->pw_passwd = result->sp_pwdp; } -- cgit v1.2.3