#endif /* HAVE_LSEARCH */
#ifndef lint
-__unused static const char rcsid[] = "$Sudo: sudo.tab.c,v 1.76.2.7 2007/11/02 19:09:22 millert Exp $";
+__unused static const char rcsid[] = "$Sudo: sudo.tab.c,v 1.76.2.8 2007/11/21 18:15:49 millert Exp $";
#endif /* lint */
/*
(_var) = NOMATCH; \
} while (0)
+#define SETENV_RESET \
+ if (setenv_ok == IMPLIED) setenv_ok = def_setenv ? TRUE : UNSPEC
+
/*
* The matching stack, initial space allocated in init_parser().
*/
}
parse_error = TRUE;
}
-#line 221 "parse.yacc"
+#line 224 "parse.yacc"
#ifndef YYSTYPE_DEFINED
#define YYSTYPE_DEFINED
typedef union {
int tok;
} YYSTYPE;
#endif /* YYSTYPE_DEFINED */
-#line 248 "sudo.tab.c"
+#line 251 "sudo.tab.c"
#define COMMAND 257
#define ALIAS 258
#define DEFVAR 259
0, 0, 7, 7, 9, 7, 7, 7, 7, 7,
7, 15, 16, 18, 16, 19, 16, 21, 16, 17,
17, 22, 22, 22, 22, 22, 10, 10, 23, 25,
- 25, 2, 2, 2, 2, 2, 24, 24, 26, 29,
- 30, 29, 27, 27, 5, 5, 4, 31, 4, 3,
- 3, 3, 3, 3, 28, 28, 28, 28, 28, 28,
- 28, 1, 1, 1, 12, 12, 33, 32, 20, 20,
- 13, 13, 35, 34, 36, 36, 14, 14, 38, 37,
- 11, 11, 40, 39, 8, 8, 41, 41, 6, 6,
- 6, 6, 6,
+ 25, 2, 2, 2, 2, 2, 24, 24, 28, 26,
+ 30, 31, 30, 27, 27, 5, 5, 4, 32, 4,
+ 3, 3, 3, 3, 3, 29, 29, 29, 29, 29,
+ 29, 29, 1, 1, 1, 12, 12, 34, 33, 20,
+ 20, 13, 13, 36, 35, 37, 37, 14, 14, 39,
+ 38, 11, 11, 41, 40, 8, 8, 42, 42, 6,
+ 6, 6, 6, 6,
};
#if defined(__cplusplus) || defined(__STDC__)
const short yylen[] =
1, 2, 1, 2, 0, 3, 2, 2, 2, 2,
1, 2, 1, 0, 3, 0, 3, 0, 3, 1,
3, 1, 2, 3, 3, 3, 1, 3, 3, 1,
- 2, 1, 1, 1, 1, 1, 1, 3, 3, 1,
- 0, 3, 0, 2, 1, 3, 1, 0, 3, 1,
- 1, 1, 1, 1, 0, 2, 2, 2, 2, 2,
- 2, 1, 1, 1, 1, 3, 0, 4, 1, 3,
- 1, 3, 0, 4, 1, 3, 1, 3, 0, 4,
- 1, 3, 0, 4, 1, 3, 1, 2, 1, 1,
- 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 3, 0, 4,
+ 1, 0, 3, 0, 2, 1, 3, 1, 0, 3,
+ 1, 1, 1, 1, 1, 0, 2, 2, 2, 2,
+ 2, 2, 1, 1, 1, 1, 3, 0, 4, 1,
+ 3, 1, 3, 0, 4, 1, 3, 1, 3, 0,
+ 4, 1, 3, 0, 4, 1, 3, 1, 2, 1,
+ 1, 1, 1, 1,
};
#if defined(__cplusplus) || defined(__STDC__)
const short yydefred[] =
#endif
{ 0,
0, 13, 18, 14, 16, 3, 0, 0, 0, 0,
- 0, 1, 0, 11, 0, 4, 0, 0, 0, 67,
- 0, 65, 73, 0, 71, 83, 0, 81, 79, 0,
- 77, 2, 92, 91, 90, 89, 93, 0, 87, 0,
- 85, 0, 0, 12, 0, 36, 33, 34, 35, 32,
- 0, 30, 0, 69, 0, 53, 52, 51, 50, 54,
- 48, 47, 45, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 88, 0, 0, 0, 27, 0, 0, 0,
- 23, 0, 31, 0, 0, 0, 0, 66, 0, 72,
- 0, 82, 0, 78, 86, 0, 0, 24, 25, 26,
- 21, 70, 49, 46, 0, 64, 63, 62, 41, 40,
- 75, 0, 0, 0, 28, 0, 0, 37, 55, 0,
- 0, 0, 0, 0, 42, 76, 38, 56, 57, 58,
- 59, 60, 61, 39,
+ 0, 1, 0, 11, 0, 4, 0, 0, 0, 68,
+ 0, 66, 74, 0, 72, 84, 0, 82, 80, 0,
+ 78, 2, 93, 92, 91, 90, 94, 0, 88, 0,
+ 86, 0, 0, 12, 0, 36, 33, 34, 35, 32,
+ 0, 30, 0, 70, 0, 54, 53, 52, 51, 55,
+ 49, 48, 46, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 89, 0, 0, 0, 27, 0, 0, 0,
+ 23, 0, 31, 0, 0, 0, 0, 67, 0, 73,
+ 0, 83, 0, 79, 87, 0, 39, 24, 25, 26,
+ 21, 71, 50, 47, 0, 65, 64, 63, 42, 41,
+ 76, 0, 0, 0, 28, 0, 37, 0, 0, 0,
+ 39, 0, 56, 43, 77, 38, 0, 0, 57, 58,
+ 59, 60, 61, 62, 40,
};
#if defined(__cplusplus) || defined(__STDC__)
const short yydgoto[] =
{ 11,
110, 52, 62, 63, 64, 39, 12, 40, 13, 75,
27, 21, 24, 30, 14, 15, 44, 18, 19, 76,
- 17, 45, 77, 117, 54, 118, 119, 124, 111, 120,
- 85, 22, 65, 25, 67, 112, 31, 71, 28, 69,
- 41,
+ 17, 45, 77, 116, 54, 117, 123, 118, 128, 111,
+ 119, 85, 22, 65, 25, 67, 112, 31, 71, 28,
+ 69, 41,
};
#if defined(__cplusplus) || defined(__STDC__)
const short yysindex[] =
#else
short yysindex[] =
#endif
- { -229,
- -256, 0, 0, 0, 0, 0, -237, -234, -226, -225,
- -229, 0, 62, 0, -33, 0, 88, 62, 114, 0,
- -15, 0, 0, -12, 0, 0, -5, 0, 0, -4,
+ { -223,
+ -256, 0, 0, 0, 0, 0, -237, -234, -231, -226,
+ -223, 0, 62, 0, -33, 0, 88, 62, 114, 0,
+ -22, 0, 0, -21, 0, 0, -19, 0, 0, -18,
0, 0, 0, 0, 0, 0, 0, -244, 0, -28,
- 0, -36, -204, 0, 14, 0, 0, 0, 0, 0,
- -219, 0, 19, 0, 20, 0, 0, 0, 0, 0,
- 0, 0, 0, 21, 5, -237, 6, -234, 7, -226,
- 8, -225, 0, 62, 12, -21, 0, -192, -191, -187,
- 0, -33, 0, 88, -201, 114, 88, 0, 276, 0,
- 62, 0, 114, 0, 0, 88, -189, 0, 0, 0,
- 0, 0, 0, 0, 19, 0, 0, 0, 0, 0,
- 0, 33, 20, 21, 0, 114, 36, 0, 0, -247,
- 276, 21, -189, -29, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,};
+ 0, -36, -221, 0, 3, 0, 0, 0, 0, 0,
+ -212, 0, 6, 0, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 7, -237, 8, -234, 9, -231,
+ 10, -226, 0, 62, 18, -32, 0, -202, -199, -191,
+ 0, -33, 0, 88, -196, 114, 88, 0, 276, 0,
+ 62, 0, 114, 0, 0, 88, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
+ 0, 30, 14, 16, 0, 33, 0, -188, -247, 276,
+ 0, 114, 0, 0, 0, 0, 16, -29, 0, 0,
+ 0, 0, 0, 0, 0,};
#if defined(__cplusplus) || defined(__STDC__)
const short yyrindex[] =
#else
0, 0, 0, -3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 300, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -20, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
- 0, 52, 78, 104, 0, 0, 130, 0, 0, 0,
- 0, 274, -20, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,};
+ 0, 52, 78, 104, 0, 130, 0, -20, 0, 0,
+ 0, 0, 0, 0, 0, 0, 274, 0, 0, 0,
+ 0, 0, 0, 0, 0,};
#if defined(__cplusplus) || defined(__STDC__)
const short yygindex[] =
#else
short yygindex[] =
#endif
{ 0,
- -39, 31, -2, 2, -87, 48, 76, -16, 0, 0,
- 0, 0, 0, 0, 0, 0, 9, 0, 0, -14,
- 0, 0, -7, 0, 10, -31, 0, 0, -109, 0,
- 0, 24, 0, 25, 0, 0, 27, 0, 28, 0,
- 22,
+ -38, 31, -2, 2, -87, 48, 76, -16, 0, 0,
+ 0, 0, 0, 0, 0, 0, 11, 0, 0, -14,
+ 0, 0, -7, 0, 12, -31, 0, 0, 0, -105,
+ 0, 0, 25, 0, 24, 0, 0, 22, 0, 27,
+ 0, 28,
};
#define YYTABLESIZE 580
#if defined(__cplusplus) || defined(__STDC__)
#endif
{ 43,
22, 55, 53, 109, 51, 114, 79, 19, 80, 106,
- 107, 126, 43, 33, 134, 74, 34, 35, 36, 16,
- 20, 15, 84, 23, 78, 68, 1, 108, 122, 17,
- 37, 26, 29, 22, 2, 3, 4, 5, 46, 97,
- 47, 48, 66, 49, 22, 68, 6, 7, 8, 9,
- 10, 74, 70, 72, 81, 50, 56, 82, 68, 57,
- 58, 59, 84, 74, 86, 87, 89, 91, 93, 96,
- 98, 99, 105, 60, 113, 100, 121, 84, 116, 123,
- 125, 83, 103, 68, 74, 73, 32, 104, 115, 88,
- 101, 127, 90, 102, 38, 95, 0, 92, 94, 0,
- 0, 0, 0, 80, 0, 0, 0, 0, 0, 74,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 107, 84, 44, 33, 125, 74, 34, 35, 36, 16,
+ 20, 15, 135, 23, 78, 69, 26, 108, 97, 17,
+ 37, 29, 1, 22, 127, 66, 68, 81, 70, 72,
+ 2, 3, 4, 5, 22, 46, 82, 47, 48, 84,
+ 49, 75, 6, 7, 8, 9, 10, 74, 69, 86,
+ 98, 56, 50, 99, 57, 58, 59, 87, 89, 91,
+ 93, 100, 105, 120, 113, 96, 121, 85, 60, 122,
+ 124, 83, 103, 69, 75, 73, 32, 104, 115, 126,
+ 88, 90, 101, 94, 38, 102, 92, 0, 0, 0,
+ 0, 95, 0, 81, 0, 0, 0, 0, 0, 75,
+ 85, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 0, 0, 0, 0, 0, 0, 29,
- 0, 0, 0, 0, 0, 84, 80, 0, 0, 0,
+ 0, 0, 0, 0, 0, 85, 81, 0, 0, 0,
0, 0, 0, 0, 0, 0, 61, 0, 0, 0,
0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
- 0, 80, 29, 0, 0, 0, 0, 0, 0, 0,
+ 0, 81, 29, 0, 0, 0, 0, 0, 0, 0,
0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
9, 0, 0, 0, 0, 0, 0, 29, 8, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 7, 0, 0, 0, 0,
0, 0, 0, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 42, 0, 106, 107, 46,
- 0, 47, 48, 19, 49, 10, 43, 43, 7, 128,
- 129, 130, 131, 132, 133, 108, 50, 15, 43, 43,
- 43, 43, 43, 43, 43, 17, 22, 0, 22, 0,
+ 0, 47, 48, 19, 49, 10, 44, 44, 7, 129,
+ 130, 131, 132, 133, 134, 108, 50, 15, 44, 44,
+ 44, 44, 44, 44, 44, 17, 22, 0, 22, 0,
20, 22, 22, 22, 22, 22, 22, 22, 10, 0,
0, 0, 0, 0, 0, 22, 22, 22, 22, 22,
- 22, 68, 0, 68, 0, 0, 68, 68, 68, 68,
- 68, 68, 68, 20, 0, 0, 0, 0, 0, 6,
- 68, 68, 68, 68, 68, 68, 44, 74, 109, 74,
- 0, 0, 74, 74, 74, 74, 74, 74, 74, 33,
- 0, 0, 34, 35, 36, 0, 74, 74, 74, 74,
- 74, 74, 6, 84, 0, 84, 37, 0, 84, 84,
- 84, 84, 84, 84, 84, 46, 0, 47, 48, 0,
- 49, 0, 84, 84, 84, 84, 84, 84, 0, 80,
- 0, 80, 50, 0, 80, 80, 80, 80, 80, 80,
- 80, 56, 0, 0, 57, 58, 59, 0, 80, 80,
- 80, 80, 80, 80, 0, 29, 0, 29, 60, 0,
+ 22, 69, 0, 69, 0, 0, 69, 69, 69, 69,
+ 69, 69, 69, 20, 0, 0, 0, 0, 0, 6,
+ 69, 69, 69, 69, 69, 69, 45, 75, 109, 75,
+ 0, 0, 75, 75, 75, 75, 75, 75, 75, 33,
+ 0, 0, 34, 35, 36, 0, 75, 75, 75, 75,
+ 75, 75, 6, 85, 0, 85, 37, 0, 85, 85,
+ 85, 85, 85, 85, 85, 46, 0, 47, 48, 0,
+ 49, 0, 85, 85, 85, 85, 85, 85, 0, 81,
+ 0, 81, 50, 0, 81, 81, 81, 81, 81, 81,
+ 81, 56, 0, 0, 57, 58, 59, 0, 81, 81,
+ 81, 81, 81, 81, 0, 29, 0, 29, 60, 0,
29, 29, 29, 29, 29, 29, 29, 5, 0, 0,
5, 5, 5, 0, 29, 29, 29, 29, 29, 29,
0, 8, 0, 8, 5, 0, 8, 8, 8, 8,
10, 10, 10, 0, 0, 0, 0, 0, 0, 0,
10, 10, 10, 10, 10, 10, 20, 0, 20, 0,
0, 20, 20, 20, 20, 20, 20, 20, 0, 0,
- 44, 44, 106, 107, 0, 20, 20, 20, 20, 20,
- 20, 0, 44, 44, 44, 44, 44, 44, 44, 0,
+ 45, 45, 106, 107, 0, 20, 20, 20, 20, 20,
+ 20, 0, 45, 45, 45, 45, 45, 45, 45, 0,
108, 0, 0, 0, 0, 6, 0, 6, 0, 0,
6, 6, 6, 6, 6, 6, 6, 0, 0, 0,
0, 0, 0, 0, 6, 6, 6, 6, 6, 6,
#endif
{ 33,
0, 18, 17, 33, 33, 93, 43, 33, 45, 257,
- 258, 121, 33, 258, 124, 44, 261, 262, 263, 276,
- 258, 33, 44, 258, 61, 0, 256, 275, 116, 33,
- 275, 258, 258, 33, 264, 265, 266, 267, 258, 61,
- 260, 261, 58, 263, 44, 58, 276, 277, 278, 279,
- 280, 0, 58, 58, 259, 275, 258, 44, 33, 261,
- 262, 263, 44, 44, 44, 61, 61, 61, 61, 58,
- 263, 263, 87, 275, 91, 263, 44, 0, 268, 44,
- 120, 51, 85, 58, 33, 38, 11, 86, 96, 66,
- 82, 123, 68, 84, 33, 74, -1, 70, 72, -1,
- -1, -1, -1, 0, -1, -1, -1, -1, -1, 58,
+ 258, 44, 33, 258, 120, 44, 261, 262, 263, 276,
+ 258, 33, 128, 258, 61, 0, 258, 275, 61, 33,
+ 275, 258, 256, 33, 122, 58, 58, 259, 58, 58,
+ 264, 265, 266, 267, 44, 258, 44, 260, 261, 44,
+ 263, 0, 276, 277, 278, 279, 280, 44, 33, 44,
+ 263, 258, 275, 263, 261, 262, 263, 61, 61, 61,
+ 61, 263, 87, 44, 91, 58, 44, 0, 275, 268,
+ 119, 51, 85, 58, 33, 38, 11, 86, 96, 121,
+ 66, 68, 82, 72, 33, 84, 70, -1, -1, -1,
+ -1, 74, -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,
"host : ALIAS",
"cmndspeclist : cmndspec",
"cmndspeclist : cmndspeclist ',' cmndspec",
-"cmndspec : runasspec cmndtag opcmnd",
-"opcmnd : cmnd",
"$$5 :",
-"opcmnd : '!' $$5 cmnd",
+"cmndspec : $$5 runasspec cmndtag opcmnd",
+"opcmnd : cmnd",
+"$$6 :",
+"opcmnd : '!' $$6 cmnd",
"runasspec :",
"runasspec : RUNAS runaslist",
"runaslist : oprunasuser",
"runaslist : runaslist ',' oprunasuser",
"oprunasuser : runasuser",
-"$$6 :",
-"oprunasuser : '!' $$6 runasuser",
+"$$7 :",
+"oprunasuser : '!' $$7 runasuser",
"runasuser : WORD",
"runasuser : USERGROUP",
"runasuser : NETGROUP",
"cmnd : COMMAND",
"hostaliases : hostalias",
"hostaliases : hostaliases ':' hostalias",
-"$$7 :",
-"hostalias : ALIAS $$7 '=' hostlist",
+"$$8 :",
+"hostalias : ALIAS $$8 '=' hostlist",
"hostlist : ophost",
"hostlist : hostlist ',' ophost",
"cmndaliases : cmndalias",
"cmndaliases : cmndaliases ':' cmndalias",
-"$$8 :",
-"cmndalias : ALIAS $$8 '=' cmndlist",
+"$$9 :",
+"cmndalias : ALIAS $$9 '=' cmndlist",
"cmndlist : opcmnd",
"cmndlist : cmndlist ',' opcmnd",
"runasaliases : runasalias",
"runasaliases : runasaliases ':' runasalias",
-"$$9 :",
-"runasalias : ALIAS $$9 '=' runaslist",
+"$$10 :",
+"runasalias : ALIAS $$10 '=' runaslist",
"useraliases : useralias",
"useraliases : useraliases ':' useralias",
-"$$10 :",
-"useralias : ALIAS $$10 '=' userlist",
+"$$11 :",
+"useralias : ALIAS $$11 '=' userlist",
"userlist : opuser",
"userlist : userlist ',' opuser",
"opuser : user",
short *yysslim;
YYSTYPE *yyvs;
int yystacksize;
-#line 905 "parse.yacc"
+#line 911 "parse.yacc"
#define MOREALIASES (32)
aliasinfo *aliases = NULL;
if (printmatches == TRUE)
expand_match_list();
}
-#line 979 "sudo.tab.c"
+#line 983 "sudo.tab.c"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
#if defined(__cplusplus) || defined(__STDC__)
static int yygrowstack(void)
switch (yyn)
{
case 3:
-#line 277 "parse.yacc"
+#line 280 "parse.yacc"
{ ; }
break;
case 4:
-#line 279 "parse.yacc"
+#line 282 "parse.yacc"
{ yyerrok; }
break;
case 5:
-#line 280 "parse.yacc"
+#line 283 "parse.yacc"
{ push; }
break;
case 6:
-#line 280 "parse.yacc"
+#line 283 "parse.yacc"
{
while (top && user_matches != TRUE)
pop;
}
break;
case 7:
-#line 285 "parse.yacc"
+#line 288 "parse.yacc"
{ ; }
break;
case 8:
-#line 287 "parse.yacc"
+#line 290 "parse.yacc"
{ ; }
break;
case 9:
-#line 289 "parse.yacc"
+#line 292 "parse.yacc"
{ ; }
break;
case 10:
-#line 291 "parse.yacc"
+#line 294 "parse.yacc"
{ ; }
break;
case 11:
-#line 293 "parse.yacc"
+#line 296 "parse.yacc"
{ ; }
break;
case 13:
-#line 299 "parse.yacc"
+#line 302 "parse.yacc"
{
defaults_matches = TRUE;
}
break;
case 14:
-#line 302 "parse.yacc"
+#line 305 "parse.yacc"
{ push; }
break;
case 15:
-#line 302 "parse.yacc"
+#line 305 "parse.yacc"
{
defaults_matches = user_matches;
pop;
}
break;
case 16:
-#line 306 "parse.yacc"
+#line 309 "parse.yacc"
{ push; }
break;
case 17:
-#line 306 "parse.yacc"
+#line 309 "parse.yacc"
{
defaults_matches = yyvsp[0].BOOLEAN == TRUE;
pop;
}
break;
case 18:
-#line 310 "parse.yacc"
+#line 313 "parse.yacc"
{ push; }
break;
case 19:
-#line 310 "parse.yacc"
+#line 313 "parse.yacc"
{
defaults_matches = host_matches;
pop;
}
break;
case 22:
-#line 320 "parse.yacc"
+#line 323 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[0].string, NULL, TRUE)) {
}
break;
case 23:
-#line 328 "parse.yacc"
+#line 331 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[0].string, NULL, FALSE)) {
}
break;
case 24:
-#line 336 "parse.yacc"
+#line 339 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, TRUE)) {
}
break;
case 25:
-#line 345 "parse.yacc"
+#line 348 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, '+')) {
}
break;
case 26:
-#line 354 "parse.yacc"
+#line 357 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, '-')) {
}
break;
case 29:
-#line 369 "parse.yacc"
+#line 372 "parse.yacc"
{
/*
* We already did a push if necessary in
}
break;
case 30:
-#line 383 "parse.yacc"
+#line 386 "parse.yacc"
{
SETMATCH(host_matches, yyvsp[0].BOOLEAN);
}
break;
case 31:
-#line 386 "parse.yacc"
+#line 389 "parse.yacc"
{
SETNMATCH(host_matches, yyvsp[0].BOOLEAN);
}
break;
case 32:
-#line 391 "parse.yacc"
+#line 394 "parse.yacc"
{
yyval.BOOLEAN = TRUE;
}
break;
case 33:
-#line 394 "parse.yacc"
+#line 397 "parse.yacc"
{
if (addr_matches(yyvsp[0].string))
yyval.BOOLEAN = TRUE;
}
break;
case 34:
-#line 401 "parse.yacc"
+#line 404 "parse.yacc"
{
if (netgr_matches(yyvsp[0].string, user_host, user_shost, NULL))
yyval.BOOLEAN = TRUE;
}
break;
case 35:
-#line 408 "parse.yacc"
+#line 411 "parse.yacc"
{
if (hostname_matches(user_shost, user_host, yyvsp[0].string) == 0)
yyval.BOOLEAN = TRUE;
}
break;
case 36:
-#line 415 "parse.yacc"
+#line 418 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, HOST_ALIAS);
}
break;
case 39:
-#line 443 "parse.yacc"
+#line 446 "parse.yacc"
+{ SETENV_RESET; }
+break;
+case 40:
+#line 446 "parse.yacc"
{
/*
* Push the entry onto the stack if it is worth
cmnd_matches = UNSPEC;
}
break;
-case 40:
-#line 472 "parse.yacc"
+case 41:
+#line 475 "parse.yacc"
{
SETMATCH(cmnd_matches, yyvsp[0].BOOLEAN);
}
break;
-case 41:
-#line 475 "parse.yacc"
+case 42:
+#line 478 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
}
break;
-case 42:
-#line 483 "parse.yacc"
+case 43:
+#line 486 "parse.yacc"
{
SETNMATCH(cmnd_matches, yyvsp[0].BOOLEAN);
}
break;
-case 43:
-#line 488 "parse.yacc"
+case 44:
+#line 491 "parse.yacc"
{
if (printmatches == TRUE && host_matches == TRUE &&
user_matches == TRUE) {
}
}
break;
-case 44:
-#line 512 "parse.yacc"
+case 45:
+#line 515 "parse.yacc"
{
runas_matches = yyvsp[0].BOOLEAN;
}
break;
-case 45:
-#line 517 "parse.yacc"
+case 46:
+#line 520 "parse.yacc"
{ ; }
break;
-case 46:
-#line 518 "parse.yacc"
+case 47:
+#line 521 "parse.yacc"
{
/* Later entries override earlier ones. */
if (yyvsp[0].BOOLEAN != NOMATCH)
yyval.BOOLEAN = yyvsp[-2].BOOLEAN;
}
break;
-case 47:
-#line 527 "parse.yacc"
+case 48:
+#line 530 "parse.yacc"
{ ; }
break;
-case 48:
-#line 528 "parse.yacc"
+case 49:
+#line 531 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
}
break;
-case 49:
-#line 536 "parse.yacc"
+case 50:
+#line 539 "parse.yacc"
{
/* Set $$ to the negation of runasuser */
yyval.BOOLEAN = (yyvsp[0].BOOLEAN == NOMATCH ? NOMATCH : ! yyvsp[0].BOOLEAN);
}
break;
-case 50:
-#line 542 "parse.yacc"
+case 51:
+#line 545 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
used_runas = TRUE;
}
break;
-case 51:
-#line 557 "parse.yacc"
+case 52:
+#line 560 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
used_runas = TRUE;
}
break;
-case 52:
-#line 572 "parse.yacc"
+case 53:
+#line 575 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
used_runas = TRUE;
}
break;
-case 53:
-#line 587 "parse.yacc"
+case 54:
+#line 590 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, RUNAS_ALIAS);
used_runas = TRUE;
}
break;
-case 54:
-#line 617 "parse.yacc"
+case 55:
+#line 620 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
yyval.BOOLEAN = TRUE;
}
break;
-case 55:
-#line 629 "parse.yacc"
+case 56:
+#line 632 "parse.yacc"
{
/* Inherit {NO,}{PASSWD,EXEC,SETENV} status. */
if (printmatches == TRUE && host_matches == TRUE &&
}
}
break;
-case 56:
-#line 647 "parse.yacc"
+case 57:
+#line 650 "parse.yacc"
{
no_passwd = TRUE;
if (printmatches == TRUE && host_matches == TRUE &&
cm_list[cm_list_len].nopasswd = TRUE;
}
break;
-case 57:
-#line 653 "parse.yacc"
+case 58:
+#line 656 "parse.yacc"
{
no_passwd = FALSE;
if (printmatches == TRUE && host_matches == TRUE &&
cm_list[cm_list_len].nopasswd = FALSE;
}
break;
-case 58:
-#line 659 "parse.yacc"
+case 59:
+#line 662 "parse.yacc"
{
no_execve = TRUE;
if (printmatches == TRUE && host_matches == TRUE &&
cm_list[cm_list_len].noexecve = TRUE;
}
break;
-case 59:
-#line 665 "parse.yacc"
+case 60:
+#line 668 "parse.yacc"
{
no_execve = FALSE;
if (printmatches == TRUE && host_matches == TRUE &&
cm_list[cm_list_len].noexecve = FALSE;
}
break;
-case 60:
-#line 671 "parse.yacc"
+case 61:
+#line 674 "parse.yacc"
{
setenv_ok = TRUE;
if (printmatches == TRUE && host_matches == TRUE &&
cm_list[cm_list_len].setenv = TRUE;
}
break;
-case 61:
-#line 677 "parse.yacc"
+case 62:
+#line 680 "parse.yacc"
{
setenv_ok = FALSE;
if (printmatches == TRUE && host_matches == TRUE &&
cm_list[cm_list_len].setenv = FALSE;
}
break;
-case 62:
-#line 685 "parse.yacc"
+case 63:
+#line 688 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
expand_match_list();
}
}
+ /* sudo "ALL" implies the SETENV tag */
+ if (setenv_ok == UNSPEC)
+ setenv_ok = IMPLIED;
efree(safe_cmnd);
safe_cmnd = NULL;
yyval.BOOLEAN = TRUE;
}
break;
-case 63:
-#line 700 "parse.yacc"
+case 64:
+#line 706 "parse.yacc"
{
aliasinfo *aip;
efree(yyvsp[0].string);
}
break;
-case 64:
-#line 729 "parse.yacc"
+case 65:
+#line 735 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE) {
efree(yyvsp[0].command.args);
}
break;
-case 67:
-#line 759 "parse.yacc"
+case 68:
+#line 765 "parse.yacc"
{ push; }
break;
-case 68:
-#line 759 "parse.yacc"
+case 69:
+#line 765 "parse.yacc"
{
if ((MATCHED(host_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, HOST_ALIAS, host_matches)) {
pop;
}
break;
-case 73:
-#line 777 "parse.yacc"
+case 74:
+#line 783 "parse.yacc"
{
push;
if (printmatches == TRUE) {
}
}
break;
-case 74:
-#line 786 "parse.yacc"
+case 75:
+#line 792 "parse.yacc"
{
if ((MATCHED(cmnd_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, CMND_ALIAS, cmnd_matches)) {
in_alias = FALSE;
}
break;
-case 75:
-#line 800 "parse.yacc"
+case 76:
+#line 806 "parse.yacc"
{ ; }
break;
-case 79:
-#line 808 "parse.yacc"
+case 80:
+#line 814 "parse.yacc"
{
if (printmatches == TRUE) {
in_alias = TRUE;
}
}
break;
-case 80:
-#line 816 "parse.yacc"
+case 81:
+#line 822 "parse.yacc"
{
if ((yyvsp[0].BOOLEAN != NOMATCH || pedantic) &&
!add_alias(yyvsp[-3].string, RUNAS_ALIAS, yyvsp[0].BOOLEAN)) {
in_alias = FALSE;
}
break;
-case 83:
-#line 833 "parse.yacc"
+case 84:
+#line 839 "parse.yacc"
{ push; }
break;
-case 84:
-#line 833 "parse.yacc"
+case 85:
+#line 839 "parse.yacc"
{
if ((MATCHED(user_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, USER_ALIAS, user_matches)) {
efree(yyvsp[-3].string);
}
break;
-case 87:
-#line 848 "parse.yacc"
+case 88:
+#line 854 "parse.yacc"
{
SETMATCH(user_matches, yyvsp[0].BOOLEAN);
}
break;
-case 88:
-#line 851 "parse.yacc"
+case 89:
+#line 857 "parse.yacc"
{
SETNMATCH(user_matches, yyvsp[0].BOOLEAN);
}
break;
-case 89:
-#line 856 "parse.yacc"
+case 90:
+#line 862 "parse.yacc"
{
if (userpw_matches(yyvsp[0].string, user_name, sudo_user.pw))
yyval.BOOLEAN = TRUE;
efree(yyvsp[0].string);
}
break;
-case 90:
-#line 863 "parse.yacc"
+case 91:
+#line 869 "parse.yacc"
{
if (usergr_matches(yyvsp[0].string, user_name, sudo_user.pw))
yyval.BOOLEAN = TRUE;
efree(yyvsp[0].string);
}
break;
-case 91:
-#line 870 "parse.yacc"
+case 92:
+#line 876 "parse.yacc"
{
if (netgr_matches(yyvsp[0].string, NULL, NULL, user_name))
yyval.BOOLEAN = TRUE;
efree(yyvsp[0].string);
}
break;
-case 92:
-#line 877 "parse.yacc"
+case 93:
+#line 883 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, USER_ALIAS);
efree(yyvsp[0].string);
}
break;
-case 93:
-#line 899 "parse.yacc"
+case 94:
+#line 905 "parse.yacc"
{
yyval.BOOLEAN = TRUE;
}
break;
-#line 1943 "sudo.tab.c"
+#line 1954 "sudo.tab.c"
}
yyssp -= yym;
yystate = *yyssp;