From cf94f348811547b38eefef628030f6631553f818 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Tue, 13 Jul 1999 08:57:49 +0000 Subject: [PATCH] (get_default_username): a better way of guessing when the user has su:ed git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6452 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/roken/get_default_username.c | 37 +++++++++++++++++++------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/lib/roken/get_default_username.c b/lib/roken/get_default_username.c index fd319fa6a..e6591ea15 100644 --- a/lib/roken/get_default_username.c +++ b/lib/roken/get_default_username.c @@ -51,28 +51,35 @@ RCSID("$Id$"); const char * get_default_username (void) { - const char *p; + const char *user; + + user = getenv ("USER"); + if (user == NULL) + user = getenv ("LOGNAME"); + if (user == NULL) + user = getenv ("USERNAME"); - p = getenv ("USER"); - if (p != NULL) - return p; - p = getenv ("LOGNAME"); - if (p != NULL) - return p; - p = getenv ("USERNAME"); - if (p != NULL) - return p; #if defined(HAVE_GETLOGIN) && !defined(POSIX_GETLOGIN) - p = (const char *)getlogin (); - if (p != NULL) - return p; + if (user == NULL) { + user = (const char *)getlogin (); + if (user != NULL) + return user; + } #endif #ifdef HAVE_PWD_H { - struct passwd *pwd = k_getpwuid (getuid ()); + uid_t uid = getuid (); + struct passwd *pwd; + + if (user != NULL) { + pwd = k_getpwnam (user); + if (pwd != NULL && pwd->pw_uid == uid) + return user; + } + pwd = k_getpwuid (uid); if (pwd != NULL) return pwd->pw_name; } #endif - return NULL; + return user; }