Fix the -s and -i flags and add support for the "implied_shell"
option. If the user does not specify a command, sudo will now pass in the path to the user's shell and set impied_shell=true. The plugin can them either check the command normally or return -2 to cause sudo to print a usage message and exit.
This commit is contained in:
13
src/sudo.c
13
src/sudo.c
@@ -224,8 +224,11 @@ main(int argc, char *argv[], char *envp[])
|
||||
ok = policy_plugin.u.policy->check_policy(nargc, nargv, env_add,
|
||||
&command_info, &argv_out, &user_env_out);
|
||||
sudo_debug(8, "policy plugin returns %d", ok);
|
||||
if (ok != TRUE)
|
||||
exit(ok); /* plugin printed error message */
|
||||
if (ok != TRUE) {
|
||||
if (ok == -2)
|
||||
usage(1);
|
||||
exit(1); /* plugin printed error message */
|
||||
}
|
||||
command_info_to_details(command_info, &command_details);
|
||||
/* Restore coredumpsize resource limit before running. */
|
||||
#if defined(RLIMIT_CORE) && !defined(SUDO_DEVEL)
|
||||
@@ -330,6 +333,12 @@ get_user_info(struct user_details *ud)
|
||||
errorx(1, "unable to allocate memory");
|
||||
ud->username = user_info[i] + sizeof("user=") - 1;
|
||||
|
||||
/* Stash user's shell for use with the -s flag; don't pass to plugin. */
|
||||
if ((ud->shell = getenv("SHELL")) == NULL || ud->shell[0] == '\0') {
|
||||
ud->shell = pw->pw_shell[0] ? pw->pw_shell : _PATH_BSHELL;
|
||||
}
|
||||
ud->shell = estrdup(ud->shell);
|
||||
|
||||
easprintf(&user_info[++i], "uid=%lu", (unsigned long)ud->uid);
|
||||
easprintf(&user_info[++i], "euid=%lu", (unsigned long)ud->euid);
|
||||
easprintf(&user_info[++i], "gid=%lu", (unsigned long)ud->gid);
|
||||
|
Reference in New Issue
Block a user