From 1594ec867bcba46cfbfa3da0d0f0d81cb0aa00fc Mon Sep 17 00:00:00 2001 From: alema Date: Fri, 9 Jul 2021 21:47:53 +0200 Subject: [PATCH] fix nasty expired pointer --- us.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/us.c b/us.c index 4b486cc..4ee68d9 100644 --- a/us.c +++ b/us.c @@ -102,12 +102,14 @@ int main(int argc, char *argv[]) fprintf(stderr, "getpwid: %s\n", strerror(errno)); return errno; } + char *my_name = strdup(my_pw->pw_name); + if (!my_name) + die("strdup:"); /* Authenticate, we will be root from now on */ if (authenticate(my_pw->pw_uid, 0)) exit(EXIT_FAILURE); - /* Get target user and group info */ t_pw = user_to_passwd(t_usr); if (!t_pw) @@ -169,8 +171,11 @@ int main(int argc, char *argv[]) }; if (envflag) { /* clear env */ - for (int i = 0; env_keep[i].name; i++) + for (int i = 0; env_keep[i].name; i++) { env_keep[i].value = strdup(getenv(env_keep[i].name)); + if (!env_keep[i].value) + die("strdup:"); + } environ = NULL; // in place of clearenv } @@ -194,7 +199,8 @@ int main(int argc, char *argv[]) } } // do not override, we might be under more levels of 'us' - err = setenv("US_USER", my_pw->pw_name, 0); + err = setenv("US_USER", my_name, 0); + free(my_name); errno = 0; /* Set permissions */