From 71b7ddcdd5c473f9eaf6035b96acc68c14cb379e Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 20 Nov 2011 14:08:33 -0800 Subject: port to GNU hosts, where getuid and friends can fail * src/groups.c (main): * src/install.c (need_copy): * src/su.c (log_su): * src/test.c (unary_operator): * src/whoami.c (main): Don't assume that getuid and friends always succeed. This fixes the same problem that we recently fixed with 'id'. --- src/su.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/su.c') diff --git a/src/su.c b/src/su.c index 081ecb2eb..b1ba2a7b7 100644 --- a/src/su.c +++ b/src/su.c @@ -173,7 +173,10 @@ log_su (struct passwd const *pw, bool successful) { /* getlogin can fail -- usually due to lack of utmp entry. Resort to getpwuid. */ - struct passwd *pwd = getpwuid (getuid ()); + errno = 0; + uid_t ruid = getuid (); + uid_t NO_UID = -1; + struct passwd *pwd = (ruid == NO_UID && errno ? NULL : getpwuid (ruid)); old_user = (pwd ? pwd->pw_name : ""); } tty = ttyname (STDERR_FILENO); -- cgit v1.2.3-54-g00ecf