summaryrefslogtreecommitdiff
path: root/su
diff options
context:
space:
mode:
authorMark Salyzyn <salyzyn@google.com>2016-03-08 13:36:00 -0800
committerMark Salyzyn <salyzyn@google.com>2016-03-09 08:53:48 -0800
commit75dbde9b57c0bb76927ad16b4f1b65aa0e9eb5f4 (patch)
treef4ca17deffab358687e883ec96bed0805c769680 /su
parente363c2db056fefd6b45d77a36a39de8fa85dad7b (diff)
downloadextras-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.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/su/su.c b/su/su.c
index d932c1ba..ea61f93d 100644
--- a/su/su.c
+++ b/su/su.c
@@ -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.