]> granicus.if.org Git - sudo/commitdiff
Print usage and return an error when an empty argument is given for
authorTodd C. Miller <Todd.Miller@sudo.ws>
Sun, 10 Dec 2017 14:53:09 +0000 (07:53 -0700)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Sun, 10 Dec 2017 14:53:09 +0000 (07:53 -0700)
all command line arguments other than -p and -E.  Bug #817

src/parse_args.c

index 6742f018aa74842dc1548a2b84f2238267d69310..210c62e594524970b24e4a348163abff9c2e0723 100644 (file)
@@ -302,6 +302,8 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv,
                    break;
 #ifdef HAVE_BSD_AUTH_H
                case 'a':
+                   if (*optarg == '\0')
+                       usage(1);
                    sudo_settings[ARG_BSDAUTH_TYPE].value = optarg;
                    break;
 #endif
@@ -317,6 +319,8 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv,
                    break;
 #ifdef HAVE_LOGIN_CAP_H
                case 'c':
+                   if (*optarg == '\0')
+                       usage(1);
                    sudo_settings[ARG_LOGIN_CLASS].value = optarg;
                    break;
 #endif
@@ -342,6 +346,8 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv,
                    valid_flags = MODE_NONINTERACTIVE;
                    break;
                case 'g':
+                   if (*optarg == '\0')
+                       usage(1);
                    runas_group = optarg;
                    sudo_settings[ARG_RUNAS_GROUP].value = optarg;
                    break;
@@ -370,6 +376,8 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv,
                    }
                    /* FALLTHROUGH */
                case OPT_HOSTNAME:
+                   if (*optarg == '\0')
+                       usage(1);
                    sudo_settings[ARG_REMOTE_HOST].value = optarg;
                    break;
                case 'i':
@@ -404,17 +412,24 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv,
                    sudo_settings[ARG_PRESERVE_GROUPS].value = "true";
                    break;
                case 'p':
+                   /* An empty prompt is allowed. */
                    sudo_settings[ARG_PROMPT].value = optarg;
                    break;
 #ifdef HAVE_SELINUX
                case 'r':
+                   if (*optarg == '\0')
+                       usage(1);
                    sudo_settings[ARG_SELINUX_ROLE].value = optarg;
                    break;
                case 't':
+                   if (*optarg == '\0')
+                       usage(1);
                    sudo_settings[ARG_SELINUX_TYPE].value = optarg;
                    break;
 #endif
                case 'T':
+                   if (*optarg == '\0')
+                       usage(1);
                    sudo_settings[ARG_TIMEOUT].value = optarg;
                    break;
                case 'S':
@@ -425,9 +440,13 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv,
                    SET(flags, MODE_SHELL);
                    break;
                case 'U':
+                   if (*optarg == '\0')
+                       usage(1);
                    list_user = optarg;
                    break;
                case 'u':
+                   if (*optarg == '\0')
+                       usage(1);
                    runas_user = optarg;
                    sudo_settings[ARG_RUNAS_USER].value = optarg;
                    break;