From: Todd C. Miller Date: Fri, 19 Nov 2004 21:35:12 +0000 (+0000) Subject: Add support for command-specific Defaults entries. E.g. X-Git-Tag: SUDO_1_7_0~793 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe869025c419a77dcaaa891fad1a0f726c19afb8;p=sudo Add support for command-specific Defaults entries. E.g. Defaults!/usr/bin/vi noexec --- diff --git a/defaults.c b/defaults.c index 6d2bb3aa8..93295a618 100644 --- a/defaults.c +++ b/defaults.c @@ -495,14 +495,18 @@ init_defaults() /* * Update the defaults based on what was set by sudoers. + * If skip_cmnd is 1, skip DEFAULTS_CMND, if it is 0, skip all others. * Returns TRUE on success and FALSE on failure. */ int -update_defaults() +update_defaults(skip_cmnd) + int skip_cmnd; { struct defaults *def; for (def = defaults; def != NULL; def = def->next) { + if (skip_cmnd == (def->type == DEFAULTS_CMND)) + continue; switch (def->type) { case DEFAULTS: if (!set_default(def->var, def->val, def->op)) @@ -522,6 +526,10 @@ update_defaults() !set_default(def->var, def->val, def->op)) return(FALSE); break; + case DEFAULTS_CMND: + if (cmnd_matches(def->binding) && + !set_default(def->var, def->val, def->op)) + return(FALSE); } } return(TRUE); diff --git a/defaults.h b/defaults.h index 8d2a04485..ad0f1043d 100644 --- a/defaults.h +++ b/defaults.h @@ -90,13 +90,20 @@ struct sudo_defs_types { #undef T_PATH #define T_PATH 0x200 +/* + * Argument to update_defaults() + */ +#define SKIP_CMND 1 +#define ONLY_CMND 0 +#define SET_ALL -1 + /* * Prototypes */ void dump_default __P((void)); int set_default __P((char *, char *, int)); void init_defaults __P((void)); -int update_defaults __P((void)); +int update_defaults __P((int)); void list_options __P((void)); extern struct sudo_defs_types sudo_defs_table[]; diff --git a/gram.c b/gram.c index 3afdb82d4..ad6369960 100644 --- a/gram.c +++ b/gram.c @@ -139,20 +139,21 @@ typedef union { #define DEFAULTS_HOST 265 #define DEFAULTS_USER 266 #define DEFAULTS_RUNAS 267 -#define RUNAS 268 -#define NOPASSWD 269 -#define PASSWD 270 -#define NOEXEC 271 -#define EXEC 272 -#define MONITOR 273 -#define NOMONITOR 274 -#define ALL 275 -#define COMMENT 276 -#define HOSTALIAS 277 -#define CMNDALIAS 278 -#define USERALIAS 279 -#define RUNASALIAS 280 -#define ERROR 281 +#define DEFAULTS_CMND 268 +#define RUNAS 269 +#define NOPASSWD 270 +#define PASSWD 271 +#define NOEXEC 272 +#define EXEC 273 +#define MONITOR 274 +#define NOMONITOR 275 +#define ALL 276 +#define COMMENT 277 +#define HOSTALIAS 278 +#define CMNDALIAS 279 +#define USERALIAS 280 +#define RUNASALIAS 281 +#define ERROR 282 #define YYERRCODE 256 #if defined(__cplusplus) || defined(__STDC__) const short yylhs[] = @@ -161,14 +162,14 @@ short yylhs[] = #endif { -1, 0, 0, 21, 21, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 4, 4, 3, 3, 3, - 3, 3, 19, 19, 18, 10, 10, 8, 8, 8, - 8, 8, 2, 2, 1, 6, 6, 14, 14, 13, - 13, 11, 11, 15, 15, 15, 15, 15, 20, 20, - 20, 20, 20, 20, 20, 5, 5, 5, 24, 24, - 27, 9, 9, 25, 25, 28, 7, 7, 26, 26, - 29, 23, 23, 30, 17, 17, 12, 12, 16, 16, - 16, 16, 16, + 22, 22, 22, 22, 22, 22, 4, 4, 3, 3, + 3, 3, 3, 19, 19, 18, 10, 10, 8, 8, + 8, 8, 8, 2, 2, 1, 6, 6, 14, 14, + 13, 13, 11, 11, 15, 15, 15, 15, 15, 20, + 20, 20, 20, 20, 20, 20, 5, 5, 5, 24, + 24, 27, 9, 9, 25, 25, 28, 7, 7, 26, + 26, 29, 23, 23, 30, 17, 17, 12, 12, 16, + 16, 16, 16, 16, }; #if defined(__cplusplus) || defined(__STDC__) const short yylen[] = @@ -177,14 +178,14 @@ short yylen[] = #endif { 2, 0, 1, 1, 2, 1, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 3, 1, 3, 1, 2, 3, - 3, 3, 1, 3, 3, 1, 2, 1, 1, 1, - 1, 1, 1, 3, 3, 1, 2, 0, 2, 1, - 3, 1, 2, 1, 1, 1, 1, 1, 0, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 3, - 3, 1, 3, 1, 3, 3, 1, 3, 1, 3, - 3, 1, 3, 3, 1, 3, 1, 2, 1, 1, - 1, 1, 1, + 2, 2, 3, 3, 3, 3, 1, 3, 1, 2, + 3, 3, 3, 1, 3, 3, 1, 2, 1, 1, + 1, 1, 1, 1, 3, 3, 1, 2, 0, 2, + 1, 3, 1, 2, 1, 1, 1, 1, 1, 0, + 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 3, 3, 1, 3, 1, 3, 3, 1, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 1, 2, 1, + 1, 1, 1, 1, }; #if defined(__cplusplus) || defined(__STDC__) const short yydefred[] = @@ -192,29 +193,29 @@ const short yydefred[] = short yydefred[] = #endif { 0, - 0, 79, 81, 82, 83, 0, 0, 0, 0, 80, - 5, 0, 0, 0, 0, 0, 0, 75, 77, 0, - 0, 3, 6, 0, 0, 16, 0, 28, 31, 30, - 32, 29, 0, 26, 0, 62, 0, 44, 46, 47, - 48, 45, 0, 40, 0, 42, 0, 0, 59, 0, - 0, 64, 0, 0, 72, 0, 0, 69, 78, 0, - 0, 23, 0, 4, 0, 0, 0, 19, 0, 27, - 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 0, 0, 20, 21, 22, - 17, 63, 41, 0, 60, 58, 57, 56, 0, 36, - 67, 0, 65, 0, 73, 0, 70, 0, 33, 0, - 49, 24, 37, 0, 0, 0, 0, 68, 34, 50, - 51, 52, 53, 54, 55, 35, + 0, 80, 82, 83, 84, 0, 0, 0, 0, 0, + 81, 5, 0, 0, 0, 0, 0, 0, 76, 78, + 0, 0, 3, 6, 0, 0, 17, 0, 29, 32, + 31, 33, 30, 0, 27, 0, 63, 0, 45, 47, + 48, 49, 46, 0, 41, 0, 43, 59, 58, 57, + 0, 37, 68, 0, 0, 0, 60, 0, 0, 65, + 0, 0, 73, 0, 0, 70, 79, 0, 0, 24, + 0, 4, 0, 0, 0, 20, 0, 28, 0, 0, + 0, 44, 0, 0, 38, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 77, 0, 0, 21, 22, + 23, 18, 64, 42, 69, 0, 61, 0, 66, 0, + 74, 0, 71, 0, 34, 0, 50, 25, 0, 0, + 0, 35, 51, 52, 53, 54, 55, 56, 36, }; #if defined(__cplusplus) || defined(__STDC__) const short yydgoto[] = #else short yydgoto[] = #endif - { 17, - 109, 110, 26, 27, 100, 101, 102, 34, 61, 36, - 44, 18, 45, 111, 46, 19, 20, 62, 63, 117, - 21, 22, 54, 48, 51, 57, 49, 52, 58, 55, + { 18, + 115, 116, 27, 28, 52, 53, 54, 35, 69, 37, + 45, 19, 46, 117, 47, 20, 21, 70, 71, 121, + 22, 23, 62, 56, 59, 65, 57, 60, 66, 63, }; #if defined(__cplusplus) || defined(__STDC__) const short yysindex[] = @@ -222,122 +223,143 @@ const short yysindex[] = short yysindex[] = #endif { -33, - -270, 0, 0, 0, 0, 11, 88, 114, 140, 0, - 0, -237, -234, -231, -226, -244, 0, 0, 0, 62, - -33, 0, 0, -38, -224, 0, -8, 0, 0, 0, - 0, 0, -221, 0, -24, 0, -11, 0, 0, 0, - 0, 0, -215, 0, -3, 0, -23, -9, 0, -5, - -1, 0, 2, 4, 0, 3, 7, 0, 0, 114, - -36, 0, 8, 0, -213, -208, -205, 0, 11, 0, - 88, -8, -8, 0, 140, -8, 88, -237, -17, -234, - 114, -231, 140, -226, 0, -201, 88, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 0, -247, 0, - 0, 25, 0, 27, 0, 28, 0, 140, 0, 30, - 0, 0, 0, -17, 28, -201, -20, 0, 0, 0, - 0, 0, 0, 0, 0, 0,}; + -275, 0, 0, 0, 0, -10, -5, 265, 292, 253, + 0, 0, -253, -251, -250, -248, -243, 0, 0, 0, + -22, -33, 0, 0, -13, -242, 0, -28, 0, 0, + 0, 0, 0, -211, 0, -19, 0, -9, 0, 0, + 0, 0, 0, -222, 0, -7, 0, 0, 0, 0, + -245, 0, 0, 13, -40, -15, 0, -17, -3, 0, + 2, 3, 0, 6, 4, 0, 0, 265, -2, 0, + 10, 0, -212, -199, -194, 0, -10, 0, -5, -28, + -28, 0, 292, -28, 0, 253, -28, -5, -253, 253, + -251, 265, -250, 292, -248, 0, -198, -5, 0, 0, + 0, 0, 0, 0, 0, 26, 0, 28, 0, 29, + 0, 31, 0, 292, 0, 32, 0, 0, 31, -198, + 263, 0, 0, 0, 0, 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) const short yyrindex[] = #else short yyrindex[] = #endif - { 70, + { 77, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 78, 0, 0, 1, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 0, 0, 1, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, - 206, 0, 0, 236, 0, 0, 261, 0, 0, 0, - 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, - 0, 326, 352, 0, 0, 378, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 78, 0, 104, 0, 0, 0, 130, - 0, 0, 0, 0, 391, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,}; + 0, 0, 0, 0, 0, 183, 0, 0, 209, 0, + 0, 237, 0, 0, 458, 0, 0, 0, 0, 0, + 492, 0, 0, 0, 0, 0, 0, 0, 0, 519, + 545, 0, 0, 571, 0, 0, 597, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 53, 0, 79, + 0, 105, 0, 0, 0, 131, 0, 0, 315, 289, + 0, 0, 0, 0, 0, 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) const short yygindex[] = #else short yygindex[] = #endif { 0, - -39, 0, 10, 16, -19, -102, 0, 48, -4, 12, - 13, 22, -79, 0, 43, 71, -6, 5, 0, 0, - 0, 68, 0, 0, 0, 0, 15, 14, 6, 9, + -39, 0, 5, 20, 33, -83, 7, 46, -1, 11, + 8, 15, -85, 0, 45, 75, -4, 9, 0, 0, + 0, 71, 0, 0, 0, 0, 12, 17, 14, 21, }; -#define YYTABLESIZE 666 +#define YYTABLESIZE 878 #if defined(__cplusplus) || defined(__STDC__) const short yytable[] = #else short yytable[] = #endif - { 16, - 18, 37, 35, 106, 66, 23, 67, 71, 25, 96, - 97, 118, 99, 2, 126, 99, 3, 4, 5, 71, - 47, 25, 65, 50, 86, 61, 53, 98, 115, 25, - 10, 56, 60, 18, 68, 69, 28, 77, 29, 30, - 75, 31, 38, 25, 18, 39, 40, 41, 78, 88, - 72, 66, 73, 32, 89, 79, 80, 90, 61, 42, - 76, 82, 81, 83, 84, 87, 108, 71, 114, 1, - 60, 75, 94, 116, 104, 2, 119, 74, 91, 113, - 70, 85, 92, 61, 66, 74, 59, 93, 64, 107, - 105, 112, 95, 103, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 71, 0, 60, 0, 0, 0, 66, - 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 74, 71, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 71, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 25, 12, 0, + { 17, + 19, 24, 105, 38, 55, 36, 58, 61, 112, 64, + 34, 48, 49, 26, 2, 77, 76, 3, 4, 5, + 88, 68, 26, 26, 79, 26, 62, 34, 119, 74, + 50, 75, 11, 19, 68, 39, 83, 129, 40, 41, + 42, 79, 89, 90, 19, 26, 29, 73, 30, 31, + 99, 32, 67, 43, 91, 80, 86, 81, 97, 62, + 93, 95, 92, 100, 33, 84, 94, 98, 101, 79, + 114, 86, 68, 87, 83, 120, 1, 2, 75, 78, + 122, 102, 96, 85, 62, 67, 106, 110, 82, 103, + 104, 67, 72, 0, 0, 0, 108, 0, 0, 0, + 107, 0, 0, 0, 72, 0, 118, 109, 113, 0, + 67, 75, 0, 111, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 75, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 72, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, 26, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 3, 4, 5, - 6, 7, 8, 9, 24, 8, 96, 97, 10, 96, - 97, 10, 11, 12, 13, 14, 15, 24, 120, 121, - 122, 123, 124, 125, 98, 24, 18, 98, 18, 0, - 11, 18, 18, 18, 18, 18, 18, 18, 8, 24, - 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, - 18, 61, 0, 61, 0, 0, 61, 61, 61, 61, - 61, 61, 61, 11, 0, 0, 0, 0, 0, 7, - 61, 61, 61, 61, 61, 61, 38, 66, 0, 66, - 0, 0, 66, 66, 66, 66, 66, 66, 66, 28, - 0, 29, 30, 0, 31, 15, 66, 66, 66, 66, - 66, 66, 7, 74, 0, 74, 32, 0, 74, 74, - 74, 74, 74, 74, 74, 28, 0, 29, 30, 0, - 31, 13, 74, 74, 74, 74, 74, 74, 15, 71, - 0, 71, 32, 0, 71, 71, 71, 71, 71, 71, - 71, 2, 0, 0, 3, 4, 5, 14, 71, 71, - 71, 71, 71, 71, 13, 25, 0, 25, 10, 0, - 25, 25, 25, 25, 25, 25, 25, 38, 0, 0, - 39, 40, 41, 0, 25, 25, 25, 25, 25, 25, - 14, 12, 0, 12, 42, 0, 12, 12, 12, 12, - 12, 12, 12, 39, 0, 0, 0, 0, 0, 0, - 12, 12, 12, 12, 12, 12, 9, 0, 9, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 10, 0, 10, 0, 0, 10, 10, 10, 10, - 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, - 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, - 0, 8, 0, 8, 0, 0, 8, 8, 8, 8, - 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, - 8, 8, 8, 8, 8, 8, 11, 0, 11, 0, - 0, 11, 11, 11, 11, 11, 11, 11, 0, 0, - 38, 38, 0, 0, 0, 11, 11, 11, 11, 11, - 11, 0, 38, 38, 38, 38, 38, 38, 38, 0, - 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, - 0, 15, 0, 15, 0, 0, 15, 15, 15, 15, - 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, - 15, 15, 15, 15, 15, 15, 0, 13, 0, 13, - 0, 0, 13, 13, 13, 13, 13, 13, 13, 0, - 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, - 13, 13, 0, 14, 0, 14, 0, 0, 14, 14, - 14, 14, 14, 14, 14, 0, 0, 39, 39, 0, - 0, 0, 14, 14, 14, 14, 14, 14, 0, 39, - 39, 39, 39, 39, 39, 39, + 6, 7, 8, 9, 10, 29, 8, 30, 31, 25, + 32, 10, 11, 12, 13, 14, 15, 16, 25, 25, + 0, 25, 29, 33, 30, 31, 19, 32, 19, 0, + 0, 19, 19, 19, 19, 19, 19, 19, 19, 8, + 33, 25, 0, 0, 0, 0, 19, 19, 19, 19, + 19, 19, 62, 0, 62, 51, 0, 62, 62, 62, + 62, 62, 62, 62, 62, 51, 0, 17, 0, 0, + 0, 0, 62, 62, 62, 62, 62, 62, 67, 0, + 67, 0, 0, 67, 67, 67, 67, 67, 67, 67, + 67, 39, 0, 0, 44, 0, 0, 0, 67, 67, + 67, 67, 67, 67, 75, 0, 75, 0, 0, 75, + 75, 75, 75, 75, 75, 75, 75, 40, 0, 0, + 0, 0, 0, 0, 75, 75, 75, 75, 75, 75, + 72, 0, 72, 0, 0, 72, 72, 72, 72, 72, + 72, 72, 72, 0, 0, 0, 0, 0, 0, 0, + 72, 72, 72, 72, 72, 72, 26, 0, 26, 0, + 0, 26, 26, 26, 26, 26, 26, 26, 26, 0, + 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, + 26, 26, 12, 0, 12, 0, 0, 12, 12, 12, + 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, + 0, 0, 12, 12, 12, 12, 12, 12, 9, 0, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 11, 9, 9, + 9, 9, 9, 9, 10, 0, 10, 0, 0, 10, + 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, + 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, + 11, 7, 8, 0, 8, 0, 0, 8, 8, 8, + 8, 8, 8, 8, 8, 0, 0, 0, 0, 48, + 49, 0, 8, 8, 8, 8, 8, 8, 15, 48, + 49, 0, 2, 0, 7, 3, 4, 5, 50, 0, + 0, 0, 123, 124, 125, 126, 127, 128, 50, 0, + 11, 0, 0, 0, 13, 39, 39, 0, 0, 39, + 0, 15, 40, 41, 42, 0, 0, 0, 39, 39, + 39, 39, 39, 39, 39, 0, 0, 43, 0, 0, + 14, 40, 40, 0, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, + 40, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 11, 0, 11, 0, 0, 11, 11, + 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, + 0, 0, 0, 11, 11, 11, 11, 11, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, + 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 0, 15, 0, 15, 0, 0, 15, + 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, + 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 13, 0, 13, 0, 0, 13, 13, 13, 13, 13, + 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, + 13, 13, 13, 13, 13, 13, 14, 0, 14, 0, + 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, + 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, + 14, 14, 16, 0, 16, 0, 0, 16, 16, 16, + 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, + 0, 0, 16, 16, 16, 16, 16, 16, }; #if defined(__cplusplus) || defined(__STDC__) const short yycheck[] = @@ -345,79 +367,100 @@ const short yycheck[] = short yycheck[] = #endif { 33, - 0, 8, 7, 83, 43, 276, 45, 44, 33, 257, - 258, 114, 33, 258, 117, 33, 261, 262, 263, 44, - 258, 33, 61, 258, 61, 0, 258, 275, 108, 33, - 275, 258, 44, 33, 259, 44, 258, 61, 260, 261, - 44, 263, 258, 33, 44, 261, 262, 263, 58, 263, - 35, 0, 37, 275, 263, 61, 58, 263, 33, 275, - 45, 58, 61, 61, 58, 58, 268, 44, 44, 0, - 44, 44, 77, 44, 81, 0, 116, 0, 69, 99, - 33, 60, 71, 58, 33, 43, 16, 75, 21, 84, - 82, 87, 78, 80, 33, -1, -1, -1, -1, -1, - -1, -1, -1, 0, -1, 44, -1, -1, -1, 58, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, 58, 33, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, 58, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, - 0, -1, -1, -1, -1, -1, -1, 58, 33, -1, + 0, 277, 86, 8, 258, 7, 258, 258, 94, 258, + 33, 257, 258, 33, 258, 44, 259, 261, 262, 263, + 61, 44, 33, 33, 44, 33, 0, 33, 114, 43, + 276, 45, 276, 33, 44, 258, 44, 121, 261, 262, + 263, 44, 58, 61, 44, 33, 258, 61, 260, 261, + 263, 263, 0, 276, 58, 36, 44, 38, 61, 33, + 58, 58, 61, 263, 276, 46, 61, 58, 263, 44, + 269, 44, 44, 54, 44, 44, 0, 0, 0, 34, + 120, 77, 68, 51, 58, 33, 88, 92, 44, 79, + 83, 17, 22, -1, -1, -1, 90, -1, -1, -1, + 89, -1, -1, -1, 0, -1, 98, 91, 95, -1, + 58, 33, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, 58, 33, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, 58, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, 58, 33, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, 256, -1, 258, -1, -1, 261, 262, 263, - 264, 265, 266, 267, 259, 0, 257, 258, 33, 257, - 258, 275, 276, 277, 278, 279, 280, 259, 269, 270, - 271, 272, 273, 274, 275, 259, 256, 275, 258, -1, - 0, 261, 262, 263, 264, 265, 266, 267, 33, 259, - -1, -1, -1, -1, -1, 275, 276, 277, 278, 279, - 280, 256, -1, 258, -1, -1, 261, 262, 263, 264, - 265, 266, 267, 33, -1, -1, -1, -1, -1, 0, - 275, 276, 277, 278, 279, 280, 33, 256, -1, 258, - -1, -1, 261, 262, 263, 264, 265, 266, 267, 258, - -1, 260, 261, -1, 263, 0, 275, 276, 277, 278, - 279, 280, 33, 256, -1, 258, 275, -1, 261, 262, - 263, 264, 265, 266, 267, 258, -1, 260, 261, -1, - 263, 0, 275, 276, 277, 278, 279, 280, 33, 256, - -1, 258, 275, -1, 261, 262, 263, 264, 265, 266, - 267, 258, -1, -1, 261, 262, 263, 0, 275, 276, - 277, 278, 279, 280, 33, 256, -1, 258, 275, -1, - 261, 262, 263, 264, 265, 266, 267, 258, -1, -1, - 261, 262, 263, -1, 275, 276, 277, 278, 279, 280, - 33, 256, -1, 258, 275, -1, 261, 262, 263, 264, - 265, 266, 267, 33, -1, -1, -1, -1, -1, -1, - 275, 276, 277, 278, 279, 280, 256, -1, 258, -1, - -1, 261, 262, 263, 264, 265, 266, 267, -1, -1, - -1, -1, -1, -1, -1, 275, 276, 277, 278, 279, - 280, 256, -1, 258, -1, -1, 261, 262, 263, 264, - 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, - 275, 276, 277, 278, 279, 280, -1, -1, -1, -1, - -1, 256, -1, 258, -1, -1, 261, 262, 263, 264, - 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, - 275, 276, 277, 278, 279, 280, 256, -1, 258, -1, - -1, 261, 262, 263, 264, 265, 266, 267, -1, -1, - 257, 258, -1, -1, -1, 275, 276, 277, 278, 279, - 280, -1, 269, 270, 271, 272, 273, 274, 275, -1, - -1, -1, -1, -1, -1, 256, -1, 258, -1, -1, - 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, - -1, -1, -1, -1, 275, 276, 277, 278, 279, 280, - -1, 256, -1, 258, -1, -1, 261, 262, 263, 264, - 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, - 275, 276, 277, 278, 279, 280, -1, 256, -1, 258, - -1, -1, 261, 262, 263, 264, 265, 266, 267, -1, - -1, -1, -1, -1, -1, -1, 275, 276, 277, 278, - 279, 280, -1, 256, -1, 258, -1, -1, 261, 262, - 263, 264, 265, 266, 267, -1, -1, 257, 258, -1, - -1, -1, 275, 276, 277, 278, 279, 280, -1, 269, - 270, 271, 272, 273, 274, 275, + 264, 265, 266, 267, 268, 258, 0, 260, 261, 259, + 263, 33, 276, 277, 278, 279, 280, 281, 259, 259, + -1, 259, 258, 276, 260, 261, 256, 263, 258, -1, + -1, 261, 262, 263, 264, 265, 266, 267, 268, 33, + 276, 259, -1, -1, -1, -1, 276, 277, 278, 279, + 280, 281, 256, -1, 258, 33, -1, 261, 262, 263, + 264, 265, 266, 267, 268, 33, -1, 33, -1, -1, + -1, -1, 276, 277, 278, 279, 280, 281, 256, -1, + 258, -1, -1, 261, 262, 263, 264, 265, 266, 267, + 268, 33, -1, -1, 33, -1, -1, -1, 276, 277, + 278, 279, 280, 281, 256, -1, 258, -1, -1, 261, + 262, 263, 264, 265, 266, 267, 268, 33, -1, -1, + -1, -1, -1, -1, 276, 277, 278, 279, 280, 281, + 256, -1, 258, -1, -1, 261, 262, 263, 264, 265, + 266, 267, 268, -1, -1, -1, -1, -1, -1, -1, + 276, 277, 278, 279, 280, 281, 256, -1, 258, -1, + -1, 261, 262, 263, 264, 265, 266, 267, 268, -1, + -1, -1, -1, -1, -1, -1, 276, 277, 278, 279, + 280, 281, 256, -1, 258, -1, -1, 261, 262, 263, + 264, 265, 266, 267, 268, -1, -1, -1, -1, -1, + -1, -1, 276, 277, 278, 279, 280, 281, 256, -1, + 258, -1, -1, 261, 262, 263, 264, 265, 266, 267, + 268, -1, -1, -1, -1, -1, -1, 0, 276, 277, + 278, 279, 280, 281, 256, -1, 258, -1, -1, 261, + 262, 263, 264, 265, 266, 267, 268, -1, -1, -1, + -1, -1, -1, -1, 276, 277, 278, 279, 280, 281, + 33, 0, 256, -1, 258, -1, -1, 261, 262, 263, + 264, 265, 266, 267, 268, -1, -1, -1, -1, 257, + 258, -1, 276, 277, 278, 279, 280, 281, 0, 257, + 258, -1, 258, -1, 33, 261, 262, 263, 276, -1, + -1, -1, 270, 271, 272, 273, 274, 275, 276, -1, + 276, -1, -1, -1, 0, 257, 258, -1, -1, 258, + -1, 33, 261, 262, 263, -1, -1, -1, 270, 271, + 272, 273, 274, 275, 276, -1, -1, 276, -1, -1, + 0, 257, 258, -1, -1, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, + 276, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 256, -1, 258, -1, -1, 261, 262, + 263, 264, 265, 266, 267, 268, -1, -1, -1, -1, + -1, -1, -1, 276, 277, 278, 279, 280, 281, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, 258, + -1, -1, 261, 262, 263, 264, 265, 266, 267, 268, + -1, -1, -1, -1, -1, -1, -1, 276, 277, 278, + 279, 280, 281, -1, 256, -1, 258, -1, -1, 261, + 262, 263, 264, 265, 266, 267, 268, -1, -1, -1, + -1, -1, -1, -1, 276, 277, 278, 279, 280, 281, + 256, -1, 258, -1, -1, 261, 262, 263, 264, 265, + 266, 267, 268, -1, -1, -1, -1, -1, -1, -1, + 276, 277, 278, 279, 280, 281, 256, -1, 258, -1, + -1, 261, 262, 263, 264, 265, 266, 267, 268, -1, + -1, -1, -1, -1, -1, -1, 276, 277, 278, 279, + 280, 281, 256, -1, 258, -1, -1, 261, 262, 263, + 264, 265, 266, 267, 268, -1, -1, -1, -1, -1, + -1, -1, 276, 277, 278, 279, 280, 281, }; -#define YYFINAL 17 +#define YYFINAL 18 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 281 +#define YYMAXTOKEN 282 #if YYDEBUG #if defined(__cplusplus) || defined(__STDC__) const char * const yyname[] = @@ -433,9 +476,9 @@ char *yyname[] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD","DEFAULTS", -"DEFAULTS_HOST","DEFAULTS_USER","DEFAULTS_RUNAS","RUNAS","NOPASSWD","PASSWD", -"NOEXEC","EXEC","MONITOR","NOMONITOR","ALL","COMMENT","HOSTALIAS","CMNDALIAS", -"USERALIAS","RUNASALIAS","ERROR", +"DEFAULTS_HOST","DEFAULTS_USER","DEFAULTS_RUNAS","DEFAULTS_CMND","RUNAS", +"NOPASSWD","PASSWD","NOEXEC","EXEC","MONITOR","NOMONITOR","ALL","COMMENT", +"HOSTALIAS","CMNDALIAS","USERALIAS","RUNASALIAS","ERROR", }; #if defined(__cplusplus) || defined(__STDC__) const char * const yyrule[] = @@ -458,6 +501,7 @@ char *yyrule[] = "entry : DEFAULTS_USER userlist defaults_list", "entry : DEFAULTS_RUNAS runaslist defaults_list", "entry : DEFAULTS_HOST hostlist defaults_list", +"entry : DEFAULTS_CMND cmndlist defaults_list", "defaults_list : defaults_entry", "defaults_list : defaults_list ',' defaults_entry", "defaults_entry : DEFVAR", @@ -552,7 +596,7 @@ short *yyss; short *yysslim; YYSTYPE *yyvs; int yystacksize; -#line 497 "gram.y" +#line 501 "gram.y" /* * Add a list of defaults structures to the defaults list. * The binding, if non-NULL, specifies a list of hosts, users, or @@ -682,7 +726,7 @@ init_parser(path, quiet) sudolineno = 1; verbose = !quiet; } -#line 634 "gram.c" +#line 678 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ #if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) @@ -876,121 +920,127 @@ yyreduce: switch (yyn) { case 1: -#line 162 "gram.y" +#line 163 "gram.y" { ; } break; case 5: -#line 170 "gram.y" +#line 171 "gram.y" { ; } break; case 6: -#line 173 "gram.y" +#line 174 "gram.y" { yyerrok; } break; case 7: -#line 176 "gram.y" +#line 177 "gram.y" { add_userspec(yyvsp[-1].member, yyvsp[0].privilege); } break; case 8: -#line 179 "gram.y" +#line 180 "gram.y" { ; } break; case 9: -#line 182 "gram.y" +#line 183 "gram.y" { ; } break; case 10: -#line 185 "gram.y" +#line 186 "gram.y" { ; } break; case 11: -#line 188 "gram.y" +#line 189 "gram.y" { ; } break; case 12: -#line 191 "gram.y" +#line 192 "gram.y" { add_defaults(DEFAULTS, NULL, yyvsp[0].defaults); } break; case 13: -#line 194 "gram.y" +#line 195 "gram.y" { add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults); } break; case 14: -#line 197 "gram.y" +#line 198 "gram.y" { add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults); } break; case 15: -#line 200 "gram.y" +#line 201 "gram.y" { add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults); } break; -case 17: -#line 206 "gram.y" +case 16: +#line 204 "gram.y" +{ + add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults); + } +break; +case 18: +#line 210 "gram.y" { LIST_APPEND(yyvsp[-2].defaults, yyvsp[0].defaults); yyval.defaults = yyvsp[-2].defaults; } break; -case 18: -#line 212 "gram.y" +case 19: +#line 216 "gram.y" { NEW_DEFAULT(yyval.defaults, yyvsp[0].string, NULL, TRUE); } break; -case 19: -#line 215 "gram.y" +case 20: +#line 219 "gram.y" { NEW_DEFAULT(yyval.defaults, yyvsp[0].string, NULL, FALSE); } break; -case 20: -#line 218 "gram.y" +case 21: +#line 222 "gram.y" { NEW_DEFAULT(yyval.defaults, yyvsp[-2].string, yyvsp[0].string, TRUE); } break; -case 21: -#line 221 "gram.y" +case 22: +#line 225 "gram.y" { NEW_DEFAULT(yyval.defaults, yyvsp[-2].string, yyvsp[0].string, '+'); } break; -case 22: -#line 224 "gram.y" +case 23: +#line 228 "gram.y" { NEW_DEFAULT(yyval.defaults, yyvsp[-2].string, yyvsp[0].string, '-'); } break; -case 24: -#line 230 "gram.y" +case 25: +#line 234 "gram.y" { LIST_APPEND(yyvsp[-2].privilege, yyvsp[0].privilege); yyval.privilege = yyvsp[-2].privilege; } break; -case 25: -#line 236 "gram.y" +case 26: +#line 240 "gram.y" { struct cmndtag tags; struct privilege *p = emalloc(sizeof(*p)); @@ -1013,59 +1063,59 @@ case 25: yyval.privilege = p; } break; -case 26: -#line 259 "gram.y" +case 27: +#line 263 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = FALSE; } break; -case 27: -#line 263 "gram.y" +case 28: +#line 267 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = TRUE; } break; -case 28: -#line 269 "gram.y" +case 29: +#line 273 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, ALIAS); } break; -case 29: -#line 272 "gram.y" +case 30: +#line 276 "gram.y" { NEW_MEMBER(yyval.member, NULL, ALL); } break; -case 30: -#line 275 "gram.y" +case 31: +#line 279 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, NETGROUP); } break; -case 31: -#line 278 "gram.y" +case 32: +#line 282 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, NTWKADDR); } break; -case 32: -#line 281 "gram.y" +case 33: +#line 285 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, WORD); } break; -case 34: -#line 287 "gram.y" +case 35: +#line 291 "gram.y" { LIST_APPEND(yyvsp[-2].cmndspec, yyvsp[0].cmndspec); yyval.cmndspec = yyvsp[-2].cmndspec; } break; -case 35: -#line 293 "gram.y" +case 36: +#line 297 "gram.y" { struct cmndspec *cs = emalloc(sizeof(*cs)); cs->runaslist = yyvsp[-2].member; @@ -1076,127 +1126,127 @@ case 35: yyval.cmndspec = cs; } break; -case 36: -#line 304 "gram.y" +case 37: +#line 308 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = FALSE; } break; -case 37: -#line 308 "gram.y" +case 38: +#line 312 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = TRUE; } break; -case 38: -#line 314 "gram.y" +case 39: +#line 318 "gram.y" { yyval.member = NULL; } break; -case 39: -#line 317 "gram.y" +case 40: +#line 321 "gram.y" { yyval.member = yyvsp[0].member; } break; -case 41: -#line 323 "gram.y" +case 42: +#line 327 "gram.y" { LIST_APPEND(yyvsp[-2].member, yyvsp[0].member); yyval.member = yyvsp[-2].member; } break; -case 42: -#line 329 "gram.y" +case 43: +#line 333 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = FALSE; } break; -case 43: -#line 333 "gram.y" +case 44: +#line 337 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = TRUE; } break; -case 44: -#line 339 "gram.y" +case 45: +#line 343 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, ALIAS); } break; -case 45: -#line 342 "gram.y" +case 46: +#line 346 "gram.y" { NEW_MEMBER(yyval.member, NULL, ALL); } break; -case 46: -#line 345 "gram.y" +case 47: +#line 349 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, NETGROUP); } break; -case 47: -#line 348 "gram.y" +case 48: +#line 352 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, USERGROUP); } break; -case 48: -#line 351 "gram.y" +case 49: +#line 355 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, WORD); } break; -case 49: -#line 356 "gram.y" +case 50: +#line 360 "gram.y" { yyval.tag.nopasswd = yyval.tag.noexec = yyval.tag.monitor = UNSPEC; } break; -case 50: -#line 359 "gram.y" +case 51: +#line 363 "gram.y" { yyval.tag.nopasswd = TRUE; } break; -case 51: -#line 362 "gram.y" +case 52: +#line 366 "gram.y" { yyval.tag.nopasswd = FALSE; } break; -case 52: -#line 365 "gram.y" +case 53: +#line 369 "gram.y" { yyval.tag.noexec = TRUE; } break; -case 53: -#line 368 "gram.y" +case 54: +#line 372 "gram.y" { yyval.tag.noexec = FALSE; } break; -case 54: -#line 371 "gram.y" +case 55: +#line 375 "gram.y" { yyval.tag.monitor = TRUE; } break; -case 55: -#line 374 "gram.y" +case 56: +#line 378 "gram.y" { yyval.tag.monitor = FALSE; } break; -case 56: -#line 379 "gram.y" +case 57: +#line 383 "gram.y" { NEW_MEMBER(yyval.member, NULL, ALL); if (safe_cmnd) @@ -1204,14 +1254,14 @@ case 56: safe_cmnd = estrdup(user_cmnd); } break; -case 57: -#line 385 "gram.y" +case 58: +#line 389 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, ALIAS); } break; -case 58: -#line 388 "gram.y" +case 59: +#line 392 "gram.y" { struct sudo_command *c = emalloc(sizeof(*c)); c->cmnd = yyvsp[0].command.cmnd; @@ -1219,8 +1269,8 @@ case 58: NEW_MEMBER(yyval.member, (char *)c, COMMAND); } break; -case 61: -#line 400 "gram.y" +case 62: +#line 404 "gram.y" { char *s; if ((s = alias_add(yyvsp[-2].string, HOSTALIAS, yyvsp[0].member)) != NULL) { @@ -1229,15 +1279,15 @@ case 61: } } break; -case 63: -#line 410 "gram.y" +case 64: +#line 414 "gram.y" { LIST_APPEND(yyvsp[-2].member, yyvsp[0].member); yyval.member = yyvsp[-2].member; } break; -case 66: -#line 420 "gram.y" +case 67: +#line 424 "gram.y" { char *s; if ((s = alias_add(yyvsp[-2].string, CMNDALIAS, yyvsp[0].member)) != NULL) { @@ -1246,15 +1296,15 @@ case 66: } } break; -case 68: -#line 430 "gram.y" +case 69: +#line 434 "gram.y" { LIST_APPEND(yyvsp[-2].member, yyvsp[0].member); yyval.member = yyvsp[-2].member; } break; -case 71: -#line 440 "gram.y" +case 72: +#line 444 "gram.y" { char *s; if ((s = alias_add(yyvsp[-2].string, RUNASALIAS, yyvsp[0].member)) != NULL) { @@ -1263,8 +1313,8 @@ case 71: } } break; -case 74: -#line 453 "gram.y" +case 75: +#line 457 "gram.y" { char *s; if ((s = alias_add(yyvsp[-2].string, USERALIAS, yyvsp[0].member)) != NULL) { @@ -1273,58 +1323,58 @@ case 74: } } break; -case 76: -#line 463 "gram.y" +case 77: +#line 467 "gram.y" { LIST_APPEND(yyvsp[-2].member, yyvsp[0].member); yyval.member = yyvsp[-2].member; } break; -case 77: -#line 469 "gram.y" +case 78: +#line 473 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = FALSE; } break; -case 78: -#line 473 "gram.y" +case 79: +#line 477 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = TRUE; } break; -case 79: -#line 479 "gram.y" +case 80: +#line 483 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, ALIAS); } break; -case 80: -#line 482 "gram.y" +case 81: +#line 486 "gram.y" { NEW_MEMBER(yyval.member, NULL, ALL); } break; -case 81: -#line 485 "gram.y" +case 82: +#line 489 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, NETGROUP); } break; -case 82: -#line 488 "gram.y" +case 83: +#line 492 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, USERGROUP); } break; -case 83: -#line 491 "gram.y" +case 84: +#line 495 "gram.y" { NEW_MEMBER(yyval.member, yyvsp[0].string, WORD); } break; -#line 1276 "gram.c" +#line 1326 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/gram.h b/gram.h index d3f0e1802..1bb3372c6 100644 --- a/gram.h +++ b/gram.h @@ -9,20 +9,21 @@ #define DEFAULTS_HOST 265 #define DEFAULTS_USER 266 #define DEFAULTS_RUNAS 267 -#define RUNAS 268 -#define NOPASSWD 269 -#define PASSWD 270 -#define NOEXEC 271 -#define EXEC 272 -#define MONITOR 273 -#define NOMONITOR 274 -#define ALL 275 -#define COMMENT 276 -#define HOSTALIAS 277 -#define CMNDALIAS 278 -#define USERALIAS 279 -#define RUNASALIAS 280 -#define ERROR 281 +#define DEFAULTS_CMND 268 +#define RUNAS 269 +#define NOPASSWD 270 +#define PASSWD 271 +#define NOEXEC 272 +#define EXEC 273 +#define MONITOR 274 +#define NOMONITOR 275 +#define ALL 276 +#define COMMENT 277 +#define HOSTALIAS 278 +#define CMNDALIAS 279 +#define USERALIAS 280 +#define RUNASALIAS 281 +#define ERROR 282 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { diff --git a/gram.y b/gram.y index bbbd4bd96..3d14bcbfd 100644 --- a/gram.y +++ b/gram.y @@ -120,6 +120,7 @@ yyerror(s) %token DEFAULTS_HOST /* Host-specific defaults entry */ %token DEFAULTS_USER /* User-specific defaults entry */ %token DEFAULTS_RUNAS /* Runas-specific defaults entry */ +%token DEFAULTS_CMND /* Command-specific defaults entry */ %token RUNAS /* ( runas_list ) */ %token NOPASSWD /* no passwd req for command */ %token PASSWD /* passwd req for command (default) */ @@ -200,6 +201,9 @@ entry : COMMENT { | DEFAULTS_HOST hostlist defaults_list { add_defaults(DEFAULTS_HOST, $2, $3); } + | DEFAULTS_CMND cmndlist defaults_list { + add_defaults(DEFAULTS_CMND, $2, $3); + } ; defaults_list : defaults_entry diff --git a/mon_systrace.c b/mon_systrace.c index 9e449369c..94bd2a453 100644 --- a/mon_systrace.c +++ b/mon_systrace.c @@ -872,7 +872,7 @@ check_execv(fd, pid, seqnr, askp, cookie, policyp, errorp) if (!def_ignore_local_sudoers && !ISSET(validated, VALIDATE_OK)) #endif { - (void) update_defaults(); + (void) update_defaults(SET_ALL); validated = sudoers_lookup(0); } if (ISSET(validated, VALIDATE_OK)) { diff --git a/sudo.c b/sudo.c index a0bf6f3cc..459b27fe3 100644 --- a/sudo.c +++ b/sudo.c @@ -257,7 +257,7 @@ main(argc, argv, envp) /* Parse sudoers and set any defaults listed in it. */ if (parse_sudoers(_PATH_SUDOERS) || parse_error) log_error(0, "parse error in %s near line %d", errorfile, errorlineno); - if (!update_defaults()) + if (!update_defaults(SKIP_CMND)) log_error(NO_STDERR|NO_EXIT, "problem with defaults entries"); } @@ -612,7 +612,8 @@ init_vars(sudo_mode) } /* - * Fill in user_cmnd, user_args, user_base and user_stat variables. + * Fill in user_cmnd, user_args, user_base and user_stat variables + * and apply any command-specific defaults entries. */ static int set_cmnd(sudo_mode) @@ -667,6 +668,9 @@ set_cmnd(sudo_mode) else user_base = user_cmnd; + if (!update_defaults(ONLY_CMND)) + log_error(NO_STDERR|NO_EXIT, "problem with defaults entries"); + return(rval); } diff --git a/testsudoers.c b/testsudoers.c index ecf514e0f..2bfb711a2 100644 --- a/testsudoers.c +++ b/testsudoers.c @@ -204,7 +204,7 @@ main(argc, argv) else (void) fputs("Parses OK", stdout); - if (!update_defaults()) + if (!update_defaults(SET_ALL)) (void) fputs(" (problem with defaults entries)", stdout); puts("."); @@ -350,14 +350,14 @@ print_defaults() case DEFAULTS_RUNAS: putchar('>'); break; + case DEFAULTS_CMND: + putchar('!'); + break; } for (m = d->binding; m != NULL; m = m->next) { - if (m->type == COMMAND) - printf("%s\"%s %s\"", m != d->binding ? "," : "", - ((struct sudo_command *)m->name)->cmnd, - ((struct sudo_command *)m->name)->args); - else - printf("%s%s", m != d->binding ? "," : "", m->name); + if (m != d->binding) + putchar(','); + print_member(m); } printf("\t%s%s", d->op == FALSE ? "!" : "", d->var); if (d->val != NULL) { diff --git a/toke.c b/toke.c index 8d6ea15a1..19c7c6c1f 100644 --- a/toke.c +++ b/toke.c @@ -289,52 +289,52 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 42 -#define YY_END_OF_BUFFER 43 -static yyconst short int yy_accept[385] = +#define YY_NUM_RULES 43 +#define YY_END_OF_BUFFER 44 +static yyconst short int yy_accept[390] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 43, 32, 38, 37, 36, 41, 32, 26, - 41, 32, 33, 32, 32, 32, 32, 35, 34, 27, - 27, 27, 27, 27, 41, 32, 41, 27, 27, 27, - 27, 27, 28, 41, 28, 29, 28, 28, 28, 28, - 28, 27, 27, 27, 27, 27, 41, 28, 1, 12, - 11, 12, 11, 11, 41, 41, 2, 8, 8, 8, - 3, 8, 4, 41, 32, 0, 38, 36, 0, 40, - 23, 0, 22, 0, 31, 31, 0, 32, 32, 32, - 32, 32, 27, 27, 27, 27, 27, 32, 39, 32, - - 0, 32, 32, 32, 32, 32, 28, 0, 28, 23, - 0, 22, 0, 28, 0, 28, 28, 28, 28, 28, - 27, 27, 27, 27, 27, 28, 28, 1, 12, 12, - 10, 9, 10, 0, 2, 8, 0, 8, 0, 0, - 5, 6, 8, 8, 0, 32, 32, 32, 27, 27, - 27, 27, 27, 27, 32, 0, 32, 32, 32, 32, - 32, 28, 28, 28, 27, 27, 27, 27, 27, 27, - 28, 7, 7, 0, 7, 8, 32, 32, 32, 32, - 32, 27, 27, 27, 27, 27, 27, 32, 0, 32, - 32, 32, 28, 28, 28, 28, 28, 27, 27, 27, - - 27, 27, 27, 28, 7, 32, 32, 32, 0, 19, - 27, 27, 27, 27, 27, 32, 0, 32, 32, 28, - 28, 28, 27, 27, 27, 27, 27, 28, 32, 32, - 32, 32, 32, 27, 27, 27, 27, 27, 32, 0, - 32, 32, 28, 28, 28, 28, 28, 27, 27, 27, - 27, 27, 28, 24, 24, 24, 27, 0, 18, 27, - 27, 0, 17, 32, 0, 32, 32, 24, 24, 24, - 27, 27, 27, 28, 32, 24, 24, 24, 24, 0, - 21, 27, 27, 30, 0, 32, 14, 28, 24, 24, - 24, 24, 27, 27, 28, 32, 25, 25, 25, 27, - - 0, 16, 0, 32, 0, 32, 28, 25, 25, 25, - 27, 32, 32, 25, 25, 25, 25, 25, 0, 20, - 0, 15, 14, 0, 14, 0, 28, 28, 25, 25, - 25, 25, 25, 32, 32, 32, 25, 25, 0, 13, - 28, 28, 28, 25, 25, 32, 32, 32, 32, 32, - 28, 28, 28, 28, 28, 32, 32, 32, 28, 28, - 28, 32, 32, 32, 32, 32, 28, 28, 28, 28, - 28, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 0 + 0, 0, 44, 33, 39, 38, 37, 42, 33, 26, + 42, 33, 34, 33, 33, 33, 33, 36, 35, 27, + 27, 27, 27, 27, 42, 33, 42, 27, 27, 27, + 27, 27, 28, 42, 28, 29, 28, 28, 28, 28, + 28, 27, 27, 27, 27, 27, 42, 28, 1, 33, + 12, 11, 12, 11, 11, 42, 42, 2, 8, 8, + 8, 3, 8, 4, 42, 33, 0, 39, 37, 0, + 41, 23, 0, 22, 0, 32, 32, 0, 33, 33, + 33, 33, 33, 27, 27, 27, 27, 27, 33, 40, + + 33, 0, 33, 33, 33, 33, 33, 28, 0, 28, + 23, 0, 22, 0, 28, 0, 28, 28, 28, 28, + 28, 27, 27, 27, 27, 27, 28, 28, 1, 31, + 31, 0, 12, 12, 10, 9, 10, 0, 2, 8, + 0, 8, 0, 0, 5, 6, 8, 8, 0, 33, + 33, 33, 27, 27, 27, 27, 27, 27, 33, 0, + 33, 33, 33, 33, 33, 28, 28, 28, 27, 27, + 27, 27, 27, 27, 28, 0, 7, 7, 0, 7, + 8, 33, 33, 33, 33, 33, 27, 27, 27, 27, + 27, 27, 33, 0, 33, 33, 33, 28, 28, 28, + + 28, 28, 27, 27, 27, 27, 27, 27, 28, 7, + 33, 33, 33, 0, 19, 27, 27, 27, 27, 27, + 33, 0, 33, 33, 28, 28, 28, 27, 27, 27, + 27, 27, 28, 33, 33, 33, 33, 33, 27, 27, + 27, 27, 27, 33, 0, 33, 33, 28, 28, 28, + 28, 28, 27, 27, 27, 27, 27, 28, 24, 24, + 24, 27, 0, 18, 27, 27, 0, 17, 33, 0, + 33, 33, 24, 24, 24, 27, 27, 27, 28, 33, + 24, 24, 24, 24, 0, 21, 27, 27, 30, 0, + 33, 14, 28, 24, 24, 24, 24, 27, 27, 28, + + 33, 25, 25, 25, 27, 0, 16, 0, 33, 0, + 33, 28, 25, 25, 25, 27, 33, 33, 25, 25, + 25, 25, 25, 0, 20, 0, 15, 14, 0, 14, + 0, 28, 28, 25, 25, 25, 25, 25, 33, 33, + 33, 25, 25, 0, 13, 28, 28, 28, 25, 25, + 33, 33, 33, 33, 33, 28, 28, 28, 28, 28, + 33, 33, 33, 28, 28, 28, 33, 33, 33, 33, + 33, 28, 28, 28, 28, 28, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 0 } ; static yyconst int yy_ec[256] = @@ -379,105 +379,107 @@ static yyconst int yy_meta[61] = 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 } ; -static yyconst short int yy_base[407] = +static yyconst short int yy_base[414] = { 0, 0, 55, 96, 0, 60, 61, 155, 160, 203, 262, - 321, 364, 1453, 1394, 1435, 2039, 1425, 1417, 1367, 2039, - 2039, 1362, 2039, 166, 176, 197, 253, 2039, 2039, 408, - 1362, 1368, 1367, 1375, 467, 20, 170, 1346, 1349, 1342, - 1337, 1337, 1350, 57, 1347, 2039, 1345, 177, 330, 339, - 373, 492, 1344, 1346, 1345, 1343, 551, 21, 1365, 0, - 2039, 1361, 0, 2039, 567, 69, 0, 1319, 580, 136, - 2039, 144, 2039, 80, 1315, 221, 1356, 1353, 1353, 2039, - 1311, 275, 1295, 492, 376, 1267, 591, 319, 157, 609, - 618, 627, 0, 1279, 1266, 55, 1254, 232, 2039, 46, - - 173, 145, 180, 168, 188, 44, 1238, 652, 272, 1237, - 661, 1227, 685, 670, 694, 704, 194, 713, 722, 733, - 0, 1239, 1234, 205, 1229, 299, 133, 1265, 0, 1262, - 293, 2039, 2039, 301, 0, 1219, 556, 756, 337, 359, - 2039, 2039, 1180, 327, 582, 753, 765, 774, 1194, 1180, - 1151, 1148, 1148, 1126, 342, 234, 329, 234, 338, 356, - 355, 785, 794, 803, 1135, 1112, 1093, 1099, 1107, 1067, - 360, 1061, 2039, 367, 825, 830, 839, 552, 859, 868, - 877, 408, 1064, 1045, 1040, 1035, 1031, 428, 429, 361, - 143, 430, 888, 558, 897, 906, 917, 585, 1006, 1014, - - 1001, 996, 974, 433, 573, 926, 935, 946, 587, 2039, - 962, 930, 906, 863, 871, 436, 553, 352, 442, 955, - 964, 975, 856, 805, 793, 759, 759, 440, 984, 598, - 993, 1004, 1013, 727, 596, 716, 673, 599, 605, 237, - 565, 607, 1022, 606, 1033, 1042, 1051, 674, 657, 671, - 663, 681, 638, 1063, 1072, 1081, 690, 705, 2039, 652, - 642, 714, 2039, 701, 618, 711, 523, 1093, 1102, 1111, - 839, 619, 603, 804, 1122, 637, 1132, 1141, 1152, 841, - 2039, 569, 842, 517, 562, 655, 827, 1161, 824, 1171, - 1182, 1191, 449, 843, 437, 1200, 1211, 1220, 1229, 844, - - 849, 2039, 1250, 720, 389, 370, 1240, 1258, 1269, 1278, - 1172, 1287, 732, 1298, 1307, 1316, 1327, 1336, 1338, 2039, - 404, 310, 287, 1360, 284, 1384, 1357, 826, 1396, 1405, - 1414, 1425, 1434, 1443, 1454, 1463, 1472, 1479, 302, 2039, - 1492, 1508, 1521, 1528, 1487, 1537, 885, 1557, 1566, 1575, - 1586, 886, 1595, 1604, 1615, 1624, 1633, 1644, 1653, 1662, - 1673, 1682, 944, 1691, 1702, 1711, 1720, 973, 1731, 1740, - 1749, 1760, 1769, 1778, 1789, 1798, 1807, 125, 1818, 1827, - 121, 1836, 1847, 2039, 1891, 1898, 1905, 1912, 1919, 1926, - 1933, 1940, 1947, 1954, 1961, 1968, 1975, 84, 1982, 1989, - - 1996, 2003, 2010, 2017, 2024, 2031 + 321, 364, 1338, 1277, 1307, 2093, 1295, 1295, 1253, 2093, + 2093, 1252, 2093, 166, 176, 197, 253, 2093, 2093, 408, + 1252, 1258, 1253, 1252, 467, 20, 170, 1206, 1200, 1193, + 1180, 1172, 1176, 208, 1166, 2093, 1156, 327, 337, 373, + 464, 508, 1147, 1144, 1143, 1143, 567, 21, 1158, 335, + 0, 2093, 1138, 0, 2093, 583, 68, 0, 1097, 596, + 48, 2093, 50, 2093, 75, 1096, 275, 1129, 1108, 1100, + 2093, 1058, 508, 1039, 607, 338, 1031, 633, 630, 157, + 645, 659, 674, 0, 1023, 1018, 52, 1013, 179, 2093, + + 46, 157, 121, 136, 142, 133, 29, 1000, 696, 218, + 981, 705, 980, 729, 376, 738, 748, 188, 757, 766, + 777, 0, 992, 987, 251, 981, 242, 159, 1017, 795, + 974, 803, 0, 1013, 166, 2093, 2093, 240, 0, 971, + 487, 811, 284, 359, 2093, 2093, 932, 293, 598, 824, + 840, 853, 945, 940, 929, 935, 928, 915, 234, 243, + 329, 248, 339, 257, 236, 869, 882, 898, 912, 905, + 892, 896, 868, 855, 285, 921, 849, 2093, 356, 919, + 934, 931, 358, 948, 963, 977, 384, 842, 850, 845, + 840, 836, 38, 346, 260, 352, 353, 983, 360, 992, + + 1012, 1021, 408, 837, 806, 799, 793, 789, 444, 428, + 1029, 1041, 1050, 472, 2093, 793, 796, 791, 783, 789, + 452, 345, 460, 453, 1060, 1070, 1079, 782, 779, 757, + 719, 727, 454, 1089, 463, 1099, 1108, 1118, 718, 580, + 709, 701, 582, 286, 569, 530, 537, 1128, 580, 1137, + 1147, 1157, 694, 610, 685, 681, 615, 362, 1167, 1177, + 1187, 621, 632, 2093, 676, 680, 683, 2093, 570, 575, + 536, 610, 1197, 1207, 1217, 699, 663, 657, 584, 1226, + 582, 1237, 1247, 832, 713, 2093, 622, 722, 592, 667, + 456, 1267, 1256, 638, 1286, 1297, 890, 539, 725, 461, + + 1266, 1306, 1315, 1326, 732, 737, 2093, 669, 639, 388, + 372, 1335, 1344, 1355, 1364, 749, 1373, 672, 1384, 1393, + 1402, 1413, 943, 779, 2093, 347, 296, 258, 1436, 232, + 1460, 1433, 682, 1472, 1481, 1490, 1501, 972, 1510, 1519, + 1530, 1539, 848, 230, 2093, 1548, 1559, 1568, 1577, 912, + 1588, 745, 1597, 1606, 1617, 1626, 786, 1635, 1646, 1655, + 1664, 1675, 1684, 1693, 1704, 1713, 1722, 792, 1733, 1742, + 1751, 1762, 819, 1771, 1780, 1791, 1800, 1809, 1820, 1829, + 1838, 1849, 145, 1858, 1867, 141, 1878, 1887, 2093, 1931, + 1938, 1945, 1952, 1959, 1966, 1973, 1980, 1987, 1994, 2001, + + 2008, 2015, 2022, 84, 2029, 2036, 2043, 2050, 2057, 2064, + 2071, 2078, 2085 } ; -static yyconst short int yy_def[407] = +static yyconst short int yy_def[414] = { 0, - 384, 1, 384, 3, 1, 1, 385, 385, 386, 386, - 387, 387, 384, 388, 384, 384, 384, 389, 390, 384, - 384, 391, 384, 392, 388, 388, 388, 384, 384, 384, - 30, 30, 30, 30, 388, 388, 389, 30, 30, 30, - 30, 30, 393, 384, 394, 384, 395, 396, 393, 393, - 393, 384, 52, 52, 52, 52, 393, 393, 384, 397, - 384, 397, 397, 384, 384, 384, 398, 399, 400, 399, - 384, 399, 384, 401, 388, 388, 384, 384, 389, 384, - 390, 390, 391, 391, 392, 402, 388, 388, 388, 388, - 388, 388, 30, 30, 30, 30, 30, 388, 384, 388, - - 389, 388, 388, 388, 388, 388, 393, 393, 384, 394, - 394, 395, 395, 396, 393, 393, 393, 393, 393, 393, - 52, 52, 52, 52, 52, 393, 393, 384, 397, 397, - 384, 384, 384, 384, 398, 399, 399, 400, 403, 400, - 384, 384, 399, 399, 384, 388, 388, 388, 30, 30, - 30, 30, 30, 30, 388, 389, 388, 388, 388, 388, - 388, 393, 393, 393, 52, 52, 52, 52, 52, 52, - 393, 399, 384, 403, 400, 400, 388, 388, 388, 388, - 388, 30, 30, 30, 30, 30, 30, 388, 389, 388, - 388, 388, 393, 393, 393, 393, 393, 52, 52, 52, - - 52, 52, 52, 393, 403, 388, 388, 388, 384, 384, - 30, 30, 30, 30, 30, 388, 389, 388, 388, 393, - 393, 393, 52, 52, 52, 52, 52, 393, 388, 388, - 388, 388, 388, 30, 30, 30, 30, 30, 388, 389, - 388, 388, 393, 393, 393, 393, 393, 52, 52, 52, - 52, 52, 393, 388, 388, 388, 30, 384, 384, 30, - 30, 384, 384, 388, 389, 388, 388, 393, 393, 393, - 52, 52, 52, 393, 388, 388, 388, 388, 388, 384, - 384, 30, 30, 388, 389, 388, 388, 393, 393, 393, - 393, 393, 52, 52, 393, 388, 388, 388, 388, 30, - - 384, 384, 389, 388, 404, 405, 393, 393, 393, 393, - 52, 388, 388, 388, 388, 388, 388, 388, 384, 384, - 406, 388, 404, 404, 405, 405, 393, 393, 393, 393, - 393, 393, 393, 388, 388, 388, 388, 388, 406, 384, - 393, 393, 393, 393, 393, 388, 388, 388, 388, 388, - 393, 393, 393, 393, 393, 388, 388, 388, 393, 393, - 393, 388, 388, 388, 388, 388, 393, 393, 393, 393, - 393, 388, 388, 388, 393, 393, 393, 388, 388, 388, - 393, 393, 393, 0, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - - 384, 384, 384, 384, 384, 384 + 389, 1, 389, 3, 1, 1, 390, 390, 391, 391, + 392, 392, 389, 393, 389, 389, 389, 394, 395, 389, + 389, 396, 389, 397, 393, 393, 393, 389, 389, 389, + 30, 30, 30, 30, 393, 393, 394, 30, 30, 30, + 30, 30, 398, 389, 399, 389, 400, 401, 398, 398, + 398, 389, 52, 52, 52, 52, 398, 398, 389, 402, + 403, 389, 403, 403, 389, 389, 389, 404, 405, 406, + 405, 389, 405, 389, 407, 393, 393, 389, 389, 394, + 389, 395, 395, 396, 396, 397, 408, 393, 393, 393, + 393, 393, 393, 30, 30, 30, 30, 30, 393, 389, + + 393, 394, 393, 393, 393, 393, 393, 398, 398, 389, + 399, 399, 400, 400, 401, 398, 398, 398, 398, 398, + 398, 52, 52, 52, 52, 52, 398, 398, 389, 402, + 409, 393, 403, 403, 389, 389, 389, 389, 404, 405, + 405, 406, 410, 406, 389, 389, 405, 405, 389, 393, + 393, 393, 30, 30, 30, 30, 30, 30, 393, 394, + 393, 393, 393, 393, 393, 398, 398, 398, 52, 52, + 52, 52, 52, 52, 398, 389, 405, 389, 410, 406, + 406, 393, 393, 393, 393, 393, 30, 30, 30, 30, + 30, 30, 393, 394, 393, 393, 393, 398, 398, 398, + + 398, 398, 52, 52, 52, 52, 52, 52, 398, 410, + 393, 393, 393, 389, 389, 30, 30, 30, 30, 30, + 393, 394, 393, 393, 398, 398, 398, 52, 52, 52, + 52, 52, 398, 393, 393, 393, 393, 393, 30, 30, + 30, 30, 30, 393, 394, 393, 393, 398, 398, 398, + 398, 398, 52, 52, 52, 52, 52, 398, 393, 393, + 393, 30, 389, 389, 30, 30, 389, 389, 393, 394, + 393, 393, 398, 398, 398, 52, 52, 52, 398, 393, + 393, 393, 393, 393, 389, 389, 30, 30, 393, 394, + 393, 393, 398, 398, 398, 398, 398, 52, 52, 398, + + 393, 393, 393, 393, 30, 389, 389, 394, 393, 411, + 412, 398, 398, 398, 398, 52, 393, 393, 393, 393, + 393, 393, 393, 389, 389, 413, 393, 411, 411, 412, + 412, 398, 398, 398, 398, 398, 398, 398, 393, 393, + 393, 393, 393, 413, 389, 398, 398, 398, 398, 398, + 393, 393, 393, 393, 393, 398, 398, 398, 398, 398, + 393, 393, 393, 398, 398, 398, 393, 393, 393, 393, + 393, 398, 398, 398, 398, 398, 393, 393, 393, 398, + 398, 398, 393, 393, 393, 398, 398, 398, 0, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389 } ; -static yyconst short int yy_nxt[2100] = +static yyconst short int yy_nxt[2154] = { 0, 14, 15, 16, 17, 14, 18, 19, 20, 21, 14, 22, 23, 14, 14, 24, 25, 26, 27, 25, 25, @@ -485,234 +487,240 @@ static yyconst short int yy_nxt[2100] = 31, 30, 30, 32, 33, 30, 34, 30, 30, 30, 30, 30, 30, 35, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 36, 14, 14, - 37, 59, 59, 76, 108, 21, 21, 21, 21, 109, - 134, 99, 109, 109, 109, 109, 109, 109, 109, 100, - 127, 144, 99, 38, 39, 151, 40, 76, 152, 76, - 135, 153, 41, 161, 155, 42, 43, 15, 16, 17, + 37, 59, 59, 77, 109, 21, 21, 21, 21, 138, + 100, 145, 77, 146, 60, 60, 148, 100, 165, 101, + 128, 77, 155, 38, 39, 156, 40, 221, 157, 77, + 139, 141, 41, 141, 159, 42, 43, 15, 16, 17, 43, 44, 45, 21, 46, 43, 47, 23, 43, 43, 48, 49, 50, 51, 49, 49, 49, 49, 28, 29, 21, 43, 52, 52, 52, 52, 53, 52, 52, 54, 55, 52, 56, 52, 52, 52, 52, 52, 52, 57, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 58, 43, 43, 15, 61, 62, 141, - 63, 15, 61, 62, 108, 63, 64, 142, 76, 86, - 88, 64, 80, 86, 86, 80, 108, 64, 63, 137, - 86, 171, 64, 63, 86, 86, 76, 137, 76, 88, - 86, 89, 89, 89, 89, 89, 89, 89, 65, 157, - - 76, 86, 219, 65, 15, 16, 17, 116, 18, 87, - 88, 76, 90, 90, 90, 90, 90, 90, 90, 76, - 115, 101, 75, 76, 75, 159, 75, 156, 75, 75, - 158, 76, 75, 134, 99, 167, 80, 108, 168, 80, - 76, 169, 160, 75, 75, 75, 66, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 15, 16, 17, 88, 18, 91, 91, - 91, 91, 91, 92, 89, 76, 81, 76, 81, 191, - 81, 189, 81, 81, 109, 265, 81, 109, 109, 109, - 109, 109, 109, 109, 134, 99, 76, 81, 81, 81, - - 134, 99, 134, 99, 340, 66, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 15, 16, 17, 69, 18, 326, 134, 99, - 324, 70, 71, 72, 146, 147, 148, 146, 146, 146, - 146, 173, 108, 116, 73, 117, 117, 117, 117, 117, - 117, 117, 116, 76, 118, 118, 118, 118, 118, 118, - 118, 139, 76, 175, 74, 15, 16, 17, 69, 18, - 137, 205, 76, 108, 70, 71, 72, 190, 241, 86, - 174, 76, 108, 86, 86, 76, 116, 73, 119, 119, - 119, 119, 119, 120, 117, 76, 190, 188, 76, 76, - - 86, 192, 176, 108, 76, 218, 340, 74, 75, 209, - 174, 190, 75, 326, 75, 204, 108, 75, 75, 87, - 75, 75, 75, 93, 93, 93, 93, 93, 93, 93, - 210, 80, 324, 75, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 76, 93, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 98, 99, - 75, 76, 75, 76, 75, 75, 108, 216, 75, 76, - 108, 217, 228, 108, 239, 76, 311, 190, 253, 75, - 75, 75, 107, 83, 242, 83, 107, 83, 107, 83, - - 83, 107, 107, 83, 107, 107, 107, 121, 121, 121, - 121, 121, 121, 121, 83, 83, 83, 107, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 108, 121, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 126, 99, 107, 80, 107, 136, 107, 107, - 76, 136, 107, 303, 80, 177, 76, 136, 131, 99, - 132, 193, 133, 107, 107, 107, 132, 173, 133, 136, - 287, 139, 139, 86, 136, 139, 209, 86, 209, 133, - 133, 139, 85, 86, 75, 76, 85, 258, 75, 75, - - 262, 108, 85, 139, 86, 86, 300, 210, 76, 210, - 133, 229, 240, 85, 85, 75, 174, 266, 259, 243, - 80, 263, 88, 140, 89, 89, 89, 89, 89, 89, - 89, 88, 294, 89, 89, 89, 89, 89, 89, 89, - 88, 76, 89, 89, 89, 89, 89, 89, 76, 108, - 76, 275, 76, 107, 293, 107, 264, 107, 258, 107, - 107, 76, 110, 107, 110, 267, 110, 285, 110, 110, - 76, 283, 110, 86, 107, 107, 107, 86, 86, 259, - 76, 108, 262, 110, 110, 110, 112, 282, 112, 274, - 112, 280, 112, 112, 86, 114, 112, 107, 76, 114, - - 304, 107, 107, 263, 273, 114, 258, 112, 112, 112, - 272, 271, 281, 115, 261, 262, 114, 114, 107, 162, - 163, 164, 162, 162, 162, 162, 116, 259, 117, 117, - 117, 117, 117, 117, 117, 116, 263, 117, 117, 117, - 117, 117, 117, 117, 76, 312, 116, 108, 117, 117, - 117, 117, 117, 117, 76, 260, 108, 139, 139, 284, - 172, 139, 286, 76, 257, 108, 177, 139, 178, 178, - 178, 178, 178, 178, 178, 76, 108, 322, 177, 139, - 179, 179, 179, 179, 179, 179, 179, 177, 252, 180, - 180, 180, 180, 180, 181, 178, 76, 251, 193, 140, - - 194, 194, 194, 194, 194, 194, 194, 193, 76, 195, - 195, 195, 195, 195, 195, 195, 193, 76, 196, 196, - 196, 196, 196, 197, 194, 250, 139, 139, 108, 172, - 139, 139, 139, 249, 175, 139, 139, 108, 288, 327, - 280, 139, 280, 301, 301, 319, 108, 108, 139, 305, - 301, 305, 306, 139, 206, 207, 208, 206, 206, 206, - 206, 281, 295, 281, 302, 302, 320, 108, 140, 108, - 76, 302, 177, 140, 178, 178, 178, 178, 178, 178, - 178, 177, 76, 178, 178, 178, 178, 178, 178, 178, - 177, 248, 178, 178, 178, 178, 178, 178, 346, 351, - - 238, 237, 76, 220, 221, 222, 220, 220, 220, 220, - 193, 76, 194, 194, 194, 194, 194, 194, 194, 193, - 76, 194, 194, 194, 194, 194, 194, 194, 76, 108, - 193, 108, 194, 194, 194, 194, 194, 194, 236, 229, - 108, 230, 230, 230, 230, 230, 230, 230, 229, 108, - 231, 231, 231, 231, 231, 231, 231, 362, 235, 229, - 108, 232, 232, 232, 232, 232, 233, 230, 243, 76, - 244, 244, 244, 244, 244, 244, 244, 243, 76, 245, - 245, 245, 245, 245, 245, 245, 367, 76, 243, 76, - 246, 246, 246, 246, 246, 247, 244, 234, 108, 254, - - 255, 256, 254, 254, 254, 254, 229, 108, 230, 230, - 230, 230, 230, 230, 230, 227, 108, 229, 108, 230, - 230, 230, 230, 230, 230, 230, 229, 76, 230, 230, - 230, 230, 230, 230, 226, 225, 76, 268, 269, 270, - 268, 268, 268, 268, 224, 223, 243, 76, 244, 244, - 244, 244, 244, 244, 244, 243, 76, 244, 244, 244, - 244, 244, 244, 244, 243, 108, 244, 244, 244, 244, - 244, 244, 215, 214, 213, 212, 108, 275, 276, 276, - 276, 276, 276, 276, 276, 108, 275, 277, 277, 277, - 277, 277, 277, 277, 108, 275, 278, 278, 278, 278, - - 278, 279, 276, 211, 137, 203, 76, 288, 289, 289, - 289, 289, 289, 289, 289, 76, 288, 290, 290, 290, - 290, 290, 290, 290, 76, 288, 291, 291, 291, 291, - 291, 292, 289, 202, 201, 200, 108, 296, 297, 298, - 299, 296, 296, 296, 199, 108, 275, 276, 276, 276, - 276, 276, 276, 276, 108, 275, 276, 276, 276, 276, - 276, 276, 276, 198, 187, 76, 275, 276, 276, 276, - 276, 276, 276, 319, 186, 76, 307, 308, 309, 310, - 307, 307, 307, 185, 76, 288, 289, 289, 289, 289, - 289, 289, 289, 184, 320, 76, 288, 289, 289, 289, - - 289, 289, 289, 289, 108, 288, 289, 289, 289, 289, - 289, 289, 183, 312, 108, 313, 313, 313, 313, 313, - 313, 313, 182, 137, 312, 108, 314, 314, 314, 314, - 314, 314, 314, 312, 108, 315, 315, 315, 315, 315, - 316, 317, 312, 76, 318, 318, 318, 313, 313, 313, - 313, 303, 80, 327, 76, 328, 328, 328, 328, 328, - 328, 328, 137, 76, 321, 130, 128, 170, 166, 165, - 113, 327, 76, 329, 329, 329, 329, 329, 329, 329, - 111, 108, 327, 108, 330, 330, 330, 330, 330, 331, - 332, 327, 154, 333, 333, 333, 328, 328, 328, 328, - - 150, 108, 334, 335, 336, 334, 334, 334, 334, 149, - 145, 312, 108, 317, 317, 317, 317, 317, 317, 317, - 312, 108, 317, 317, 317, 317, 317, 317, 317, 312, - 76, 317, 317, 317, 317, 317, 317, 337, 84, 319, - 312, 76, 337, 337, 337, 337, 337, 337, 337, 312, - 76, 338, 338, 338, 82, 80, 78, 77, 76, 76, - 320, 323, 137, 323, 130, 323, 128, 323, 323, 125, - 76, 323, 341, 342, 343, 341, 341, 341, 341, 76, - 124, 123, 323, 323, 323, 325, 122, 325, 113, 325, - 111, 325, 325, 108, 106, 325, 105, 104, 103, 102, - - 108, 97, 96, 95, 94, 84, 325, 325, 325, 327, - 82, 332, 332, 332, 332, 332, 332, 332, 327, 80, - 332, 332, 332, 332, 332, 332, 332, 327, 78, 332, - 332, 332, 332, 332, 332, 344, 77, 76, 327, 108, - 344, 344, 344, 344, 344, 344, 344, 327, 108, 345, - 345, 345, 384, 384, 384, 384, 346, 108, 347, 347, - 347, 347, 347, 347, 347, 384, 384, 346, 108, 348, - 348, 348, 348, 348, 348, 348, 346, 108, 349, 349, - 349, 349, 349, 350, 347, 384, 76, 337, 337, 337, - 337, 337, 337, 337, 338, 338, 338, 76, 384, 384, - - 384, 384, 345, 345, 345, 351, 76, 352, 352, 352, - 352, 352, 352, 352, 384, 76, 384, 384, 384, 384, - 384, 351, 76, 353, 353, 353, 353, 353, 353, 353, - 108, 384, 384, 384, 351, 108, 354, 354, 354, 354, - 354, 355, 352, 344, 344, 344, 344, 344, 344, 344, - 384, 108, 356, 357, 358, 356, 356, 356, 356, 384, - 384, 384, 384, 384, 108, 384, 384, 384, 384, 384, - 346, 108, 347, 347, 347, 347, 347, 347, 347, 346, - 76, 347, 347, 347, 347, 347, 347, 347, 346, 384, - 347, 347, 347, 347, 347, 347, 384, 384, 384, 384, - - 76, 359, 360, 361, 359, 359, 359, 359, 351, 76, - 352, 352, 352, 352, 352, 352, 352, 351, 76, 352, - 352, 352, 352, 352, 352, 352, 384, 384, 351, 108, - 352, 352, 352, 352, 352, 352, 384, 362, 108, 363, - 363, 363, 363, 363, 363, 363, 362, 108, 364, 364, - 364, 364, 364, 364, 364, 384, 384, 362, 108, 365, - 365, 365, 365, 365, 366, 363, 367, 76, 368, 368, - 368, 368, 368, 368, 368, 367, 76, 369, 369, 369, - 369, 369, 369, 369, 384, 384, 367, 76, 370, 370, - 370, 370, 370, 371, 368, 384, 108, 372, 373, 374, - - 372, 372, 372, 372, 362, 108, 363, 363, 363, 363, - 363, 363, 363, 384, 384, 362, 108, 363, 363, 363, - 363, 363, 363, 363, 362, 76, 363, 363, 363, 363, - 363, 363, 384, 384, 76, 375, 376, 377, 375, 375, - 375, 375, 384, 384, 367, 76, 368, 368, 368, 368, - 368, 368, 368, 367, 76, 368, 368, 368, 368, 368, - 368, 368, 367, 108, 368, 368, 368, 368, 368, 368, - 384, 384, 384, 384, 108, 378, 378, 378, 378, 378, - 378, 378, 384, 108, 372, 372, 372, 372, 372, 372, - 372, 384, 108, 379, 379, 379, 379, 379, 380, 378, - - 384, 384, 384, 76, 381, 381, 381, 381, 381, 381, - 381, 384, 76, 375, 375, 375, 375, 375, 375, 375, - 384, 76, 382, 382, 382, 382, 382, 383, 381, 384, - 384, 384, 108, 378, 378, 378, 378, 378, 378, 378, - 384, 108, 378, 378, 378, 378, 378, 378, 384, 384, - 108, 381, 381, 381, 381, 381, 381, 381, 384, 384, - 384, 76, 381, 381, 381, 381, 381, 381, 384, 384, - 76, 384, 384, 384, 384, 384, 384, 384, 384, 108, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 108, 60, 60, 60, 60, 60, 60, 60, 21, 21, - - 21, 21, 21, 21, 21, 68, 68, 68, 68, 68, - 68, 68, 75, 384, 384, 384, 384, 75, 75, 79, - 79, 79, 79, 79, 79, 79, 81, 384, 384, 384, - 384, 81, 81, 83, 384, 384, 384, 384, 83, 83, - 85, 384, 85, 384, 384, 85, 85, 107, 384, 384, - 384, 384, 107, 107, 110, 384, 384, 384, 384, 110, - 110, 112, 384, 384, 384, 384, 112, 112, 114, 384, - 114, 384, 384, 114, 114, 129, 384, 129, 129, 384, - 384, 129, 136, 384, 136, 384, 136, 136, 136, 138, - 138, 138, 138, 138, 138, 138, 143, 143, 143, 143, - - 143, 143, 143, 86, 384, 86, 384, 384, 86, 86, - 139, 139, 139, 139, 139, 139, 139, 323, 384, 384, - 384, 384, 323, 323, 325, 384, 384, 384, 384, 325, - 325, 339, 339, 339, 339, 339, 339, 339, 13, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384 - + 43, 43, 43, 58, 43, 43, 15, 62, 63, 81, + 64, 15, 62, 63, 77, 64, 65, 138, 100, 87, + 89, 65, 81, 87, 87, 161, 77, 65, 64, 77, + 138, 100, 65, 64, 109, 77, 162, 164, 77, 89, + 87, 90, 90, 90, 90, 90, 90, 90, 66, 163, + + 77, 117, 109, 66, 15, 16, 17, 175, 18, 88, + 89, 160, 91, 91, 91, 91, 91, 91, 91, 77, + 110, 102, 77, 110, 110, 110, 110, 110, 110, 110, + 110, 109, 345, 110, 110, 110, 110, 110, 110, 110, + 77, 138, 100, 138, 100, 81, 67, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 15, 16, 17, 89, 18, 92, 92, + 92, 92, 92, 93, 90, 331, 76, 77, 76, 77, + 76, 171, 76, 76, 172, 109, 76, 173, 178, 193, + 194, 77, 195, 196, 138, 100, 77, 76, 76, 76, + + 77, 329, 197, 77, 223, 67, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 15, 16, 17, 70, 18, 179, 109, 77, + 87, 71, 72, 73, 87, 87, 141, 269, 131, 77, + 209, 87, 131, 131, 74, 87, 87, 81, 81, 345, + 117, 87, 118, 118, 118, 118, 118, 118, 118, 131, + 210, 143, 87, 180, 75, 15, 16, 17, 70, 18, + 116, 182, 77, 198, 71, 72, 73, 195, 132, 87, + 109, 88, 77, 87, 87, 214, 117, 74, 119, 119, + 119, 119, 119, 119, 119, 77, 77, 195, 222, 179, + + 87, 77, 181, 109, 245, 109, 215, 75, 76, 214, + 195, 224, 76, 279, 76, 331, 109, 76, 76, 116, + 76, 76, 76, 94, 94, 94, 94, 94, 94, 94, + 215, 329, 178, 76, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 77, 94, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 99, 100, + 76, 179, 76, 214, 76, 76, 234, 117, 76, 120, + 120, 120, 120, 120, 121, 118, 246, 109, 140, 76, + 76, 76, 140, 233, 215, 77, 77, 109, 140, 77, + + 244, 309, 258, 77, 109, 247, 77, 109, 108, 82, + 140, 82, 108, 82, 108, 82, 82, 108, 108, 82, + 108, 108, 108, 122, 122, 122, 122, 122, 122, 122, + 82, 82, 82, 108, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 109, 122, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 127, 100, + 108, 81, 108, 77, 108, 108, 316, 81, 108, 77, + 77, 263, 271, 267, 135, 100, 136, 291, 137, 108, + 108, 108, 136, 248, 137, 272, 280, 143, 143, 87, + + 140, 143, 264, 87, 268, 137, 137, 143, 84, 87, + 84, 263, 84, 77, 84, 84, 267, 270, 84, 143, + 87, 87, 285, 109, 290, 77, 137, 109, 289, 84, + 84, 84, 264, 263, 86, 77, 76, 268, 86, 144, + 76, 76, 300, 286, 86, 150, 151, 152, 150, 150, + 150, 150, 293, 77, 264, 86, 86, 76, 89, 305, + 90, 90, 90, 90, 90, 90, 90, 292, 308, 81, + 308, 81, 89, 77, 90, 90, 90, 90, 90, 90, + 90, 109, 77, 326, 267, 317, 299, 89, 77, 90, + 90, 90, 90, 90, 90, 332, 327, 108, 298, 108, + + 285, 108, 77, 108, 108, 268, 111, 108, 111, 288, + 111, 287, 111, 111, 285, 77, 111, 77, 108, 108, + 108, 286, 278, 306, 277, 109, 306, 111, 111, 111, + 113, 276, 113, 324, 113, 286, 113, 113, 306, 115, + 113, 108, 266, 115, 307, 108, 108, 307, 265, 115, + 324, 113, 113, 113, 325, 262, 257, 256, 351, 307, + 115, 115, 108, 166, 167, 168, 166, 166, 166, 166, + 117, 325, 118, 118, 118, 118, 118, 118, 118, 117, + 324, 118, 118, 118, 118, 118, 118, 118, 77, 255, + 117, 109, 118, 118, 118, 118, 118, 118, 131, 356, + + 109, 325, 131, 131, 130, 367, 76, 254, 130, 109, + 76, 76, 143, 143, 130, 177, 143, 253, 243, 131, + 109, 242, 143, 241, 240, 130, 130, 76, 239, 109, + 232, 231, 372, 230, 143, 77, 229, 182, 132, 183, + 183, 183, 183, 183, 183, 183, 280, 281, 281, 281, + 281, 281, 281, 182, 144, 184, 184, 184, 184, 184, + 184, 184, 109, 343, 343, 343, 182, 77, 185, 185, + 185, 185, 185, 186, 183, 77, 228, 220, 219, 218, + 217, 216, 198, 77, 199, 199, 199, 199, 199, 199, + 199, 77, 141, 208, 207, 198, 77, 200, 200, 200, + + 200, 200, 200, 200, 293, 294, 294, 294, 294, 294, + 294, 198, 109, 201, 201, 201, 201, 201, 202, 199, + 143, 143, 131, 177, 143, 109, 131, 350, 350, 350, + 143, 206, 131, 109, 205, 143, 143, 204, 180, 143, + 203, 109, 143, 131, 131, 143, 211, 212, 213, 211, + 211, 211, 211, 192, 191, 109, 317, 143, 343, 343, + 343, 182, 144, 183, 183, 183, 183, 183, 183, 183, + 190, 189, 188, 187, 77, 141, 182, 144, 183, 183, + 183, 183, 183, 183, 183, 332, 77, 350, 350, 350, + 182, 77, 183, 183, 183, 183, 183, 183, 225, 226, + + 227, 225, 225, 225, 225, 198, 77, 199, 199, 199, + 199, 199, 199, 199, 141, 109, 134, 176, 129, 174, + 77, 170, 169, 114, 112, 198, 109, 199, 199, 199, + 199, 199, 199, 199, 198, 109, 199, 199, 199, 199, + 199, 199, 234, 109, 235, 235, 235, 235, 235, 235, + 235, 158, 154, 153, 234, 109, 236, 236, 236, 236, + 236, 236, 236, 234, 109, 237, 237, 237, 237, 237, + 238, 235, 77, 248, 149, 249, 249, 249, 249, 249, + 249, 249, 85, 248, 77, 250, 250, 250, 250, 250, + 250, 250, 248, 77, 251, 251, 251, 251, 251, 252, + + 249, 83, 81, 109, 259, 260, 261, 259, 259, 259, + 259, 79, 234, 109, 235, 235, 235, 235, 235, 235, + 235, 234, 109, 235, 235, 235, 235, 235, 235, 235, + 78, 234, 77, 235, 235, 235, 235, 235, 235, 77, + 141, 134, 77, 273, 274, 275, 273, 273, 273, 273, + 248, 77, 249, 249, 249, 249, 249, 249, 249, 129, + 248, 77, 249, 249, 249, 249, 249, 249, 249, 126, + 248, 109, 249, 249, 249, 249, 249, 249, 125, 124, + 109, 280, 281, 281, 281, 281, 281, 281, 281, 123, + 109, 280, 282, 282, 282, 282, 282, 282, 282, 114, + + 109, 280, 283, 283, 283, 283, 283, 284, 281, 112, + 77, 293, 294, 294, 294, 294, 294, 294, 294, 109, + 77, 293, 295, 295, 295, 295, 295, 295, 295, 107, + 77, 293, 296, 296, 296, 296, 296, 297, 294, 106, + 109, 301, 302, 303, 304, 301, 301, 301, 105, 104, + 109, 280, 281, 281, 281, 281, 281, 281, 281, 103, + 109, 280, 281, 281, 281, 281, 281, 281, 281, 77, + 310, 312, 313, 314, 315, 312, 312, 312, 98, 317, + 77, 318, 318, 318, 318, 318, 318, 318, 97, 310, + 77, 310, 311, 96, 95, 85, 83, 81, 79, 109, + + 293, 294, 294, 294, 294, 294, 294, 294, 78, 77, + 77, 293, 294, 294, 294, 294, 294, 294, 294, 317, + 77, 319, 319, 319, 319, 319, 319, 319, 317, 109, + 320, 320, 320, 320, 320, 321, 322, 389, 389, 317, + 109, 323, 323, 323, 318, 318, 318, 318, 332, 77, + 333, 333, 333, 333, 333, 333, 333, 332, 77, 334, + 334, 334, 334, 334, 334, 334, 389, 389, 332, 77, + 335, 335, 335, 335, 335, 336, 337, 332, 109, 338, + 338, 338, 333, 333, 333, 333, 389, 109, 339, 340, + 341, 339, 339, 339, 339, 389, 389, 317, 109, 322, + + 322, 322, 322, 322, 322, 322, 317, 109, 322, 322, + 322, 322, 322, 322, 322, 317, 77, 322, 322, 322, + 322, 322, 322, 342, 389, 389, 317, 77, 342, 342, + 342, 342, 342, 342, 342, 389, 77, 328, 389, 328, + 389, 328, 389, 328, 328, 77, 389, 328, 346, 347, + 348, 346, 346, 346, 346, 389, 77, 389, 328, 328, + 328, 330, 389, 330, 389, 330, 389, 330, 330, 389, + 389, 330, 389, 389, 389, 389, 109, 389, 389, 389, + 389, 389, 330, 330, 330, 332, 389, 337, 337, 337, + 337, 337, 337, 337, 332, 389, 337, 337, 337, 337, + + 337, 337, 337, 332, 389, 337, 337, 337, 337, 337, + 337, 349, 389, 389, 332, 109, 349, 349, 349, 349, + 349, 349, 349, 351, 109, 352, 352, 352, 352, 352, + 352, 352, 351, 109, 353, 353, 353, 353, 353, 353, + 353, 389, 389, 351, 109, 354, 354, 354, 354, 354, + 355, 352, 389, 77, 342, 342, 342, 342, 342, 342, + 342, 356, 77, 357, 357, 357, 357, 357, 357, 357, + 389, 389, 356, 77, 358, 358, 358, 358, 358, 358, + 358, 356, 77, 359, 359, 359, 359, 359, 360, 357, + 389, 109, 349, 349, 349, 349, 349, 349, 349, 389, + + 389, 389, 109, 361, 362, 363, 361, 361, 361, 361, + 351, 109, 352, 352, 352, 352, 352, 352, 352, 351, + 109, 352, 352, 352, 352, 352, 352, 352, 389, 389, + 351, 77, 352, 352, 352, 352, 352, 352, 389, 389, + 77, 364, 365, 366, 364, 364, 364, 364, 356, 77, + 357, 357, 357, 357, 357, 357, 357, 389, 389, 356, + 77, 357, 357, 357, 357, 357, 357, 357, 356, 109, + 357, 357, 357, 357, 357, 357, 389, 367, 109, 368, + 368, 368, 368, 368, 368, 368, 389, 389, 367, 109, + 369, 369, 369, 369, 369, 369, 369, 367, 109, 370, + + 370, 370, 370, 370, 371, 368, 372, 77, 373, 373, + 373, 373, 373, 373, 373, 389, 389, 372, 77, 374, + 374, 374, 374, 374, 374, 374, 372, 77, 375, 375, + 375, 375, 375, 376, 373, 389, 109, 377, 378, 379, + 377, 377, 377, 377, 389, 389, 367, 109, 368, 368, + 368, 368, 368, 368, 368, 367, 109, 368, 368, 368, + 368, 368, 368, 368, 367, 77, 368, 368, 368, 368, + 368, 368, 389, 389, 389, 389, 77, 380, 381, 382, + 380, 380, 380, 380, 372, 77, 373, 373, 373, 373, + 373, 373, 373, 372, 77, 373, 373, 373, 373, 373, + + 373, 373, 389, 389, 372, 109, 373, 373, 373, 373, + 373, 373, 389, 389, 109, 383, 383, 383, 383, 383, + 383, 383, 389, 109, 377, 377, 377, 377, 377, 377, + 377, 389, 389, 389, 109, 384, 384, 384, 384, 384, + 385, 383, 389, 77, 386, 386, 386, 386, 386, 386, + 386, 389, 77, 380, 380, 380, 380, 380, 380, 380, + 389, 389, 389, 77, 387, 387, 387, 387, 387, 388, + 386, 389, 109, 383, 383, 383, 383, 383, 383, 383, + 389, 109, 383, 383, 383, 383, 383, 383, 389, 389, + 389, 389, 109, 386, 386, 386, 386, 386, 386, 386, + + 389, 77, 386, 386, 386, 386, 386, 386, 389, 389, + 77, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 109, 389, 389, 389, 389, 389, 389, 389, 389, + 109, 61, 61, 61, 61, 61, 61, 61, 21, 21, + 21, 21, 21, 21, 21, 69, 69, 69, 69, 69, + 69, 69, 76, 389, 389, 389, 389, 76, 76, 80, + 80, 80, 80, 80, 80, 80, 82, 389, 389, 389, + 389, 82, 82, 84, 389, 389, 389, 389, 84, 84, + 86, 389, 86, 389, 389, 86, 86, 108, 389, 389, + 389, 389, 108, 108, 111, 389, 389, 389, 389, 111, + + 111, 113, 389, 389, 389, 389, 113, 113, 115, 389, + 115, 389, 389, 115, 115, 130, 389, 130, 389, 389, + 130, 130, 133, 389, 133, 133, 389, 389, 133, 140, + 389, 140, 389, 140, 140, 140, 142, 142, 142, 142, + 142, 142, 142, 147, 147, 147, 147, 147, 147, 147, + 87, 389, 87, 389, 389, 87, 87, 131, 389, 131, + 389, 389, 131, 131, 143, 143, 143, 143, 143, 143, + 143, 328, 389, 389, 389, 389, 328, 328, 330, 389, + 389, 389, 389, 330, 330, 344, 344, 344, 344, 344, + 344, 344, 13, 389, 389, 389, 389, 389, 389, 389, + + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389 } ; -static yyconst short int yy_chk[2100] = +static yyconst short int yy_chk[2154] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -720,231 +728,237 @@ static yyconst short int yy_chk[2100] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 5, 6, 36, 58, 5, 6, 5, 6, 44, - 66, 66, 44, 44, 44, 44, 44, 44, 44, 36, - 58, 74, 74, 2, 2, 96, 2, 106, 96, 100, - 398, 96, 2, 106, 100, 2, 3, 3, 3, 3, + 2, 5, 6, 36, 58, 5, 6, 5, 6, 67, + 67, 71, 107, 73, 5, 6, 75, 75, 107, 36, + 58, 193, 97, 2, 2, 97, 2, 193, 97, 101, + 404, 71, 2, 73, 101, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 7, 7, 7, 70, - 7, 8, 8, 8, 381, 8, 7, 72, 378, 24, - 89, 8, 37, 24, 24, 101, 127, 7, 7, 70, - 48, 127, 8, 8, 48, 48, 191, 72, 102, 25, - 24, 25, 25, 25, 25, 25, 25, 25, 7, 102, - - 89, 48, 191, 8, 9, 9, 9, 117, 9, 24, - 26, 104, 26, 26, 26, 26, 26, 26, 26, 25, - 48, 37, 76, 103, 76, 104, 76, 101, 76, 76, - 103, 105, 76, 98, 98, 124, 156, 117, 124, 240, - 26, 124, 105, 76, 76, 76, 9, 9, 9, 9, + 3, 3, 3, 3, 3, 3, 7, 7, 7, 102, + 7, 8, 8, 8, 103, 8, 7, 135, 135, 24, + 90, 8, 37, 24, 24, 103, 106, 7, 7, 104, + 99, 99, 8, 8, 386, 105, 104, 106, 383, 25, + 24, 25, 25, 25, 25, 25, 25, 25, 7, 105, + + 90, 118, 128, 8, 9, 9, 9, 128, 9, 24, + 26, 102, 26, 26, 26, 26, 26, 26, 26, 25, + 44, 37, 99, 44, 44, 44, 44, 44, 44, 44, + 110, 118, 344, 110, 110, 110, 110, 110, 110, 110, + 26, 138, 138, 127, 127, 160, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 27, 10, 27, 27, - 27, 27, 27, 27, 27, 98, 82, 158, 82, 158, - 82, 156, 82, 82, 109, 240, 82, 109, 109, 109, - 109, 109, 109, 109, 131, 131, 27, 82, 82, 82, + 27, 27, 27, 27, 27, 330, 77, 159, 77, 165, + 77, 125, 77, 77, 125, 127, 77, 125, 143, 159, + 160, 162, 165, 162, 148, 148, 27, 77, 77, 77, - 126, 126, 134, 134, 339, 10, 10, 10, 10, 10, + 164, 328, 164, 195, 195, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 11, 11, 11, 11, 11, 325, 144, 144, - 323, 11, 11, 11, 88, 88, 88, 88, 88, 88, - 88, 139, 126, 49, 11, 49, 49, 49, 49, 49, - 49, 49, 50, 322, 50, 50, 50, 50, 50, 50, - 50, 140, 88, 140, 11, 12, 12, 12, 12, 12, - 144, 174, 157, 49, 12, 12, 12, 157, 218, 85, - 139, 159, 50, 85, 85, 155, 51, 12, 51, 51, - 51, 51, 51, 51, 51, 218, 159, 155, 161, 160, - - 85, 160, 140, 171, 190, 190, 321, 12, 30, 182, - 174, 161, 30, 306, 30, 171, 51, 30, 30, 85, + 10, 10, 11, 11, 11, 11, 11, 143, 175, 244, + 48, 11, 11, 11, 48, 48, 148, 244, 60, 327, + 175, 86, 60, 60, 11, 86, 86, 222, 194, 326, + 49, 48, 49, 49, 49, 49, 49, 49, 49, 60, + 179, 144, 86, 144, 11, 12, 12, 12, 12, 12, + 48, 183, 161, 199, 12, 12, 12, 161, 60, 115, + 49, 86, 163, 115, 115, 187, 50, 12, 50, 50, + 50, 50, 50, 50, 50, 196, 197, 163, 194, 179, + + 115, 183, 144, 199, 222, 258, 187, 12, 30, 203, + 197, 196, 30, 258, 30, 311, 50, 30, 30, 115, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 182, 189, 305, 30, 30, 30, 30, 30, 30, 30, + 203, 310, 210, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 35, 35, - 35, 188, 35, 192, 35, 35, 204, 188, 35, 216, - 295, 189, 204, 228, 216, 219, 293, 192, 228, 35, - 35, 35, 52, 84, 219, 84, 52, 84, 52, 84, + 35, 210, 35, 214, 35, 35, 235, 51, 35, 51, + 51, 51, 51, 51, 51, 51, 223, 209, 141, 35, + 35, 35, 141, 209, 214, 221, 224, 233, 141, 291, - 84, 52, 52, 84, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 84, 84, 84, 52, 52, 52, + 221, 291, 233, 223, 300, 224, 235, 51, 52, 83, + 141, 83, 52, 83, 52, 83, 83, 52, 52, 83, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 83, 83, 83, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 57, 57, 57, 217, 57, 137, 57, 57, - 284, 137, 57, 285, 285, 178, 267, 137, 65, 65, - 65, 194, 65, 57, 57, 57, 65, 205, 65, 137, - 267, 69, 69, 145, 69, 69, 198, 145, 209, 65, - 65, 69, 87, 145, 87, 178, 87, 235, 87, 87, - - 238, 194, 87, 69, 145, 145, 282, 198, 241, 209, - 65, 230, 217, 87, 87, 87, 205, 241, 235, 244, - 265, 238, 90, 69, 90, 90, 90, 90, 90, 90, - 90, 91, 273, 91, 91, 91, 91, 91, 91, 91, - 92, 230, 92, 92, 92, 92, 92, 92, 239, 244, - 242, 276, 90, 108, 272, 108, 239, 108, 249, 108, - 108, 91, 111, 108, 111, 242, 111, 265, 111, 111, - 92, 261, 111, 114, 108, 108, 108, 114, 114, 249, - 276, 253, 252, 111, 111, 111, 113, 260, 113, 253, - 113, 257, 113, 113, 114, 115, 113, 115, 286, 115, - - 286, 115, 115, 252, 251, 115, 258, 113, 113, 113, - 250, 248, 257, 114, 237, 262, 115, 115, 115, 116, - 116, 116, 116, 116, 116, 116, 118, 258, 118, 118, - 118, 118, 118, 118, 118, 119, 262, 119, 119, 119, - 119, 119, 119, 119, 264, 313, 120, 116, 120, 120, - 120, 120, 120, 120, 266, 236, 118, 138, 138, 264, - 138, 138, 266, 304, 234, 119, 146, 138, 146, 146, - 146, 146, 146, 146, 146, 313, 120, 304, 147, 138, - 147, 147, 147, 147, 147, 147, 147, 148, 227, 148, - 148, 148, 148, 148, 148, 148, 146, 226, 162, 138, - - 162, 162, 162, 162, 162, 162, 162, 163, 147, 163, - 163, 163, 163, 163, 163, 163, 164, 148, 164, 164, - 164, 164, 164, 164, 164, 225, 175, 175, 162, 175, - 175, 176, 176, 224, 176, 176, 175, 163, 289, 328, - 271, 176, 280, 283, 294, 300, 164, 274, 175, 287, - 301, 287, 287, 176, 177, 177, 177, 177, 177, 177, - 177, 271, 274, 280, 283, 294, 300, 289, 175, 328, - 287, 301, 179, 176, 179, 179, 179, 179, 179, 179, - 179, 180, 177, 180, 180, 180, 180, 180, 180, 180, - 181, 223, 181, 181, 181, 181, 181, 181, 347, 352, - - 215, 214, 179, 193, 193, 193, 193, 193, 193, 193, - 195, 180, 195, 195, 195, 195, 195, 195, 195, 196, - 181, 196, 196, 196, 196, 196, 196, 196, 347, 352, - 197, 193, 197, 197, 197, 197, 197, 197, 213, 206, - 195, 206, 206, 206, 206, 206, 206, 206, 207, 196, - 207, 207, 207, 207, 207, 207, 207, 363, 212, 208, - 197, 208, 208, 208, 208, 208, 208, 208, 220, 206, - 220, 220, 220, 220, 220, 220, 220, 221, 207, 221, - 221, 221, 221, 221, 221, 221, 368, 363, 222, 208, - 222, 222, 222, 222, 222, 222, 222, 211, 220, 229, - - 229, 229, 229, 229, 229, 229, 231, 221, 231, 231, - 231, 231, 231, 231, 231, 203, 368, 232, 222, 232, - 232, 232, 232, 232, 232, 232, 233, 229, 233, 233, - 233, 233, 233, 233, 202, 201, 231, 243, 243, 243, - 243, 243, 243, 243, 200, 199, 245, 232, 245, 245, - 245, 245, 245, 245, 245, 246, 233, 246, 246, 246, - 246, 246, 246, 246, 247, 243, 247, 247, 247, 247, - 247, 247, 187, 186, 185, 184, 245, 254, 254, 254, - 254, 254, 254, 254, 254, 246, 255, 255, 255, 255, - 255, 255, 255, 255, 247, 256, 256, 256, 256, 256, - - 256, 256, 256, 183, 172, 170, 254, 268, 268, 268, - 268, 268, 268, 268, 268, 255, 269, 269, 269, 269, - 269, 269, 269, 269, 256, 270, 270, 270, 270, 270, - 270, 270, 270, 169, 168, 167, 268, 275, 275, 275, - 275, 275, 275, 275, 166, 269, 277, 277, 277, 277, - 277, 277, 277, 277, 270, 278, 278, 278, 278, 278, - 278, 278, 278, 165, 154, 275, 279, 279, 279, 279, - 279, 279, 279, 311, 153, 277, 288, 288, 288, 288, - 288, 288, 288, 152, 278, 290, 290, 290, 290, 290, - 290, 290, 290, 151, 311, 279, 291, 291, 291, 291, - - 291, 291, 291, 291, 288, 292, 292, 292, 292, 292, - 292, 292, 150, 296, 290, 296, 296, 296, 296, 296, - 296, 296, 149, 143, 297, 291, 297, 297, 297, 297, - 297, 297, 297, 298, 292, 298, 298, 298, 298, 298, - 298, 298, 299, 296, 299, 299, 299, 299, 299, 299, - 299, 303, 303, 307, 297, 307, 307, 307, 307, 307, - 307, 307, 136, 298, 303, 130, 128, 125, 123, 122, - 112, 308, 299, 308, 308, 308, 308, 308, 308, 308, - 110, 107, 309, 307, 309, 309, 309, 309, 309, 309, - 309, 310, 97, 310, 310, 310, 310, 310, 310, 310, - - 95, 308, 312, 312, 312, 312, 312, 312, 312, 94, - 86, 314, 309, 314, 314, 314, 314, 314, 314, 314, - 315, 310, 315, 315, 315, 315, 315, 315, 315, 316, - 312, 316, 316, 316, 316, 316, 316, 316, 83, 319, - 317, 314, 317, 317, 317, 317, 317, 317, 317, 318, - 315, 318, 318, 318, 81, 79, 78, 77, 75, 316, - 319, 324, 68, 324, 62, 324, 59, 324, 324, 56, - 317, 324, 327, 327, 327, 327, 327, 327, 327, 318, - 55, 54, 324, 324, 324, 326, 53, 326, 47, 326, - 45, 326, 326, 43, 42, 326, 41, 40, 39, 38, - - 327, 34, 33, 32, 31, 22, 326, 326, 326, 329, - 19, 329, 329, 329, 329, 329, 329, 329, 330, 18, - 330, 330, 330, 330, 330, 330, 330, 331, 17, 331, - 331, 331, 331, 331, 331, 331, 15, 14, 332, 329, - 332, 332, 332, 332, 332, 332, 332, 333, 330, 333, - 333, 333, 13, 0, 0, 0, 334, 331, 334, 334, - 334, 334, 334, 334, 334, 0, 0, 335, 332, 335, - 335, 335, 335, 335, 335, 335, 336, 333, 336, 336, - 336, 336, 336, 336, 336, 0, 334, 337, 337, 337, - 337, 337, 337, 337, 338, 338, 338, 335, 0, 0, - - 0, 0, 345, 345, 345, 341, 336, 341, 341, 341, - 341, 341, 341, 341, 0, 337, 0, 0, 0, 0, - 0, 342, 338, 342, 342, 342, 342, 342, 342, 342, - 345, 0, 0, 0, 343, 341, 343, 343, 343, 343, - 343, 343, 343, 344, 344, 344, 344, 344, 344, 344, - 0, 342, 346, 346, 346, 346, 346, 346, 346, 0, - 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, - 348, 344, 348, 348, 348, 348, 348, 348, 348, 349, - 346, 349, 349, 349, 349, 349, 349, 349, 350, 0, - 350, 350, 350, 350, 350, 350, 0, 0, 0, 0, - - 348, 351, 351, 351, 351, 351, 351, 351, 353, 349, - 353, 353, 353, 353, 353, 353, 353, 354, 350, 354, - 354, 354, 354, 354, 354, 354, 0, 0, 355, 351, - 355, 355, 355, 355, 355, 355, 0, 356, 353, 356, - 356, 356, 356, 356, 356, 356, 357, 354, 357, 357, - 357, 357, 357, 357, 357, 0, 0, 358, 355, 358, - 358, 358, 358, 358, 358, 358, 359, 356, 359, 359, - 359, 359, 359, 359, 359, 360, 357, 360, 360, 360, - 360, 360, 360, 360, 0, 0, 361, 358, 361, 361, - 361, 361, 361, 361, 361, 0, 359, 362, 362, 362, - - 362, 362, 362, 362, 364, 360, 364, 364, 364, 364, - 364, 364, 364, 0, 0, 365, 361, 365, 365, 365, - 365, 365, 365, 365, 366, 362, 366, 366, 366, 366, - 366, 366, 0, 0, 364, 367, 367, 367, 367, 367, - 367, 367, 0, 0, 369, 365, 369, 369, 369, 369, - 369, 369, 369, 370, 366, 370, 370, 370, 370, 370, - 370, 370, 371, 367, 371, 371, 371, 371, 371, 371, - 0, 0, 0, 0, 369, 372, 372, 372, 372, 372, - 372, 372, 0, 370, 373, 373, 373, 373, 373, 373, - 373, 0, 371, 374, 374, 374, 374, 374, 374, 374, - - 0, 0, 0, 372, 375, 375, 375, 375, 375, 375, - 375, 0, 373, 376, 376, 376, 376, 376, 376, 376, - 0, 374, 377, 377, 377, 377, 377, 377, 377, 0, - 0, 0, 375, 379, 379, 379, 379, 379, 379, 379, - 0, 376, 380, 380, 380, 380, 380, 380, 0, 0, - 377, 382, 382, 382, 382, 382, 382, 382, 0, 0, - 0, 379, 383, 383, 383, 383, 383, 383, 0, 0, - 380, 0, 0, 0, 0, 0, 0, 0, 0, 382, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 383, 385, 385, 385, 385, 385, 385, 385, 386, 386, - - 386, 386, 386, 386, 386, 387, 387, 387, 387, 387, - 387, 387, 388, 0, 0, 0, 0, 388, 388, 389, - 389, 389, 389, 389, 389, 389, 390, 0, 0, 0, - 0, 390, 390, 391, 0, 0, 0, 0, 391, 391, - 392, 0, 392, 0, 0, 392, 392, 393, 0, 0, - 0, 0, 393, 393, 394, 0, 0, 0, 0, 394, - 394, 395, 0, 0, 0, 0, 395, 395, 396, 0, - 396, 0, 0, 396, 396, 397, 0, 397, 397, 0, - 0, 397, 399, 0, 399, 0, 399, 399, 399, 400, - 400, 400, 400, 400, 400, 400, 401, 401, 401, 401, - - 401, 401, 401, 402, 0, 402, 0, 0, 402, 402, - 403, 403, 403, 403, 403, 403, 403, 404, 0, 0, - 0, 0, 404, 404, 405, 0, 0, 0, 0, 405, - 405, 406, 406, 406, 406, 406, 406, 406, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 384 - + 52, 52, 52, 52, 52, 52, 52, 52, 57, 57, + 57, 245, 57, 246, 57, 57, 298, 270, 57, 271, + 247, 240, 246, 243, 66, 66, 66, 271, 66, 57, + 57, 57, 66, 249, 66, 247, 281, 70, 70, 149, + + 70, 70, 240, 149, 243, 66, 66, 70, 85, 149, + 85, 254, 85, 269, 85, 85, 257, 245, 85, 70, + 149, 149, 262, 249, 270, 281, 66, 279, 269, 85, + 85, 85, 254, 263, 88, 289, 88, 257, 88, 70, + 88, 88, 279, 262, 88, 89, 89, 89, 89, 89, + 89, 89, 294, 272, 263, 88, 88, 88, 91, 287, + 91, 91, 91, 91, 91, 91, 91, 272, 290, 290, + 308, 308, 92, 89, 92, 92, 92, 92, 92, 92, + 92, 294, 309, 308, 267, 318, 278, 93, 91, 93, + 93, 93, 93, 93, 93, 333, 309, 109, 277, 109, + + 276, 109, 92, 109, 109, 267, 112, 109, 112, 266, + 112, 265, 112, 112, 285, 318, 112, 93, 109, 109, + 109, 276, 256, 288, 255, 333, 299, 112, 112, 112, + 114, 253, 114, 305, 114, 285, 114, 114, 306, 116, + 114, 116, 242, 116, 288, 116, 116, 299, 241, 116, + 316, 114, 114, 114, 305, 239, 232, 231, 352, 306, + 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, + 119, 316, 119, 119, 119, 119, 119, 119, 119, 120, + 324, 120, 120, 120, 120, 120, 120, 120, 352, 230, + 121, 117, 121, 121, 121, 121, 121, 121, 130, 357, + + 119, 324, 130, 130, 132, 368, 132, 229, 132, 120, + 132, 132, 142, 142, 132, 142, 142, 228, 220, 130, + 121, 219, 142, 218, 217, 132, 132, 132, 216, 357, + 208, 207, 373, 206, 142, 368, 205, 150, 130, 150, + 150, 150, 150, 150, 150, 150, 284, 284, 284, 284, + 284, 284, 284, 151, 142, 151, 151, 151, 151, 151, + 151, 151, 373, 343, 343, 343, 152, 150, 152, 152, + 152, 152, 152, 152, 152, 284, 204, 192, 191, 190, + 189, 188, 166, 151, 166, 166, 166, 166, 166, 166, + 166, 343, 177, 174, 173, 167, 152, 167, 167, 167, + + 167, 167, 167, 167, 297, 297, 297, 297, 297, 297, + 297, 168, 166, 168, 168, 168, 168, 168, 168, 168, + 180, 180, 176, 180, 180, 167, 176, 350, 350, 350, + 180, 172, 176, 297, 171, 181, 181, 170, 181, 181, + 169, 168, 180, 176, 176, 181, 182, 182, 182, 182, + 182, 182, 182, 158, 157, 350, 323, 181, 323, 323, + 323, 184, 180, 184, 184, 184, 184, 184, 184, 184, + 156, 155, 154, 153, 182, 147, 185, 181, 185, 185, + 185, 185, 185, 185, 185, 338, 323, 338, 338, 338, + 186, 184, 186, 186, 186, 186, 186, 186, 198, 198, + + 198, 198, 198, 198, 198, 200, 185, 200, 200, 200, + 200, 200, 200, 200, 140, 338, 134, 131, 129, 126, + 186, 124, 123, 113, 111, 201, 198, 201, 201, 201, + 201, 201, 201, 201, 202, 200, 202, 202, 202, 202, + 202, 202, 211, 108, 211, 211, 211, 211, 211, 211, + 211, 98, 96, 95, 212, 201, 212, 212, 212, 212, + 212, 212, 212, 213, 202, 213, 213, 213, 213, 213, + 213, 213, 211, 225, 87, 225, 225, 225, 225, 225, + 225, 225, 84, 226, 212, 226, 226, 226, 226, 226, + 226, 226, 227, 213, 227, 227, 227, 227, 227, 227, + + 227, 82, 80, 225, 234, 234, 234, 234, 234, 234, + 234, 79, 236, 226, 236, 236, 236, 236, 236, 236, + 236, 237, 227, 237, 237, 237, 237, 237, 237, 237, + 78, 238, 234, 238, 238, 238, 238, 238, 238, 76, + 69, 63, 236, 248, 248, 248, 248, 248, 248, 248, + 250, 237, 250, 250, 250, 250, 250, 250, 250, 59, + 251, 238, 251, 251, 251, 251, 251, 251, 251, 56, + 252, 248, 252, 252, 252, 252, 252, 252, 55, 54, + 250, 259, 259, 259, 259, 259, 259, 259, 259, 53, + 251, 260, 260, 260, 260, 260, 260, 260, 260, 47, + + 252, 261, 261, 261, 261, 261, 261, 261, 261, 45, + 259, 273, 273, 273, 273, 273, 273, 273, 273, 43, + 260, 274, 274, 274, 274, 274, 274, 274, 274, 42, + 261, 275, 275, 275, 275, 275, 275, 275, 275, 41, + 273, 280, 280, 280, 280, 280, 280, 280, 40, 39, + 274, 282, 282, 282, 282, 282, 282, 282, 282, 38, + 275, 283, 283, 283, 283, 283, 283, 283, 283, 280, + 292, 293, 293, 293, 293, 293, 293, 293, 34, 301, + 282, 301, 301, 301, 301, 301, 301, 301, 33, 292, + 283, 292, 292, 32, 31, 22, 19, 18, 17, 293, + + 295, 295, 295, 295, 295, 295, 295, 295, 15, 301, + 292, 296, 296, 296, 296, 296, 296, 296, 296, 302, + 14, 302, 302, 302, 302, 302, 302, 302, 303, 295, + 303, 303, 303, 303, 303, 303, 303, 13, 0, 304, + 296, 304, 304, 304, 304, 304, 304, 304, 312, 302, + 312, 312, 312, 312, 312, 312, 312, 313, 303, 313, + 313, 313, 313, 313, 313, 313, 0, 0, 314, 304, + 314, 314, 314, 314, 314, 314, 314, 315, 312, 315, + 315, 315, 315, 315, 315, 315, 0, 313, 317, 317, + 317, 317, 317, 317, 317, 0, 0, 319, 314, 319, + + 319, 319, 319, 319, 319, 319, 320, 315, 320, 320, + 320, 320, 320, 320, 320, 321, 317, 321, 321, 321, + 321, 321, 321, 321, 0, 0, 322, 319, 322, 322, + 322, 322, 322, 322, 322, 0, 320, 329, 0, 329, + 0, 329, 0, 329, 329, 321, 0, 329, 332, 332, + 332, 332, 332, 332, 332, 0, 322, 0, 329, 329, + 329, 331, 0, 331, 0, 331, 0, 331, 331, 0, + 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, + 0, 0, 331, 331, 331, 334, 0, 334, 334, 334, + 334, 334, 334, 334, 335, 0, 335, 335, 335, 335, + + 335, 335, 335, 336, 0, 336, 336, 336, 336, 336, + 336, 336, 0, 0, 337, 334, 337, 337, 337, 337, + 337, 337, 337, 339, 335, 339, 339, 339, 339, 339, + 339, 339, 340, 336, 340, 340, 340, 340, 340, 340, + 340, 0, 0, 341, 337, 341, 341, 341, 341, 341, + 341, 341, 0, 339, 342, 342, 342, 342, 342, 342, + 342, 346, 340, 346, 346, 346, 346, 346, 346, 346, + 0, 0, 347, 341, 347, 347, 347, 347, 347, 347, + 347, 348, 342, 348, 348, 348, 348, 348, 348, 348, + 0, 346, 349, 349, 349, 349, 349, 349, 349, 0, + + 0, 0, 347, 351, 351, 351, 351, 351, 351, 351, + 353, 348, 353, 353, 353, 353, 353, 353, 353, 354, + 349, 354, 354, 354, 354, 354, 354, 354, 0, 0, + 355, 351, 355, 355, 355, 355, 355, 355, 0, 0, + 353, 356, 356, 356, 356, 356, 356, 356, 358, 354, + 358, 358, 358, 358, 358, 358, 358, 0, 0, 359, + 355, 359, 359, 359, 359, 359, 359, 359, 360, 356, + 360, 360, 360, 360, 360, 360, 0, 361, 358, 361, + 361, 361, 361, 361, 361, 361, 0, 0, 362, 359, + 362, 362, 362, 362, 362, 362, 362, 363, 360, 363, + + 363, 363, 363, 363, 363, 363, 364, 361, 364, 364, + 364, 364, 364, 364, 364, 0, 0, 365, 362, 365, + 365, 365, 365, 365, 365, 365, 366, 363, 366, 366, + 366, 366, 366, 366, 366, 0, 364, 367, 367, 367, + 367, 367, 367, 367, 0, 0, 369, 365, 369, 369, + 369, 369, 369, 369, 369, 370, 366, 370, 370, 370, + 370, 370, 370, 370, 371, 367, 371, 371, 371, 371, + 371, 371, 0, 0, 0, 0, 369, 372, 372, 372, + 372, 372, 372, 372, 374, 370, 374, 374, 374, 374, + 374, 374, 374, 375, 371, 375, 375, 375, 375, 375, + + 375, 375, 0, 0, 376, 372, 376, 376, 376, 376, + 376, 376, 0, 0, 374, 377, 377, 377, 377, 377, + 377, 377, 0, 375, 378, 378, 378, 378, 378, 378, + 378, 0, 0, 0, 376, 379, 379, 379, 379, 379, + 379, 379, 0, 377, 380, 380, 380, 380, 380, 380, + 380, 0, 378, 381, 381, 381, 381, 381, 381, 381, + 0, 0, 0, 379, 382, 382, 382, 382, 382, 382, + 382, 0, 380, 384, 384, 384, 384, 384, 384, 384, + 0, 381, 385, 385, 385, 385, 385, 385, 0, 0, + 0, 0, 382, 387, 387, 387, 387, 387, 387, 387, + + 0, 384, 388, 388, 388, 388, 388, 388, 0, 0, + 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, + 388, 390, 390, 390, 390, 390, 390, 390, 391, 391, + 391, 391, 391, 391, 391, 392, 392, 392, 392, 392, + 392, 392, 393, 0, 0, 0, 0, 393, 393, 394, + 394, 394, 394, 394, 394, 394, 395, 0, 0, 0, + 0, 395, 395, 396, 0, 0, 0, 0, 396, 396, + 397, 0, 397, 0, 0, 397, 397, 398, 0, 0, + 0, 0, 398, 398, 399, 0, 0, 0, 0, 399, + + 399, 400, 0, 0, 0, 0, 400, 400, 401, 0, + 401, 0, 0, 401, 401, 402, 0, 402, 0, 0, + 402, 402, 403, 0, 403, 403, 0, 0, 403, 405, + 0, 405, 0, 405, 405, 405, 406, 406, 406, 406, + 406, 406, 406, 407, 407, 407, 407, 407, 407, 407, + 408, 0, 408, 0, 0, 408, 408, 409, 0, 409, + 0, 0, 409, 409, 410, 410, 410, 410, 410, 410, + 410, 411, 0, 0, 0, 0, 411, 411, 412, 0, + 0, 0, 0, 412, 412, 413, 413, 413, 413, 413, + 413, 413, 389, 389, 389, 389, 389, 389, 389, 389, + + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389 } ; static yy_state_type yy_last_accepting_state; @@ -1055,7 +1069,7 @@ extern void yyerror __P((const char *)); #define INDEFS 5 -#line 1059 "toke.c" +#line 1073 "toke.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1209,9 +1223,9 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 103 "toke.l" +#line 104 "toke.l" -#line 1215 "toke.c" +#line 1229 "toke.c" if ( yy_init ) { @@ -1263,13 +1277,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 385 ) + if ( yy_current_state >= 390 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 2039 ); + while ( yy_base[yy_current_state] != 2093 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1297,12 +1311,12 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 104 "toke.l" +#line 105 "toke.l" BEGIN STARTDEFS; YY_BREAK case 2: YY_RULE_SETUP -#line 106 "toke.l" +#line 107 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -1314,7 +1328,7 @@ YY_RULE_SETUP case 3: YY_RULE_SETUP -#line 115 "toke.l" +#line 116 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -1323,7 +1337,7 @@ YY_RULE_SETUP YY_BREAK case 4: YY_RULE_SETUP -#line 121 "toke.l" +#line 122 "toke.l" { LEXTRACE("= "); return('='); @@ -1331,7 +1345,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 126 "toke.l" +#line 127 "toke.l" { LEXTRACE("+= "); return('+'); @@ -1339,7 +1353,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 131 "toke.l" +#line 132 "toke.l" { LEXTRACE("-= "); return('-'); @@ -1347,7 +1361,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 136 "toke.l" +#line 137 "toke.l" { LEXTRACE("WORD(1) "); if (!fill(yytext + 1, yyleng - 2)) @@ -1357,7 +1371,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 143 "toke.l" +#line 144 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(yytext, yyleng)) @@ -1369,7 +1383,7 @@ YY_RULE_SETUP case 9: YY_RULE_SETUP -#line 152 "toke.l" +#line 153 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -1380,7 +1394,7 @@ YY_RULE_SETUP YY_BREAK case 10: YY_RULE_SETUP -#line 160 "toke.l" +#line 161 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -1391,7 +1405,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 168 "toke.l" +#line 169 "toke.l" { BEGIN INITIAL; yyless(0); @@ -1400,7 +1414,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 174 "toke.l" +#line 175 "toke.l" { LEXTRACE("ARG "); if (!fill_args(yytext, yyleng, sawspace)) @@ -1411,7 +1425,7 @@ YY_RULE_SETUP case 13: YY_RULE_SETUP -#line 182 "toke.l" +#line 183 "toke.l" { char *cp, *ep; ++sudolineno; @@ -1430,7 +1444,7 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 198 "toke.l" +#line 199 "toke.l" { BEGIN GOTDEFS; switch (yytext[8]) { @@ -1446,6 +1460,10 @@ YY_RULE_SETUP yyless(9); LEXTRACE("DEFAULTS_HOST "); return(DEFAULTS_HOST); + case '!': + yyless(9); + LEXTRACE("DEFAULTS_CMND "); + return(DEFAULTS_CMND); default: LEXTRACE("DEFAULTS "); return(DEFAULTS); @@ -1454,7 +1472,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 219 "toke.l" +#line 224 "toke.l" { if (!fill(yytext, yyleng)) yyterminate(); @@ -1477,7 +1495,7 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 239 "toke.l" +#line 244 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -1486,7 +1504,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 245 "toke.l" +#line 250 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -1495,7 +1513,7 @@ YY_RULE_SETUP YY_BREAK case 18: YY_RULE_SETUP -#line 251 "toke.l" +#line 256 "toke.l" { LEXTRACE("NOEXEC "); return(NOEXEC); @@ -1503,7 +1521,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 256 "toke.l" +#line 261 "toke.l" { LEXTRACE("EXEC "); return(EXEC); @@ -1511,7 +1529,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 261 "toke.l" +#line 266 "toke.l" { LEXTRACE("NOMONITOR "); return(NOMONITOR); @@ -1519,7 +1537,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 266 "toke.l" +#line 271 "toke.l" { LEXTRACE("MONITOR "); return(MONITOR); @@ -1527,7 +1545,7 @@ YY_RULE_SETUP YY_BREAK case 22: YY_RULE_SETUP -#line 271 "toke.l" +#line 276 "toke.l" { /* netgroup */ if (!fill(yytext, yyleng)) @@ -1538,7 +1556,7 @@ YY_RULE_SETUP YY_BREAK case 23: YY_RULE_SETUP -#line 279 "toke.l" +#line 284 "toke.l" { /* UN*X group */ if (!fill(yytext, yyleng)) @@ -1549,7 +1567,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 287 "toke.l" +#line 292 "toke.l" { if (!fill(yytext, yyleng)) yyterminate(); @@ -1559,7 +1577,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 294 "toke.l" +#line 299 "toke.l" { if (!fill(yytext, yyleng)) yyterminate(); @@ -1569,7 +1587,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 301 "toke.l" +#line 306 "toke.l" { BEGIN GOTRUNAS; LEXTRACE("RUNAS "); @@ -1578,7 +1596,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 307 "toke.l" +#line 312 "toke.l" { if (strcmp(yytext, "ALL") == 0) { LEXTRACE("ALL "); @@ -1593,7 +1611,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 319 "toke.l" +#line 324 "toke.l" { /* username/uid that user can run command as */ if (!fill(yytext, yyleng)) @@ -1604,14 +1622,14 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 327 "toke.l" +#line 332 "toke.l" { BEGIN INITIAL; } YY_BREAK case 30: YY_RULE_SETUP -#line 331 "toke.l" +#line 336 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -1621,7 +1639,18 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 338 "toke.l" +#line 343 "toke.l" +{ + /* no command args allowed for Defaults!/path */ + if (!fill_cmnd(yytext, yyleng)) + yyterminate(); + LEXTRACE("COMMAND "); + return(COMMAND); + } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 351 "toke.l" { /* directories can't have args... */ if (yytext[yyleng - 1] == '/') { @@ -1637,9 +1666,9 @@ YY_RULE_SETUP } } /* a pathname */ YY_BREAK -case 32: +case 33: YY_RULE_SETUP -#line 353 "toke.l" +#line 366 "toke.l" { /* a word */ if (!fill(yytext, yyleng)) @@ -1648,41 +1677,41 @@ YY_RULE_SETUP return(WORD); } YY_BREAK -case 33: +case 34: YY_RULE_SETUP -#line 361 "toke.l" +#line 374 "toke.l" { LEXTRACE(", "); return(','); } /* return ',' */ YY_BREAK -case 34: +case 35: YY_RULE_SETUP -#line 366 "toke.l" +#line 379 "toke.l" { LEXTRACE("= "); return('='); } /* return '=' */ YY_BREAK -case 35: +case 36: YY_RULE_SETUP -#line 371 "toke.l" +#line 384 "toke.l" { LEXTRACE(": "); return(':'); } /* return ':' */ YY_BREAK -case 36: +case 37: YY_RULE_SETUP -#line 376 "toke.l" +#line 389 "toke.l" { if (yyleng % 2 == 1) return('!'); /* return '!' */ } YY_BREAK -case 37: +case 38: YY_RULE_SETUP -#line 381 "toke.l" +#line 394 "toke.l" { BEGIN INITIAL; ++sudolineno; @@ -1690,25 +1719,25 @@ YY_RULE_SETUP return(COMMENT); } /* return newline */ YY_BREAK -case 38: +case 39: YY_RULE_SETUP -#line 388 "toke.l" +#line 401 "toke.l" { /* throw away space/tabs */ sawspace = TRUE; /* but remember for fill_args */ } YY_BREAK -case 39: +case 40: YY_RULE_SETUP -#line 392 "toke.l" +#line 405 "toke.l" { sawspace = TRUE; /* remember for fill_args */ ++sudolineno; LEXTRACE("\n\t"); } /* throw away EOL after \ */ YY_BREAK -case 40: +case 41: YY_RULE_SETUP -#line 398 "toke.l" +#line 411 "toke.l" { BEGIN INITIAL; ++sudolineno; @@ -1716,9 +1745,9 @@ YY_RULE_SETUP return(COMMENT); } /* return comments */ YY_BREAK -case 41: +case 42: YY_RULE_SETUP -#line 405 "toke.l" +#line 418 "toke.l" { LEXTRACE("ERROR "); return(ERROR); @@ -1730,7 +1759,7 @@ case YY_STATE_EOF(GOTDEFS): case YY_STATE_EOF(GOTCMND): case YY_STATE_EOF(STARTDEFS): case YY_STATE_EOF(INDEFS): -#line 410 "toke.l" +#line 423 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -1741,12 +1770,12 @@ case YY_STATE_EOF(INDEFS): yyterminate(); } YY_BREAK -case 42: +case 43: YY_RULE_SETUP -#line 420 "toke.l" +#line 433 "toke.l" ECHO; YY_BREAK -#line 1750 "toke.c" +#line 1779 "toke.c" case YY_END_OF_BUFFER: { @@ -2037,7 +2066,7 @@ static yy_state_type yy_get_previous_state() while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 385 ) + if ( yy_current_state >= 390 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2072,11 +2101,11 @@ yy_state_type yy_current_state; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 385 ) + if ( yy_current_state >= 390 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 384); + yy_is_jam = (yy_current_state == 389); return yy_is_jam ? 0 : yy_current_state; } @@ -2635,7 +2664,7 @@ int main() return 0; } #endif -#line 420 "toke.l" +#line 433 "toke.l" static int fill(s, len) diff --git a/toke.l b/toke.l index 0c2ae92b7..566581392 100644 --- a/toke.l +++ b/toke.l @@ -87,6 +87,7 @@ OCTET (1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]) DOTTEDQUAD {OCTET}(\.{OCTET}){3} HOSTNAME [[:alnum:]_-]+ WORD ([^#>!=:,\(\) \t\n\\]|\\[^\n])+ +PATH \/(\\[\,:= \t#]|[^\,:=\\ \t\n#])+ ENVAR ([^#!=, \t\n\\]|\\[^\n])([^#=, \t\n\\]|\\[^\n])* DEFVAR [a-z_]+ @@ -195,7 +196,7 @@ DEFVAR [a-z_]+ return(COMMENT); } -^Defaults([:@>]{WORD})? { +^Defaults([:@>\!]{WORD})? { BEGIN GOTDEFS; switch (yytext[8]) { case ':': @@ -210,6 +211,10 @@ DEFVAR [a-z_]+ yyless(9); LEXTRACE("DEFAULTS_HOST "); return(DEFAULTS_HOST); + case '!': + yyless(9); + LEXTRACE("DEFAULTS_CMND "); + return(DEFAULTS_CMND); default: LEXTRACE("DEFAULTS "); return(DEFAULTS); @@ -335,7 +340,15 @@ sudoedit { yyterminate(); } /* sudo -e */ -\/(\\[\,:= \t#]|[^\,:=\\ \t\n#])+ { +{PATH} { + /* no command args allowed for Defaults!/path */ + if (!fill_cmnd(yytext, yyleng)) + yyterminate(); + LEXTRACE("COMMAND "); + return(COMMAND); + } + +{PATH} { /* directories can't have args... */ if (yytext[yyleng - 1] == '/') { LEXTRACE("COMMAND "); diff --git a/visudo.c b/visudo.c index 75a0fd01d..160fbe4e0 100644 --- a/visudo.c +++ b/visudo.c @@ -203,7 +203,7 @@ main(argc, argv) errorx(1, "%s busy, try again later", sudoers_path); init_parser(sudoers_path, 0); yyparse(); - (void) update_defaults(); + (void) update_defaults(SKIP_CMND); editor = get_editor(&args);