diff options
author | Jim Meyering <jim@meyering.net> | 1997-03-18 12:49:20 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1997-03-18 12:49:20 +0000 |
commit | bcdeccb6a3a4dc46f7edd4aa2f63d7f34593ff50 (patch) | |
tree | dcafddd001a8b8539ec8df5f078cada02a2306b9 | |
parent | 808a6a2308a10dfcfec080f9b66ff2663cc8894b (diff) | |
download | coreutils-bcdeccb6a3a4dc46f7edd4aa2f63d7f34593ff50.tar.xz |
(log_su): Resort to getpwuid if getlogin fails.
If no tty name is found, use `none' in the log message.
Based on a patch from Galen Hazelwood.
-rw-r--r-- | src/su.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -237,10 +237,15 @@ log_su (const struct passwd *pw, int successful) the user, especially if someone su's from a su-shell. */ old_user = getlogin (); if (old_user == NULL) - old_user = ""; + { + /* getlogin can fail -- usually due to lack of utmp entry. + Resort to getpwuid. */ + struct passwd *pwd = getpwuid (getuid ()); + old_user = (pwd ? pwd->pw_name : ""); + } tty = ttyname (2); if (tty == NULL) - tty = ""; + tty = "none"; /* 4.2BSD openlog doesn't have the third parameter. */ openlog (basename (program_name), 0 #ifdef LOG_AUTH @@ -317,8 +322,9 @@ modify_environment (const struct passwd *pw, const char *shell) xputenv (concat ("SHELL", "=", shell)); xputenv (concat ("USER", "=", pw->pw_name)); xputenv (concat ("LOGNAME", "=", pw->pw_name)); - xputenv (concat ("PATH", "=", pw->pw_uid - ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH)); + xputenv (concat ("PATH", "=", (pw->pw_uid + ? DEFAULT_LOGIN_PATH + : DEFAULT_ROOT_LOGIN_PATH))); } else { |