Make command_details private to main().
This commit is contained in:
20
src/sudo.c
20
src/sudo.c
@@ -79,7 +79,6 @@ struct plugin_container_list approval_plugins = TAILQ_HEAD_INITIALIZER(approval_
|
|||||||
struct user_details user_details;
|
struct user_details user_details;
|
||||||
const char *list_user; /* extern for parse_args.c */
|
const char *list_user; /* extern for parse_args.c */
|
||||||
int sudo_debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER;
|
int sudo_debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER;
|
||||||
static struct command_details command_details;
|
|
||||||
static int sudo_mode;
|
static int sudo_mode;
|
||||||
static struct sudo_event_base *sudo_event_base;
|
static struct sudo_event_base *sudo_event_base;
|
||||||
|
|
||||||
@@ -108,7 +107,7 @@ static void gc_init(void);
|
|||||||
|
|
||||||
/* Policy plugin convenience functions. */
|
/* Policy plugin convenience functions. */
|
||||||
static void policy_open(void);
|
static void policy_open(void);
|
||||||
static void policy_close(int exit_status, int error);
|
static void policy_close(const char *cmnd, int exit_status, int error);
|
||||||
static int policy_show_version(int verbose);
|
static int policy_show_version(int verbose);
|
||||||
static bool policy_check(int argc, char * const argv[], char *env_add[],
|
static bool policy_check(int argc, char * const argv[], char *env_add[],
|
||||||
char **command_info[], char **run_argv[], char **run_envp[]);
|
char **command_info[], char **run_argv[], char **run_envp[]);
|
||||||
@@ -143,6 +142,7 @@ static int submit_optind;
|
|||||||
int
|
int
|
||||||
main(int argc, char *argv[], char *envp[])
|
main(int argc, char *argv[], char *envp[])
|
||||||
{
|
{
|
||||||
|
struct command_details command_details;
|
||||||
int nargc, status = 0;
|
int nargc, status = 0;
|
||||||
char **nargv, **env_add;
|
char **nargv, **env_add;
|
||||||
char **command_info = NULL, **argv_out = NULL, **run_envp = NULL;
|
char **command_info = NULL, **argv_out = NULL, **run_envp = NULL;
|
||||||
@@ -332,7 +332,7 @@ main(int argc, char *argv[], char *envp[])
|
|||||||
access_denied:
|
access_denied:
|
||||||
/* Policy/approval failure, close policy and audit plugins before exit. */
|
/* Policy/approval failure, close policy and audit plugins before exit. */
|
||||||
if (policy_plugin.u.policy->version >= SUDO_API_MKVERSION(1, 15))
|
if (policy_plugin.u.policy->version >= SUDO_API_MKVERSION(1, 15))
|
||||||
policy_close(0, EACCES);
|
policy_close(NULL, 0, EACCES);
|
||||||
audit_close(SUDO_PLUGIN_NO_STATUS, 0);
|
audit_close(SUDO_PLUGIN_NO_STATUS, 0);
|
||||||
sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys,
|
sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys,
|
||||||
EXIT_FAILURE);
|
EXIT_FAILURE);
|
||||||
@@ -1045,14 +1045,14 @@ run_command(struct command_details *details)
|
|||||||
case CMD_ERRNO:
|
case CMD_ERRNO:
|
||||||
/* exec_setup() or execve() returned an error. */
|
/* exec_setup() or execve() returned an error. */
|
||||||
iolog_close(0, cstat.val);
|
iolog_close(0, cstat.val);
|
||||||
policy_close(0, cstat.val);
|
policy_close(details->command, 0, cstat.val);
|
||||||
audit_close(SUDO_PLUGIN_EXEC_ERROR, cstat.val);
|
audit_close(SUDO_PLUGIN_EXEC_ERROR, cstat.val);
|
||||||
break;
|
break;
|
||||||
case CMD_WSTATUS:
|
case CMD_WSTATUS:
|
||||||
/* Command ran, exited or was killed. */
|
/* Command ran, exited or was killed. */
|
||||||
status = cstat.val;
|
status = cstat.val;
|
||||||
iolog_close(status, 0);
|
iolog_close(status, 0);
|
||||||
policy_close(status, 0);
|
policy_close(details->command, status, 0);
|
||||||
audit_close(SUDO_PLUGIN_WAIT_STATUS, cstat.val);
|
audit_close(SUDO_PLUGIN_WAIT_STATUS, cstat.val);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -1178,7 +1178,7 @@ policy_open(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
policy_close(int exit_status, int error_code)
|
policy_close(const char *cmnd, int exit_status, int error_code)
|
||||||
{
|
{
|
||||||
debug_decl(policy_close, SUDO_DEBUG_PCOMM);
|
debug_decl(policy_close, SUDO_DEBUG_PCOMM);
|
||||||
|
|
||||||
@@ -1196,9 +1196,9 @@ policy_close(int exit_status, int error_code)
|
|||||||
policy_plugin.u.policy->close(exit_status, error_code);
|
policy_plugin.u.policy->close(exit_status, error_code);
|
||||||
sudo_debug_set_active_instance(sudo_debug_instance);
|
sudo_debug_set_active_instance(sudo_debug_instance);
|
||||||
} else if (error_code != 0) {
|
} else if (error_code != 0) {
|
||||||
if (command_details.command != NULL) {
|
if (cmnd != NULL) {
|
||||||
errno = error_code;
|
errno = error_code;
|
||||||
sudo_warn(U_("unable to execute %s"), command_details.command);
|
sudo_warn(U_("unable to execute %s"), cmnd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1304,7 +1304,7 @@ policy_list(int argc, char * const argv[], int verbose, const char *user)
|
|||||||
|
|
||||||
/* Policy must be closed after auditing to avoid use after free. */
|
/* Policy must be closed after auditing to avoid use after free. */
|
||||||
if (policy_plugin.u.policy->version >= SUDO_API_MKVERSION(1, 15))
|
if (policy_plugin.u.policy->version >= SUDO_API_MKVERSION(1, 15))
|
||||||
policy_close(0, 0);
|
policy_close(NULL, 0, 0);
|
||||||
audit_close(SUDO_PLUGIN_NO_STATUS, 0);
|
audit_close(SUDO_PLUGIN_NO_STATUS, 0);
|
||||||
|
|
||||||
exit(ok != 1);
|
exit(ok != 1);
|
||||||
@@ -1348,7 +1348,7 @@ policy_validate(char * const argv[])
|
|||||||
|
|
||||||
/* Policy must be closed after auditing to avoid use after free. */
|
/* Policy must be closed after auditing to avoid use after free. */
|
||||||
if (policy_plugin.u.policy->version >= SUDO_API_MKVERSION(1, 15))
|
if (policy_plugin.u.policy->version >= SUDO_API_MKVERSION(1, 15))
|
||||||
policy_close(0, 0);
|
policy_close(NULL, 0, 0);
|
||||||
audit_close(SUDO_PLUGIN_NO_STATUS, 0);
|
audit_close(SUDO_PLUGIN_NO_STATUS, 0);
|
||||||
|
|
||||||
exit(ok != 1);
|
exit(ok != 1);
|
||||||
|
Reference in New Issue
Block a user