From: Todd C. Miller Date: Wed, 3 Aug 1994 02:41:55 +0000 (+0000) Subject: now set SUDO_ envariables X-Git-Tag: SUDO_1_3_1~75 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8161d52f34068ce3ddb440ee6f5fec5f46b14d20;p=sudo now set SUDO_ envariables --- diff --git a/sudo.c b/sudo.c index 073fbfed7..3c098a89f 100644 --- a/sudo.c +++ b/sudo.c @@ -97,6 +97,7 @@ extern char *strdup(); */ static void usage __P((void)); static void load_globals __P((void)); +static void add_env __P((void)); static void rmenv __P((char **, char *, int)); static void clean_env __P((char **)); @@ -167,6 +168,8 @@ main(argc, argv) load_globals(); /* load the user host cmnd and uid variables */ + add_env(); /* add in SUDO_* envariables */ + rtn = validate(); switch (rtn) { @@ -452,3 +455,42 @@ static void rmenv(envp, s, len) } } } + + + +/********************************************************************** + * + * add_env() + * + * this function adds sudo-specific variables into the environment + */ + +static void add_env() +{ + char *envar; + int len, n; + + /* add the SUDO_USER envariable */ + envar = (char *) malloc(strlen(user) + 10); + if (envar == NULL) { + perror("malloc"); + (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); + exit(1); + } + (void) strcpy(envar, "SUDO_USER="); + (void) strcpy(envar+10, user); + (void) putenv(envar); + + /* add the SUDO_UID envariable */ + for (len = 1 + (uid < 0), n = (int)uid; (n = n / 10) != 0; ) + ++len; + + envar = (char *) malloc(len+9); + if (envar == NULL) { + perror("malloc"); + (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); + exit(1); + } + (void) sprintf(envar, "SUDO_UID=%d", (int)uid); + (void) putenv(envar); +}