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

View File

@ -978,6 +978,27 @@ cmnd : ALL {
parser_leak_remove(LEAK_PTR, $1.args); parser_leak_remove(LEAK_PTR, $1.args);
parser_leak_add(LEAK_MEMBER, $$); 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 hostaliases : hostalias

File diff suppressed because it is too large Load Diff

View File

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