2
0
mirror of https://github.com/sudo-project/sudo.git synced 2025-08-22 01:49:11 +00:00

Move handling of the "list" pseudo-command from lexer to parser.

The special handling of "list" in the lexer meant it could not
be used as a user, group or host, which was unintentional.
GitHub issue #246.
This commit is contained in:
Todd C. Miller 2023-02-28 08:47:45 -07:00
parent 6c97b84c0c
commit 0197491e9c
4 changed files with 2678 additions and 2653 deletions

View File

@ -810,7 +810,7 @@ union yyalloc
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 89
#define YYFINAL 90
/* YYLAST -- Last index in YYTABLE. */
#define YYLAST 332
@ -819,9 +819,9 @@ union yyalloc
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 55
/* YYNRULES -- Number of rules. */
#define YYNRULES 154
#define YYNRULES 155
/* YYNSTATES -- Number of states. */
#define YYNSTATES 255
#define YYNSTATES 256
/* YYMAXUTOK -- Last valid token kind. */
#define YYMAXUTOK 310
@ -887,11 +887,11 @@ static const yytype_int16 yyrline[] =
793, 794, 795, 798, 804, 807, 812, 817, 826, 835,
847, 854, 861, 868, 875, 884, 887, 890, 893, 896,
899, 902, 905, 908, 911, 914, 917, 920, 923, 926,
929, 932, 937, 951, 960, 983, 984, 987, 987, 999,
1002, 1003, 1010, 1011, 1014, 1014, 1026, 1029, 1030, 1037,
1038, 1041, 1041, 1053, 1056, 1057, 1060, 1060, 1072, 1075,
1076, 1083, 1087, 1093, 1102, 1110, 1119, 1128, 1139, 1140,
1147, 1151, 1157, 1166, 1174
929, 932, 937, 951, 960, 981, 1004, 1005, 1008, 1008,
1020, 1023, 1024, 1031, 1032, 1035, 1035, 1047, 1050, 1051,
1058, 1059, 1062, 1062, 1074, 1077, 1078, 1081, 1081, 1093,
1096, 1097, 1104, 1108, 1114, 1123, 1131, 1140, 1149, 1160,
1161, 1168, 1172, 1178, 1187, 1195
};
#endif
@ -938,7 +938,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
}
#endif
#define YYPACT_NINF (-115)
#define YYPACT_NINF (-116)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@ -952,32 +952,32 @@ yysymbol_name (yysymbol_kind_t yysymbol)
STATE-NUM. */
static const yytype_int16 yypact[] =
{
177, -29, -115, -115, -115, -115, 46, 47, 9, 241,
245, 245, 6, -115, 32, 75, 89, 117, 192, -115,
41, 221, -115, -115, -115, 69, -115, -115, -115, 10,
11, 238, 96, 30, -115, -115, -115, -115, -115, -115,
258, -115, -115, 8, 54, 54, -115, -115, -115, 101,
21, 35, 42, 80, -115, 12, -115, -115, -115, 56,
-115, -115, -115, -115, -115, -115, -115, -115, -115, -115,
-115, -115, -115, 68, 53, -115, -115, 98, 55, -115,
-115, 116, 67, -115, -115, 119, 111, -115, -115, -115,
-115, 245, 114, -115, -3, 107, -115, 133, -115, 127,
173, 174, -115, 9, -115, -115, 241, 156, 157, 161,
-115, 195, 196, 197, 199, 209, -115, 6, 169, 126,
241, 32, -115, 178, 6, 75, -115, 180, 245, 89,
-115, 183, 245, 117, -115, -115, 38, -115, 172, -115,
-115, -115, -115, -115, -115, -115, -115, -115, -115, -115,
-115, -115, -115, -115, -115, -115, 241, 186, -115, 6,
190, -115, 245, 200, -115, 245, 200, -115, -115, -115,
235, 205, -115, -115, 186, 190, 200, 200, 153, 194,
76, 172, 243, -115, -115, -115, 103, 210, -115, -115,
-115, 153, -115, 220, 226, 236, 240, 244, 246, 248,
249, 250, 251, -115, -115, -115, -115, -115, -115, -115,
-115, -115, -115, 1, -115, 153, 210, 252, 276, 294,
295, 296, 297, 298, 299, 300, 301, -115, -115, -115,
-115, -115, -115, -115, -115, -115, -115, -115, -115, -115,
-115, -115, -115, -115, -115, -115, -115, -115, -115, -115,
-115, -115, -115, -115, -115
174, -29, -116, -116, -116, -116, 35, 38, 11, 239,
150, 150, 8, -116, 32, 76, 88, 114, 254, -116,
58, 218, -116, -116, -116, 70, -116, -116, -116, 12,
13, 136, 73, 14, -116, -116, -116, -116, -116, -116,
276, -116, -116, 4, 10, 10, -116, -116, -116, -116,
190, 42, 81, 85, 97, -116, 64, -116, -116, -116,
52, -116, -116, -116, -116, -116, -116, -116, -116, -116,
-116, -116, -116, -116, 57, 2, -116, -116, 111, 9,
-116, -116, 112, 56, -116, -116, 123, 61, -116, -116,
-116, -116, 150, 62, -116, 75, 90, -116, 130, -116,
188, 204, 205, -116, 11, -116, -116, 239, 55, 66,
108, -116, 207, 210, 213, 228, 143, -116, 8, 155,
175, 239, 32, -116, 209, 8, 76, -116, 211, 150,
88, -116, 217, 150, 114, -116, -116, 194, -116, 202,
-116, -116, -116, -116, -116, -116, -116, -116, -116, -116,
-116, -116, -116, -116, -116, -116, -116, 239, 225, -116,
8, 227, -116, 150, 229, -116, 150, 229, -116, -116,
-116, 233, 230, -116, -116, 225, 227, 229, 229, 235,
232, 121, 202, 240, -116, -116, -116, 255, 238, -116,
-116, -116, 235, -116, 234, 236, 244, 246, 247, 260,
261, 262, 263, 264, -116, -116, -116, -116, -116, -116,
-116, -116, -116, -116, 1, -116, 235, 238, 241, 296,
297, 298, 299, 300, 302, 303, 304, 305, -116, -116,
-116, -116, -116, -116, -116, -116, -116, -116, -116, -116,
-116, -116, -116, -116, -116, -116, -116, -116, -116, -116,
-116, -116, -116, -116, -116, -116
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@ -985,54 +985,54 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
0, 0, 143, 145, 146, 147, 0, 0, 0, 0,
0, 0, 0, 144, 0, 0, 0, 0, 0, 6,
0, 0, 4, 8, 9, 0, 139, 141, 7, 0,
0, 0, 144, 146, 147, 148, 0, 0, 0, 0,
0, 0, 0, 145, 0, 0, 0, 0, 0, 6,
0, 0, 4, 8, 9, 0, 140, 142, 7, 0,
0, 26, 0, 0, 24, 37, 40, 39, 41, 38,
0, 120, 35, 0, 0, 0, 114, 113, 112, 0,
0, 0, 0, 0, 49, 0, 127, 51, 53, 0,
117, 72, 73, 74, 79, 78, 82, 80, 81, 75,
76, 77, 83, 0, 0, 115, 124, 0, 0, 122,
136, 0, 0, 134, 131, 0, 0, 129, 142, 1,
5, 0, 0, 31, 0, 0, 20, 0, 22, 0,
0, 0, 27, 0, 15, 36, 0, 0, 0, 0,
54, 0, 0, 0, 0, 0, 52, 0, 0, 0,
0, 0, 12, 0, 0, 0, 13, 0, 0, 0,
11, 0, 0, 0, 14, 140, 0, 10, 65, 21,
23, 28, 29, 30, 25, 121, 18, 16, 17, 45,
46, 47, 48, 50, 128, 19, 0, 119, 116, 0,
126, 123, 0, 138, 135, 0, 133, 130, 33, 32,
67, 34, 42, 84, 118, 125, 137, 132, 71, 0,
68, 65, 95, 152, 154, 153, 0, 70, 148, 150,
66, 0, 43, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 85, 86, 89, 87, 88, 90, 91,
92, 93, 94, 0, 151, 0, 69, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 96, 97, 98,
99, 102, 103, 104, 105, 106, 107, 110, 111, 108,
109, 100, 101, 44, 149, 56, 55, 61, 60, 62,
63, 64, 57, 58, 59
0, 121, 35, 0, 0, 0, 114, 113, 115, 112,
0, 0, 0, 0, 0, 49, 0, 128, 51, 53,
0, 118, 72, 73, 74, 79, 78, 82, 80, 81,
75, 76, 77, 83, 0, 0, 116, 125, 0, 0,
123, 137, 0, 0, 135, 132, 0, 0, 130, 143,
1, 5, 0, 0, 31, 0, 0, 20, 0, 22,
0, 0, 0, 27, 0, 15, 36, 0, 0, 0,
0, 54, 0, 0, 0, 0, 0, 52, 0, 0,
0, 0, 0, 12, 0, 0, 0, 13, 0, 0,
0, 11, 0, 0, 0, 14, 141, 0, 10, 65,
21, 23, 28, 29, 30, 25, 122, 18, 16, 17,
45, 46, 47, 48, 50, 129, 19, 0, 120, 117,
0, 127, 124, 0, 139, 136, 0, 134, 131, 33,
32, 67, 34, 42, 84, 119, 126, 138, 133, 71,
0, 68, 65, 95, 153, 155, 154, 0, 70, 149,
151, 66, 0, 43, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 85, 86, 89, 87, 88, 90,
91, 92, 93, 94, 0, 152, 0, 69, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 96, 97,
98, 99, 102, 103, 104, 105, 106, 107, 110, 111,
108, 109, 100, 101, 44, 150, 56, 55, 61, 60,
62, 63, 64, 57, 58, 59
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
-115, -115, -115, 290, -115, -115, 120, 211, -115, 176,
207, 275, -115, 135, 202, -115, -114, 263, -115, -115,
-115, -115, -115, -115, -115, -115, -115, -115, -115, -115,
-115, -9, -115, -115, 270, -115, 201, -115, -7, -115,
198, -115, -107, -115, 187, -115, -115, 203, -115, -10,
230, 306, 134, 112, 140
-116, -116, -116, 294, -116, -116, -6, 212, -116, 180,
214, 278, -116, 137, 206, -116, -115, 267, -116, -116,
-116, -116, -116, -116, -116, -116, -116, -116, -116, -116,
-116, -9, -116, -116, 270, -116, 203, -116, -7, -116,
198, -116, -85, -116, 192, -116, -116, 197, -116, -10,
237, 310, 138, 115, 145
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_uint8 yydefgoto[] =
{
0, 20, 21, 22, 23, 24, 33, 34, 92, 93,
41, 42, 171, 172, 54, 55, 56, 57, 203, 204,
205, 206, 207, 208, 209, 210, 211, 212, 173, 179,
72, 73, 182, 213, 58, 74, 75, 119, 94, 78,
79, 123, 59, 86, 87, 131, 82, 83, 127, 25,
26, 27, 187, 188, 189
0, 20, 21, 22, 23, 24, 33, 34, 93, 94,
41, 42, 172, 173, 55, 56, 57, 58, 204, 205,
206, 207, 208, 209, 210, 211, 212, 213, 174, 180,
73, 74, 183, 214, 59, 75, 76, 120, 95, 79,
80, 124, 60, 87, 88, 132, 83, 84, 128, 25,
26, 27, 188, 189, 190
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@ -1040,78 +1040,78 @@ static const yytype_uint8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
44, 45, 43, 154, 46, 47, 77, 81, 85, 46,
47, 95, 97, 31, 31, 46, 47, 160, 28, 227,
228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
238, 239, 240, 241, 242, 48, 60, 138, 106, 168,
48, 89, 35, 49, 36, 37, 48, 38, 49, 106,
32, 32, 175, 115, 49, 29, 30, 96, 98, 31,
111, 31, 50, 51, 52, 53, 61, 50, 51, 52,
53, 103, 39, 35, 112, 36, 37, 104, 38, 76,
40, 113, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 121, 80, 125, 91, 32, 117, 32, 243,
122, 102, 126, 39, 46, 47, 129, 183, 120, 61,
91, 40, 184, 157, 130, 191, 77, 91, 163, 114,
81, 84, 166, 61, 85, 62, 63, 64, 65, 66,
67, 68, 69, 70, 71, 48, 141, 185, 124, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 174,
133, 61, 176, 136, 139, 177, 128, 183, 134, 132,
180, 137, 184, 107, 108, 109, 156, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, -2, 1, 118,
140, 2, 142, 143, 3, 4, 5, 185, 6, 7,
8, 9, 10, 11, 12, 186, 2, 103, 103, 3,
4, 5, 103, 146, 147, 149, 150, 151, 148, 152,
103, 13, 14, 15, 16, 17, 155, 170, 159, 18,
162, -3, 1, 165, 19, 2, 13, 106, 3, 4,
5, 117, 6, 7, 8, 9, 10, 11, 12, 2,
190, 91, 3, 4, 5, 35, 181, 36, 37, 2,
38, 215, 3, 4, 5, 13, 14, 15, 16, 17,
217, 245, 35, 18, 36, 37, 218, 38, 19, 13,
50, 51, 52, 53, 178, 39, 219, 18, 99, 13,
220, 100, 101, 40, 221, 246, 222, 18, 223, 224,
225, 226, 39, 193, 194, 195, 196, 197, 198, 199,
200, 201, 202, 247, 248, 249, 250, 251, 252, 253,
254, 90, 169, 145, 144, 105, 192, 153, 116, 110,
167, 135, 158, 161, 88, 216, 214, 244, 0, 0,
0, 0, 164
44, 45, 43, 155, 46, 47, 78, 82, 86, 31,
48, 46, 47, 96, 98, 31, 31, 48, 28, 228,
229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
239, 240, 241, 242, 243, 49, 61, 108, 109, 110,
161, 122, 49, 50, 29, 107, 32, 30, 126, 123,
50, 92, 32, 32, 119, 104, 127, 31, 90, 97,
99, 105, 51, 52, 53, 54, 62, 46, 47, 51,
52, 53, 54, 48, 35, 176, 36, 37, 103, 38,
77, 112, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 81, 118, 32, 130, 104, 121, 49, 244,
134, 137, 147, 131, 39, 116, 50, 104, 135, 138,
62, 92, 40, 148, 158, 139, 107, 78, 85, 164,
113, 82, 62, 167, 114, 86, 63, 64, 65, 66,
67, 68, 69, 70, 71, 72, 115, 140, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 62, 104,
175, 125, 129, 177, 2, 149, 178, 3, 4, 5,
192, 181, 92, 133, 63, 64, 65, 66, 67, 68,
69, 70, 71, 72, -2, 1, 100, 141, 2, 101,
102, 3, 4, 5, 13, 6, 7, 8, 9, 10,
11, 12, 18, 46, 47, 169, 104, 142, 35, 48,
36, 37, 156, 38, 51, 52, 53, 54, 13, 14,
15, 16, 17, 143, 144, 157, 18, 150, -3, 1,
151, 19, 2, 152, 49, 3, 4, 5, 39, 6,
7, 8, 9, 10, 11, 12, 40, 2, 153, 184,
3, 4, 5, 35, 185, 36, 37, 171, 38, 160,
246, 163, 13, 14, 15, 16, 17, 166, 2, 184,
18, 3, 4, 5, 185, 19, 107, 13, 118, 186,
92, 182, 179, 39, 218, 18, 219, 187, 191, 216,
35, 40, 36, 37, 220, 38, 221, 222, 13, 186,
194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
223, 224, 225, 226, 227, 247, 248, 249, 250, 251,
39, 252, 253, 254, 255, 91, 145, 170, 106, 193,
111, 146, 154, 117, 162, 159, 168, 165, 89, 136,
217, 245, 215
};
static const yytype_int16 yycheck[] =
static const yytype_uint8 yycheck[] =
{
10, 11, 9, 117, 3, 4, 15, 16, 17, 3,
4, 1, 1, 5, 5, 3, 4, 124, 47, 18,
10, 11, 9, 118, 3, 4, 15, 16, 17, 5,
9, 3, 4, 1, 1, 5, 5, 9, 47, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 4, 40, 41, 1,
34, 0, 4, 42, 6, 7, 34, 9, 42, 41,
42, 42, 159, 41, 42, 9, 9, 47, 47, 5,
39, 5, 61, 62, 63, 64, 34, 61, 62, 63,
64, 41, 34, 4, 39, 6, 7, 47, 9, 4,
42, 39, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 39, 4, 39, 41, 42, 41, 42, 213,
47, 5, 47, 34, 3, 4, 39, 4, 40, 34,
41, 42, 9, 120, 47, 39, 125, 41, 128, 39,
129, 4, 132, 34, 133, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 34, 9, 34, 40, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 156,
39, 34, 162, 39, 47, 165, 40, 4, 47, 40,
170, 47, 9, 43, 44, 45, 40, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 0, 1, 59,
47, 4, 9, 9, 7, 8, 9, 34, 11, 12,
13, 14, 15, 16, 17, 42, 4, 41, 41, 7,
8, 9, 41, 47, 47, 10, 10, 10, 47, 10,
41, 34, 35, 36, 37, 38, 47, 45, 40, 42,
40, 0, 1, 40, 47, 4, 34, 41, 7, 8,
9, 41, 11, 12, 13, 14, 15, 16, 17, 4,
46, 41, 7, 8, 9, 4, 41, 6, 7, 4,
9, 41, 7, 8, 9, 34, 35, 36, 37, 38,
40, 9, 4, 42, 6, 7, 40, 9, 47, 34,
61, 62, 63, 64, 39, 34, 40, 42, 40, 34,
40, 43, 44, 42, 40, 9, 40, 42, 40, 40,
40, 40, 34, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 9, 9, 9, 9, 9, 9, 9,
9, 21, 136, 106, 103, 40, 181, 115, 55, 49,
133, 91, 121, 125, 18, 191, 186, 215, -1, -1,
-1, -1, 129
29, 30, 31, 32, 33, 34, 4, 43, 44, 45,
125, 39, 34, 42, 9, 41, 42, 9, 39, 47,
42, 41, 42, 42, 60, 41, 47, 5, 0, 47,
47, 47, 61, 62, 63, 64, 34, 3, 4, 61,
62, 63, 64, 9, 4, 160, 6, 7, 5, 9,
4, 39, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 4, 41, 42, 39, 41, 40, 34, 214,
39, 39, 47, 47, 34, 41, 42, 41, 47, 47,
34, 41, 42, 47, 121, 40, 41, 126, 4, 129,
39, 130, 34, 133, 39, 134, 50, 51, 52, 53,
54, 55, 56, 57, 58, 59, 39, 47, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 34, 41,
157, 40, 40, 163, 4, 47, 166, 7, 8, 9,
39, 171, 41, 40, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 0, 1, 40, 47, 4, 43,
44, 7, 8, 9, 34, 11, 12, 13, 14, 15,
16, 17, 42, 3, 4, 1, 41, 9, 4, 9,
6, 7, 47, 9, 61, 62, 63, 64, 34, 35,
36, 37, 38, 9, 9, 40, 42, 10, 0, 1,
10, 47, 4, 10, 34, 7, 8, 9, 34, 11,
12, 13, 14, 15, 16, 17, 42, 4, 10, 4,
7, 8, 9, 4, 9, 6, 7, 45, 9, 40,
9, 40, 34, 35, 36, 37, 38, 40, 4, 4,
42, 7, 8, 9, 9, 47, 41, 34, 41, 34,
41, 41, 39, 34, 40, 42, 40, 42, 46, 41,
4, 42, 6, 7, 40, 9, 40, 40, 34, 34,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
40, 40, 40, 40, 40, 9, 9, 9, 9, 9,
34, 9, 9, 9, 9, 21, 104, 137, 40, 182,
50, 107, 116, 56, 126, 122, 134, 130, 18, 92,
192, 216, 187
};
/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
@ -1122,28 +1122,28 @@ static const yytype_int8 yystos[] =
15, 16, 17, 34, 35, 36, 37, 38, 42, 47,
66, 67, 68, 69, 70, 114, 115, 116, 47, 9,
9, 5, 42, 71, 72, 4, 6, 7, 9, 34,
42, 75, 76, 103, 114, 114, 3, 4, 34, 42,
61, 62, 63, 64, 79, 80, 81, 82, 99, 107,
4, 34, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 95, 96, 100, 101, 4, 96, 104, 105,
4, 96, 111, 112, 4, 96, 108, 109, 116, 0,
68, 41, 73, 74, 103, 1, 47, 1, 47, 40,
43, 44, 5, 41, 47, 76, 41, 71, 71, 71,
99, 39, 39, 39, 39, 41, 82, 41, 71, 102,
40, 39, 47, 106, 40, 39, 47, 113, 40, 39,
47, 110, 40, 39, 47, 115, 39, 47, 40, 47,
47, 9, 9, 9, 72, 75, 47, 47, 47, 10,
10, 10, 10, 79, 81, 47, 40, 103, 101, 40,
107, 105, 40, 114, 112, 40, 114, 109, 1, 74,
45, 77, 78, 93, 103, 107, 114, 114, 39, 94,
114, 41, 97, 4, 9, 34, 42, 117, 118, 119,
46, 39, 78, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 83, 84, 85, 86, 87, 88, 89,
90, 91, 92, 98, 119, 41, 117, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 81, 118, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9
42, 75, 76, 103, 114, 114, 3, 4, 9, 34,
42, 61, 62, 63, 64, 79, 80, 81, 82, 99,
107, 4, 34, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 95, 96, 100, 101, 4, 96, 104,
105, 4, 96, 111, 112, 4, 96, 108, 109, 116,
0, 68, 41, 73, 74, 103, 1, 47, 1, 47,
40, 43, 44, 5, 41, 47, 76, 41, 71, 71,
71, 99, 39, 39, 39, 39, 41, 82, 41, 71,
102, 40, 39, 47, 106, 40, 39, 47, 113, 40,
39, 47, 110, 40, 39, 47, 115, 39, 47, 40,
47, 47, 9, 9, 9, 72, 75, 47, 47, 47,
10, 10, 10, 10, 79, 81, 47, 40, 103, 101,
40, 107, 105, 40, 114, 112, 40, 114, 109, 1,
74, 45, 77, 78, 93, 103, 107, 114, 114, 39,
94, 114, 41, 97, 4, 9, 34, 42, 117, 118,
119, 46, 39, 78, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 83, 84, 85, 86, 87, 88,
89, 90, 91, 92, 98, 119, 41, 117, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 81, 118, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9
};
/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
@ -1160,11 +1160,11 @@ static const yytype_int8 yyr1[] =
95, 95, 95, 96, 97, 97, 97, 97, 97, 97,
97, 97, 97, 97, 97, 98, 98, 98, 98, 98,
98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
98, 98, 99, 99, 99, 100, 100, 102, 101, 101,
103, 103, 104, 104, 106, 105, 105, 107, 107, 108,
108, 110, 109, 109, 111, 111, 113, 112, 112, 114,
114, 115, 115, 116, 116, 116, 116, 116, 117, 117,
118, 118, 119, 119, 119
98, 98, 99, 99, 99, 99, 100, 100, 102, 101,
101, 103, 103, 104, 104, 106, 105, 105, 107, 107,
108, 108, 110, 109, 109, 111, 111, 113, 112, 112,
114, 114, 115, 115, 116, 116, 116, 116, 116, 117,
117, 118, 118, 119, 119, 119
};
/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
@ -1181,11 +1181,11 @@ static const yytype_int8 yyr2[] =
1, 1, 1, 1, 0, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 0, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 1, 1, 1, 1, 3, 0, 4, 3,
1, 3, 1, 3, 0, 4, 3, 1, 3, 1,
3, 0, 4, 3, 1, 3, 0, 4, 3, 1,
3, 1, 2, 1, 1, 1, 1, 1, 1, 3,
1, 2, 1, 1, 1
2, 2, 1, 1, 1, 1, 1, 3, 0, 4,
3, 1, 3, 1, 3, 0, 4, 3, 1, 3,
1, 3, 0, 4, 3, 1, 3, 0, 4, 3,
1, 3, 1, 2, 1, 1, 1, 1, 1, 1,
3, 1, 2, 1, 1, 1
};
@ -2886,17 +2886,43 @@ yyreduce:
#line 2881 "gram.c"
break;
case 117: /* $@1: %empty */
#line 987 "gram.y"
case 115: /* cmnd: WORD */
#line 981 "gram.y"
{
if (strcmp((yyvsp[0].string), "list") == 0) {
struct sudo_command *c;
if ((c = new_command((yyvsp[0].string), NULL)) == NULL) {
sudoerserror(N_("unable to allocate memory"));
YYERROR;
}
(yyval.member) = new_member((char *)c, COMMAND);
if ((yyval.member) == NULL) {
free(c);
sudoerserror(N_("unable to allocate memory"));
YYERROR;
}
parser_leak_remove(LEAK_PTR, (yyvsp[0].string));
parser_leak_add(LEAK_MEMBER, (yyval.member));
} else {
sudoerserror(N_("expected a fully-qualified path name"));
YYERROR;
}
}
#line 2907 "gram.c"
break;
case 118: /* $@1: %empty */
#line 1008 "gram.y"
{
alias_line = this_lineno;
alias_column = sudolinebuf.toke_start + 1;
}
#line 2890 "gram.c"
#line 2916 "gram.c"
break;
case 118: /* hostalias: ALIAS $@1 '=' hostlist */
#line 990 "gram.y"
case 119: /* hostalias: ALIAS $@1 '=' hostlist */
#line 1011 "gram.y"
{
if (!alias_add(&parsed_policy, (yyvsp[-3].string), HOSTALIAS,
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
@ -2906,30 +2932,30 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
}
#line 2904 "gram.c"
#line 2930 "gram.c"
break;
case 121: /* hostlist: hostlist ',' ophost */
#line 1003 "gram.y"
case 122: /* hostlist: hostlist ',' ophost */
#line 1024 "gram.y"
{
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries);
(yyval.member) = (yyvsp[-2].member);
}
#line 2914 "gram.c"
#line 2940 "gram.c"
break;
case 124: /* $@2: %empty */
#line 1014 "gram.y"
case 125: /* $@2: %empty */
#line 1035 "gram.y"
{
alias_line = this_lineno;
alias_column = sudolinebuf.toke_start + 1;
}
#line 2923 "gram.c"
#line 2949 "gram.c"
break;
case 125: /* cmndalias: ALIAS $@2 '=' cmndlist */
#line 1017 "gram.y"
case 126: /* cmndalias: ALIAS $@2 '=' cmndlist */
#line 1038 "gram.y"
{
if (!alias_add(&parsed_policy, (yyvsp[-3].string), CMNDALIAS,
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
@ -2939,30 +2965,30 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
}
#line 2937 "gram.c"
#line 2963 "gram.c"
break;
case 128: /* cmndlist: cmndlist ',' digcmnd */
#line 1030 "gram.y"
case 129: /* cmndlist: cmndlist ',' digcmnd */
#line 1051 "gram.y"
{
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries);
(yyval.member) = (yyvsp[-2].member);
}
#line 2947 "gram.c"
#line 2973 "gram.c"
break;
case 131: /* $@3: %empty */
#line 1041 "gram.y"
case 132: /* $@3: %empty */
#line 1062 "gram.y"
{
alias_line = this_lineno;
alias_column = sudolinebuf.toke_start + 1;
}
#line 2956 "gram.c"
#line 2982 "gram.c"
break;
case 132: /* runasalias: ALIAS $@3 '=' userlist */
#line 1044 "gram.y"
case 133: /* runasalias: ALIAS $@3 '=' userlist */
#line 1065 "gram.y"
{
if (!alias_add(&parsed_policy, (yyvsp[-3].string), RUNASALIAS,
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
@ -2972,20 +2998,20 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
}
#line 2970 "gram.c"
#line 2996 "gram.c"
break;
case 136: /* $@4: %empty */
#line 1060 "gram.y"
case 137: /* $@4: %empty */
#line 1081 "gram.y"
{
alias_line = this_lineno;
alias_column = sudolinebuf.toke_start + 1;
}
#line 2979 "gram.c"
#line 3005 "gram.c"
break;
case 137: /* useralias: ALIAS $@4 '=' userlist */
#line 1063 "gram.y"
case 138: /* useralias: ALIAS $@4 '=' userlist */
#line 1084 "gram.y"
{
if (!alias_add(&parsed_policy, (yyvsp[-3].string), USERALIAS,
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
@ -2995,39 +3021,39 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
}
#line 2993 "gram.c"
#line 3019 "gram.c"
break;
case 140: /* userlist: userlist ',' opuser */
#line 1076 "gram.y"
case 141: /* userlist: userlist ',' opuser */
#line 1097 "gram.y"
{
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries);
(yyval.member) = (yyvsp[-2].member);
}
#line 3003 "gram.c"
#line 3029 "gram.c"
break;
case 141: /* opuser: user */
#line 1083 "gram.y"
case 142: /* opuser: user */
#line 1104 "gram.y"
{
(yyval.member) = (yyvsp[0].member);
(yyval.member)->negated = false;
}
#line 3012 "gram.c"
#line 3038 "gram.c"
break;
case 142: /* opuser: '!' user */
#line 1087 "gram.y"
case 143: /* opuser: '!' user */
#line 1108 "gram.y"
{
(yyval.member) = (yyvsp[0].member);
(yyval.member)->negated = true;
}
#line 3021 "gram.c"
#line 3047 "gram.c"
break;
case 143: /* user: ALIAS */
#line 1093 "gram.y"
case 144: /* user: ALIAS */
#line 1114 "gram.y"
{
(yyval.member) = new_member((yyvsp[0].string), ALIAS);
if ((yyval.member) == NULL) {
@ -3037,11 +3063,11 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[0].string));
parser_leak_add(LEAK_MEMBER, (yyval.member));
}
#line 3035 "gram.c"
#line 3061 "gram.c"
break;
case 144: /* user: ALL */
#line 1102 "gram.y"
case 145: /* user: ALL */
#line 1123 "gram.y"
{
(yyval.member) = new_member(NULL, ALL);
if ((yyval.member) == NULL) {
@ -3050,11 +3076,11 @@ yyreduce:
}
parser_leak_add(LEAK_MEMBER, (yyval.member));
}
#line 3048 "gram.c"
#line 3074 "gram.c"
break;
case 145: /* user: NETGROUP */
#line 1110 "gram.y"
case 146: /* user: NETGROUP */
#line 1131 "gram.y"
{
(yyval.member) = new_member((yyvsp[0].string), NETGROUP);
if ((yyval.member) == NULL) {
@ -3064,11 +3090,11 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[0].string));
parser_leak_add(LEAK_MEMBER, (yyval.member));
}
#line 3062 "gram.c"
#line 3088 "gram.c"
break;
case 146: /* user: USERGROUP */
#line 1119 "gram.y"
case 147: /* user: USERGROUP */
#line 1140 "gram.y"
{
(yyval.member) = new_member((yyvsp[0].string), USERGROUP);
if ((yyval.member) == NULL) {
@ -3078,11 +3104,11 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[0].string));
parser_leak_add(LEAK_MEMBER, (yyval.member));
}
#line 3076 "gram.c"
#line 3102 "gram.c"
break;
case 147: /* user: WORD */
#line 1128 "gram.y"
case 148: /* user: WORD */
#line 1149 "gram.y"
{
(yyval.member) = new_member((yyvsp[0].string), WORD);
if ((yyval.member) == NULL) {
@ -3092,39 +3118,39 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[0].string));
parser_leak_add(LEAK_MEMBER, (yyval.member));
}
#line 3090 "gram.c"
#line 3116 "gram.c"
break;
case 149: /* grouplist: grouplist ',' opgroup */
#line 1140 "gram.y"
case 150: /* grouplist: grouplist ',' opgroup */
#line 1161 "gram.y"
{
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries);
(yyval.member) = (yyvsp[-2].member);
}
#line 3100 "gram.c"
#line 3126 "gram.c"
break;
case 150: /* opgroup: group */
#line 1147 "gram.y"
case 151: /* opgroup: group */
#line 1168 "gram.y"
{
(yyval.member) = (yyvsp[0].member);
(yyval.member)->negated = false;
}
#line 3109 "gram.c"
#line 3135 "gram.c"
break;
case 151: /* opgroup: '!' group */
#line 1151 "gram.y"
case 152: /* opgroup: '!' group */
#line 1172 "gram.y"
{
(yyval.member) = (yyvsp[0].member);
(yyval.member)->negated = true;
}
#line 3118 "gram.c"
#line 3144 "gram.c"
break;
case 152: /* group: ALIAS */
#line 1157 "gram.y"
case 153: /* group: ALIAS */
#line 1178 "gram.y"
{
(yyval.member) = new_member((yyvsp[0].string), ALIAS);
if ((yyval.member) == NULL) {
@ -3134,11 +3160,11 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[0].string));
parser_leak_add(LEAK_MEMBER, (yyval.member));
}
#line 3132 "gram.c"
#line 3158 "gram.c"
break;
case 153: /* group: ALL */
#line 1166 "gram.y"
case 154: /* group: ALL */
#line 1187 "gram.y"
{
(yyval.member) = new_member(NULL, ALL);
if ((yyval.member) == NULL) {
@ -3147,11 +3173,11 @@ yyreduce:
}
parser_leak_add(LEAK_MEMBER, (yyval.member));
}
#line 3145 "gram.c"
#line 3171 "gram.c"
break;
case 154: /* group: WORD */
#line 1174 "gram.y"
case 155: /* group: WORD */
#line 1195 "gram.y"
{
(yyval.member) = new_member((yyvsp[0].string), WORD);
if ((yyval.member) == NULL) {
@ -3161,11 +3187,11 @@ yyreduce:
parser_leak_remove(LEAK_PTR, (yyvsp[0].string));
parser_leak_add(LEAK_MEMBER, (yyval.member));
}
#line 3159 "gram.c"
#line 3185 "gram.c"
break;
#line 3163 "gram.c"
#line 3189 "gram.c"
default: break;
}
@ -3358,7 +3384,7 @@ yyreturnlab:
return yyresult;
}
#line 1184 "gram.y"
#line 1205 "gram.y"
/* Like yyerror() but takes a printf-style format string. */
void

View File

@ -978,6 +978,27 @@ cmnd : ALL {
parser_leak_remove(LEAK_PTR, $1.args);
parser_leak_add(LEAK_MEMBER, $$);
}
| WORD {
if (strcmp($1, "list") == 0) {
struct sudo_command *c;
if ((c = new_command($1, NULL)) == NULL) {
sudoerserror(N_("unable to allocate memory"));
YYERROR;
}
$$ = new_member((char *)c, COMMAND);
if ($$ == NULL) {
free(c);
sudoerserror(N_("unable to allocate memory"));
YYERROR;
}
parser_leak_remove(LEAK_PTR, $1);
parser_leak_add(LEAK_MEMBER, $$);
} else {
sudoerserror(N_("expected a fully-qualified path name"));
YYERROR;
}
}
;
hostaliases : hostalias

File diff suppressed because it is too large Load Diff

View File

@ -750,14 +750,6 @@ sha512 {
return SHA512_TOK;
}
list {
/* No command line args. */
LEXTRACE("COMMAND ");
if (!fill_cmnd(sudoerstext, sudoersleng))
yyterminate();
return COMMAND;
} /* sudo -l -U otheruser */
sudoedit {
BEGIN GOTCMND;
LEXTRACE("COMMAND ");