diff --git a/include/sudo_eventlog.h b/include/sudo_eventlog.h index d93c24028..aa3ddedf0 100644 --- a/include/sudo_eventlog.h +++ b/include/sudo_eventlog.h @@ -110,9 +110,9 @@ struct eventlog { char *submituser; char *submitgroup; char *ttyname; - char **argv; + char **runargv; + char **runenv; char **env_add; - char **envp; struct timespec submit_time; struct timespec iolog_offset; struct timespec run_time; diff --git a/lib/eventlog/eventlog.c b/lib/eventlog/eventlog.c index bd63ab9fa..281ac31a4 100644 --- a/lib/eventlog/eventlog.c +++ b/lib/eventlog/eventlog.c @@ -191,24 +191,24 @@ new_logline(int event_type, int flags, struct eventlog_args *args, } sudo_lbuf_append(lbuf, " ; "); } - if (evlog->command != NULL && evlog->argv != NULL) { + if (evlog->command != NULL && evlog->runargv != NULL) { /* Command plus argv. */ sudo_lbuf_append_esc(lbuf, LBUF_ESC_CNTRL|LBUF_ESC_BLANK, "COMMAND=%s", evlog->command); - if (evlog->argv[0] != NULL) { - for (i = 1; evlog->argv[i] != NULL; i++) { + if (evlog->runargv[0] != NULL) { + for (i = 1; evlog->runargv[i] != NULL; i++) { sudo_lbuf_append(lbuf, " "); - if (strchr(evlog->argv[i], ' ') != NULL) { + if (strchr(evlog->runargv[i], ' ') != NULL) { /* Wrap args containing spaces in single quotes. */ sudo_lbuf_append(lbuf, "'"); sudo_lbuf_append_esc(lbuf, LBUF_ESC_CNTRL|LBUF_ESC_QUOTE, - "%s", evlog->argv[i]); + "%s", evlog->runargv[i]); sudo_lbuf_append(lbuf, "'"); } else { /* Escape quotes here too for consistency. */ sudo_lbuf_append_esc(lbuf, LBUF_ESC_CNTRL|LBUF_ESC_BLANK|LBUF_ESC_QUOTE, - "%s", evlog->argv[i]); + "%s", evlog->runargv[i]); } } } @@ -733,10 +733,10 @@ eventlog_store_json(struct json_container *jsonc, const struct eventlog *evlog) if (!sudo_json_add_value(jsonc, "lines", &json_value)) goto oom; - if (evlog->argv != NULL) { + if (evlog->runargv != NULL) { if (!sudo_json_open_array(jsonc, "runargv")) goto oom; - for (i = 0; (cp = evlog->argv[i]) != NULL; i++) { + for (i = 0; (cp = evlog->runargv[i]) != NULL; i++) { json_value.type = JSON_STRING; json_value.u.string = cp; if (!sudo_json_add_value(jsonc, NULL, &json_value)) @@ -746,10 +746,10 @@ eventlog_store_json(struct json_container *jsonc, const struct eventlog *evlog) goto oom; } - if (evlog->envp != NULL) { + if (evlog->runenv != NULL) { if (!sudo_json_open_array(jsonc, "runenv")) goto oom; - for (i = 0; (cp = evlog->envp[i]) != NULL; i++) { + for (i = 0; (cp = evlog->runenv[i]) != NULL; i++) { json_value.type = JSON_STRING; json_value.u.string = cp; if (!sudo_json_add_value(jsonc, NULL, &json_value)) diff --git a/lib/eventlog/eventlog_free.c b/lib/eventlog/eventlog_free.c index 902ff280d..11c3bd12f 100644 --- a/lib/eventlog/eventlog_free.c +++ b/lib/eventlog/eventlog_free.c @@ -59,15 +59,15 @@ eventlog_free(struct eventlog *evlog) free(evlog->submituser); free(evlog->submitgroup); free(evlog->ttyname); - if (evlog->argv != NULL) { - for (i = 0; evlog->argv[i] != NULL; i++) - free(evlog->argv[i]); - free(evlog->argv); + if (evlog->runargv != NULL) { + for (i = 0; evlog->runargv[i] != NULL; i++) + free(evlog->runargv[i]); + free(evlog->runargv); } - if (evlog->envp != NULL) { - for (i = 0; evlog->envp[i] != NULL; i++) - free(evlog->envp[i]); - free(evlog->envp); + if (evlog->runenv != NULL) { + for (i = 0; evlog->runenv[i] != NULL; i++) + free(evlog->runenv[i]); + free(evlog->runenv); } if (evlog->env_add != NULL) { for (i = 0; evlog->env_add[i] != NULL; i++) diff --git a/lib/eventlog/parse_json.c b/lib/eventlog/parse_json.c index 381aaec15..7f2ce3ec3 100644 --- a/lib/eventlog/parse_json.c +++ b/lib/eventlog/parse_json.c @@ -201,14 +201,14 @@ json_store_runargv(struct json_item *item, struct eventlog *evlog) size_t i; debug_decl(json_store_runargv, SUDO_DEBUG_UTIL); - if (evlog->argv != NULL) { - for (i = 0; evlog->argv[i] != NULL; i++) - free(evlog->argv[i]); - free(evlog->argv); + if (evlog->runargv != NULL) { + for (i = 0; evlog->runargv[i] != NULL; i++) + free(evlog->runargv[i]); + free(evlog->runargv); } - evlog->argv = json_array_to_strvec(&item->u.child); + evlog->runargv = json_array_to_strvec(&item->u.child); - debug_return_bool(evlog->argv != NULL); + debug_return_bool(evlog->runargv != NULL); } static bool @@ -217,14 +217,14 @@ json_store_runenv(struct json_item *item, struct eventlog *evlog) size_t i; debug_decl(json_store_runenv, SUDO_DEBUG_UTIL); - if (evlog->envp != NULL) { - for (i = 0; evlog->envp[i] != NULL; i++) - free(evlog->envp[i]); - free(evlog->envp); + if (evlog->runenv != NULL) { + for (i = 0; evlog->runenv[i] != NULL; i++) + free(evlog->runenv[i]); + free(evlog->runenv); } - evlog->envp = json_array_to_strvec(&item->u.child); + evlog->runenv = json_array_to_strvec(&item->u.child); - debug_return_bool(evlog->envp != NULL); + debug_return_bool(evlog->runenv != NULL); } static bool diff --git a/lib/iolog/iolog_loginfo.c b/lib/iolog/iolog_loginfo.c index 9b2141320..3527cceaa 100644 --- a/lib/iolog/iolog_loginfo.c +++ b/lib/iolog/iolog_loginfo.c @@ -131,7 +131,7 @@ iolog_write_info_file_legacy(int dfd, struct eventlog *evlog) evlog->lines, evlog->columns, evlog->cwd ? evlog->cwd : "unknown"); fputs(evlog->command ? evlog->command : "unknown", fp); - for (av = evlog->argv + 1; *av != NULL; av++) { + for (av = evlog->runargv + 1; *av != NULL; av++) { fputc(' ', fp); fputs(*av, fp); } diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 07383d351..91b9547a1 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -205,8 +205,8 @@ evlog_new(TimeSpec *submit_time, InfoMessage **info_msgs, size_t infolen, case 'r': if (strcmp(key, "runargv") == 0) { if (type_matches(info, source, INFO_MESSAGE__VALUE_STRLISTVAL)) { - evlog->argv = strlist_copy(info->u.strlistval); - if (evlog->argv == NULL) + evlog->runargv = strlist_copy(info->u.strlistval); + if (evlog->runargv == NULL) goto bad; } continue; @@ -233,8 +233,8 @@ evlog_new(TimeSpec *submit_time, InfoMessage **info_msgs, size_t infolen, } if (strcmp(key, "runenv") == 0) { if (type_matches(info, source, INFO_MESSAGE__VALUE_STRLISTVAL)) { - evlog->envp = strlist_copy(info->u.strlistval); - if (evlog->envp == NULL) + evlog->runenv = strlist_copy(info->u.strlistval); + if (evlog->runenv == NULL) goto bad; } continue; diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 81e093db6..005efbdb9 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -507,9 +507,9 @@ fmt_runargv(const struct eventlog *evlog) debug_decl(fmt_runargv, SUDO_DEBUG_UTIL); /* We may have runargv from the log.json file. */ - if (evlog->argv != NULL && evlog->argv[0] != NULL) { - /* Convert evlog->argv into a StringList. */ - runargv = vec_to_stringlist(evlog->argv); + if (evlog->runargv != NULL && evlog->runargv[0] != NULL) { + /* Convert evlog->runargv into a StringList. */ + runargv = vec_to_stringlist(evlog->runargv); if (runargv != NULL) { /* Make sure command doesn't include arguments. */ char *cp = strchr(evlog->command, ' '); @@ -533,10 +533,10 @@ fmt_runenv(const struct eventlog *evlog) debug_decl(fmt_runenv, SUDO_DEBUG_UTIL); /* Only present in log.json. */ - if (evlog->envp == NULL || evlog->envp[0] == NULL) + if (evlog->runenv == NULL || evlog->runenv[0] == NULL) debug_return_ptr(NULL); - debug_return_ptr(vec_to_stringlist(evlog->envp)); + debug_return_ptr(vec_to_stringlist(evlog->runenv)); } static InfoMessage ** diff --git a/plugins/sudoers/iolog.c b/plugins/sudoers/iolog.c index 5539fa40d..1c4335f1a 100644 --- a/plugins/sudoers/iolog.c +++ b/plugins/sudoers/iolog.c @@ -197,10 +197,10 @@ free_iolog_details(void) if (iolog_details.evlog != NULL) { /* We only make a shallow copy of argv and envp. */ - free(iolog_details.evlog->argv); - iolog_details.evlog->argv = NULL; - free(iolog_details.evlog->envp); - iolog_details.evlog->envp = NULL; + free(iolog_details.evlog->runargv); + iolog_details.evlog->runargv = NULL; + free(iolog_details.evlog->runenv); + iolog_details.evlog->runenv = NULL; eventlog_free(iolog_details.evlog); } str_list_free(iolog_details.log_servers); @@ -601,13 +601,13 @@ iolog_deserialize_info(struct log_details *details, char * const user_info[], } if (argv != NULL) { - evlog->argv = copy_vector_shallow(argv); - if (evlog->argv == NULL) + evlog->runargv = copy_vector_shallow(argv); + if (evlog->runargv == NULL) goto oom; } if (user_env != NULL) { - evlog->envp = copy_vector_shallow(user_env); - if (evlog->envp == NULL) + evlog->runenv = copy_vector_shallow(user_env); + if (evlog->runenv == NULL) goto oom; } diff --git a/plugins/sudoers/log_client.c b/plugins/sudoers/log_client.c index ab97322f5..6ee080657 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -823,20 +823,20 @@ fmt_info_messages(struct client_closure *closure, struct eventlog *evlog, debug_decl(fmt_info_messages, SUDOERS_DEBUG_UTIL); /* Convert NULL-terminated vectors to StringList. */ - if (evlog->argv != NULL) { + if (evlog->runargv != NULL) { if ((runargv = malloc(sizeof(*runargv))) == NULL) goto bad; info_message__string_list__init(runargv); - runargv->strings = evlog->argv; + runargv->strings = evlog->runargv; while (runargv->strings[runargv->n_strings] != NULL) runargv->n_strings++; } - if (evlog->envp != NULL) { + if (evlog->runenv != NULL) { if ((runenv = malloc(sizeof(*runenv))) == NULL) goto bad; info_message__string_list__init(runenv); - runenv->strings = evlog->envp; + runenv->strings = evlog->runenv; while (runenv->strings[runenv->n_strings] != NULL) runenv->n_strings++; } diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index bf5791d82..353a7faf3 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -1001,9 +1001,9 @@ sudoers_to_eventlog(const struct sudoers_context *ctx, struct eventlog *evlog, if (grp != NULL) evlog->submitgroup = grp->gr_name; evlog->ttyname = ctx->user.ttypath; - evlog->argv = (char **)argv; + evlog->runargv = (char **)argv; evlog->env_add = (char **)ctx->user.env_add; - evlog->envp = (char **)envp; + evlog->runenv = (char **)envp; evlog->submit_time = ctx->submit_time; evlog->lines = ctx->user.lines; evlog->columns = ctx->user.cols; diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index d91a5c29a..bc4f853f4 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -989,7 +989,8 @@ init_vars(struct sudoers_context *ctx, char * const envp[]) #define MATCHES(s, v) \ (strncmp((s), (v), sizeof(v) - 1) == 0 && (s)[sizeof(v) - 1] != '\0') - for (ep = envp; *ep; ep++) { + ctx->user.envp = envp; + for (ep = ctx->user.envp; *ep; ep++) { switch (**ep) { case 'K': if (MATCHES(*ep, "KRB5CCNAME=")) diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index ab877ff1c..ee40ff155 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -131,6 +131,7 @@ struct sudoers_user_context { char *cmnd_list; char *ccname; struct gid_list *gid_list; + char * const * envp; char * const * env_add; int closefrom; int lines; diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index 874901656..c38ade487 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -366,9 +366,9 @@ main(int argc, char *argv[]) if ((evlog = iolog_parse_loginfo(iolog_dir_fd, iolog_dir)) == NULL) goto done; printf(_("Replaying sudo session: %s"), evlog->command); - if (evlog->argv != NULL && evlog->argv[0] != NULL) { - for (i = 1; evlog->argv[i] != NULL; i++) - printf(" %s", evlog->argv[i]); + if (evlog->runargv != NULL && evlog->runargv[0] != NULL) { + for (i = 1; evlog->runargv[i] != NULL; i++) + printf(" %s", evlog->runargv[i]); } /* Setup terminal if appropriate. */ @@ -1321,15 +1321,15 @@ expand_command(struct eventlog *evlog, char **newbuf) int ac; debug_decl(expand_command, SUDO_DEBUG_UTIL); - if (evlog->argv == NULL || evlog->argv[0] == NULL || evlog->argv[1] == NULL) { + if (evlog->runargv == NULL || evlog->runargv[0] == NULL || evlog->runargv[1] == NULL) { /* No arguments, we can use the command as-is. */ *newbuf = NULL; debug_return_str(evlog->command); } /* Skip argv[0], we use evlog->command instead. */ - for (ac = 1; evlog->argv[ac] != NULL; ac++) - bufsize += strlen(evlog->argv[ac]) + 1; + for (ac = 1; evlog->runargv[ac] != NULL; ac++) + bufsize += strlen(evlog->runargv[ac]) + 1; if ((buf = malloc(bufsize)) == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); @@ -1341,13 +1341,13 @@ expand_command(struct eventlog *evlog, char **newbuf) cp += len; bufsize -= len; - for (ac = 1; evlog->argv[ac] != NULL; ac++) { + for (ac = 1; evlog->runargv[ac] != NULL; ac++) { if (bufsize < 2) sudo_fatalx(U_("internal error, %s overflow"), __func__); *cp++ = ' '; bufsize--; - len = strlcpy(cp, evlog->argv[ac], bufsize); + len = strlcpy(cp, evlog->runargv[ac], bufsize); if (len >= bufsize) sudo_fatalx(U_("internal error, %s overflow"), __func__); cp += len;