#define YY_NUM_RULES 27
#define YY_END_OF_BUFFER 28
-static yyconst short int yy_accept[182] =
+static yyconst short int yy_accept[184] =
{ 0,
0, 0, 0, 0, 0, 0, 28, 26, 1, 5,
9, 26, 26, 19, 26, 8, 12, 26, 25, 11,
10, 24, 24, 24, 26, 25, 7, 4, 7, 7,
7, 4, 7, 7, 7, 4, 4, 7, 7, 7,
26, 7, 26, 22, 21, 21, 20, 20, 20, 21,
- 1, 0, 6, 16, 15, 23, 25, 0, 25, 25,
- 0, 24, 24, 24, 0, 2, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 3, 3,
- 21, 21, 21, 21, 20, 20, 20, 0, 25, 18,
- 24, 24, 7, 7, 7, 7, 7, 21, 20, 20,
-
- 0, 0, 24, 24, 7, 7, 7, 7, 20, 20,
- 0, 0, 24, 24, 7, 7, 7, 7, 20, 20,
- 0, 0, 24, 24, 7, 7, 7, 7, 20, 20,
- 17, 0, 24, 0, 14, 7, 7, 7, 20, 0,
- 17, 24, 7, 7, 7, 20, 0, 17, 0, 13,
+ 1, 9, 0, 6, 16, 15, 23, 25, 0, 25,
+ 25, 0, 24, 24, 24, 0, 2, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 3, 3, 21, 21, 21, 21, 20, 20, 20, 0,
+ 25, 18, 24, 24, 7, 7, 7, 7, 7, 21,
+
+ 20, 20, 0, 0, 24, 24, 7, 7, 7, 7,
+ 20, 20, 0, 0, 24, 24, 7, 7, 7, 7,
+ 20, 20, 0, 0, 24, 24, 7, 7, 7, 7,
+ 20, 20, 17, 0, 24, 0, 14, 7, 7, 7,
+ 20, 0, 17, 24, 7, 7, 7, 20, 0, 17,
+ 0, 13, 7, 7, 0, 0, 7, 7, 0, 0,
7, 7, 0, 0, 7, 7, 0, 0, 7, 7,
- 0, 0, 7, 7, 0, 0, 7, 7, 0, 0,
- 7, 7, 17, 0, 7, 7, 17, 7, 17, 7,
- 0
+ 0, 0, 7, 7, 17, 0, 7, 7, 17, 7,
+ 17, 7, 0
} ;
static yyconst int yy_ec[256] =
4, 4, 4, 4, 2, 4, 4
} ;
-static yyconst short int yy_base[197] =
+static yyconst short int yy_base[199] =
{ 0,
- 0, 0, 27, 0, 54, 0, 445, 446, 442, 446,
- 446, 440, 0, 446, 0, 446, 446, 0, 70, 446,
- 446, 74, 76, 72, 88, 430, 0, 446, 0, 103,
- 130, 446, 0, 78, 157, 446, 0, 184, 420, 423,
- 93, 198, 0, 446, 0, 86, 202, 214, 85, 427,
- 436, 434, 446, 0, 0, 0, 424, 421, 216, 422,
- 0, 412, 111, 210, 157, 446, 0, 0, 0, 218,
- 224, 418, 417, 0, 241, 0, 408, 406, 184, 446,
- 0, 416, 225, 415, 405, 222, 248, 258, 413, 412,
- 256, 253, 266, 409, 410, 404, 397, 407, 258, 260,
-
- 404, 270, 264, 265, 403, 276, 393, 391, 270, 271,
- 282, 402, 276, 279, 289, 401, 389, 392, 281, 286,
- 396, 294, 288, 308, 395, 299, 377, 90, 293, 313,
- 305, 388, 301, 225, 446, 311, 387, 374, 311, 373,
- 313, 329, 363, 322, 331, 335, 326, 363, 337, 446,
- 329, 335, 328, 333, 307, 337, 341, 304, 342, 254,
- 242, 345, 237, 346, 349, 220, 350, 197, 185, 353,
- 180, 354, 168, 160, 153, 143, 131, 126, 446, 0,
- 446, 368, 124, 114, 374, 376, 378, 380, 385, 391,
- 396, 109, 399, 401, 403, 95
+ 0, 0, 27, 0, 54, 0, 449, 450, 446, 450,
+ 443, 443, 0, 450, 0, 450, 450, 0, 70, 450,
+ 450, 74, 76, 72, 88, 433, 0, 450, 440, 103,
+ 130, 450, 0, 78, 157, 450, 0, 184, 422, 425,
+ 93, 198, 0, 450, 0, 86, 202, 214, 85, 429,
+ 438, 435, 435, 450, 0, 0, 0, 425, 422, 216,
+ 423, 0, 413, 111, 210, 157, 450, 0, 429, 0,
+ 0, 218, 224, 418, 417, 0, 241, 0, 408, 406,
+ 184, 450, 0, 416, 225, 415, 405, 222, 248, 258,
+ 413, 412, 256, 253, 266, 409, 410, 404, 397, 407,
+
+ 258, 260, 404, 270, 264, 265, 403, 276, 393, 391,
+ 270, 271, 282, 402, 276, 279, 289, 401, 389, 392,
+ 281, 286, 396, 294, 288, 308, 395, 299, 377, 90,
+ 293, 313, 305, 388, 301, 225, 450, 311, 387, 374,
+ 311, 373, 313, 329, 363, 322, 331, 335, 326, 363,
+ 337, 450, 329, 335, 328, 333, 307, 337, 341, 304,
+ 342, 254, 242, 345, 237, 346, 349, 220, 350, 197,
+ 185, 353, 180, 354, 168, 160, 153, 143, 131, 126,
+ 450, 0, 450, 368, 124, 114, 374, 376, 378, 380,
+ 385, 391, 396, 109, 399, 401, 403, 95
} ;
-static yyconst short int yy_def[197] =
+static yyconst short int yy_def[199] =
{ 0,
- 181, 1, 181, 3, 181, 5, 181, 181, 181, 181,
- 181, 182, 183, 181, 184, 181, 181, 185, 186, 181,
- 181, 187, 187, 23, 181, 188, 189, 181, 189, 181,
- 181, 181, 189, 190, 181, 181, 189, 181, 38, 38,
- 191, 38, 192, 181, 192, 193, 194, 194, 48, 195,
- 181, 182, 181, 183, 184, 185, 186, 181, 186, 188,
- 196, 23, 23, 23, 181, 181, 189, 30, 31, 190,
- 35, 189, 35, 42, 181, 38, 38, 38, 181, 181,
- 192, 193, 193, 195, 48, 48, 48, 181, 186, 196,
- 23, 23, 189, 35, 75, 38, 38, 193, 48, 48,
-
- 181, 181, 23, 23, 189, 189, 38, 38, 48, 48,
- 181, 181, 23, 23, 189, 189, 38, 38, 48, 48,
- 181, 181, 23, 23, 189, 189, 38, 38, 48, 48,
- 181, 181, 23, 181, 181, 189, 189, 38, 48, 181,
- 181, 124, 189, 189, 38, 130, 181, 181, 181, 181,
- 189, 189, 181, 181, 189, 189, 181, 181, 189, 189,
- 181, 181, 189, 189, 181, 181, 189, 189, 181, 181,
- 189, 189, 181, 181, 189, 189, 181, 189, 181, 189,
- 0, 181, 181, 181, 181, 181, 181, 181, 181, 181,
- 181, 181, 181, 181, 181, 181
+ 183, 1, 183, 3, 183, 5, 183, 183, 183, 183,
+ 183, 184, 185, 183, 186, 183, 183, 187, 188, 183,
+ 183, 189, 189, 23, 183, 190, 191, 183, 191, 183,
+ 183, 183, 191, 192, 183, 183, 191, 183, 38, 38,
+ 193, 38, 194, 183, 194, 195, 196, 196, 48, 197,
+ 183, 183, 184, 183, 185, 186, 187, 188, 183, 188,
+ 190, 198, 23, 23, 23, 183, 183, 191, 191, 30,
+ 31, 192, 35, 191, 35, 42, 183, 38, 38, 38,
+ 183, 183, 194, 195, 195, 197, 48, 48, 48, 183,
+ 188, 198, 23, 23, 191, 35, 77, 38, 38, 195,
+
+ 48, 48, 183, 183, 23, 23, 191, 191, 38, 38,
+ 48, 48, 183, 183, 23, 23, 191, 191, 38, 38,
+ 48, 48, 183, 183, 23, 23, 191, 191, 38, 38,
+ 48, 48, 183, 183, 23, 183, 183, 191, 191, 38,
+ 48, 183, 183, 126, 191, 191, 38, 132, 183, 183,
+ 183, 183, 191, 191, 183, 183, 191, 191, 183, 183,
+ 191, 191, 183, 183, 191, 191, 183, 183, 191, 191,
+ 183, 183, 191, 191, 183, 183, 191, 191, 183, 191,
+ 183, 191, 0, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183
} ;
-static yyconst short int yy_nxt[474] =
+static yyconst short int yy_nxt[478] =
{ 0,
8, 9, 10, 11, 12, 13, 14, 8, 15, 16,
8, 17, 18, 19, 20, 21, 22, 22, 22, 23,
38, 41, 27, 42, 8, 9, 10, 11, 43, 13,
8, 44, 15, 16, 45, 17, 18, 46, 20, 21,
47, 47, 47, 48, 47, 49, 47, 47, 25, 45,
- 50, 58, 67, 59, 60, 61, 60, 61, 64, 65,
- 66, 134, 62, 67, 79, 66, 63, 58, 90, 83,
-
- 60, 87, 60, 67, 135, 85, 67, 67, 67, 67,
- 67, 67, 81, 68, 67, 67, 68, 55, 67, 68,
- 68, 68, 68, 68, 68, 68, 68, 54, 68, 68,
- 67, 62, 91, 67, 67, 67, 67, 67, 67, 180,
- 69, 67, 67, 69, 179, 67, 69, 69, 69, 69,
- 69, 69, 69, 69, 171, 69, 69, 67, 65, 66,
- 67, 67, 67, 67, 67, 67, 178, 71, 72, 67,
- 73, 169, 67, 71, 71, 71, 71, 71, 71, 71,
- 71, 177, 71, 71, 67, 65, 66, 67, 67, 67,
- 67, 67, 67, 175, 74, 75, 67, 76, 173, 67,
-
- 76, 76, 76, 76, 76, 76, 76, 76, 163, 76,
- 74, 74, 84, 61, 74, 74, 74, 74, 74, 74,
- 74, 74, 67, 74, 84, 61, 134, 58, 84, 89,
- 62, 161, 92, 67, 86, 67, 58, 71, 98, 135,
- 84, 67, 85, 99, 67, 67, 67, 67, 67, 67,
- 167, 95, 67, 67, 95, 165, 67, 95, 95, 95,
- 95, 95, 95, 95, 95, 155, 95, 95, 85, 101,
- 100, 102, 103, 62, 109, 104, 62, 105, 85, 106,
- 85, 101, 110, 112, 62, 62, 113, 105, 114, 116,
- 85, 85, 119, 121, 120, 122, 62, 124, 123, 62,
-
- 125, 85, 126, 129, 130, 121, 85, 132, 62, 134,
- 125, 133, 137, 85, 134, 153, 139, 140, 141, 142,
- 159, 62, 135, 143, 144, 140, 148, 135, 62, 146,
- 149, 85, 149, 85, 143, 152, 149, 153, 149, 154,
- 155, 157, 156, 150, 153, 150, 158, 143, 155, 150,
- 160, 150, 161, 163, 162, 164, 161, 163, 166, 168,
- 169, 171, 170, 172, 169, 171, 174, 176, 52, 52,
- 52, 52, 52, 52, 56, 140, 151, 56, 56, 57,
- 57, 62, 62, 60, 60, 67, 147, 67, 67, 67,
- 67, 70, 145, 70, 70, 70, 70, 80, 125, 121,
-
- 138, 80, 82, 82, 85, 85, 84, 84, 136, 131,
- 128, 127, 105, 101, 118, 117, 115, 111, 58, 108,
- 107, 75, 71, 61, 58, 85, 61, 181, 97, 96,
- 94, 93, 62, 61, 88, 181, 53, 51, 61, 78,
- 77, 61, 53, 51, 181, 7, 181, 181, 181, 181,
- 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
- 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
- 181, 181, 181
+ 50, 59, 68, 60, 61, 62, 61, 62, 65, 66,
+ 67, 136, 63, 68, 81, 67, 64, 59, 92, 85,
+
+ 61, 89, 61, 68, 137, 87, 68, 68, 68, 68,
+ 68, 68, 83, 70, 68, 68, 70, 56, 68, 70,
+ 70, 70, 70, 70, 70, 70, 70, 55, 70, 70,
+ 68, 63, 93, 68, 68, 68, 68, 68, 68, 182,
+ 71, 68, 68, 71, 181, 68, 71, 71, 71, 71,
+ 71, 71, 71, 71, 173, 71, 71, 68, 66, 67,
+ 68, 68, 68, 68, 68, 68, 180, 73, 74, 68,
+ 75, 171, 68, 73, 73, 73, 73, 73, 73, 73,
+ 73, 179, 73, 73, 68, 66, 67, 68, 68, 68,
+ 68, 68, 68, 177, 76, 77, 68, 78, 175, 68,
+
+ 78, 78, 78, 78, 78, 78, 78, 78, 165, 78,
+ 76, 76, 86, 62, 76, 76, 76, 76, 76, 76,
+ 76, 76, 68, 76, 86, 62, 136, 59, 86, 91,
+ 63, 163, 94, 68, 88, 68, 59, 73, 100, 137,
+ 86, 68, 87, 101, 68, 68, 68, 68, 68, 68,
+ 169, 97, 68, 68, 97, 167, 68, 97, 97, 97,
+ 97, 97, 97, 97, 97, 157, 97, 97, 87, 103,
+ 102, 104, 105, 63, 111, 106, 63, 107, 87, 108,
+ 87, 103, 112, 114, 63, 63, 115, 107, 116, 118,
+ 87, 87, 121, 123, 122, 124, 63, 126, 125, 63,
+
+ 127, 87, 128, 131, 132, 123, 87, 134, 63, 136,
+ 127, 135, 139, 87, 136, 155, 141, 142, 143, 144,
+ 161, 63, 137, 145, 146, 142, 150, 137, 63, 148,
+ 151, 87, 151, 87, 145, 154, 151, 155, 151, 156,
+ 157, 159, 158, 152, 155, 152, 160, 145, 157, 152,
+ 162, 152, 163, 165, 164, 166, 163, 165, 168, 170,
+ 171, 173, 172, 174, 171, 173, 176, 178, 53, 53,
+ 53, 53, 53, 53, 57, 142, 153, 57, 57, 58,
+ 58, 63, 63, 61, 61, 68, 149, 68, 68, 68,
+ 68, 72, 147, 72, 72, 72, 72, 82, 127, 123,
+
+ 140, 82, 84, 84, 87, 87, 86, 86, 138, 133,
+ 130, 129, 107, 103, 120, 119, 117, 113, 59, 110,
+ 109, 77, 73, 62, 59, 87, 62, 183, 99, 98,
+ 96, 95, 69, 63, 62, 90, 183, 54, 52, 51,
+ 62, 80, 79, 69, 62, 54, 52, 51, 183, 7,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183
} ;
-static yyconst short int yy_chk[474] =
+static yyconst short int yy_chk[478] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 19, 34, 19, 22, 22, 23, 23, 24, 25,
- 25, 128, 24, 34, 41, 41, 23, 46, 196, 46,
-
- 22, 49, 23, 30, 128, 49, 30, 30, 30, 30,
- 30, 30, 192, 30, 30, 30, 30, 184, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 183, 30, 30,
- 31, 63, 63, 31, 31, 31, 31, 31, 31, 178,
- 31, 31, 31, 31, 177, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 176, 31, 31, 35, 65, 65,
- 35, 35, 35, 35, 35, 35, 175, 35, 35, 35,
- 35, 174, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 173, 35, 35, 38, 79, 79, 38, 38, 38,
- 38, 38, 38, 171, 38, 38, 38, 38, 169, 38,
-
- 38, 38, 38, 38, 38, 38, 38, 38, 168, 38,
+ 25, 130, 24, 34, 41, 41, 23, 46, 198, 46,
+
+ 22, 49, 23, 30, 130, 49, 30, 30, 30, 30,
+ 30, 30, 194, 30, 30, 30, 30, 186, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 185, 30, 30,
+ 31, 64, 64, 31, 31, 31, 31, 31, 31, 180,
+ 31, 31, 31, 31, 179, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 178, 31, 31, 35, 66, 66,
+ 35, 35, 35, 35, 35, 35, 177, 35, 35, 35,
+ 35, 176, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 175, 35, 35, 38, 81, 81, 38, 38, 38,
+ 38, 38, 38, 173, 38, 38, 38, 38, 171, 38,
+
+ 38, 38, 38, 38, 38, 38, 38, 38, 170, 38,
38, 42, 47, 47, 42, 42, 42, 42, 42, 42,
- 42, 42, 70, 42, 48, 48, 134, 59, 47, 59,
- 64, 166, 64, 70, 48, 71, 83, 71, 83, 134,
- 48, 75, 86, 86, 75, 75, 75, 75, 75, 75,
- 163, 75, 75, 75, 75, 161, 75, 75, 75, 75,
- 75, 75, 75, 75, 75, 160, 75, 75, 87, 88,
- 87, 88, 91, 92, 99, 92, 91, 93, 99, 93,
- 100, 102, 100, 102, 103, 104, 103, 106, 104, 106,
- 109, 110, 109, 111, 110, 111, 113, 114, 113, 114,
-
- 115, 119, 115, 119, 120, 122, 120, 122, 123, 124,
- 126, 123, 126, 129, 130, 158, 129, 131, 131, 133,
- 155, 133, 124, 136, 136, 141, 141, 130, 124, 139,
- 142, 139, 145, 130, 144, 144, 146, 147, 149, 147,
- 151, 153, 151, 142, 154, 145, 154, 152, 156, 146,
- 156, 149, 157, 159, 157, 159, 162, 164, 162, 164,
- 165, 167, 165, 167, 170, 172, 170, 172, 182, 182,
- 182, 182, 182, 182, 185, 148, 143, 185, 185, 186,
- 186, 187, 187, 188, 188, 189, 140, 189, 189, 189,
- 189, 190, 138, 190, 190, 190, 190, 191, 137, 132,
-
- 127, 191, 193, 193, 194, 194, 195, 195, 125, 121,
- 118, 117, 116, 112, 108, 107, 105, 101, 98, 97,
- 96, 95, 94, 90, 89, 85, 84, 82, 78, 77,
- 73, 72, 62, 60, 58, 57, 52, 51, 50, 40,
- 39, 26, 12, 9, 7, 181, 181, 181, 181, 181,
- 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
- 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
- 181, 181, 181
+ 42, 42, 72, 42, 48, 48, 136, 60, 47, 60,
+ 65, 168, 65, 72, 48, 73, 85, 73, 85, 136,
+ 48, 77, 88, 88, 77, 77, 77, 77, 77, 77,
+ 165, 77, 77, 77, 77, 163, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 162, 77, 77, 89, 90,
+ 89, 90, 93, 94, 101, 94, 93, 95, 101, 95,
+ 102, 104, 102, 104, 105, 106, 105, 108, 106, 108,
+ 111, 112, 111, 113, 112, 113, 115, 116, 115, 116,
+
+ 117, 121, 117, 121, 122, 124, 122, 124, 125, 126,
+ 128, 125, 128, 131, 132, 160, 131, 133, 133, 135,
+ 157, 135, 126, 138, 138, 143, 143, 132, 126, 141,
+ 144, 141, 147, 132, 146, 146, 148, 149, 151, 149,
+ 153, 155, 153, 144, 156, 147, 156, 154, 158, 148,
+ 158, 151, 159, 161, 159, 161, 164, 166, 164, 166,
+ 167, 169, 167, 169, 172, 174, 172, 174, 184, 184,
+ 184, 184, 184, 184, 187, 150, 145, 187, 187, 188,
+ 188, 189, 189, 190, 190, 191, 142, 191, 191, 191,
+ 191, 192, 140, 192, 192, 192, 192, 193, 139, 134,
+
+ 129, 193, 195, 195, 196, 196, 197, 197, 127, 123,
+ 120, 119, 118, 114, 110, 109, 107, 103, 100, 99,
+ 98, 97, 96, 92, 91, 87, 86, 84, 80, 79,
+ 75, 74, 69, 63, 61, 59, 58, 53, 52, 51,
+ 50, 40, 39, 29, 26, 12, 11, 9, 7, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183
} ;
static yy_state_type yy_last_accepting_state;
#define GOTRUNAS 2
-#line 614 "lex.yy.c"
+#line 621 "lex.yy.c"
/* Macros after this point can all be overridden by user definitions in
* section 1.
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 94 "parse.lex"
+#line 101 "parse.lex"
-#line 767 "lex.yy.c"
+#line 774 "lex.yy.c"
if ( yy_init )
{
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 >= 182 )
+ if ( yy_current_state >= 184 )
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] != 446 );
+ while ( yy_base[yy_current_state] != 450 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
case 1:
YY_RULE_SETUP
-#line 95 "parse.lex"
+#line 102 "parse.lex"
{ /* throw away space/tabs */
sawspace = TRUE; /* but remember for fill_args */
}
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 99 "parse.lex"
+#line 106 "parse.lex"
{
sawspace = TRUE; /* remember for fill_args */
++sudolineno;
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 105 "parse.lex"
+#line 112 "parse.lex"
{
LEXTRACE("QUOTEDCHAR ");
fill_args(yytext + 1, 1, sawspace);
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 111 "parse.lex"
+#line 118 "parse.lex"
{
BEGIN INITIAL;
unput(*yytext);
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 117 "parse.lex"
+#line 124 "parse.lex"
{
++sudolineno;
LEXTRACE("\n");
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 123 "parse.lex"
+#line 130 "parse.lex"
{
++sudolineno;
LEXTRACE("\n");
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 129 "parse.lex"
+#line 136 "parse.lex"
{
LEXTRACE("ARG ");
fill_args(yytext, yyleng, sawspace);
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 135 "parse.lex"
+#line 142 "parse.lex"
{
LEXTRACE(", ");
return(',');
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 140 "parse.lex"
+#line 147 "parse.lex"
{
- return('!'); /* return '!' */
+ if (yyleng % 2 == 1)
+ return('!'); /* return '!' */
}
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 144 "parse.lex"
+#line 152 "parse.lex"
{
LEXTRACE("= ");
return('=');
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 149 "parse.lex"
+#line 157 "parse.lex"
{
LEXTRACE(": ");
return(':');
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 154 "parse.lex"
+#line 162 "parse.lex"
{
return('.');
}
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 158 "parse.lex"
+#line 166 "parse.lex"
{
/* cmnd does not require passwd for this user */
LEXTRACE("NOPASSWD ");
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 164 "parse.lex"
+#line 172 "parse.lex"
{
/* cmnd requires passwd for this user */
LEXTRACE("PASSWD ");
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 170 "parse.lex"
+#line 178 "parse.lex"
{
/* netgroup */
fill(yytext, yyleng);
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 176 "parse.lex"
+#line 184 "parse.lex"
{
/* UN*X group */
fill(yytext, yyleng);
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 182 "parse.lex"
+#line 190 "parse.lex"
{
fill(yytext, yyleng);
LEXTRACE("NTWKADDR ");
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 188 "parse.lex"
+#line 196 "parse.lex"
{
fill(yytext, yyleng);
LEXTRACE("FQHOST ");
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 194 "parse.lex"
+#line 202 "parse.lex"
{
BEGIN GOTRUNAS;
LEXTRACE("RUNAS ");
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 200 "parse.lex"
+#line 208 "parse.lex"
{
/* Runas_Alias that user can run command as or ALL */
fill(yytext, yyleng);
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 212 "parse.lex"
+#line 220 "parse.lex"
{
/* username/uid that user can run command as */
fill(yytext, yyleng);
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 219 "parse.lex"
+#line 227 "parse.lex"
BEGIN INITIAL;
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 222 "parse.lex"
+#line 230 "parse.lex"
{
/* directories can't have args... */
if (yytext[yyleng - 1] == '/') {
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 235 "parse.lex"
+#line 243 "parse.lex"
{
fill(yytext, yyleng);
if (strcmp(yytext, "ALL") == 0) {
LEXTRACE("ALL ");
return(ALL);
+ } else {
+ LEXTRACE("ALIAS ");
+ return(ALIAS);
}
- LEXTRACE("ALIAS ");
- return(ALIAS);
}
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 245 "parse.lex"
+#line 254 "parse.lex"
{
fill(yytext, yyleng);
if (strcmp(yytext, "Host_Alias") == 0) {
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 269 "parse.lex"
+#line 278 "parse.lex"
{
return(ERROR);
} /* parse error */
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 273 "parse.lex"
+#line 282 "parse.lex"
ECHO;
YY_BREAK
-#line 1110 "lex.yy.c"
+#line 1119 "lex.yy.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(GOTCMND):
case YY_STATE_EOF(GOTRUNAS):
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 >= 182 )
+ if ( yy_current_state >= 184 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
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 >= 182 )
+ if ( yy_current_state >= 184 )
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 == 181);
+ yy_is_jam = (yy_current_state == 183);
return yy_is_jam ? 0 : yy_current_state;
}
return 0;
}
#endif
-#line 273 "parse.lex"
+#line 282 "parse.lex"
static void
fill(s, len)
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/*
+ * XXX - the whole opFOO naming thing is somewhat bogus.
+ *
+ * XXX - the way things are stored for printmatches is stupid,
+ * they should be stored as elements in an array and then
+ * list_matches() can format things the way it wants.
+ *
+ * XXX - '!' chars are not preserved when expanding Aliases
+ */
+
#include "config.h"
#include <stdio.h>
#ifdef STDC_HEADERS
#endif
parse_error = TRUE;
}
-#line 175 "parse.yacc"
+#line 192 "parse.yacc"
typedef union {
char *string;
int BOOLEAN;
struct sudo_command command;
int tok;
} YYSTYPE;
-#line 199 "sudo.tab.c"
+#line 216 "sudo.tab.c"
#define ALIAS 257
#define NTWKADDR 258
#define FQHOST 259
#define NETGROUP 260
#define USERGROUP 261
#define NAME 262
-#define RUNAS 263
-#define NOPASSWD 264
-#define PASSWD 265
-#define COMMAND 266
-#define COMMENT 267
-#define ALL 268
+#define ALL 263
+#define RUNAS 264
+#define NOPASSWD 265
+#define PASSWD 266
+#define COMMAND 267
+#define COMMENT 268
#define HOSTALIAS 269
#define CMNDALIAS 270
#define USERALIAS 271
#define ERROR 273
#define YYERRCODE 256
short yylhs[] = { -1,
- 0, 0, 3, 3, 5, 3, 3, 3, 3, 3,
- 6, 6, 11, 14, 16, 14, 15, 15, 15, 15,
- 15, 15, 13, 13, 17, 2, 20, 2, 18, 18,
- 21, 21, 22, 24, 22, 23, 23, 23, 23, 23,
- 19, 19, 19, 1, 1, 1, 8, 8, 26, 25,
- 12, 12, 9, 9, 28, 27, 29, 29, 10, 10,
- 31, 30, 7, 7, 33, 32, 34, 34, 35, 36,
- 35, 4, 4, 4, 4, 4,
+ 0, 0, 5, 5, 7, 5, 5, 5, 5, 5,
+ 8, 8, 13, 16, 16, 2, 2, 2, 2, 2,
+ 2, 15, 15, 17, 20, 21, 20, 18, 18, 22,
+ 22, 23, 24, 23, 3, 3, 3, 3, 3, 19,
+ 19, 19, 1, 1, 1, 10, 10, 26, 25, 14,
+ 14, 11, 11, 28, 27, 29, 29, 12, 12, 31,
+ 30, 9, 9, 33, 32, 34, 34, 6, 6, 4,
+ 4, 4, 4, 4,
};
short yylen[] = { 2,
1, 2, 1, 2, 0, 3, 2, 2, 2, 2,
- 1, 3, 3, 1, 0, 3, 1, 1, 1, 1,
- 1, 1, 1, 3, 3, 1, 0, 3, 0, 2,
- 1, 3, 1, 0, 3, 1, 1, 1, 1, 1,
- 0, 1, 1, 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, 0,
- 3, 1, 1, 1, 1, 1,
+ 1, 3, 3, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 3, 3, 1, 0, 3, 0, 2, 1,
+ 3, 1, 0, 3, 1, 1, 1, 1, 1, 0,
+ 1, 1, 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,
};
short yydefred[] = { 0,
0, 3, 0, 0, 0, 0, 0, 1, 0, 4,
- 49, 0, 47, 55, 0, 53, 65, 0, 63, 61,
- 0, 59, 2, 75, 74, 73, 72, 76, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 22, 18, 21,
- 19, 20, 17, 15, 0, 11, 0, 51, 14, 0,
- 48, 0, 54, 0, 64, 0, 60, 0, 0, 0,
- 0, 0, 45, 46, 44, 27, 26, 57, 0, 70,
- 69, 0, 67, 39, 38, 37, 36, 40, 34, 0,
- 31, 33, 16, 12, 0, 0, 23, 0, 52, 0,
- 0, 0, 0, 0, 0, 0, 0, 42, 43, 0,
- 28, 58, 71, 68, 35, 32, 24, 25,
+ 48, 0, 46, 54, 0, 52, 64, 0, 62, 60,
+ 0, 58, 2, 73, 72, 71, 70, 74, 0, 68,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,
+ 21, 17, 20, 18, 19, 16, 0, 14, 0, 11,
+ 0, 50, 0, 47, 0, 53, 0, 63, 0, 59,
+ 15, 0, 0, 0, 0, 44, 43, 45, 26, 25,
+ 56, 0, 66, 0, 38, 37, 36, 35, 39, 33,
+ 32, 0, 30, 12, 0, 0, 22, 0, 51, 0,
+ 0, 0, 0, 0, 0, 0, 41, 42, 0, 27,
+ 57, 67, 34, 31, 23, 24,
};
short yydgoto[] = { 7,
- 67, 68, 8, 71, 9, 45, 18, 12, 15, 21,
- 46, 47, 86, 48, 49, 58, 87, 88, 100, 90,
- 80, 81, 82, 94, 13, 30, 16, 32, 69, 22,
- 36, 19, 34, 72, 73, 92,
+ 70, 48, 81, 30, 8, 31, 9, 49, 18, 12,
+ 15, 21, 50, 51, 86, 52, 87, 88, 99, 71,
+ 90, 82, 83, 93, 13, 32, 16, 34, 72, 22,
+ 38, 19, 36, 74,
};
-short yysindex[] = { -247,
- -262, 0, -242, -223, -216, -215, -247, 0, -254, 0,
- 0, -37, 0, 0, -15, 0, 0, -13, 0, 0,
- -12, 0, 0, 0, 0, 0, 0, 0, -33, -14,
- -242, -11, -223, -10, -216, -8, -215, 0, 0, 0,
- 0, 0, 0, 0, -9, 0, -42, 0, 0, -33,
- 0, -2, 0, -29, 0, -20, 0, -33, -33, -209,
- -33, 4, 0, 0, 0, 0, 0, 0, 11, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 0, 13,
- 0, 0, 0, 0, -20, 14, 0, -236, 0, -2,
- -2, -29, -29, -20, -20, 13, -209, 0, 0, -2,
- 0, 0, 0, 0, 0, 0, 0, 0,
+short yysindex[] = { -242,
+ -264, 0, -247, -246, -244, -236, -242, 0, -8, 0,
+ 0, -36, 0, 0, -35, 0, 0, -34, 0, 0,
+ -27, 0, 0, 0, 0, 0, 0, 0, -215, 0,
+ 170, -29, -247, -25, -246, -12, -244, -4, -236, 0,
+ 0, 0, 0, 0, 0, 0, -219, 0, 2, 0,
+ -41, 0, 170, 0, -21, 0, -8, 0, 174, 0,
+ 0, 170, -231, 170, 14, 0, 0, 0, 0, 0,
+ 0, 17, 0, 19, 0, 0, 0, 0, 0, 0,
+ 0, 20, 0, 0, 174, 21, 0, -259, 0, -248,
+ -21, -8, -207, 174, 20, -231, 0, 0, -21, 0,
+ 0, 0, 0, 0, 0, 0,
};
-short yyrindex[] = { -224,
- 0, 0, 0, 0, 0, 0, -224, 0, 0, 0,
+short yyrindex[] = { 181,
+ 0, 0, 0, 0, 0, 0, 181, 0, 0, 0,
0, 86, 0, 0, 103, 0, 0, 120, 0, 0,
137, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 154, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, -21,
- 0, 1, 0, 0, 0, 0, 0, 0, 18, 0,
- 0, 35, 0, 0, 0, 0, 0, 0, 0, 52,
- 0, 0, 0, 0, 0, 69, 0, -1, 0, 0,
- 0, 0, 0, 0, 0, 163, -21, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 154, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -33, 0, 1, 0, 0, 0, 0, 0,
+ 0, 18, 0, 35, 0, 0, 0, 0, 0, 0,
+ 0, 52, 0, 0, 0, 69, 0, -16, 0, 0,
+ 0, 0, 0, 0, -28, -33, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
};
short yygindex[] = { 0,
- 0, -74, 53, 54, 0, 0, 0, 0, 0, 0,
- 2, 15, 0, -31, 0, 0, -35, 0, 0, 0,
- -19, -84, 0, 0, 33, 0, 34, 0, 0, 31,
- 0, 36, 0, 0, -53, 0,
+ -24, 15, -26, 41, 64, -55, 0, 0, 0, 0,
+ 0, 0, 10, 22, 0, 9, -22, 0, 0, -83,
+ 0, -7, -17, 0, 46, 0, 45, 0, 0, 42,
+ 0, 47, 0, 0,
};
-#define YYTABLESIZE 431
-short yytable[] = { 44,
- 50, 61, 24, 70, 10, 25, 26, 27, 1, 105,
- 106, 29, 79, 28, 11, 101, 102, 56, 60, 2,
- 31, 3, 4, 5, 6, 108, 83, 98, 99, 89,
- 66, 41, 5, 14, 66, 5, 5, 5, 103, 104,
- 17, 20, 33, 5, 35, 37, 50, 61, 59, 52,
- 54, 62, 56, 85, 91, 93, 95, 97, 50, 23,
- 84, 107, 29, 51, 62, 96, 53, 57, 13, 0,
- 55, 0, 0, 0, 0, 56, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
- 0, 0, 66, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 0, 0, 0, 0, 0, 0, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+#define YYTABLESIZE 444
+short yytable[] = { 28,
+ 49, 73, 64, 10, 29, 97, 98, 101, 66, 11,
+ 14, 69, 17, 1, 67, 106, 40, 55, 68, 63,
+ 20, 33, 35, 37, 29, 2, 3, 4, 5, 6,
+ 39, 53, 85, 49, 65, 55, 102, 41, 42, 43,
+ 44, 24, 45, 46, 25, 26, 27, 28, 57, 75,
+ 55, 61, 76, 77, 78, 79, 59, 64, 49, 62,
+ 91, 61, 92, 94, 96, 100, 103, 65, 13, 40,
+ 23, 84, 89, 105, 65, 55, 104, 95, 54, 56,
+ 60, 0, 0, 58, 61, 8, 0, 0, 0, 0,
+ 0, 0, 65, 0, 0, 0, 0, 0, 0, 0,
+ 0, 13, 9, 0, 0, 0, 0, 0, 0, 61,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 7,
0, 0, 0, 0, 0, 0, 13, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 7, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 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, 30, 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, 38, 39, 40, 41, 24, 42, 0,
- 25, 26, 27, 0, 43, 29, 74, 0, 28, 75,
- 76, 77, 29, 29, 29, 0, 29, 78, 0, 0,
- 0, 0, 0, 0, 63, 41, 50, 50, 0, 0,
- 50, 50, 50, 64, 41, 65, 41, 50, 50, 50,
- 50, 50, 50, 56, 56, 0, 0, 56, 56, 56,
- 0, 0, 0, 0, 56, 56, 56, 56, 56, 56,
- 66, 66, 0, 0, 66, 66, 66, 0, 0, 0,
- 0, 66, 66, 66, 66, 66, 66, 62, 62, 0,
- 0, 62, 62, 62, 0, 0, 0, 0, 62, 62,
- 62, 62, 62, 62, 13, 13, 0, 0, 13, 13,
- 13, 0, 0, 0, 0, 13, 13, 13, 13, 13,
- 13, 8, 8, 0, 0, 8, 8, 8, 0, 0,
- 0, 0, 8, 8, 8, 8, 8, 8, 9, 9,
- 0, 0, 9, 9, 9, 0, 0, 0, 0, 9,
+ 0, 0, 47, 0, 0, 0, 80, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 28, 0, 0, 0, 0, 29, 28,
+ 0, 28, 28, 28, 29, 66, 29, 29, 29, 0,
+ 40, 67, 0, 0, 0, 68, 40, 0, 24, 0,
+ 40, 25, 26, 27, 28, 0, 49, 49, 0, 0,
+ 49, 49, 49, 49, 0, 0, 0, 0, 49, 49,
+ 49, 49, 49, 55, 55, 0, 0, 55, 55, 55,
+ 55, 0, 0, 0, 0, 55, 55, 55, 55, 55,
+ 65, 65, 0, 0, 65, 65, 65, 65, 0, 0,
+ 0, 0, 65, 65, 65, 65, 65, 61, 61, 0,
+ 0, 61, 61, 61, 61, 0, 0, 0, 0, 61,
+ 61, 61, 61, 61, 13, 13, 0, 0, 13, 13,
+ 13, 13, 0, 0, 0, 0, 13, 13, 13, 13,
+ 13, 8, 8, 0, 0, 8, 8, 8, 8, 0,
+ 0, 0, 0, 8, 8, 8, 8, 8, 9, 9,
+ 0, 0, 9, 9, 9, 9, 0, 0, 0, 0,
9, 9, 9, 9, 9, 7, 7, 0, 0, 7,
- 7, 7, 0, 0, 0, 0, 7, 7, 7, 7,
- 7, 7, 10, 10, 0, 0, 10, 10, 10, 0,
- 0, 0, 0, 10, 10, 10, 10, 10, 10, 6,
- 6, 0, 0, 6, 6, 6, 0, 0, 0, 30,
- 6, 6, 6, 6, 6, 6, 30, 30, 30, 0,
- 30,
+ 7, 7, 7, 0, 0, 0, 0, 7, 7, 7,
+ 7, 7, 10, 10, 0, 0, 10, 10, 10, 10,
+ 0, 0, 0, 0, 10, 10, 10, 10, 10, 6,
+ 6, 0, 0, 6, 6, 6, 6, 0, 0, 0,
+ 0, 6, 6, 6, 6, 6, 41, 42, 43, 44,
+ 75, 45, 46, 76, 77, 78, 79, 5, 0, 0,
+ 5, 5, 5, 5,
};
short yycheck[] = { 33,
- 0, 44, 257, 33, 267, 260, 261, 262, 256, 94,
- 95, 33, 33, 268, 257, 90, 91, 0, 61, 267,
- 58, 269, 270, 271, 272, 100, 58, 264, 265, 61,
- 33, 33, 257, 257, 0, 260, 261, 262, 92, 93,
- 257, 257, 58, 268, 58, 58, 61, 44, 58, 61,
- 61, 0, 61, 263, 44, 44, 44, 44, 58, 7,
- 59, 97, 9, 31, 50, 85, 33, 37, 0, -1,
- 35, -1, -1, -1, -1, 58, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
+ 0, 57, 44, 268, 33, 265, 266, 91, 257, 257,
+ 257, 33, 257, 256, 263, 99, 33, 0, 267, 61,
+ 257, 58, 58, 58, 33, 268, 269, 270, 271, 272,
+ 58, 61, 264, 33, 0, 61, 92, 257, 258, 259,
+ 260, 257, 262, 263, 260, 261, 262, 263, 61, 257,
+ 33, 0, 260, 261, 262, 263, 61, 44, 58, 58,
+ 44, 47, 44, 44, 44, 90, 93, 33, 0, 29,
+ 7, 62, 64, 96, 53, 58, 94, 85, 33, 35,
+ 39, -1, -1, 37, 33, 0, -1, -1, -1, -1,
-1, -1, 58, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -1, -1, -1, 58,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
+ -1, 33, 0, -1, -1, -1, -1, -1, -1, 58,
+ -1, -1, -1, -1, -1, -1, -1, -1, 33, 0,
-1, -1, -1, -1, -1, -1, 58, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 33, 0, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 33, 0, -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, 33, -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, 257, 258, 259, 260, 257, 262, -1,
- 260, 261, 262, -1, 268, 257, 257, -1, 268, 260,
- 261, 262, 264, 265, 266, -1, 268, 268, -1, -1,
- -1, -1, -1, -1, 257, 257, 256, 257, -1, -1,
- 260, 261, 262, 266, 266, 268, 268, 267, 268, 269,
+ -1, -1, 33, -1, -1, -1, 33, -1, -1, -1,
+ -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 257, -1, -1, -1, -1, 257, 263,
+ -1, 265, 266, 267, 263, 257, 265, 266, 267, -1,
+ 257, 263, -1, -1, -1, 267, 263, -1, 257, -1,
+ 267, 260, 261, 262, 263, -1, 256, 257, -1, -1,
+ 260, 261, 262, 263, -1, -1, -1, -1, 268, 269,
270, 271, 272, 256, 257, -1, -1, 260, 261, 262,
- -1, -1, -1, -1, 267, 268, 269, 270, 271, 272,
- 256, 257, -1, -1, 260, 261, 262, -1, -1, -1,
- -1, 267, 268, 269, 270, 271, 272, 256, 257, -1,
- -1, 260, 261, 262, -1, -1, -1, -1, 267, 268,
+ 263, -1, -1, -1, -1, 268, 269, 270, 271, 272,
+ 256, 257, -1, -1, 260, 261, 262, 263, -1, -1,
+ -1, -1, 268, 269, 270, 271, 272, 256, 257, -1,
+ -1, 260, 261, 262, 263, -1, -1, -1, -1, 268,
269, 270, 271, 272, 256, 257, -1, -1, 260, 261,
- 262, -1, -1, -1, -1, 267, 268, 269, 270, 271,
- 272, 256, 257, -1, -1, 260, 261, 262, -1, -1,
- -1, -1, 267, 268, 269, 270, 271, 272, 256, 257,
- -1, -1, 260, 261, 262, -1, -1, -1, -1, 267,
+ 262, 263, -1, -1, -1, -1, 268, 269, 270, 271,
+ 272, 256, 257, -1, -1, 260, 261, 262, 263, -1,
+ -1, -1, -1, 268, 269, 270, 271, 272, 256, 257,
+ -1, -1, 260, 261, 262, 263, -1, -1, -1, -1,
268, 269, 270, 271, 272, 256, 257, -1, -1, 260,
- 261, 262, -1, -1, -1, -1, 267, 268, 269, 270,
- 271, 272, 256, 257, -1, -1, 260, 261, 262, -1,
- -1, -1, -1, 267, 268, 269, 270, 271, 272, 256,
- 257, -1, -1, 260, 261, 262, -1, -1, -1, 257,
- 267, 268, 269, 270, 271, 272, 264, 265, 266, -1,
- 268,
+ 261, 262, 263, -1, -1, -1, -1, 268, 269, 270,
+ 271, 272, 256, 257, -1, -1, 260, 261, 262, 263,
+ -1, -1, -1, -1, 268, 269, 270, 271, 272, 256,
+ 257, -1, -1, 260, 261, 262, 263, -1, -1, -1,
+ -1, 268, 269, 270, 271, 272, 257, 258, 259, 260,
+ 257, 262, 263, 260, 261, 262, 263, 257, -1, -1,
+ 260, 261, 262, 263,
};
#define YYFINAL 7
#ifndef YYDEBUG
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,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,"ALIAS",
-"NTWKADDR","FQHOST","NETGROUP","USERGROUP","NAME","RUNAS","NOPASSWD","PASSWD",
-"COMMAND","COMMENT","ALL","HOSTALIAS","CMNDALIAS","USERALIAS","RUNASALIAS",
+"NTWKADDR","FQHOST","NETGROUP","USERGROUP","NAME","ALL","RUNAS","NOPASSWD",
+"PASSWD","COMMAND","COMMENT","HOSTALIAS","CMNDALIAS","USERALIAS","RUNASALIAS",
"ERROR",
};
char *yyrule[] = {
"entry : COMMENT",
"entry : error COMMENT",
"$$1 :",
-"entry : $$1 user privileges",
+"entry : $$1 opuser privileges",
"entry : USERALIAS useraliases",
"entry : HOSTALIAS hostaliases",
"entry : CMNDALIAS cmndaliases",
"privileges : privileges ':' privilege",
"privilege : hostlist '=' cmndspeclist",
"ophostspec : hostspec",
-"$$2 :",
-"ophostspec : '!' $$2 ophostspec",
+"ophostspec : '!' hostspec",
"hostspec : ALL",
"hostspec : NTWKADDR",
"hostspec : NETGROUP",
"cmndspeclist : cmndspeclist ',' cmndspec",
"cmndspec : runasspec nopasswd opcmnd",
"opcmnd : cmnd",
-"$$3 :",
-"opcmnd : '!' $$3 opcmnd",
+"$$2 :",
+"opcmnd : '!' $$2 cmnd",
"runasspec :",
"runasspec : RUNAS runaslist",
"runaslist : oprunasuser",
"runaslist : runaslist ',' oprunasuser",
"oprunasuser : runasuser",
-"$$4 :",
-"oprunasuser : '!' $$4 oprunasuser",
+"$$3 :",
+"oprunasuser : '!' $$3 runasuser",
"runasuser : NAME",
"runasuser : USERGROUP",
"runasuser : NETGROUP",
"cmnd : COMMAND",
"hostaliases : hostalias",
"hostaliases : hostaliases ':' hostalias",
-"$$5 :",
-"hostalias : ALIAS $$5 '=' hostlist",
+"$$4 :",
+"hostalias : ALIAS $$4 '=' hostlist",
"hostlist : ophostspec",
"hostlist : hostlist ',' ophostspec",
"cmndaliases : cmndalias",
"cmndaliases : cmndaliases ':' cmndalias",
-"$$6 :",
-"cmndalias : ALIAS $$6 '=' cmndlist",
+"$$5 :",
+"cmndalias : ALIAS $$5 '=' cmndlist",
"cmndlist : opcmnd",
"cmndlist : cmndlist ',' opcmnd",
"runasaliases : runasalias",
"runasaliases : runasaliases ':' runasalias",
-"$$7 :",
-"runasalias : ALIAS $$7 '=' runaslist",
+"$$6 :",
+"runasalias : ALIAS $$6 '=' runaslist",
"useraliases : useralias",
"useraliases : useraliases ':' useralias",
-"$$8 :",
-"useralias : ALIAS $$8 '=' userlist",
+"$$7 :",
+"useralias : ALIAS $$7 '=' userlist",
"userlist : opuser",
"userlist : userlist ',' opuser",
"opuser : user",
-"$$9 :",
-"opuser : '!' $$9 opuser",
+"opuser : '!' user",
"user : NAME",
"user : USERGROUP",
"user : NETGROUP",
short *yysslim;
YYSTYPE *yyvs;
int yystacksize;
-#line 668 "parse.yacc"
+#line 672 "parse.yacc"
typedef struct {
int type;
if (printmatches == TRUE)
expand_match_list();
}
-#line 835 "sudo.tab.c"
+#line 852 "sudo.tab.c"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
#if defined(__cplusplus) || __STDC__
static int yygrowstack(void)
switch (yyn)
{
case 3:
-#line 212 "parse.yacc"
+#line 233 "parse.yacc"
{ ; }
break;
case 4:
-#line 214 "parse.yacc"
+#line 235 "parse.yacc"
{ yyerrok; }
break;
case 5:
-#line 215 "parse.yacc"
+#line 236 "parse.yacc"
{ push; }
break;
case 6:
-#line 215 "parse.yacc"
+#line 236 "parse.yacc"
{
while (top && user_matches != TRUE) {
pop;
}
break;
case 7:
-#line 221 "parse.yacc"
+#line 242 "parse.yacc"
{ ; }
break;
case 8:
-#line 223 "parse.yacc"
+#line 244 "parse.yacc"
{ ; }
break;
case 9:
-#line 225 "parse.yacc"
+#line 246 "parse.yacc"
{ ; }
break;
case 10:
-#line 227 "parse.yacc"
+#line 248 "parse.yacc"
{ ; }
break;
case 13:
-#line 235 "parse.yacc"
+#line 256 "parse.yacc"
{
/*
* We already did a push if necessary in
no_passwd = -1;
}
break;
-case 15:
-#line 248 "parse.yacc"
+case 14:
+#line 268 "parse.yacc"
{
- push;
+ if (yyvsp[0].BOOLEAN == TRUE)
+ host_matches = TRUE;
}
break;
-case 16:
-#line 250 "parse.yacc"
+case 15:
+#line 272 "parse.yacc"
{
- pop;
- if (host_matched == TRUE)
+ if (yyvsp[0].BOOLEAN == TRUE)
host_matches = FALSE;
- else if (host_matched == FALSE)
- host_matches = TRUE;
}
break;
-case 17:
-#line 258 "parse.yacc"
+case 16:
+#line 277 "parse.yacc"
{
- host_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
+ free(yyvsp[0].string);
}
break;
-case 18:
-#line 261 "parse.yacc"
+case 17:
+#line 281 "parse.yacc"
{
if (addr_matches(yyvsp[0].string))
- host_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 19:
-#line 266 "parse.yacc"
+case 18:
+#line 286 "parse.yacc"
{
if (netgr_matches(yyvsp[0].string, user_host, NULL))
- host_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 20:
-#line 271 "parse.yacc"
+case 19:
+#line 291 "parse.yacc"
{
if (strcasecmp(user_shost, yyvsp[0].string) == 0)
- host_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 21:
-#line 276 "parse.yacc"
+case 20:
+#line 296 "parse.yacc"
{
if (strcasecmp(user_host, yyvsp[0].string) == 0)
- host_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 22:
-#line 281 "parse.yacc"
+case 21:
+#line 301 "parse.yacc"
{
/* could be an all-caps hostname */
if (find_alias(yyvsp[0].string, HOST_ALIAS) == TRUE ||
strcasecmp(user_shost, yyvsp[0].string) == 0)
- host_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 25:
-#line 294 "parse.yacc"
+case 24:
+#line 314 "parse.yacc"
{
if (printmatches == TRUE &&
(runas_matches == -1 || cmnd_matches == -1)) {
cmnd_matches = -1;
}
break;
-case 26:
-#line 314 "parse.yacc"
-{ ; }
+case 25:
+#line 334 "parse.yacc"
+{
+ if (yyvsp[0].BOOLEAN == TRUE)
+ cmnd_matches = TRUE;
+ }
break;
-case 27:
-#line 315 "parse.yacc"
+case 26:
+#line 338 "parse.yacc"
{
if (printmatches == TRUE && host_matches == TRUE &&
user_matches == TRUE) {
append("!", &cm_list[cm_list_len].cmnd,
&cm_list[cm_list_len].cmnd_len,
&cm_list[cm_list_len].cmnd_size, 0);
- push;
- user_matches = TRUE;
- host_matches = TRUE;
- } else {
- push;
}
}
break;
-case 28:
-#line 327 "parse.yacc"
+case 27:
+#line 345 "parse.yacc"
{
- pop;
- if (cmnd_matched == TRUE)
+ if (yyvsp[0].BOOLEAN == TRUE)
cmnd_matches = FALSE;
- else if (cmnd_matched == FALSE)
- cmnd_matches = TRUE;
- yyval.BOOLEAN = cmnd_matches;
}
break;
-case 29:
-#line 337 "parse.yacc"
+case 28:
+#line 351 "parse.yacc"
{
/*
* If this is the first entry in a command list
(strcmp(RUNAS_DEFAULT, user_runas) == 0);
}
break;
-case 30:
-#line 346 "parse.yacc"
+case 29:
+#line 360 "parse.yacc"
{ ; }
break;
-case 33:
-#line 353 "parse.yacc"
+case 32:
+#line 367 "parse.yacc"
{
if (printmatches == TRUE && host_matches == TRUE &&
user_matches == TRUE)
append("", &cm_list[cm_list_len].runas,
&cm_list[cm_list_len].runas_len,
&cm_list[cm_list_len].runas_size, ':');
+ if (yyvsp[0].BOOLEAN == TRUE)
+ runas_matches = TRUE;
}
break;
-case 34:
-#line 360 "parse.yacc"
+case 33:
+#line 376 "parse.yacc"
{
if (printmatches == TRUE && host_matches == TRUE &&
- user_matches == TRUE) {
+ user_matches == TRUE)
append("!", &cm_list[cm_list_len].runas,
&cm_list[cm_list_len].runas_len,
&cm_list[cm_list_len].runas_size, ':');
- pushcp;
- } else {
- push;
- }
}
break;
-case 35:
-#line 370 "parse.yacc"
+case 34:
+#line 382 "parse.yacc"
{
- pop;
- /*
- * Don't negate FALSE -> TRUE since that would
- * make !foo match any time the user specified
- * a runas user (via -u) other than foo.
- */
- if (runas_matched == TRUE)
+ if (yyvsp[0].BOOLEAN == TRUE)
runas_matches = FALSE;
}
break;
-case 36:
-#line 381 "parse.yacc"
+case 35:
+#line 387 "parse.yacc"
{
- runas_matches = (strcmp(yyvsp[0].string, user_runas) == 0);
if (printmatches == TRUE && in_alias == TRUE)
append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
&ga_list[ga_list_len-1].entries_len,
append(yyvsp[0].string, &cm_list[cm_list_len].runas,
&cm_list[cm_list_len].runas_len,
&cm_list[cm_list_len].runas_size, 0);
+ if (strcmp(yyvsp[0].string, user_runas) == 0)
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 37:
-#line 394 "parse.yacc"
+case 36:
+#line 401 "parse.yacc"
{
- runas_matches = usergr_matches(yyvsp[0].string, user_runas);
if (printmatches == TRUE && in_alias == TRUE)
append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
&ga_list[ga_list_len-1].entries_len,
&cm_list[cm_list_len].runas_len,
&cm_list[cm_list_len].runas_size, 0);
}
+ if (usergr_matches(yyvsp[0].string, user_runas))
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 38:
-#line 408 "parse.yacc"
+case 37:
+#line 416 "parse.yacc"
{
- runas_matches = netgr_matches(yyvsp[0].string, NULL, user_runas);
if (printmatches == TRUE && in_alias == TRUE)
append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
&ga_list[ga_list_len-1].entries_len,
&cm_list[cm_list_len].runas_len,
&cm_list[cm_list_len].runas_size, 0);
}
+ if (netgr_matches(yyvsp[0].string, NULL, user_runas))
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 39:
-#line 422 "parse.yacc"
+case 38:
+#line 431 "parse.yacc"
{
- /* could be an all-caps username */
- if (find_alias(yyvsp[0].string, RUNAS_ALIAS) == TRUE ||
- strcmp(yyvsp[0].string, user_runas) == 0)
- runas_matches = TRUE;
- else
- runas_matches = FALSE;
if (printmatches == TRUE && in_alias == TRUE)
append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
&ga_list[ga_list_len-1].entries_len,
append(yyvsp[0].string, &cm_list[cm_list_len].runas,
&cm_list[cm_list_len].runas_len,
&cm_list[cm_list_len].runas_size, 0);
+ /* could be an all-caps username */
+ if (find_alias(yyvsp[0].string, RUNAS_ALIAS) == TRUE ||
+ strcmp(yyvsp[0].string, user_runas) == 0)
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 40:
-#line 440 "parse.yacc"
+case 39:
+#line 447 "parse.yacc"
{
- runas_matches = TRUE;
if (printmatches == TRUE && in_alias == TRUE)
append("ALL", &ga_list[ga_list_len-1].entries,
&ga_list[ga_list_len-1].entries_len,
append("ALL", &cm_list[cm_list_len].runas,
&cm_list[cm_list_len].runas_len,
&cm_list[cm_list_len].runas_size, 0);
+ yyval.BOOLEAN = TRUE;
+ free(yyvsp[0].string);
}
break;
-case 41:
-#line 454 "parse.yacc"
+case 40:
+#line 462 "parse.yacc"
{
;
}
break;
-case 42:
-#line 457 "parse.yacc"
+case 41:
+#line 465 "parse.yacc"
{
no_passwd = TRUE;
if (printmatches == TRUE && host_matches == TRUE &&
cm_list[cm_list_len].nopasswd = TRUE;
}
break;
-case 43:
-#line 463 "parse.yacc"
+case 42:
+#line 471 "parse.yacc"
{
no_passwd = FALSE;
if (printmatches == TRUE && host_matches == TRUE &&
cm_list[cm_list_len].nopasswd = FALSE;
}
break;
-case 44:
-#line 471 "parse.yacc"
+case 43:
+#line 479 "parse.yacc"
{
if (printmatches == TRUE && in_alias == TRUE) {
append("ALL", &ga_list[ga_list_len-1].entries,
expand_match_list();
}
- yyval.BOOLEAN = cmnd_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
+ free(yyvsp[0].string);
+
if (safe_cmnd)
free(safe_cmnd);
safe_cmnd = estrdup(user_cmnd);
}
break;
-case 45:
-#line 490 "parse.yacc"
+case 44:
+#line 500 "parse.yacc"
{
if (printmatches == TRUE && in_alias == TRUE) {
append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
&cm_list[cm_list_len].cmnd_size, 0);
expand_match_list();
}
- if (find_alias(yyvsp[0].string, CMND_ALIAS) == TRUE) {
- cmnd_matches = TRUE;
+ if (find_alias(yyvsp[0].string, CMND_ALIAS) == TRUE)
yyval.BOOLEAN = TRUE;
- }
free(yyvsp[0].string);
}
break;
-case 46:
-#line 509 "parse.yacc"
+case 45:
+#line 517 "parse.yacc"
{
if (printmatches == TRUE && in_alias == TRUE) {
append(yyvsp[0].command.cmnd, &ga_list[ga_list_len-1].entries,
expand_match_list();
}
- /* if NewArgc > 1 pass ptr to 1st arg, else NULL */
- if (command_matches(user_cmnd, (NewArgc > 1) ?
- user_args : NULL, yyvsp[0].command.cmnd, yyvsp[0].command.args)) {
- cmnd_matches = TRUE;
+ if (command_matches(user_cmnd, user_args,
+ yyvsp[0].command.cmnd, yyvsp[0].command.args))
yyval.BOOLEAN = TRUE;
- }
free(yyvsp[0].command.cmnd);
if (yyvsp[0].command.args)
free(yyvsp[0].command.args);
}
break;
-case 49:
-#line 548 "parse.yacc"
+case 48:
+#line 553 "parse.yacc"
{ push; }
break;
-case 50:
-#line 548 "parse.yacc"
+case 49:
+#line 553 "parse.yacc"
{
if (host_matches == TRUE &&
add_alias(yyvsp[-3].string, HOST_ALIAS) == FALSE)
pop;
}
break;
-case 55:
-#line 564 "parse.yacc"
+case 54:
+#line 569 "parse.yacc"
{
push;
if (printmatches == TRUE) {
}
}
break;
-case 56:
-#line 572 "parse.yacc"
+case 55:
+#line 577 "parse.yacc"
{
if (cmnd_matches == TRUE &&
add_alias(yyvsp[-3].string, CMND_ALIAS) == FALSE)
in_alias = FALSE;
}
break;
-case 57:
-#line 584 "parse.yacc"
+case 56:
+#line 589 "parse.yacc"
{ ; }
break;
-case 61:
-#line 592 "parse.yacc"
+case 60:
+#line 597 "parse.yacc"
{
push;
if (printmatches == TRUE) {
}
}
break;
-case 62:
-#line 600 "parse.yacc"
+case 61:
+#line 605 "parse.yacc"
{
if (runas_matches > 0 &&
add_alias(yyvsp[-3].string, RUNAS_ALIAS) == FALSE)
in_alias = FALSE;
}
break;
-case 65:
-#line 616 "parse.yacc"
+case 64:
+#line 621 "parse.yacc"
{ push; }
break;
-case 66:
-#line 616 "parse.yacc"
+case 65:
+#line 621 "parse.yacc"
{
if (user_matches == TRUE &&
add_alias(yyvsp[-3].string, USER_ALIAS) == FALSE)
free(yyvsp[-3].string);
}
break;
-case 67:
-#line 625 "parse.yacc"
+case 66:
+#line 630 "parse.yacc"
{ ; }
break;
-case 70:
-#line 630 "parse.yacc"
+case 68:
+#line 634 "parse.yacc"
{
- push;
+ if (yyvsp[0].BOOLEAN == TRUE)
+ user_matches = TRUE;
}
break;
-case 71:
-#line 632 "parse.yacc"
+case 69:
+#line 638 "parse.yacc"
{
- pop;
- if (user_matched == TRUE)
+ if (yyvsp[0].BOOLEAN == TRUE)
user_matches = FALSE;
- else if (user_matched == FALSE)
- user_matches = TRUE;
}
break;
-case 72:
-#line 640 "parse.yacc"
+case 70:
+#line 643 "parse.yacc"
{
if (strcmp(yyvsp[0].string, user_name) == 0)
- user_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 73:
-#line 645 "parse.yacc"
+case 71:
+#line 648 "parse.yacc"
{
if (usergr_matches(yyvsp[0].string, user_name))
- user_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 74:
-#line 650 "parse.yacc"
+case 72:
+#line 653 "parse.yacc"
{
if (netgr_matches(yyvsp[0].string, NULL, user_name))
- user_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 75:
-#line 655 "parse.yacc"
+case 73:
+#line 658 "parse.yacc"
{
/* could be an all-caps username */
if (find_alias(yyvsp[0].string, USER_ALIAS) == TRUE ||
strcmp(yyvsp[0].string, user_name) == 0)
- user_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
free(yyvsp[0].string);
}
break;
-case 76:
-#line 662 "parse.yacc"
+case 74:
+#line 665 "parse.yacc"
{
- user_matches = TRUE;
+ yyval.BOOLEAN = TRUE;
+ free(yyvsp[0].string);
}
break;
#line 1564 "sudo.tab.c"