diff options
author | Mark Salyzyn <salyzyn@google.com> | 2016-03-08 13:36:00 -0800 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2016-03-09 08:53:48 -0800 |
commit | 75dbde9b57c0bb76927ad16b4f1b65aa0e9eb5f4 (patch) | |
tree | f4ca17deffab358687e883ec96bed0805c769680 /su | |
parent | e363c2db056fefd6b45d77a36a39de8fa85dad7b (diff) | |
download | extras-75dbde9b57c0bb76927ad16b4f1b65aa0e9eb5f4.tar.gz |
su: Segmentation Fault on unknown numerical uids
(cherry pick from commit 45948f910c69d354cc3f7e81631445d83ebadc3d)
e.g.
su 2999,2999,2999 echo hello
Segmentation Fault
return from getpwuid is NULL. KISS we opt to unset LOGNAME and USER
Change-Id: I7e7eddacfd6857f83482727eb5ec5c51b9170039
Diffstat (limited to 'su')
-rw-r--r-- | su/su.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -122,8 +122,13 @@ int main(int argc, char** argv) { setenv("PATH", _PATH_DEFPATH, 1); unsetenv("IFS"); struct passwd* pw = getpwuid(uid); - setenv("LOGNAME", pw->pw_name, 1); - setenv("USER", pw->pw_name, 1); + if (pw) { + setenv("LOGNAME", pw->pw_name, 1); + setenv("USER", pw->pw_name, 1); + } else { + unsetenv("LOGNAME"); + unsetenv("USER"); + } // Set up the arguments for exec. char* exec_args[argc + 1]; // Having too much space is fine. |