command line.
}
void
-insert_env_vars(struct list_member *env_vars)
+insert_env_vars(char * const envp[])
{
- struct list_member *cur;
+ char * const *ep;
- if (env_vars == NULL)
+ if (envp == NULL)
return;
/* Add user-specified environment variables. */
- for (cur = env_vars; cur != NULL; cur = cur->next)
- putenv(cur->value);
+ for (ep = envp; *ep != NULL; ep++)
+ sudo_putenv(*ep, TRUE, TRUE);
}
/*
* Calls log_error() if any specified variables are not allowed.
*/
void
-validate_env_vars(struct list_member *env_vars)
+validate_env_vars(char * const env_vars[])
{
- struct list_member *var;
+ char * const *ep;
char *eq, *bad = NULL;
size_t len, blen = 0, bsize = 0;
int okvar;
- for (var = env_vars; var != NULL; var = var->next) {
+ /* Add user-specified environment variables. */
+ for (ep = env_vars; *ep != NULL; ep++) {
if (def_secure_path && !user_is_exempt() &&
- strncmp(var->value, "PATH=", 5) == 0) {
+ strncmp(*ep, "PATH=", 5) == 0) {
okvar = FALSE;
} else if (def_env_reset) {
- okvar = matches_env_check(var->value);
+ okvar = matches_env_check(*ep);
if (okvar == -1)
- okvar = matches_env_keep(var->value);
+ okvar = matches_env_keep(*ep);
} else {
- okvar = matches_env_delete(var->value) == FALSE;
+ okvar = matches_env_delete(*ep) == FALSE;
if (okvar == FALSE)
- okvar = matches_env_check(var->value) != FALSE;
+ okvar = matches_env_check(*ep) != FALSE;
}
if (okvar == FALSE) {
/* Not allowed, add to error string, allocating as needed. */
- if ((eq = strchr(var->value, '=')) != NULL)
+ if ((eq = strchr(*ep, '=')) != NULL)
*eq = '\0';
- len = strlen(var->value) + 2;
+ len = strlen(*ep) + 2;
if (blen + len >= bsize) {
do {
bsize += 1024;
bad = erealloc(bad, bsize);
bad[blen] = '\0';
}
- strlcat(bad, var->value, bsize);
+ strlcat(bad, *ep, bsize);
strlcat(bad, ", ", bsize);
blen += len;
if (eq != NULL)
len += sizeof(LL_TSID_STR) + 2 + strlen(sudo_user.sessid);
if (sudo_user.env_vars != NULL) {
size_t evlen = 0;
- struct list_member *cur;
- for (cur = sudo_user.env_vars; cur != NULL; cur = cur->next)
- evlen += strlen(cur->value) + 1;
+ char * const *ep;
+
+ for (ep = sudo_user.env_vars; *ep != NULL; ep++)
+ evlen += strlen(*ep) + 1;
evstr = emalloc(evlen);
evstr[0] = '\0';
- for (cur = sudo_user.env_vars; cur != NULL; cur = cur->next) {
- strlcat(evstr, cur->value, evlen);
+ for (ep = sudo_user.env_vars; *ep != NULL; ep++) {
+ strlcat(evstr, *ep, evlen);
strlcat(evstr, " ", evlen); /* NOTE: last one will fail */
}
len += sizeof(LL_ENV_STR) + 2 + evlen;
static struct passwd *get_authpw(void);
static int deserialize_info(char * const settings[], char * const user_info[]);
-extern int sudo_edit(int, char **, char **);
-void validate_env_vars(struct list_member *);
-void insert_env_vars(struct list_member *);
-
/* XXX */
extern int runas_ngroups;
extern GETGROUPS_T *runas_groups;
warningx("sorry, you are not allowed to preserve the environment");
goto done;
} else
- validate_env_vars(sudo_user.env_vars);
+ validate_env_vars(env_add);
}
log_allowed(validated);
#if defined(__linux__) || defined(_AIX)
/* Insert system-wide environment variables. */
- /* XXX */
read_env_file(_PATH_ENVIRONMENT, TRUE);
#endif
}
/* Insert system-wide environment variables. */
-#if 0 /* XXX - add back */
- if (def_env_file) {
+ if (def_env_file)
read_env_file(def_env_file, FALSE);
- }
/* Insert user-specified environment variables. */
- insert_env_vars(sudo_user.env_vars);
-#endif
+ insert_env_vars(env_add);
/* Restore signal handlers before we exec. */
(void) sigaction(SIGINT, &saved_sa_int, NULL);
int lines;
int cols;
GETGROUPS_T *groups;
- struct list_member *env_vars;
+ char * const * env_vars;
#ifdef HAVE_SELINUX
char *role;
char *type;
char **env_get(void);
int env_init(char * const envp[]);
void init_envtables(void);
+void insert_env_vars(char * const envp[]);
void read_env_file(const char *, int);
void rebuild_env(int, int);
+void validate_env_vars(char * const envp[]);
/* fmt_string.c */
char *fmt_string(const char *, const char *);