]> granicus.if.org Git - sudo/commitdiff
Set NewArgv[0] to the name of the pseudo-command we are running.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 7 Sep 2010 21:00:32 +0000 (17:00 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 7 Sep 2010 21:00:32 +0000 (17:00 -0400)
Fixes a problem with "sudo -l" when auditing is enabled and the
user is not allowed to run any commands on the host.
Adapted from a patch from Daniel Kopecek.

--HG--
branch : 1.7

sudo.c

diff --git a/sudo.c b/sudo.c
index 151532f17b30255919b81c6ff07c97471387b4f2..0d314882f1f024a33352fabae9c87618744bd106 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -698,14 +698,10 @@ init_vars(envp)
        set_perms(PERM_ROOT);
 
     /*
-     * If we were given the '-e', '-i' or '-s' options we need to redo
-     * NewArgv and NewArgc.
+     * If in shell or edit mode, or if running a pseudo-command
+     * such as "list", we need to redo NewArgv and NewArgc.
      */
-    if (ISSET(sudo_mode, MODE_EDIT)) {
-       NewArgv--;
-       NewArgc++;
-       NewArgv[0] = "sudoedit";
-    } else if (ISSET(sudo_mode, MODE_SHELL)) {
+    if (ISSET(sudo_mode, MODE_SHELL)) {
        char **av;
 
        /* Allocate an extra slot for execve() failure (ENOEXEC). */
@@ -747,6 +743,10 @@ init_vars(envp)
        }
        av[++NewArgc] = NULL;
        NewArgv = av;
+    } else if (ISSET(sudo_mode, MODE_EDIT) || NewArgc == 0) {
+       NewArgv--;
+       NewArgc++;
+       NewArgv[0] = user_cmnd;
     }
 }