]> granicus.if.org Git - sudo/commitdiff
Always fill in NewArgv for audit code.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 7 Sep 2010 21:59:10 +0000 (17:59 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 7 Sep 2010 21:59:10 +0000 (17:59 -0400)
plugins/sudoers/sudoers.c

index 38678f25bb2d3203b8d5df3812c0f904f390a2e8..21d702109f9c643bbc7cc1a91b7a915df32a7f82 100644 (file)
@@ -337,14 +337,21 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
 
     /*
      * Make a local copy of argc/argv, with special handling
-     * for the '-i' option.
+     * for pseudo-commands and the '-i' option.
      */
-    NewArgv = emalloc2(argc + 1, sizeof(char *));
-    memcpy(NewArgv, argv, argc * sizeof(char *));
-    NewArgv[argc] = NULL;
-    NewArgc = argc;
-    if (ISSET(sudo_mode, MODE_LOGIN_SHELL))
-       NewArgv[0] = runas_pw->pw_shell;
+    if (argc == 0) {
+       NewArgc = 1;
+       NewArgv = emalloc2(NewArgc + 1, sizeof(char *));
+       NewArgv[0] = user_cmnd;
+       NewArgv[1] = NULL;
+    } else {
+       NewArgc = argc;
+       NewArgv = emalloc2(NewArgc + 1, sizeof(char *));
+       memcpy(NewArgv, argv, argc * sizeof(char *));
+       NewArgv[NewArgc] = NULL;
+       if (ISSET(sudo_mode, MODE_LOGIN_SHELL))
+           NewArgv[0] = runas_pw->pw_shell;
+    }
 
     /* Find command in path */
     cmnd_status = set_cmnd(sudo_mode);