Annotation of embedaddon/sudo/plugins/sudoers/toke.c, revision 1.1.1.1
1.1 misho 1: #include <config.h>
2: /* $OpenBSD: flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $ */
3:
4: /* A lexical scanner generated by flex */
5:
6: /* Scanner skeleton version:
7: * $Header: /cvs/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $
8: */
9:
10: #define FLEX_SCANNER
11: #define YY_FLEX_MAJOR_VERSION 2
12: #define YY_FLEX_MINOR_VERSION 5
13:
14: #include <stdio.h>
15: #include <errno.h>
16:
17:
18: /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
19: #ifdef c_plusplus
20: #ifndef __cplusplus
21: #define __cplusplus
22: #endif
23: #endif
24:
25:
26: #ifdef __cplusplus
27:
28: #include <stdlib.h>
29: #include <unistd.h>
30:
31: /* Use prototypes in function declarations. */
32: #define YY_USE_PROTOS
33:
34: /* The "const" storage-class-modifier is valid. */
35: #define YY_USE_CONST
36:
37: #else /* ! __cplusplus */
38:
39: #ifdef __STDC__
40:
41: #define YY_USE_PROTOS
42: #define YY_USE_CONST
43:
44: #endif /* __STDC__ */
45: #endif /* ! __cplusplus */
46:
47: #ifdef __TURBOC__
48: #pragma warn -rch
49: #pragma warn -use
50: #include <io.h>
51: #include <stdlib.h>
52: #define YY_USE_CONST
53: #define YY_USE_PROTOS
54: #endif
55:
56: #ifdef YY_USE_CONST
57: #define yyconst const
58: #else
59: #define yyconst
60: #endif
61:
62:
63: #ifdef YY_USE_PROTOS
64: #define YY_PROTO(proto) proto
65: #else
66: #define YY_PROTO(proto) ()
67: #endif
68:
69: /* Returned upon end-of-file. */
70: #define YY_NULL 0
71:
72: /* Promotes a possibly negative, possibly signed char to an unsigned
73: * integer for use as an array index. If the signed char is negative,
74: * we want to instead treat it as an 8-bit unsigned char, hence the
75: * double cast.
76: */
77: #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
78:
79: /* Enter a start condition. This macro really ought to take a parameter,
80: * but we do it the disgusting crufty way forced on us by the ()-less
81: * definition of BEGIN.
82: */
83: #define BEGIN yy_start = 1 + 2 *
84:
85: /* Translate the current start state into a value that can be later handed
86: * to BEGIN to return to the state. The YYSTATE alias is for lex
87: * compatibility.
88: */
89: #define YY_START ((yy_start - 1) / 2)
90: #define YYSTATE YY_START
91:
92: /* Action number for EOF rule of a given start state. */
93: #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
94:
95: /* Special action meaning "start processing a new file". */
96: #define YY_NEW_FILE yyrestart( yyin )
97:
98: #define YY_END_OF_BUFFER_CHAR 0
99:
100: /* Size of default input buffer. */
101: #define YY_BUF_SIZE 16384
102:
103: typedef struct yy_buffer_state *YY_BUFFER_STATE;
104:
105: extern int yyleng;
106: extern FILE *yyin, *yyout;
107:
108: #define EOB_ACT_CONTINUE_SCAN 0
109: #define EOB_ACT_END_OF_FILE 1
110: #define EOB_ACT_LAST_MATCH 2
111:
112: /* The funky do-while in the following #define is used to turn the definition
113: * int a single C statement (which needs a semi-colon terminator). This
114: * avoids problems with code like:
115: *
116: * if ( condition_holds )
117: * yyless( 5 );
118: * else
119: * do_something_else();
120: *
121: * Prior to using the do-while the compiler would get upset at the
122: * "else" because it interpreted the "if" statement as being all
123: * done when it reached the ';' after the yyless() call.
124: */
125:
126: /* Return all but the first 'n' matched characters back to the input stream. */
127:
128: #define yyless(n) \
129: do \
130: { \
131: /* Undo effects of setting up yytext. */ \
132: *yy_cp = yy_hold_char; \
133: YY_RESTORE_YY_MORE_OFFSET \
134: yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
135: YY_DO_BEFORE_ACTION; /* set up yytext again */ \
136: } \
137: while ( 0 )
138:
139: #define unput(c) yyunput( c, yytext_ptr )
140:
141: /* The following is because we cannot portably get our hands on size_t
142: * (without autoconf's help, which isn't available because we want
143: * flex-generated scanners to compile on their own).
144: */
145: typedef unsigned int yy_size_t;
146:
147:
148: struct yy_buffer_state
149: {
150: FILE *yy_input_file;
151:
152: char *yy_ch_buf; /* input buffer */
153: char *yy_buf_pos; /* current position in input buffer */
154:
155: /* Size of input buffer in bytes, not including room for EOB
156: * characters.
157: */
158: yy_size_t yy_buf_size;
159:
160: /* Number of characters read into yy_ch_buf, not including EOB
161: * characters.
162: */
163: int yy_n_chars;
164:
165: /* Whether we "own" the buffer - i.e., we know we created it,
166: * and can realloc() it to grow it, and should free() it to
167: * delete it.
168: */
169: int yy_is_our_buffer;
170:
171: /* Whether this is an "interactive" input source; if so, and
172: * if we're using stdio for input, then we want to use getc()
173: * instead of fread(), to make sure we stop fetching input after
174: * each newline.
175: */
176: int yy_is_interactive;
177:
178: /* Whether we're considered to be at the beginning of a line.
179: * If so, '^' rules will be active on the next match, otherwise
180: * not.
181: */
182: int yy_at_bol;
183:
184: /* Whether to try to fill the input buffer when we reach the
185: * end of it.
186: */
187: int yy_fill_buffer;
188:
189: int yy_buffer_status;
190: #define YY_BUFFER_NEW 0
191: #define YY_BUFFER_NORMAL 1
192: /* When an EOF's been seen but there's still some text to process
193: * then we mark the buffer as YY_EOF_PENDING, to indicate that we
194: * shouldn't try reading from the input source any more. We might
195: * still have a bunch of tokens to match, though, because of
196: * possible backing-up.
197: *
198: * When we actually see the EOF, we change the status to "new"
199: * (via yyrestart()), so that the user can continue scanning by
200: * just pointing yyin at a new input file.
201: */
202: #define YY_BUFFER_EOF_PENDING 2
203: };
204:
205: static YY_BUFFER_STATE yy_current_buffer = 0;
206:
207: /* We provide macros for accessing buffer states in case in the
208: * future we want to put the buffer states in a more general
209: * "scanner state".
210: */
211: #define YY_CURRENT_BUFFER yy_current_buffer
212:
213:
214: /* yy_hold_char holds the character lost when yytext is formed. */
215: static char yy_hold_char;
216:
217: static int yy_n_chars; /* number of characters read into yy_ch_buf */
218:
219:
220: int yyleng;
221:
222: /* Points to current character in buffer. */
223: static char *yy_c_buf_p = (char *) 0;
224: static int yy_init = 1; /* whether we need to initialize */
225: static int yy_start = 0; /* start state number */
226:
227: /* Flag which is used to allow yywrap()'s to do buffer switches
228: * instead of setting up a fresh yyin. A bit of a hack ...
229: */
230: static int yy_did_buffer_switch_on_eof;
231:
232: void yyrestart YY_PROTO(( FILE *input_file ));
233:
234: void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
235: void yy_load_buffer_state YY_PROTO(( void ));
236: YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
237: void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
238: void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
239: void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
240: #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
241:
242: YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
243: YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
244: YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
245:
246: static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
247: static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
248: static void yy_flex_free YY_PROTO(( void * ));
249:
250: #define yy_new_buffer yy_create_buffer
251:
252: #define yy_set_interactive(is_interactive) \
253: { \
254: if ( ! yy_current_buffer ) \
255: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
256: yy_current_buffer->yy_is_interactive = is_interactive; \
257: }
258:
259: #define yy_set_bol(at_bol) \
260: { \
261: if ( ! yy_current_buffer ) \
262: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
263: yy_current_buffer->yy_at_bol = at_bol; \
264: }
265:
266: #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
267:
268:
269: #define yywrap() 1
270: #define YY_SKIP_YYWRAP
271: typedef unsigned char YY_CHAR;
272: FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
273: typedef int yy_state_type;
274: extern char *yytext;
275: #define yytext_ptr yytext
276:
277: static yy_state_type yy_get_previous_state YY_PROTO(( void ));
278: static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
279: static int yy_get_next_buffer YY_PROTO(( void ));
280: static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
281:
282: /* Done after the current pattern has been matched and before the
283: * corresponding action - sets up yytext.
284: */
285: #define YY_DO_BEFORE_ACTION \
286: yytext_ptr = yy_bp; \
287: yyleng = (int) (yy_cp - yy_bp); \
288: yy_hold_char = *yy_cp; \
289: *yy_cp = '\0'; \
290: yy_c_buf_p = yy_cp;
291:
292: #define YY_NUM_RULES 59
293: #define YY_END_OF_BUFFER 60
294: static yyconst short int yy_accept[607] =
295: { 0,
296: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
297: 0, 0, 60, 47, 55, 54, 53, 46, 58, 32,
298: 48, 49, 32, 50, 47, 47, 47, 47, 52, 51,
299: 58, 42, 42, 42, 42, 42, 42, 42, 42, 42,
300: 42, 58, 47, 47, 55, 58, 42, 42, 42, 42,
301: 42, 2, 58, 1, 47, 47, 17, 16, 17, 16,
302: 16, 58, 58, 58, 3, 9, 8, 9, 4, 9,
303: 5, 58, 13, 13, 13, 11, 12, 47, 0, 55,
304: 53, 0, 57, 0, 47, 34, 0, 32, 0, 33,
305: 0, 45, 45, 0, 47, 47, 0, 47, 47, 47,
306:
307: 47, 0, 37, 42, 42, 42, 42, 42, 42, 42,
308: 42, 42, 42, 47, 56, 47, 55, 0, 0, 0,
309: 0, 0, 0, 47, 47, 47, 47, 47, 2, 1,
310: 0, 1, 43, 43, 0, 47, 17, 17, 15, 14,
311: 15, 0, 0, 3, 9, 0, 6, 7, 9, 9,
312: 13, 0, 13, 13, 0, 10, 0, 0, 0, 34,
313: 34, 0, 0, 47, 47, 47, 47, 47, 0, 0,
314: 37, 37, 42, 39, 42, 42, 42, 42, 42, 42,
315: 42, 42, 42, 42, 47, 0, 0, 0, 0, 0,
316: 0, 47, 47, 47, 47, 47, 0, 47, 10, 0,
317:
318: 47, 47, 47, 47, 47, 47, 0, 38, 38, 38,
319: 0, 0, 37, 37, 37, 37, 37, 37, 37, 42,
320: 42, 42, 42, 42, 42, 42, 42, 40, 42, 41,
321: 47, 0, 0, 0, 0, 0, 0, 47, 47, 47,
322: 47, 47, 47, 47, 0, 0, 38, 38, 38, 0,
323: 37, 37, 0, 37, 37, 37, 37, 37, 37, 37,
324: 37, 37, 37, 37, 0, 25, 42, 42, 42, 42,
325: 42, 42, 42, 42, 47, 0, 0, 0, 0, 47,
326: 47, 47, 47, 47, 47, 47, 47, 0, 38, 0,
327: 37, 37, 37, 0, 0, 0, 37, 37, 37, 37,
328:
329: 37, 37, 37, 37, 37, 37, 37, 37, 37, 42,
330: 42, 42, 42, 42, 42, 42, 42, 47, 0, 0,
331: 0, 47, 47, 47, 35, 35, 35, 0, 0, 37,
332: 37, 37, 37, 37, 37, 37, 0, 0, 0, 0,
333: 0, 37, 37, 37, 37, 37, 37, 37, 37, 37,
334: 37, 37, 37, 37, 37, 42, 42, 0, 24, 42,
335: 42, 42, 42, 0, 23, 0, 26, 47, 0, 0,
336: 0, 47, 47, 47, 47, 35, 35, 35, 35, 0,
337: 37, 0, 37, 37, 37, 37, 37, 37, 37, 37,
338: 37, 37, 37, 0, 0, 0, 37, 37, 37, 37,
339:
340: 37, 37, 37, 37, 37, 37, 37, 37, 37, 42,
341: 42, 42, 42, 42, 42, 44, 0, 0, 0, 47,
342: 20, 43, 36, 36, 36, 36, 37, 0, 0, 0,
343: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
344: 37, 37, 37, 0, 0, 0, 0, 0, 37, 37,
345: 37, 37, 37, 37, 37, 37, 42, 42, 42, 42,
346: 0, 22, 0, 27, 0, 20, 0, 0, 47, 0,
347: 47, 47, 47, 36, 36, 36, 36, 0, 0, 0,
348: 0, 0, 37, 37, 37, 37, 37, 37, 37, 37,
349: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
350:
351: 37, 37, 0, 30, 42, 42, 42, 0, 0, 0,
352: 21, 20, 0, 0, 0, 0, 0, 20, 0, 47,
353: 47, 47, 0, 0, 0, 37, 37, 37, 37, 37,
354: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
355: 37, 37, 37, 0, 28, 42, 42, 21, 0, 18,
356: 0, 0, 20, 47, 47, 47, 47, 47, 0, 0,
357: 0, 0, 0, 37, 37, 37, 37, 37, 37, 37,
358: 37, 0, 31, 42, 0, 47, 47, 47, 37, 37,
359: 37, 37, 37, 37, 0, 29, 0, 47, 47, 47,
360: 47, 47, 37, 37, 37, 37, 37, 0, 19, 35,
361:
362: 35, 35, 35, 35, 35, 0
363: } ;
364:
365: static yyconst int yy_ec[256] =
366: { 0,
367: 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
368: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
369: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
370: 1, 2, 4, 5, 6, 1, 7, 1, 1, 8,
371: 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
372: 19, 20, 21, 22, 22, 22, 23, 24, 1, 1,
373: 25, 26, 10, 27, 28, 29, 30, 31, 32, 29,
374: 33, 34, 35, 36, 36, 37, 36, 38, 39, 40,
375: 36, 41, 42, 43, 44, 45, 46, 47, 48, 36,
376: 10, 49, 10, 1, 50, 1, 51, 52, 53, 54,
377:
378: 55, 56, 57, 57, 58, 57, 57, 59, 60, 61,
379: 62, 57, 57, 63, 64, 65, 66, 57, 57, 57,
380: 57, 57, 1, 1, 1, 1, 1, 1, 1, 1,
381: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
382: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
383: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
384: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
385: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
386: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
387: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
388:
389: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
390: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
391: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
392: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
393: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
394: 1, 1, 1, 1, 1
395: } ;
396:
397: static yyconst int yy_meta[67] =
398: { 0,
399: 1, 2, 3, 4, 5, 6, 1, 7, 7, 1,
400: 1, 8, 1, 9, 10, 11, 11, 11, 11, 11,
401: 11, 11, 11, 12, 13, 7, 1, 11, 11, 11,
402: 11, 11, 1, 1, 1, 1, 1, 1, 1, 1,
403: 1, 1, 1, 1, 1, 1, 1, 1, 14, 15,
404: 16, 16, 16, 16, 16, 16, 15, 15, 15, 15,
405: 15, 15, 15, 15, 15, 15
406: } ;
407:
408: static yyconst short int yy_base[671] =
409: { 0,
410: 0, 65, 67, 72, 99, 114, 162, 227, 292, 340,
411: 86, 125, 2840, 2790, 2836, 3665, 2833, 3665, 387, 70,
412: 3665, 3665, 2771, 3665, 136, 397, 133, 159, 2795, 3665,
413: 3665, 453, 2781, 33, 504, 2770, 2767, 2777, 2765, 2771,
414: 2754, 559, 170, 19, 165, 583, 38, 49, 2739, 68,
415: 2727, 81, 219, 2771, 305, 48, 0, 3665, 2761, 3665,
416: 0, 250, 639, 119, 0, 2709, 3665, 108, 3665, 112,
417: 3665, 140, 2699, 98, 121, 3665, 195, 2693, 661, 2739,
418: 2736, 2736, 3665, 227, 247, 300, 316, 152, 354, 2681,
419: 686, 373, 2670, 711, 352, 722, 2692, 2669, 375, 414,
420:
421: 302, 2656, 57, 763, 0, 2628, 2625, 2614, 505, 2602,
422: 2606, 2599, 2601, 202, 3665, 153, 546, 2572, 2565, 2549,
423: 2537, 2524, 200, 110, 244, 28, 111, 252, 171, 2578,
424: 422, 2577, 565, 2529, 818, 262, 0, 2573, 179, 3665,
425: 3665, 599, 269, 0, 2513, 453, 3665, 3665, 2512, 548,
426: 2490, 2533, 206, 253, 323, 2535, 2524, 2513, 607, 615,
427: 306, 722, 586, 831, 867, 903, 939, 2499, 2456, 980,
428: 333, 1022, 1063, 0, 2430, 2394, 2363, 2364, 2374, 2369,
429: 2327, 2330, 2329, 2328, 266, 2289, 2283, 2272, 2274, 2279,
430: 409, 334, 2279, 145, 335, 83, 672, 278, 2327, 2325,
431:
432: 627, 259, 1106, 1142, 741, 210, 2293, 2279, 683, 513,
433: 2275, 2271, 352, 747, 1178, 780, 788, 1220, 815, 2270,
434: 400, 325, 2261, 2258, 2248, 2246, 2242, 0, 2240, 0,
435: 489, 2223, 2213, 2198, 2211, 2198, 420, 407, 529, 490,
436: 491, 1263, 1299, 1335, 2235, 2234, 839, 2234, 2232, 2228,
437: 2226, 528, 848, 657, 856, 665, 1371, 0, 877, 1382,
438: 886, 894, 1424, 913, 570, 3665, 2208, 2197, 2198, 2177,
439: 2184, 2193, 2190, 2169, 558, 2145, 2098, 2099, 648, 626,
440: 530, 559, 923, 336, 1467, 1503, 964, 2138, 2137, 2108,
441: 2086, 1537, 551, 1000, 1041, 1082, 653, 694, 797, 1049,
442:
443: 923, 1580, 0, 1116, 1591, 1090, 1008, 1633, 1125, 2069,
444: 2065, 747, 686, 2046, 2005, 786, 926, 905, 2014, 1982,
445: 679, 634, 544, 915, 1675, 1710, 1745, 2015, 1978, 1962,
446: 1150, 1781, 1158, 1133, 1822, 1197, 1166, 1954, 1239, 1273,
447: 1207, 950, 951, 962, 991, 1247, 1073, 1865, 0, 1283,
448: 1876, 1307, 1315, 1918, 1323, 1923, 1923, 1188, 3665, 1924,
449: 1898, 1893, 1873, 1286, 3665, 1336, 3665, 707, 1790, 1783,
450: 786, 930, 764, 1298, 1358, 1041, 1960, 1995, 1400, 1823,
451: 1799, 1348, 708, 1406, 1348, 2031, 0, 559, 2042, 1441,
452: 1449, 2083, 1477, 1487, 1513, 1523, 1230, 1290, 1458, 1548,
453:
454: 1557, 1602, 2126, 0, 1613, 2137, 1650, 1565, 1660, 1765,
455: 1763, 1680, 1675, 1359, 1406, 1626, 1601, 1577, 897, 938,
456: 1695, 1589, 2180, 2216, 2252, 2288, 1611, 1686, 1720, 1731,
457: 1563, 1478, 1504, 1694, 1524, 2324, 0, 617, 2335, 1753,
458: 1761, 2376, 1769, 1798, 1550, 1808, 1841, 1851, 1335, 1358,
459: 1887, 714, 825, 2419, 0, 926, 1407, 1508, 1506, 1471,
460: 1547, 3665, 1616, 3665, 1423, 1731, 1907, 1512, 1575, 1910,
461: 1915, 1935, 1498, 2429, 2465, 1971, 1611, 1977, 1457, 2005,
462: 2015, 1987, 1408, 1254, 1732, 1782, 2059, 1842, 2501, 0,
463: 1025, 2512, 2067, 2100, 2553, 2108, 2155, 2164, 2189, 1769,
464:
465: 1207, 1189, 1634, 3665, 1699, 1162, 1113, 1074, 1118, 384,
466: 1040, 2211, 2218, 2238, 2243, 2263, 2288, 2249, 2307, 2596,
467: 2632, 2668, 2304, 2354, 2395, 1025, 1006, 1889, 2016, 2362,
468: 2043, 2704, 0, 1224, 2715, 2403, 2437, 2445, 992, 2454,
469: 2474, 2483, 903, 1921, 3665, 1941, 839, 3665, 843, 3665,
470: 1306, 2489, 2529, 2537, 1911, 2758, 2794, 2573, 2579, 811,
471: 2607, 2617, 2642, 640, 629, 2109, 535, 447, 2650, 0,
472: 1428, 1942, 3665, 2044, 2216, 2830, 2866, 2902, 2676, 2684,
473: 2692, 337, 0, 333, 2067, 3665, 327, 2733, 1912, 2938,
474: 2974, 2743, 3665, 2767, 2777, 2658, 3665, 166, 3665, 2805,
475:
476: 2813, 2847, 63, 2855, 2881, 3665, 3023, 3039, 3055, 3071,
477: 3087, 3103, 3119, 3135, 3151, 3157, 3173, 3189, 1498, 3205,
478: 3221, 3237, 3253, 3269, 3285, 3301, 3307, 3314, 3330, 3346,
479: 3352, 3359, 3365, 3371, 3377, 3384, 3390, 3396, 3402, 3409,
480: 3417, 3423, 3429, 3435, 3442, 3450, 3456, 3462, 3469, 3477,
481: 3483, 3491, 3498, 3506, 3512, 3520, 3527, 3535, 3551, 3567,
482: 3573, 3581, 3588, 3604, 3610, 3618, 3624, 3632, 1295, 3648
483: } ;
484:
485: static yyconst short int yy_def[671] =
486: { 0,
487: 606, 1, 1, 1, 607, 607, 608, 608, 609, 609,
488: 610, 610, 606, 611, 606, 606, 606, 606, 612, 613,
489: 606, 606, 614, 606, 615, 611, 26, 26, 616, 606,
490: 606, 606, 32, 32, 32, 35, 35, 35, 35, 35,
491: 35, 611, 26, 611, 606, 612, 32, 32, 35, 35,
492: 35, 606, 606, 606, 617, 611, 618, 606, 618, 606,
493: 618, 606, 612, 606, 619, 620, 606, 620, 606, 620,
494: 606, 621, 622, 622, 622, 606, 606, 611, 611, 606,
495: 606, 623, 606, 624, 606, 613, 606, 625, 613, 614,
496: 614, 615, 626, 611, 611, 26, 616, 96, 96, 96,
497:
498: 96, 627, 628, 35, 35, 35, 35, 35, 35, 35,
499: 35, 35, 35, 611, 606, 611, 606, 606, 606, 606,
500: 606, 606, 623, 611, 96, 611, 611, 611, 606, 606,
501: 606, 606, 617, 629, 611, 611, 618, 618, 606, 606,
502: 606, 624, 606, 619, 620, 620, 606, 606, 620, 620,
503: 622, 606, 622, 622, 606, 606, 623, 630, 606, 606,
504: 625, 625, 606, 611, 611, 611, 96, 167, 631, 606,
505: 632, 606, 104, 35, 35, 35, 35, 35, 35, 35,
506: 35, 35, 35, 35, 611, 606, 606, 606, 606, 606,
507: 623, 611, 167, 611, 611, 611, 606, 611, 606, 630,
508:
509: 611, 611, 611, 611, 611, 611, 633, 634, 634, 209,
510: 635, 634, 636, 172, 606, 215, 215, 606, 215, 35,
511: 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
512: 611, 606, 606, 606, 606, 606, 623, 611, 611, 611,
513: 611, 611, 611, 611, 606, 637, 637, 247, 637, 638,
514: 639, 640, 606, 641, 218, 641, 641, 257, 641, 606,
515: 260, 260, 606, 260, 606, 606, 35, 35, 35, 35,
516: 35, 35, 35, 35, 611, 606, 606, 606, 623, 611,
517: 611, 611, 611, 611, 611, 611, 611, 642, 642, 643,
518: 644, 606, 606, 606, 606, 606, 645, 645, 646, 263,
519:
520: 646, 646, 302, 646, 606, 305, 305, 606, 305, 35,
521: 35, 35, 35, 35, 35, 35, 35, 611, 606, 606,
522: 623, 611, 611, 611, 611, 611, 611, 606, 647, 648,
523: 292, 606, 332, 332, 606, 332, 606, 606, 606, 606,
524: 606, 606, 649, 649, 650, 308, 650, 650, 348, 650,
525: 606, 351, 351, 606, 351, 35, 35, 606, 606, 35,
526: 35, 35, 35, 606, 606, 606, 606, 611, 606, 606,
527: 623, 611, 611, 611, 611, 611, 611, 611, 611, 606,
528: 651, 606, 652, 335, 652, 652, 386, 386, 606, 389,
529: 389, 606, 389, 606, 606, 606, 606, 653, 653, 654,
530:
531: 354, 654, 654, 403, 654, 606, 406, 406, 406, 35,
532: 35, 35, 35, 35, 35, 611, 606, 606, 623, 611,
533: 611, 611, 611, 611, 611, 611, 606, 606, 606, 606,
534: 655, 655, 656, 392, 656, 656, 436, 436, 606, 439,
535: 439, 606, 439, 606, 606, 606, 606, 606, 606, 657,
536: 657, 658, 658, 658, 454, 454, 35, 35, 35, 35,
537: 606, 606, 606, 606, 606, 606, 623, 623, 611, 659,
538: 660, 611, 611, 611, 611, 611, 611, 606, 606, 606,
539: 606, 606, 606, 661, 661, 662, 442, 662, 662, 489,
540: 489, 606, 492, 492, 606, 492, 606, 606, 606, 606,
541:
542: 663, 663, 606, 606, 35, 35, 35, 606, 664, 623,
543: 611, 659, 659, 659, 659, 606, 659, 660, 660, 611,
544: 611, 611, 606, 606, 606, 606, 665, 665, 666, 495,
545: 666, 666, 532, 532, 606, 535, 535, 535, 606, 606,
546: 606, 606, 606, 606, 606, 35, 35, 606, 664, 606,
547: 623, 606, 606, 611, 611, 611, 611, 611, 606, 606,
548: 606, 606, 606, 606, 667, 667, 668, 668, 668, 569,
549: 569, 606, 606, 35, 623, 611, 611, 611, 606, 606,
550: 606, 606, 669, 669, 606, 606, 670, 611, 611, 611,
551: 611, 611, 606, 606, 606, 606, 606, 670, 606, 611,
552:
553: 611, 611, 611, 611, 611, 0, 606, 606, 606, 606,
554: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
555: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
556: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
557: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
558: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
559: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606
560: } ;
561:
562: static yyconst short int yy_nxt[3732] =
563: { 0,
564: 14, 15, 16, 17, 18, 19, 20, 21, 22, 14,
565: 23, 24, 14, 14, 25, 26, 27, 28, 26, 26,
566: 26, 26, 26, 29, 30, 31, 14, 32, 33, 33,
567: 33, 34, 35, 35, 35, 35, 36, 37, 35, 38,
568: 39, 40, 41, 35, 35, 35, 35, 35, 42, 14,
569: 43, 43, 43, 43, 43, 43, 14, 14, 14, 14,
570: 14, 14, 14, 44, 14, 14, 45, 79, 52, 105,
571: 46, 170, 53, 52, 105, 87, 79, 53, 54, 107,
572: 172, 55, 129, 54, 116, 105, 55, 74, 16, 75,
573: 76, 194, 130, 88, 47, 48, 79, 124, 49, 153,
574:
575: 15, 58, 59, 125, 60, 50, 111, 35, 51, 35,
576: 60, 79, 35, 136, 35, 15, 58, 59, 89, 60,
577: 143, 115, 60, 61, 154, 60, 74, 16, 75, 76,
578: 56, 79, 147, 127, 77, 56, 148, 60, 61, 93,
579: 93, 150, 115, 93, 93, 238, 152, 62, 99, 99,
580: 99, 99, 99, 99, 99, 99, 146, 87, 79, 79,
581: 146, 93, 62, 15, 16, 17, 117, 63, 599, 152,
582: 192, 195, 129, 77, 100, 100, 100, 100, 100, 101,
583: 143, 115, 130, 78, 94, 98, 98, 98, 98, 98,
584: 98, 98, 98, 79, 118, 119, 155, 156, 120, 151,
585:
586: 162, 79, 83, 143, 115, 121, 185, 153, 122, 238,
587: 64, 65, 65, 65, 65, 65, 65, 65, 65, 65,
588: 65, 65, 65, 65, 65, 65, 65, 65, 15, 16,
589: 17, 131, 63, 97, 85, 85, 85, 85, 85, 85,
590: 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
591: 79, 139, 115, 140, 152, 141, 154, 78, 79, 140,
592: 191, 141, 85, 85, 85, 85, 85, 85, 85, 85,
593: 143, 115, 201, 141, 141, 64, 65, 65, 65, 65,
594: 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
595: 65, 65, 65, 15, 16, 17, 67, 63, 141, 193,
596:
597: 79, 152, 68, 69, 70, 606, 196, 79, 134, 134,
598: 79, 606, 134, 134, 79, 198, 71, 168, 168, 168,
599: 168, 168, 168, 606, 155, 156, 79, 231, 159, 599,
600: 134, 160, 160, 160, 160, 160, 160, 160, 160, 241,
601: 72, 15, 16, 17, 67, 63, 382, 170, 89, 283,
602: 68, 69, 70, 135, 162, 86, 214, 86, 86, 267,
603: 530, 86, 86, 268, 71, 86, 170, 164, 165, 166,
604: 164, 164, 164, 164, 164, 214, 93, 93, 86, 86,
605: 93, 93, 79, 79, 79, 240, 83, 238, 72, 83,
606: 168, 168, 168, 168, 168, 168, 168, 168, 93, 84,
607:
608: 79, 265, 85, 85, 85, 85, 85, 85, 85, 85,
609: 95, 83, 96, 96, 96, 96, 96, 96, 96, 96,
610: 97, 94, 83, 266, 98, 98, 98, 98, 98, 168,
611: 168, 168, 168, 168, 168, 168, 168, 85, 85, 85,
612: 85, 85, 85, 85, 85, 79, 551, 98, 98, 98,
613: 98, 98, 98, 78, 145, 79, 280, 145, 145, 78,
614: 606, 237, 78, 78, 145, 78, 78, 78, 104, 104,
615: 104, 104, 104, 104, 104, 104, 97, 145, 279, 78,
616: 104, 104, 104, 104, 104, 105, 105, 105, 105, 106,
617: 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
618:
619: 105, 79, 105, 98, 98, 98, 98, 98, 98, 78,
620: 78, 78, 78, 78, 78, 78, 78, 78, 78, 105,
621: 105, 105, 105, 105, 105, 105, 105, 606, 249, 249,
622: 249, 105, 105, 105, 105, 105, 177, 79, 79, 79,
623: 105, 178, 170, 275, 179, 282, 180, 117, 382, 143,
624: 115, 214, 97, 238, 78, 78, 78, 78, 78, 78,
625: 114, 115, 78, 78, 78, 170, 78, 78, 134, 134,
626: 78, 265, 134, 134, 214, 118, 119, 79, 79, 120,
627: 431, 431, 78, 78, 78, 83, 121, 93, 323, 122,
628: 134, 93, 79, 266, 281, 84, 146, 93, 85, 85,
629:
630: 85, 85, 85, 85, 85, 85, 79, 79, 373, 93,
631: 93, 318, 324, 135, 606, 606, 606, 606, 606, 606,
632: 606, 606, 160, 160, 160, 160, 160, 160, 160, 160,
633: 160, 160, 160, 160, 160, 160, 160, 160, 484, 484,
634: 123, 83, 242, 243, 244, 242, 242, 242, 242, 242,
635: 83, 142, 530, 322, 606, 606, 606, 606, 606, 606,
636: 606, 606, 78, 487, 78, 78, 78, 170, 78, 78,
637: 253, 170, 78, 134, 79, 79, 255, 134, 606, 170,
638: 255, 83, 79, 134, 78, 78, 78, 90, 255, 90,
639: 90, 90, 372, 90, 90, 134, 134, 90, 247, 247,
640:
641: 248, 249, 249, 249, 249, 249, 211, 253, 170, 90,
642: 90, 90, 92, 321, 78, 78, 92, 255, 78, 78,
643: 360, 382, 92, 161, 361, 161, 161, 253, 170, 161,
644: 161, 384, 371, 161, 92, 92, 78, 167, 167, 167,
645: 167, 167, 167, 167, 167, 161, 161, 161, 358, 167,
646: 167, 167, 167, 167, 201, 79, 202, 202, 202, 202,
647: 202, 202, 219, 219, 219, 219, 219, 219, 219, 219,
648: 359, 416, 167, 167, 167, 167, 167, 167, 173, 173,
649: 173, 173, 173, 173, 173, 173, 97, 364, 83, 79,
650: 173, 173, 173, 173, 173, 257, 257, 257, 257, 257,
651:
652: 257, 257, 257, 258, 258, 258, 258, 258, 259, 365,
653: 253, 170, 79, 167, 167, 167, 167, 167, 167, 133,
654: 300, 78, 78, 133, 559, 78, 78, 421, 606, 133,
655: 256, 256, 256, 256, 256, 256, 256, 256, 606, 170,
656: 419, 133, 133, 78, 201, 550, 202, 202, 202, 202,
657: 202, 202, 202, 202, 289, 289, 289, 289, 289, 289,
658: 289, 289, 211, 294, 295, 296, 294, 294, 294, 294,
659: 294, 264, 264, 264, 264, 264, 264, 264, 264, 79,
660: 201, 574, 203, 203, 203, 203, 203, 203, 203, 203,
661: 253, 170, 298, 298, 298, 298, 298, 298, 467, 83,
662:
663: 255, 302, 302, 302, 302, 302, 302, 302, 302, 303,
664: 303, 303, 303, 303, 304, 79, 201, 170, 204, 204,
665: 204, 204, 204, 205, 202, 202, 606, 366, 301, 301,
666: 301, 301, 301, 301, 301, 301, 606, 170, 325, 326,
667: 327, 325, 325, 325, 325, 325, 300, 501, 501, 367,
668: 468, 79, 78, 79, 206, 206, 206, 206, 206, 206,
669: 206, 206, 368, 79, 170, 170, 206, 206, 206, 206,
670: 206, 79, 374, 255, 300, 253, 170, 283, 79, 284,
671: 284, 284, 284, 284, 284, 300, 79, 420, 469, 206,
672: 206, 206, 206, 206, 206, 208, 209, 210, 210, 210,
673:
674: 210, 210, 210, 211, 253, 170, 170, 212, 212, 212,
675: 212, 212, 79, 337, 346, 338, 338, 338, 338, 338,
676: 338, 338, 338, 349, 349, 349, 349, 349, 350, 487,
677: 212, 212, 212, 212, 212, 212, 170, 215, 216, 217,
678: 215, 215, 215, 215, 215, 218, 527, 527, 434, 219,
679: 219, 219, 219, 219, 337, 375, 339, 339, 339, 339,
680: 339, 339, 339, 339, 309, 309, 309, 309, 309, 309,
681: 309, 309, 219, 219, 219, 219, 219, 219, 220, 220,
682: 220, 220, 220, 220, 220, 220, 606, 170, 79, 79,
683: 220, 220, 220, 220, 220, 337, 346, 340, 340, 340,
684:
685: 340, 340, 341, 338, 338, 348, 348, 348, 348, 348,
686: 348, 348, 348, 206, 206, 206, 206, 206, 206, 201,
687: 550, 202, 202, 202, 202, 202, 202, 202, 202, 253,
688: 170, 344, 344, 344, 344, 344, 344, 548, 606, 300,
689: 347, 347, 347, 347, 347, 347, 347, 347, 387, 387,
690: 387, 387, 387, 388, 79, 201, 547, 202, 202, 202,
691: 202, 202, 202, 202, 202, 336, 336, 336, 336, 336,
692: 336, 336, 336, 386, 386, 386, 386, 386, 386, 386,
693: 386, 394, 395, 396, 394, 394, 394, 394, 394, 358,
694: 79, 253, 170, 254, 254, 254, 254, 254, 254, 254,
695:
696: 254, 255, 253, 170, 546, 256, 256, 256, 256, 256,
697: 606, 359, 385, 385, 385, 385, 385, 385, 385, 385,
698: 337, 170, 338, 338, 338, 338, 338, 338, 256, 256,
699: 256, 256, 256, 256, 170, 260, 261, 262, 260, 260,
700: 260, 260, 260, 263, 170, 565, 565, 264, 264, 264,
701: 264, 264, 337, 300, 338, 338, 338, 338, 338, 338,
702: 338, 338, 355, 355, 355, 355, 355, 355, 355, 355,
703: 264, 264, 264, 264, 264, 264, 283, 434, 284, 284,
704: 284, 284, 284, 284, 284, 284, 337, 364, 338, 338,
705: 338, 338, 338, 338, 338, 338, 253, 170, 399, 399,
706:
707: 399, 399, 399, 399, 170, 597, 346, 575, 83, 365,
708: 597, 79, 283, 346, 285, 285, 285, 285, 285, 285,
709: 285, 285, 403, 403, 403, 403, 403, 403, 403, 403,
710: 404, 404, 404, 404, 404, 405, 606, 366, 402, 402,
711: 402, 402, 402, 402, 402, 402, 79, 79, 283, 170,
712: 286, 286, 286, 286, 286, 287, 284, 284, 346, 367,
713: 461, 606, 422, 428, 429, 430, 428, 428, 428, 428,
714: 428, 384, 170, 423, 424, 425, 426, 423, 423, 423,
715: 423, 401, 462, 79, 253, 170, 298, 298, 298, 298,
716: 298, 298, 298, 298, 255, 253, 170, 299, 299, 299,
717:
718: 299, 299, 299, 299, 299, 300, 79, 463, 503, 301,
719: 301, 301, 301, 301, 375, 376, 376, 376, 376, 376,
720: 376, 393, 393, 393, 393, 393, 393, 393, 393, 464,
721: 504, 384, 301, 301, 301, 301, 301, 301, 170, 305,
722: 306, 307, 305, 305, 305, 305, 305, 308, 79, 583,
723: 583, 309, 309, 309, 309, 309, 436, 436, 436, 436,
724: 436, 436, 436, 436, 437, 437, 437, 437, 437, 438,
725: 478, 253, 170, 508, 309, 309, 309, 309, 309, 309,
726: 283, 346, 284, 284, 284, 284, 284, 284, 284, 284,
727: 606, 382, 435, 435, 435, 435, 435, 435, 435, 435,
728:
729: 444, 384, 445, 445, 445, 445, 445, 445, 445, 445,
730: 507, 472, 144, 144, 83, 79, 283, 382, 284, 284,
731: 284, 284, 284, 284, 284, 284, 444, 434, 446, 446,
732: 446, 446, 446, 446, 446, 446, 444, 606, 447, 447,
733: 447, 447, 447, 448, 445, 445, 79, 434, 461, 506,
734: 505, 79, 332, 333, 334, 332, 332, 332, 332, 332,
735: 335, 253, 170, 444, 336, 336, 336, 336, 336, 510,
736: 462, 401, 409, 409, 409, 409, 409, 409, 409, 409,
737: 455, 455, 455, 455, 455, 456, 384, 336, 336, 336,
738: 336, 336, 336, 253, 170, 344, 344, 344, 344, 344,
739:
740: 344, 344, 344, 300, 253, 170, 345, 345, 345, 345,
741: 345, 345, 345, 345, 346, 606, 170, 463, 347, 347,
742: 347, 347, 347, 79, 472, 401, 253, 170, 451, 451,
743: 451, 451, 451, 451, 331, 503, 401, 79, 511, 464,
744: 466, 347, 347, 347, 347, 347, 347, 170, 351, 352,
745: 353, 351, 351, 351, 351, 351, 354, 504, 465, 79,
746: 355, 355, 355, 355, 355, 454, 454, 454, 454, 454,
747: 454, 454, 454, 606, 79, 453, 453, 453, 453, 453,
748: 453, 453, 453, 355, 355, 355, 355, 355, 355, 375,
749: 376, 376, 376, 376, 376, 376, 376, 376, 470, 478,
750:
751: 544, 479, 479, 479, 479, 479, 479, 479, 479, 443,
752: 443, 443, 443, 443, 443, 443, 443, 460, 470, 459,
753: 470, 471, 545, 79, 375, 377, 377, 377, 377, 377,
754: 377, 377, 377, 478, 470, 480, 480, 480, 480, 480,
755: 480, 480, 480, 79, 478, 382, 481, 481, 481, 481,
756: 481, 482, 479, 479, 470, 434, 470, 470, 79, 375,
757: 378, 378, 378, 378, 378, 379, 376, 376, 489, 489,
758: 489, 489, 489, 489, 489, 489, 490, 490, 490, 490,
759: 490, 491, 606, 170, 488, 488, 488, 488, 488, 488,
760: 488, 488, 401, 79, 382, 382, 383, 383, 383, 383,
761:
762: 383, 383, 383, 383, 384, 487, 458, 457, 385, 385,
763: 385, 385, 385, 497, 498, 499, 497, 497, 497, 497,
764: 497, 444, 331, 445, 445, 445, 445, 445, 445, 445,
765: 445, 385, 385, 385, 385, 385, 385, 389, 390, 391,
766: 389, 389, 389, 389, 389, 392, 251, 418, 417, 393,
767: 393, 393, 393, 393, 444, 606, 445, 445, 445, 445,
768: 445, 445, 445, 445, 444, 487, 445, 445, 445, 445,
769: 445, 445, 393, 393, 393, 393, 393, 393, 253, 170,
770: 399, 399, 399, 399, 399, 399, 399, 399, 346, 253,
771: 170, 400, 400, 400, 400, 400, 400, 400, 400, 401,
772:
773: 253, 170, 382, 402, 402, 402, 402, 402, 467, 83,
774: 401, 513, 487, 514, 515, 516, 513, 415, 514, 515,
775: 516, 509, 544, 414, 554, 588, 402, 402, 402, 402,
776: 402, 402, 170, 406, 407, 408, 406, 406, 406, 406,
777: 406, 413, 572, 572, 545, 409, 409, 409, 409, 409,
778: 520, 521, 522, 520, 520, 520, 520, 520, 517, 79,
779: 79, 412, 411, 519, 573, 573, 410, 337, 409, 409,
780: 409, 409, 409, 409, 375, 376, 376, 376, 376, 376,
781: 376, 376, 376, 79, 472, 331, 473, 473, 473, 473,
782: 473, 473, 523, 524, 525, 523, 523, 523, 523, 523,
783:
784: 478, 251, 479, 479, 479, 479, 479, 479, 79, 375,
785: 376, 376, 376, 376, 376, 376, 376, 376, 478, 79,
786: 479, 479, 479, 479, 479, 479, 479, 479, 478, 382,
787: 479, 479, 479, 479, 479, 479, 479, 479, 211, 530,
788: 370, 369, 363, 79, 382, 585, 432, 432, 432, 432,
789: 432, 432, 432, 432, 384, 382, 606, 433, 433, 433,
790: 433, 433, 433, 433, 433, 434, 530, 586, 585, 435,
791: 435, 435, 435, 435, 496, 496, 496, 496, 496, 496,
792: 496, 496, 532, 532, 532, 532, 532, 532, 532, 532,
793: 586, 362, 435, 435, 435, 435, 435, 435, 439, 440,
794:
795: 441, 439, 439, 439, 439, 439, 442, 357, 356, 331,
796: 443, 443, 443, 443, 443, 533, 533, 533, 533, 533,
797: 534, 606, 382, 531, 531, 531, 531, 531, 531, 531,
798: 531, 251, 530, 443, 443, 443, 443, 443, 443, 253,
799: 170, 451, 451, 451, 451, 451, 451, 451, 451, 401,
800: 253, 170, 452, 452, 452, 452, 452, 452, 452, 452,
801: 211, 211, 276, 320, 453, 453, 453, 453, 453, 170,
802: 539, 539, 539, 539, 539, 539, 539, 539, 170, 540,
803: 540, 540, 540, 540, 540, 540, 540, 453, 453, 453,
804: 453, 453, 453, 472, 319, 473, 473, 473, 473, 473,
805:
806: 473, 473, 473, 170, 541, 541, 541, 541, 541, 542,
807: 539, 539, 606, 317, 606, 606, 606, 575, 83, 513,
808: 316, 514, 515, 516, 315, 314, 313, 312, 79, 472,
809: 587, 474, 474, 474, 474, 474, 474, 474, 474, 606,
810: 311, 514, 515, 516, 606, 310, 606, 606, 516, 292,
811: 606, 251, 606, 606, 606, 211, 288, 211, 103, 517,
812: 276, 278, 276, 277, 79, 472, 517, 475, 475, 475,
813: 475, 475, 476, 477, 477, 552, 276, 274, 553, 553,
814: 553, 553, 553, 553, 553, 553, 517, 273, 272, 271,
815: 270, 517, 269, 97, 211, 512, 512, 519, 251, 512,
816:
817: 79, 472, 211, 477, 477, 477, 473, 473, 473, 473,
818: 473, 512, 512, 512, 518, 518, 103, 559, 518, 560,
819: 560, 560, 560, 560, 560, 560, 560, 83, 199, 239,
820: 518, 518, 518, 236, 235, 234, 79, 382, 233, 485,
821: 485, 485, 485, 485, 485, 485, 485, 434, 382, 232,
822: 486, 486, 486, 486, 486, 486, 486, 486, 487, 230,
823: 229, 228, 488, 488, 488, 488, 488, 559, 227, 561,
824: 561, 561, 561, 561, 561, 561, 561, 538, 538, 538,
825: 538, 538, 538, 538, 538, 488, 488, 488, 488, 488,
826: 488, 492, 493, 494, 492, 492, 492, 492, 492, 495,
827:
828: 226, 225, 224, 496, 496, 496, 496, 496, 559, 223,
829: 562, 562, 562, 562, 562, 563, 560, 560, 569, 569,
830: 569, 569, 569, 569, 569, 569, 496, 496, 496, 496,
831: 496, 496, 253, 170, 502, 502, 502, 502, 502, 502,
832: 502, 502, 472, 222, 473, 473, 473, 473, 473, 473,
833: 473, 473, 570, 570, 570, 570, 570, 571, 606, 221,
834: 568, 568, 568, 568, 568, 568, 568, 568, 170, 539,
835: 539, 539, 539, 539, 539, 539, 539, 79, 472, 103,
836: 473, 473, 473, 473, 473, 473, 473, 473, 170, 539,
837: 539, 539, 539, 539, 539, 539, 539, 170, 539, 539,
838:
839: 539, 539, 539, 539, 553, 553, 553, 553, 553, 553,
840: 553, 553, 95, 79, 382, 83, 528, 528, 528, 528,
841: 528, 528, 528, 528, 487, 382, 83, 529, 529, 529,
842: 529, 529, 529, 529, 529, 530, 199, 151, 152, 531,
843: 531, 531, 531, 531, 553, 553, 553, 553, 553, 553,
844: 553, 553, 576, 577, 578, 576, 576, 576, 576, 576,
845: 146, 146, 531, 531, 531, 531, 531, 531, 535, 536,
846: 537, 535, 535, 535, 535, 535, 138, 197, 132, 132,
847: 538, 538, 538, 538, 538, 79, 554, 190, 555, 555,
848: 555, 555, 555, 555, 579, 580, 581, 579, 579, 579,
849:
850: 579, 579, 189, 538, 538, 538, 538, 538, 538, 554,
851: 188, 555, 555, 555, 555, 555, 555, 555, 555, 187,
852: 559, 79, 560, 560, 560, 560, 560, 560, 560, 560,
853: 559, 186, 560, 560, 560, 560, 560, 560, 560, 560,
854: 184, 183, 182, 181, 79, 554, 176, 556, 556, 556,
855: 556, 556, 556, 556, 556, 559, 175, 560, 560, 560,
856: 560, 560, 560, 382, 174, 584, 584, 584, 584, 584,
857: 584, 584, 584, 593, 593, 593, 593, 593, 593, 103,
858: 79, 554, 78, 557, 557, 557, 557, 557, 558, 555,
859: 555, 593, 593, 593, 593, 593, 593, 593, 593, 594,
860:
861: 594, 594, 594, 594, 594, 594, 594, 595, 595, 595,
862: 595, 595, 596, 593, 593, 103, 79, 382, 163, 566,
863: 566, 566, 566, 566, 566, 566, 566, 530, 382, 91,
864: 567, 567, 567, 567, 567, 567, 567, 567, 83, 81,
865: 80, 79, 568, 568, 568, 568, 568, 152, 600, 601,
866: 602, 600, 600, 600, 600, 600, 588, 146, 589, 589,
867: 589, 589, 589, 589, 138, 568, 568, 568, 568, 568,
868: 568, 554, 132, 555, 555, 555, 555, 555, 555, 555,
869: 555, 79, 593, 593, 593, 593, 593, 593, 593, 593,
870: 128, 79, 593, 593, 593, 593, 593, 593, 593, 593,
871:
872: 126, 113, 112, 111, 110, 109, 79, 554, 108, 555,
873: 555, 555, 555, 555, 555, 555, 555, 105, 103, 91,
874: 603, 603, 603, 603, 603, 603, 603, 603, 600, 600,
875: 600, 600, 600, 600, 600, 600, 81, 80, 79, 606,
876: 606, 606, 79, 588, 606, 589, 589, 589, 589, 589,
877: 589, 589, 589, 79, 606, 606, 606, 606, 606, 606,
878: 606, 79, 604, 604, 604, 604, 604, 605, 603, 603,
879: 603, 603, 603, 603, 603, 603, 603, 603, 79, 588,
880: 606, 590, 590, 590, 590, 590, 590, 590, 590, 606,
881: 606, 606, 606, 606, 606, 79, 603, 603, 603, 603,
882:
883: 603, 603, 606, 79, 606, 606, 606, 606, 606, 606,
884: 606, 606, 606, 606, 79, 588, 606, 591, 591, 591,
885: 591, 591, 592, 589, 589, 606, 606, 606, 606, 79,
886: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
887: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
888: 79, 588, 606, 589, 589, 589, 589, 589, 589, 589,
889: 589, 606, 606, 606, 606, 606, 606, 606, 606, 606,
890: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
891: 606, 606, 606, 606, 606, 606, 79, 588, 606, 589,
892: 589, 589, 589, 589, 589, 589, 589, 606, 606, 606,
893:
894: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
895: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
896: 606, 606, 79, 57, 57, 57, 57, 57, 57, 57,
897: 57, 57, 57, 57, 57, 57, 57, 57, 57, 31,
898: 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
899: 31, 31, 31, 31, 31, 66, 66, 66, 66, 66,
900: 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
901: 66, 73, 73, 73, 73, 73, 73, 73, 73, 73,
902: 73, 73, 73, 73, 73, 73, 73, 78, 606, 606,
903: 606, 606, 606, 606, 606, 78, 78, 78, 606, 606,
904:
905: 78, 78, 78, 82, 82, 82, 82, 82, 82, 82,
906: 82, 82, 82, 82, 82, 82, 82, 82, 82, 86,
907: 606, 606, 606, 606, 86, 606, 606, 86, 86, 86,
908: 86, 606, 86, 86, 86, 90, 606, 606, 606, 606,
909: 606, 606, 606, 90, 90, 90, 606, 606, 90, 90,
910: 90, 92, 606, 606, 92, 92, 606, 92, 606, 92,
911: 92, 92, 606, 606, 92, 92, 92, 102, 102, 606,
912: 606, 606, 102, 133, 606, 606, 133, 133, 606, 133,
913: 606, 133, 133, 133, 606, 606, 133, 133, 133, 137,
914: 606, 606, 137, 137, 606, 137, 606, 137, 137, 137,
915:
916: 606, 137, 606, 137, 137, 145, 606, 606, 145, 606,
917: 606, 145, 606, 145, 145, 145, 145, 606, 145, 145,
918: 145, 149, 149, 149, 149, 149, 149, 149, 149, 149,
919: 149, 149, 149, 149, 149, 149, 149, 151, 151, 606,
920: 151, 606, 151, 151, 151, 151, 151, 151, 151, 151,
921: 151, 151, 151, 157, 157, 157, 157, 157, 157, 157,
922: 157, 157, 157, 157, 157, 157, 157, 157, 157, 158,
923: 158, 606, 158, 158, 158, 158, 158, 158, 158, 158,
924: 158, 158, 158, 158, 158, 161, 606, 606, 606, 606,
925: 161, 606, 606, 161, 161, 161, 606, 606, 161, 161,
926:
927: 161, 93, 606, 606, 93, 93, 606, 93, 606, 93,
928: 93, 93, 606, 606, 93, 93, 93, 169, 169, 606,
929: 606, 606, 169, 171, 171, 171, 606, 606, 606, 171,
930: 134, 606, 606, 134, 134, 606, 134, 606, 134, 134,
931: 134, 606, 606, 134, 134, 134, 200, 200, 200, 200,
932: 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
933: 200, 200, 207, 207, 606, 606, 606, 207, 213, 213,
934: 213, 606, 606, 606, 213, 245, 245, 606, 606, 606,
935: 245, 246, 246, 606, 606, 606, 246, 250, 250, 606,
936: 606, 606, 250, 252, 252, 252, 606, 606, 606, 252,
937:
938: 288, 288, 606, 606, 606, 288, 290, 290, 606, 606,
939: 606, 290, 291, 291, 606, 606, 606, 291, 293, 293,
940: 293, 606, 606, 606, 293, 297, 297, 297, 297, 606,
941: 606, 606, 297, 328, 328, 606, 606, 606, 328, 329,
942: 329, 606, 606, 606, 329, 330, 330, 606, 606, 606,
943: 330, 342, 342, 342, 606, 606, 606, 342, 343, 343,
944: 343, 343, 606, 606, 606, 343, 380, 380, 606, 606,
945: 606, 380, 381, 381, 606, 606, 606, 381, 397, 397,
946: 397, 606, 606, 606, 397, 398, 398, 398, 398, 606,
947: 606, 606, 398, 427, 427, 606, 606, 606, 427, 431,
948:
949: 606, 431, 431, 606, 606, 606, 431, 449, 449, 449,
950: 606, 606, 606, 449, 450, 450, 450, 450, 606, 606,
951: 606, 450, 483, 483, 606, 606, 606, 483, 484, 606,
952: 484, 484, 606, 606, 606, 484, 500, 500, 500, 606,
953: 606, 606, 500, 501, 501, 501, 606, 606, 606, 606,
954: 501, 512, 512, 606, 512, 512, 512, 606, 606, 512,
955: 512, 512, 606, 606, 512, 512, 512, 518, 518, 606,
956: 518, 518, 518, 606, 606, 518, 518, 518, 606, 606,
957: 518, 518, 518, 526, 526, 606, 606, 606, 526, 527,
958: 606, 527, 527, 606, 606, 606, 527, 543, 543, 606,
959:
960: 606, 606, 606, 543, 549, 549, 549, 549, 549, 549,
961: 549, 549, 549, 549, 549, 549, 549, 549, 549, 549,
962: 564, 564, 606, 606, 606, 564, 565, 606, 565, 565,
963: 606, 606, 606, 565, 582, 582, 606, 606, 606, 582,
964: 583, 606, 583, 606, 606, 606, 606, 583, 598, 598,
965: 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
966: 598, 598, 598, 598, 13, 606, 606, 606, 606, 606,
967: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
968: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
969: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
970:
971: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
972: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
973: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
974: 606
975: } ;
976:
977: static yyconst short int yy_chk[3732] =
978: { 0,
979: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
980: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
981: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
982: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
983: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
984: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
985: 1, 1, 1, 1, 1, 1, 2, 44, 3, 34,
986: 2, 103, 3, 4, 47, 20, 126, 4, 3, 34,
987: 103, 3, 52, 4, 44, 48, 4, 11, 11, 11,
988: 11, 126, 52, 20, 2, 2, 56, 47, 2, 74,
989:
990: 5, 5, 5, 48, 5, 2, 50, 3, 2, 3,
991: 5, 603, 4, 56, 4, 6, 6, 6, 20, 6,
992: 64, 64, 5, 5, 75, 6, 12, 12, 12, 12,
993: 3, 196, 68, 50, 11, 4, 70, 6, 6, 25,
994: 25, 72, 72, 25, 25, 196, 74, 5, 27, 27,
995: 27, 27, 27, 27, 27, 27, 68, 88, 124, 127,
996: 70, 25, 6, 7, 7, 7, 45, 7, 598, 75,
997: 124, 127, 129, 12, 28, 28, 28, 28, 28, 28,
998: 139, 139, 129, 43, 25, 43, 43, 43, 43, 43,
999: 43, 43, 43, 194, 45, 45, 77, 77, 45, 77,
1000:
1001: 88, 116, 123, 114, 114, 45, 116, 153, 45, 194,
1002: 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1003: 7, 7, 7, 7, 7, 7, 7, 7, 8, 8,
1004: 8, 53, 8, 206, 53, 53, 53, 53, 53, 53,
1005: 53, 53, 84, 84, 84, 84, 84, 84, 84, 84,
1006: 114, 62, 62, 62, 153, 62, 154, 125, 206, 62,
1007: 123, 62, 85, 85, 85, 85, 85, 85, 85, 85,
1008: 143, 143, 202, 62, 62, 8, 8, 8, 8, 8,
1009: 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1010: 8, 8, 8, 9, 9, 9, 9, 9, 62, 125,
1011:
1012: 128, 154, 9, 9, 9, 86, 128, 202, 55, 55,
1013: 136, 161, 55, 55, 185, 136, 9, 101, 101, 101,
1014: 101, 101, 101, 86, 155, 155, 198, 185, 87, 587,
1015: 55, 87, 87, 87, 87, 87, 87, 87, 87, 198,
1016: 9, 10, 10, 10, 10, 10, 584, 171, 86, 284,
1017: 10, 10, 10, 55, 161, 89, 171, 89, 89, 222,
1018: 582, 89, 89, 222, 10, 89, 213, 95, 95, 95,
1019: 95, 95, 95, 95, 95, 213, 92, 92, 89, 89,
1020: 92, 92, 192, 195, 284, 195, 510, 192, 10, 19,
1021: 99, 99, 99, 99, 99, 99, 99, 99, 92, 19,
1022:
1023: 95, 221, 19, 19, 19, 19, 19, 19, 19, 19,
1024: 26, 191, 26, 26, 26, 26, 26, 26, 26, 26,
1025: 26, 92, 237, 221, 26, 26, 26, 26, 26, 100,
1026: 100, 100, 100, 100, 100, 100, 100, 131, 131, 131,
1027: 131, 131, 131, 131, 131, 26, 510, 26, 26, 26,
1028: 26, 26, 26, 32, 146, 238, 238, 146, 146, 32,
1029: 568, 191, 32, 32, 146, 32, 32, 32, 32, 32,
1030: 32, 32, 32, 32, 32, 32, 32, 146, 237, 32,
1031: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1032: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1033:
1034: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1035: 32, 32, 32, 32, 32, 32, 32, 32, 32, 35,
1036: 35, 35, 35, 35, 35, 35, 35, 35, 210, 210,
1037: 210, 35, 35, 35, 35, 35, 109, 231, 240, 241,
1038: 35, 109, 252, 231, 109, 241, 109, 117, 567, 150,
1039: 150, 252, 239, 240, 35, 35, 35, 35, 35, 35,
1040: 42, 42, 42, 42, 42, 293, 42, 42, 133, 133,
1041: 42, 265, 133, 133, 293, 117, 117, 239, 281, 117,
1042: 388, 388, 42, 42, 42, 46, 117, 163, 281, 117,
1043: 133, 163, 323, 265, 239, 46, 150, 163, 46, 46,
1044:
1045: 46, 46, 46, 46, 46, 46, 275, 282, 323, 163,
1046: 163, 275, 282, 133, 142, 142, 142, 142, 142, 142,
1047: 142, 142, 159, 159, 159, 159, 159, 159, 159, 159,
1048: 160, 160, 160, 160, 160, 160, 160, 160, 438, 438,
1049: 46, 63, 201, 201, 201, 201, 201, 201, 201, 201,
1050: 279, 63, 565, 280, 63, 63, 63, 63, 63, 63,
1051: 63, 63, 79, 564, 79, 79, 79, 297, 79, 79,
1052: 254, 254, 79, 197, 280, 201, 297, 197, 256, 256,
1053: 254, 321, 322, 197, 79, 79, 79, 91, 256, 91,
1054: 91, 91, 322, 91, 91, 197, 197, 91, 209, 209,
1055:
1056: 209, 209, 209, 209, 209, 209, 209, 298, 298, 91,
1057: 91, 91, 94, 279, 94, 94, 94, 298, 94, 94,
1058: 313, 383, 94, 162, 313, 162, 162, 452, 452, 162,
1059: 162, 383, 321, 162, 94, 94, 94, 96, 96, 96,
1060: 96, 96, 96, 96, 96, 162, 162, 162, 312, 96,
1061: 96, 96, 96, 96, 205, 368, 205, 205, 205, 205,
1062: 205, 205, 214, 214, 214, 214, 214, 214, 214, 214,
1063: 312, 368, 96, 96, 96, 96, 96, 96, 104, 104,
1064: 104, 104, 104, 104, 104, 104, 104, 316, 371, 205,
1065: 104, 104, 104, 104, 104, 216, 216, 216, 216, 216,
1066:
1067: 216, 216, 216, 217, 217, 217, 217, 217, 217, 316,
1068: 299, 299, 373, 104, 104, 104, 104, 104, 104, 135,
1069: 299, 135, 135, 135, 560, 135, 135, 373, 219, 135,
1070: 219, 219, 219, 219, 219, 219, 219, 219, 453, 453,
1071: 371, 135, 135, 135, 164, 549, 164, 164, 164, 164,
1072: 164, 164, 164, 164, 247, 247, 247, 247, 247, 247,
1073: 247, 247, 247, 253, 253, 253, 253, 253, 253, 253,
1074: 253, 255, 255, 255, 255, 255, 255, 255, 255, 164,
1075: 165, 547, 165, 165, 165, 165, 165, 165, 165, 165,
1076: 259, 259, 259, 259, 259, 259, 259, 259, 419, 419,
1077:
1078: 259, 261, 261, 261, 261, 261, 261, 261, 261, 262,
1079: 262, 262, 262, 262, 262, 165, 166, 543, 166, 166,
1080: 166, 166, 166, 166, 166, 166, 264, 317, 264, 264,
1081: 264, 264, 264, 264, 264, 264, 301, 301, 283, 283,
1082: 283, 283, 283, 283, 283, 283, 301, 456, 456, 317,
1083: 419, 166, 167, 318, 167, 167, 167, 167, 167, 167,
1084: 167, 167, 318, 324, 342, 343, 167, 167, 167, 167,
1085: 167, 283, 324, 342, 343, 344, 344, 287, 372, 287,
1086: 287, 287, 287, 287, 287, 344, 420, 372, 420, 167,
1087: 167, 167, 167, 167, 167, 170, 170, 170, 170, 170,
1088:
1089: 170, 170, 170, 170, 345, 345, 539, 170, 170, 170,
1090: 170, 170, 287, 294, 345, 294, 294, 294, 294, 294,
1091: 294, 294, 294, 307, 307, 307, 307, 307, 307, 527,
1092: 170, 170, 170, 170, 170, 170, 172, 172, 172, 172,
1093: 172, 172, 172, 172, 172, 172, 491, 491, 526, 172,
1094: 172, 172, 172, 172, 295, 376, 295, 295, 295, 295,
1095: 295, 295, 295, 295, 300, 300, 300, 300, 300, 300,
1096: 300, 300, 172, 172, 172, 172, 172, 172, 173, 173,
1097: 173, 173, 173, 173, 173, 173, 347, 347, 511, 376,
1098: 173, 173, 173, 173, 173, 296, 347, 296, 296, 296,
1099:
1100: 296, 296, 296, 296, 296, 306, 306, 306, 306, 306,
1101: 306, 306, 306, 173, 173, 173, 173, 173, 173, 203,
1102: 509, 203, 203, 203, 203, 203, 203, 203, 203, 304,
1103: 304, 304, 304, 304, 304, 304, 304, 508, 309, 304,
1104: 309, 309, 309, 309, 309, 309, 309, 309, 334, 334,
1105: 334, 334, 334, 334, 203, 204, 507, 204, 204, 204,
1106: 204, 204, 204, 204, 204, 331, 331, 331, 331, 331,
1107: 331, 331, 331, 333, 333, 333, 333, 333, 333, 333,
1108: 333, 337, 337, 337, 337, 337, 337, 337, 337, 358,
1109: 204, 215, 215, 215, 215, 215, 215, 215, 215, 215,
1110:
1111: 215, 215, 502, 502, 506, 215, 215, 215, 215, 215,
1112: 336, 358, 336, 336, 336, 336, 336, 336, 336, 336,
1113: 341, 501, 341, 341, 341, 341, 341, 341, 215, 215,
1114: 215, 215, 215, 215, 218, 218, 218, 218, 218, 218,
1115: 218, 218, 218, 218, 397, 534, 534, 218, 218, 218,
1116: 218, 218, 339, 397, 339, 339, 339, 339, 339, 339,
1117: 339, 339, 346, 346, 346, 346, 346, 346, 346, 346,
1118: 218, 218, 218, 218, 218, 218, 242, 484, 242, 242,
1119: 242, 242, 242, 242, 242, 242, 340, 364, 340, 340,
1120: 340, 340, 340, 340, 340, 340, 350, 350, 350, 350,
1121:
1122: 350, 350, 350, 350, 398, 669, 350, 551, 551, 364,
1123: 669, 242, 243, 398, 243, 243, 243, 243, 243, 243,
1124: 243, 243, 352, 352, 352, 352, 352, 352, 352, 352,
1125: 353, 353, 353, 353, 353, 353, 355, 366, 355, 355,
1126: 355, 355, 355, 355, 355, 355, 374, 243, 244, 449,
1127: 244, 244, 244, 244, 244, 244, 244, 244, 449, 366,
1128: 414, 385, 374, 382, 382, 382, 382, 382, 382, 382,
1129: 382, 385, 450, 375, 375, 375, 375, 375, 375, 375,
1130: 375, 450, 414, 244, 257, 257, 257, 257, 257, 257,
1131: 257, 257, 257, 257, 257, 260, 260, 260, 260, 260,
1132:
1133: 260, 260, 260, 260, 260, 260, 375, 415, 457, 260,
1134: 260, 260, 260, 260, 379, 379, 379, 379, 379, 379,
1135: 379, 384, 384, 384, 384, 384, 384, 384, 384, 415,
1136: 457, 483, 260, 260, 260, 260, 260, 260, 263, 263,
1137: 263, 263, 263, 263, 263, 263, 263, 263, 379, 571,
1138: 571, 263, 263, 263, 263, 263, 390, 390, 390, 390,
1139: 390, 390, 390, 390, 391, 391, 391, 391, 391, 391,
1140: 479, 399, 399, 465, 263, 263, 263, 263, 263, 263,
1141: 285, 399, 285, 285, 285, 285, 285, 285, 285, 285,
1142: 393, 432, 393, 393, 393, 393, 393, 393, 393, 393,
1143:
1144: 394, 432, 394, 394, 394, 394, 394, 394, 394, 394,
1145: 460, 473, 619, 619, 468, 285, 286, 433, 286, 286,
1146: 286, 286, 286, 286, 286, 286, 395, 433, 395, 395,
1147: 395, 395, 395, 395, 395, 395, 396, 435, 396, 396,
1148: 396, 396, 396, 396, 396, 396, 473, 435, 461, 459,
1149: 458, 286, 292, 292, 292, 292, 292, 292, 292, 292,
1150: 292, 400, 400, 445, 292, 292, 292, 292, 292, 468,
1151: 461, 400, 401, 401, 401, 401, 401, 401, 401, 401,
1152: 408, 408, 408, 408, 408, 408, 431, 292, 292, 292,
1153: 292, 292, 292, 302, 302, 302, 302, 302, 302, 302,
1154:
1155: 302, 302, 302, 302, 305, 305, 305, 305, 305, 305,
1156: 305, 305, 305, 305, 305, 402, 402, 463, 305, 305,
1157: 305, 305, 305, 469, 477, 402, 405, 405, 405, 405,
1158: 405, 405, 405, 405, 427, 503, 405, 422, 469, 463,
1159: 418, 305, 305, 305, 305, 305, 305, 308, 308, 308,
1160: 308, 308, 308, 308, 308, 308, 308, 503, 417, 477,
1161: 308, 308, 308, 308, 308, 407, 407, 407, 407, 407,
1162: 407, 407, 407, 409, 416, 409, 409, 409, 409, 409,
1163: 409, 409, 409, 308, 308, 308, 308, 308, 308, 325,
1164: 325, 325, 325, 325, 325, 325, 325, 325, 421, 428,
1165:
1166: 505, 428, 428, 428, 428, 428, 428, 428, 428, 434,
1167: 434, 434, 434, 434, 434, 434, 434, 413, 421, 412,
1168: 421, 421, 505, 325, 326, 326, 326, 326, 326, 326,
1169: 326, 326, 326, 429, 466, 429, 429, 429, 429, 429,
1170: 429, 429, 429, 421, 430, 485, 430, 430, 430, 430,
1171: 430, 430, 430, 430, 466, 485, 466, 466, 326, 327,
1172: 327, 327, 327, 327, 327, 327, 327, 327, 440, 440,
1173: 440, 440, 440, 440, 440, 440, 441, 441, 441, 441,
1174: 441, 441, 443, 500, 443, 443, 443, 443, 443, 443,
1175: 443, 443, 500, 327, 332, 486, 332, 332, 332, 332,
1176:
1177: 332, 332, 332, 332, 332, 486, 411, 410, 332, 332,
1178: 332, 332, 332, 444, 444, 444, 444, 444, 444, 444,
1179: 444, 446, 381, 446, 446, 446, 446, 446, 446, 446,
1180: 446, 332, 332, 332, 332, 332, 332, 335, 335, 335,
1181: 335, 335, 335, 335, 335, 335, 380, 370, 369, 335,
1182: 335, 335, 335, 335, 447, 488, 447, 447, 447, 447,
1183: 447, 447, 447, 447, 448, 488, 448, 448, 448, 448,
1184: 448, 448, 335, 335, 335, 335, 335, 335, 348, 348,
1185: 348, 348, 348, 348, 348, 348, 348, 348, 348, 351,
1186: 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
1187:
1188: 451, 451, 528, 351, 351, 351, 351, 351, 467, 467,
1189: 451, 470, 528, 470, 470, 470, 471, 363, 471, 471,
1190: 471, 467, 544, 362, 555, 589, 351, 351, 351, 351,
1191: 351, 351, 354, 354, 354, 354, 354, 354, 354, 354,
1192: 354, 361, 546, 572, 544, 354, 354, 354, 354, 354,
1193: 472, 472, 472, 472, 472, 472, 472, 472, 470, 555,
1194: 589, 360, 357, 471, 546, 572, 356, 338, 354, 354,
1195: 354, 354, 354, 354, 377, 377, 377, 377, 377, 377,
1196: 377, 377, 377, 472, 476, 330, 476, 476, 476, 476,
1197: 476, 476, 478, 478, 478, 478, 478, 478, 478, 478,
1198:
1199: 482, 329, 482, 482, 482, 482, 482, 482, 377, 378,
1200: 378, 378, 378, 378, 378, 378, 378, 378, 480, 476,
1201: 480, 480, 480, 480, 480, 480, 480, 480, 481, 529,
1202: 481, 481, 481, 481, 481, 481, 481, 481, 328, 529,
1203: 320, 319, 315, 378, 386, 574, 386, 386, 386, 386,
1204: 386, 386, 386, 386, 386, 389, 531, 389, 389, 389,
1205: 389, 389, 389, 389, 389, 389, 531, 574, 585, 389,
1206: 389, 389, 389, 389, 487, 487, 487, 487, 487, 487,
1207: 487, 487, 493, 493, 493, 493, 493, 493, 493, 493,
1208: 585, 314, 389, 389, 389, 389, 389, 389, 392, 392,
1209:
1210: 392, 392, 392, 392, 392, 392, 392, 311, 310, 291,
1211: 392, 392, 392, 392, 392, 494, 494, 494, 494, 494,
1212: 494, 496, 566, 496, 496, 496, 496, 496, 496, 496,
1213: 496, 290, 566, 392, 392, 392, 392, 392, 392, 403,
1214: 403, 403, 403, 403, 403, 403, 403, 403, 403, 403,
1215: 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
1216: 289, 288, 278, 277, 406, 406, 406, 406, 406, 497,
1217: 497, 497, 497, 497, 497, 497, 497, 497, 498, 498,
1218: 498, 498, 498, 498, 498, 498, 498, 406, 406, 406,
1219: 406, 406, 406, 423, 276, 423, 423, 423, 423, 423,
1220:
1221: 423, 423, 423, 499, 499, 499, 499, 499, 499, 499,
1222: 499, 499, 512, 274, 512, 512, 512, 575, 575, 513,
1223: 273, 513, 513, 513, 272, 271, 270, 269, 423, 424,
1224: 575, 424, 424, 424, 424, 424, 424, 424, 424, 514,
1225: 268, 514, 514, 514, 515, 267, 515, 515, 515, 251,
1226: 518, 250, 518, 518, 518, 249, 248, 246, 245, 512,
1227: 236, 235, 234, 233, 424, 425, 513, 425, 425, 425,
1228: 425, 425, 425, 425, 425, 516, 232, 229, 516, 516,
1229: 516, 516, 516, 516, 516, 516, 514, 227, 226, 225,
1230: 224, 515, 223, 220, 212, 517, 517, 518, 211, 517,
1231:
1232: 425, 426, 208, 426, 426, 426, 426, 426, 426, 426,
1233: 426, 517, 517, 517, 519, 519, 207, 523, 519, 523,
1234: 523, 523, 523, 523, 523, 523, 523, 200, 199, 193,
1235: 519, 519, 519, 190, 189, 188, 426, 436, 187, 436,
1236: 436, 436, 436, 436, 436, 436, 436, 436, 439, 186,
1237: 439, 439, 439, 439, 439, 439, 439, 439, 439, 184,
1238: 183, 182, 439, 439, 439, 439, 439, 524, 181, 524,
1239: 524, 524, 524, 524, 524, 524, 524, 530, 530, 530,
1240: 530, 530, 530, 530, 530, 439, 439, 439, 439, 439,
1241: 439, 442, 442, 442, 442, 442, 442, 442, 442, 442,
1242:
1243: 180, 179, 178, 442, 442, 442, 442, 442, 525, 177,
1244: 525, 525, 525, 525, 525, 525, 525, 525, 536, 536,
1245: 536, 536, 536, 536, 536, 536, 442, 442, 442, 442,
1246: 442, 442, 454, 454, 454, 454, 454, 454, 454, 454,
1247: 454, 454, 474, 176, 474, 474, 474, 474, 474, 474,
1248: 474, 474, 537, 537, 537, 537, 537, 537, 538, 175,
1249: 538, 538, 538, 538, 538, 538, 538, 538, 540, 540,
1250: 540, 540, 540, 540, 540, 540, 540, 474, 475, 169,
1251: 475, 475, 475, 475, 475, 475, 475, 475, 541, 541,
1252: 541, 541, 541, 541, 541, 541, 541, 542, 542, 542,
1253:
1254: 542, 542, 542, 542, 552, 552, 552, 552, 552, 552,
1255: 552, 552, 168, 475, 489, 158, 489, 489, 489, 489,
1256: 489, 489, 489, 489, 489, 492, 157, 492, 492, 492,
1257: 492, 492, 492, 492, 492, 492, 156, 152, 151, 492,
1258: 492, 492, 492, 492, 553, 553, 553, 553, 553, 553,
1259: 553, 553, 554, 554, 554, 554, 554, 554, 554, 554,
1260: 149, 145, 492, 492, 492, 492, 492, 492, 495, 495,
1261: 495, 495, 495, 495, 495, 495, 138, 134, 132, 130,
1262: 495, 495, 495, 495, 495, 554, 558, 122, 558, 558,
1263: 558, 558, 558, 558, 559, 559, 559, 559, 559, 559,
1264:
1265: 559, 559, 121, 495, 495, 495, 495, 495, 495, 520,
1266: 120, 520, 520, 520, 520, 520, 520, 520, 520, 119,
1267: 561, 558, 561, 561, 561, 561, 561, 561, 561, 561,
1268: 562, 118, 562, 562, 562, 562, 562, 562, 562, 562,
1269: 113, 112, 111, 110, 520, 521, 108, 521, 521, 521,
1270: 521, 521, 521, 521, 521, 563, 107, 563, 563, 563,
1271: 563, 563, 563, 569, 106, 569, 569, 569, 569, 569,
1272: 569, 569, 569, 596, 596, 596, 596, 596, 596, 102,
1273: 521, 522, 98, 522, 522, 522, 522, 522, 522, 522,
1274: 522, 579, 579, 579, 579, 579, 579, 579, 579, 580,
1275:
1276: 580, 580, 580, 580, 580, 580, 580, 581, 581, 581,
1277: 581, 581, 581, 581, 581, 97, 522, 532, 93, 532,
1278: 532, 532, 532, 532, 532, 532, 532, 532, 535, 90,
1279: 535, 535, 535, 535, 535, 535, 535, 535, 82, 81,
1280: 80, 78, 535, 535, 535, 535, 535, 73, 588, 588,
1281: 588, 588, 588, 588, 588, 588, 592, 66, 592, 592,
1282: 592, 592, 592, 592, 59, 535, 535, 535, 535, 535,
1283: 535, 556, 54, 556, 556, 556, 556, 556, 556, 556,
1284: 556, 588, 594, 594, 594, 594, 594, 594, 594, 594,
1285: 51, 592, 595, 595, 595, 595, 595, 595, 595, 595,
1286:
1287: 49, 41, 40, 39, 38, 37, 556, 557, 36, 557,
1288: 557, 557, 557, 557, 557, 557, 557, 33, 29, 23,
1289: 600, 600, 600, 600, 600, 600, 600, 600, 601, 601,
1290: 601, 601, 601, 601, 601, 601, 17, 15, 14, 13,
1291: 0, 0, 557, 576, 0, 576, 576, 576, 576, 576,
1292: 576, 576, 576, 600, 0, 0, 0, 0, 0, 0,
1293: 0, 601, 602, 602, 602, 602, 602, 602, 602, 602,
1294: 604, 604, 604, 604, 604, 604, 604, 604, 576, 577,
1295: 0, 577, 577, 577, 577, 577, 577, 577, 577, 0,
1296: 0, 0, 0, 0, 0, 602, 605, 605, 605, 605,
1297:
1298: 605, 605, 0, 604, 0, 0, 0, 0, 0, 0,
1299: 0, 0, 0, 0, 577, 578, 0, 578, 578, 578,
1300: 578, 578, 578, 578, 578, 0, 0, 0, 0, 605,
1301: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1302: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1303: 578, 590, 0, 590, 590, 590, 590, 590, 590, 590,
1304: 590, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1305: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1306: 0, 0, 0, 0, 0, 0, 590, 591, 0, 591,
1307: 591, 591, 591, 591, 591, 591, 591, 0, 0, 0,
1308:
1309: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1310: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1311: 0, 0, 591, 607, 607, 607, 607, 607, 607, 607,
1312: 607, 607, 607, 607, 607, 607, 607, 607, 607, 608,
1313: 608, 608, 608, 608, 608, 608, 608, 608, 608, 608,
1314: 608, 608, 608, 608, 608, 609, 609, 609, 609, 609,
1315: 609, 609, 609, 609, 609, 609, 609, 609, 609, 609,
1316: 609, 610, 610, 610, 610, 610, 610, 610, 610, 610,
1317: 610, 610, 610, 610, 610, 610, 610, 611, 0, 0,
1318: 0, 0, 0, 0, 0, 611, 611, 611, 0, 0,
1319:
1320: 611, 611, 611, 612, 612, 612, 612, 612, 612, 612,
1321: 612, 612, 612, 612, 612, 612, 612, 612, 612, 613,
1322: 0, 0, 0, 0, 613, 0, 0, 613, 613, 613,
1323: 613, 0, 613, 613, 613, 614, 0, 0, 0, 0,
1324: 0, 0, 0, 614, 614, 614, 0, 0, 614, 614,
1325: 614, 615, 0, 0, 615, 615, 0, 615, 0, 615,
1326: 615, 615, 0, 0, 615, 615, 615, 616, 616, 0,
1327: 0, 0, 616, 617, 0, 0, 617, 617, 0, 617,
1328: 0, 617, 617, 617, 0, 0, 617, 617, 617, 618,
1329: 0, 0, 618, 618, 0, 618, 0, 618, 618, 618,
1330:
1331: 0, 618, 0, 618, 618, 620, 0, 0, 620, 0,
1332: 0, 620, 0, 620, 620, 620, 620, 0, 620, 620,
1333: 620, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1334: 621, 621, 621, 621, 621, 621, 621, 622, 622, 0,
1335: 622, 0, 622, 622, 622, 622, 622, 622, 622, 622,
1336: 622, 622, 622, 623, 623, 623, 623, 623, 623, 623,
1337: 623, 623, 623, 623, 623, 623, 623, 623, 623, 624,
1338: 624, 0, 624, 624, 624, 624, 624, 624, 624, 624,
1339: 624, 624, 624, 624, 624, 625, 0, 0, 0, 0,
1340: 625, 0, 0, 625, 625, 625, 0, 0, 625, 625,
1341:
1342: 625, 626, 0, 0, 626, 626, 0, 626, 0, 626,
1343: 626, 626, 0, 0, 626, 626, 626, 627, 627, 0,
1344: 0, 0, 627, 628, 628, 628, 0, 0, 0, 628,
1345: 629, 0, 0, 629, 629, 0, 629, 0, 629, 629,
1346: 629, 0, 0, 629, 629, 629, 630, 630, 630, 630,
1347: 630, 630, 630, 630, 630, 630, 630, 630, 630, 630,
1348: 630, 630, 631, 631, 0, 0, 0, 631, 632, 632,
1349: 632, 0, 0, 0, 632, 633, 633, 0, 0, 0,
1350: 633, 634, 634, 0, 0, 0, 634, 635, 635, 0,
1351: 0, 0, 635, 636, 636, 636, 0, 0, 0, 636,
1352:
1353: 637, 637, 0, 0, 0, 637, 638, 638, 0, 0,
1354: 0, 638, 639, 639, 0, 0, 0, 639, 640, 640,
1355: 640, 0, 0, 0, 640, 641, 641, 641, 641, 0,
1356: 0, 0, 641, 642, 642, 0, 0, 0, 642, 643,
1357: 643, 0, 0, 0, 643, 644, 644, 0, 0, 0,
1358: 644, 645, 645, 645, 0, 0, 0, 645, 646, 646,
1359: 646, 646, 0, 0, 0, 646, 647, 647, 0, 0,
1360: 0, 647, 648, 648, 0, 0, 0, 648, 649, 649,
1361: 649, 0, 0, 0, 649, 650, 650, 650, 650, 0,
1362: 0, 0, 650, 651, 651, 0, 0, 0, 651, 652,
1363:
1364: 0, 652, 652, 0, 0, 0, 652, 653, 653, 653,
1365: 0, 0, 0, 653, 654, 654, 654, 654, 0, 0,
1366: 0, 654, 655, 655, 0, 0, 0, 655, 656, 0,
1367: 656, 656, 0, 0, 0, 656, 657, 657, 657, 0,
1368: 0, 0, 657, 658, 658, 658, 0, 0, 0, 0,
1369: 658, 659, 659, 0, 659, 659, 659, 0, 0, 659,
1370: 659, 659, 0, 0, 659, 659, 659, 660, 660, 0,
1371: 660, 660, 660, 0, 0, 660, 660, 660, 0, 0,
1372: 660, 660, 660, 661, 661, 0, 0, 0, 661, 662,
1373: 0, 662, 662, 0, 0, 0, 662, 663, 663, 0,
1374:
1375: 0, 0, 0, 663, 664, 664, 664, 664, 664, 664,
1376: 664, 664, 664, 664, 664, 664, 664, 664, 664, 664,
1377: 665, 665, 0, 0, 0, 665, 666, 0, 666, 666,
1378: 0, 0, 0, 666, 667, 667, 0, 0, 0, 667,
1379: 668, 0, 668, 0, 0, 0, 0, 668, 670, 670,
1380: 670, 670, 670, 670, 670, 670, 670, 670, 670, 670,
1381: 670, 670, 670, 670, 606, 606, 606, 606, 606, 606,
1382: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
1383: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
1384: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
1385:
1386: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
1387: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
1388: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
1389: 606
1390: } ;
1391:
1392: static yy_state_type yy_last_accepting_state;
1393: static char *yy_last_accepting_cpos;
1394:
1395: /* The intent behind this definition is that it'll catch
1396: * any uses of REJECT which flex missed.
1397: */
1398: #define REJECT reject_used_but_not_detected
1399: #define yymore() yymore_used_but_not_detected
1400: #define YY_MORE_ADJ 0
1401: #define YY_RESTORE_YY_MORE_OFFSET
1402: char *yytext;
1403: #line 1 "toke.l"
1404: #define INITIAL 0
1405: #line 2 "toke.l"
1406: /*
1407: * Copyright (c) 1996, 1998-2005, 2007-2011
1408: * Todd C. Miller <Todd.Miller@courtesan.com>
1409: *
1410: * Permission to use, copy, modify, and distribute this software for any
1411: * purpose with or without fee is hereby granted, provided that the above
1412: * copyright notice and this permission notice appear in all copies.
1413: *
1414: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1415: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1416: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1417: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1418: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1419: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1420: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1421: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1422: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
1423: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1424: *
1425: * Sponsored in part by the Defense Advanced Research Projects
1426: * Agency (DARPA) and Air Force Research Laboratory, Air Force
1427: * Materiel Command, USAF, under agreement number F39502-99-1-0512.
1428: */
1429:
1430: #include <config.h>
1431:
1432: #include <sys/types.h>
1433: #include <sys/param.h>
1434: #include <sys/stat.h>
1435: #include <stdio.h>
1436: #ifdef STDC_HEADERS
1437: # include <stdlib.h>
1438: # include <stddef.h>
1439: #else
1440: # ifdef HAVE_STDLIB_H
1441: # include <stdlib.h>
1442: # endif
1443: #endif /* STDC_HEADERS */
1444: #ifdef HAVE_STRING_H
1445: # include <string.h>
1446: #endif /* HAVE_STRING_H */
1447: #ifdef HAVE_STRINGS_H
1448: # include <strings.h>
1449: #endif /* HAVE_STRINGS_H */
1450: #ifdef HAVE_UNISTD_H
1451: # include <unistd.h>
1452: #endif /* HAVE_UNISTD_H */
1453: #if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS)
1454: # include <malloc.h>
1455: #endif /* HAVE_MALLOC_H && !STDC_HEADERS */
1456: #ifdef HAVE_DIRENT_H
1457: # include <dirent.h>
1458: # define NAMLEN(dirent) strlen((dirent)->d_name)
1459: #else
1460: # define dirent direct
1461: # define NAMLEN(dirent) (dirent)->d_namlen
1462: # ifdef HAVE_SYS_NDIR_H
1463: # include <sys/ndir.h>
1464: # endif
1465: # ifdef HAVE_SYS_DIR_H
1466: # include <sys/dir.h>
1467: # endif
1468: # ifdef HAVE_NDIR_H
1469: # include <ndir.h>
1470: # endif
1471: #endif
1472: #include <errno.h>
1473: #include <ctype.h>
1474: #include "sudoers.h"
1475: #include "parse.h"
1476: #include "toke.h"
1477: #include <gram.h>
1478:
1479: extern YYSTYPE yylval;
1480: extern int parse_error;
1481: int sudolineno;
1482: char *sudoers;
1483:
1484: static int continued, prev_state, sawspace;
1485:
1486: static int _push_include(char *, int);
1487: static int pop_include(void);
1488: static char *parse_include(char *);
1489:
1490: #ifdef TRACELEXER
1491: static int sudoers_trace_print(const char *msg);
1492: #else
1493: # define sudoers_trace_print NULL
1494: #endif
1495: int (*trace_print)(const char *msg) = sudoers_trace_print;
1496:
1497: #define push_include(_p) (_push_include((_p), FALSE))
1498: #define push_includedir(_p) (_push_include((_p), TRUE))
1499: #define YY_NO_INPUT 1
1500: #define YY_NO_UNPUT 1
1501: #define GOTDEFS 1
1502:
1503: #define GOTCMND 2
1504:
1505: #define STARTDEFS 3
1506:
1507: #define INDEFS 4
1508:
1509: #define INSTR 5
1510:
1511: #line 1511 "lex.yy.c"
1512:
1513: /* Macros after this point can all be overridden by user definitions in
1514: * section 1.
1515: */
1516:
1517: #ifndef YY_SKIP_YYWRAP
1518: #ifdef __cplusplus
1519: extern "C" int yywrap YY_PROTO(( void ));
1520: #else
1521: extern int yywrap YY_PROTO(( void ));
1522: #endif
1523: #endif
1524:
1525: #ifndef YY_NO_UNPUT
1526: static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1527: #endif
1528:
1529: #ifndef yytext_ptr
1530: static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1531: #endif
1532:
1533: #ifdef YY_NEED_STRLEN
1534: static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1535: #endif
1536:
1537: #ifndef YY_NO_INPUT
1538: #ifdef __cplusplus
1539: static int yyinput YY_PROTO(( void ));
1540: #else
1541: static int input YY_PROTO(( void ));
1542: #endif
1543: #endif
1544:
1545: #if defined(YY_STACK_USED) && YY_STACK_USED
1546: static int yy_start_stack_ptr = 0;
1547: static int yy_start_stack_depth = 0;
1548: static int *yy_start_stack = 0;
1549: #ifndef YY_NO_PUSH_STATE
1550: static void yy_push_state YY_PROTO(( int new_state ));
1551: #endif
1552: #ifndef YY_NO_POP_STATE
1553: static void yy_pop_state YY_PROTO(( void ));
1554: #endif
1555: #ifndef YY_NO_TOP_STATE
1556: static int yy_top_state YY_PROTO(( void ));
1557: #endif
1558:
1559: #else
1560: #define YY_NO_PUSH_STATE 1
1561: #define YY_NO_POP_STATE 1
1562: #define YY_NO_TOP_STATE 1
1563: #endif
1564:
1565: #ifdef YY_MALLOC_DECL
1566: YY_MALLOC_DECL
1567: #else
1568: #ifdef __STDC__
1569: #ifndef __cplusplus
1570: #include <stdlib.h>
1571: #endif
1572: #else
1573: /* Just try to get by without declaring the routines. This will fail
1574: * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1575: * or sizeof(void*) != sizeof(int).
1576: */
1577: #endif
1578: #endif
1579:
1580: /* Amount of stuff to slurp up with each read. */
1581: #ifndef YY_READ_BUF_SIZE
1582: #define YY_READ_BUF_SIZE 8192
1583: #endif
1584:
1585: /* Copy whatever the last rule matched to the standard output. */
1586:
1587: #ifndef ECHO
1588: /* This used to be an fputs(), but since the string might contain NUL's,
1589: * we now use fwrite().
1590: */
1591: #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1592: #endif
1593:
1594: /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1595: * is returned in "result".
1596: */
1597: #ifndef YY_INPUT
1598: #define YY_INPUT(buf,result,max_size) \
1599: if ( yy_current_buffer->yy_is_interactive ) \
1600: { \
1601: int c = '*', n; \
1602: for ( n = 0; n < max_size && \
1603: (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1604: buf[n] = (char) c; \
1605: if ( c == '\n' ) \
1606: buf[n++] = (char) c; \
1607: if ( c == EOF && ferror( yyin ) ) \
1608: YY_FATAL_ERROR( "input in flex scanner failed" ); \
1609: result = n; \
1610: } \
1611: else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
1612: && ferror( yyin ) ) \
1613: YY_FATAL_ERROR( "input in flex scanner failed" );
1614: #endif
1615:
1616: /* No semi-colon after return; correct usage is to write "yyterminate();" -
1617: * we don't want an extra ';' after the "return" because that will cause
1618: * some compilers to complain about unreachable statements.
1619: */
1620: #ifndef yyterminate
1621: #define yyterminate() return YY_NULL
1622: #endif
1623:
1624: /* Number of entries by which start-condition stack grows. */
1625: #ifndef YY_START_STACK_INCR
1626: #define YY_START_STACK_INCR 25
1627: #endif
1628:
1629: /* Report a fatal error. */
1630: #ifndef YY_FATAL_ERROR
1631: #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1632: #endif
1633:
1634: /* Default declaration of generated scanner - a define so the user can
1635: * easily add parameters.
1636: */
1637: #ifndef YY_DECL
1638: #define YY_DECL int yylex YY_PROTO(( void ))
1639: #endif
1640:
1641: /* Code executed at the beginning of each rule, after yytext and yyleng
1642: * have been set up.
1643: */
1644: #ifndef YY_USER_ACTION
1645: #define YY_USER_ACTION
1646: #endif
1647:
1648: /* Code executed at the end of each rule. */
1649: #ifndef YY_BREAK
1650: #define YY_BREAK break;
1651: #endif
1652:
1653: #define YY_RULE_SETUP \
1654: if ( yyleng > 0 ) \
1655: yy_current_buffer->yy_at_bol = \
1656: (yytext[yyleng - 1] == '\n'); \
1657: YY_USER_ACTION
1658:
1659: YY_DECL
1660: {
1661: register yy_state_type yy_current_state;
1662: register char *yy_cp, *yy_bp;
1663: register int yy_act;
1664:
1665: #line 119 "toke.l"
1666:
1667: #line 1667 "lex.yy.c"
1668:
1669: if ( yy_init )
1670: {
1671: yy_init = 0;
1672:
1673: #ifdef YY_USER_INIT
1674: YY_USER_INIT;
1675: #endif
1676:
1677: if ( ! yy_start )
1678: yy_start = 1; /* first start state */
1679:
1680: if ( ! yyin )
1681: yyin = stdin;
1682:
1683: if ( ! yyout )
1684: yyout = stdout;
1685:
1686: if ( ! yy_current_buffer )
1687: yy_current_buffer =
1688: yy_create_buffer( yyin, YY_BUF_SIZE );
1689:
1690: yy_load_buffer_state();
1691: }
1692:
1693: while ( 1 ) /* loops until end-of-file is reached */
1694: {
1695: yy_cp = yy_c_buf_p;
1696:
1697: /* Support of yytext. */
1698: *yy_cp = yy_hold_char;
1699:
1700: /* yy_bp points to the position in yy_ch_buf of the start of
1701: * the current run.
1702: */
1703: yy_bp = yy_cp;
1704:
1705: yy_current_state = yy_start;
1706: yy_current_state += YY_AT_BOL();
1707: yy_match:
1708: do
1709: {
1710: register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1711: if ( yy_accept[yy_current_state] )
1712: {
1713: yy_last_accepting_state = yy_current_state;
1714: yy_last_accepting_cpos = yy_cp;
1715: }
1716: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1717: {
1718: yy_current_state = (int) yy_def[yy_current_state];
1719: if ( yy_current_state >= 607 )
1720: yy_c = yy_meta[(unsigned int) yy_c];
1721: }
1722: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1723: ++yy_cp;
1724: }
1725: while ( yy_base[yy_current_state] != 3665 );
1726:
1727: yy_find_action:
1728: yy_act = yy_accept[yy_current_state];
1729: if ( yy_act == 0 )
1730: { /* have to back up */
1731: yy_cp = yy_last_accepting_cpos;
1732: yy_current_state = yy_last_accepting_state;
1733: yy_act = yy_accept[yy_current_state];
1734: }
1735:
1736: YY_DO_BEFORE_ACTION;
1737:
1738:
1739: do_action: /* This label is used only to access EOF actions. */
1740:
1741:
1742: switch ( yy_act )
1743: { /* beginning of action switch */
1744: case 0: /* must back up */
1745: /* undo the effects of YY_DO_BEFORE_ACTION */
1746: *yy_cp = yy_hold_char;
1747: yy_cp = yy_last_accepting_cpos;
1748: yy_current_state = yy_last_accepting_state;
1749: goto yy_find_action;
1750:
1751: case 1:
1752: YY_RULE_SETUP
1753: #line 120 "toke.l"
1754: {
1755: LEXTRACE(", ");
1756: return ',';
1757: } /* return ',' */
1758: YY_BREAK
1759: case 2:
1760: YY_RULE_SETUP
1761: #line 125 "toke.l"
1762: BEGIN STARTDEFS;
1763: YY_BREAK
1764: case 3:
1765: YY_RULE_SETUP
1766: #line 127 "toke.l"
1767: {
1768: BEGIN INDEFS;
1769: LEXTRACE("DEFVAR ");
1770: if (!fill(yytext, yyleng))
1771: yyterminate();
1772: return DEFVAR;
1773: }
1774: YY_BREAK
1775:
1776: case 4:
1777: YY_RULE_SETUP
1778: #line 136 "toke.l"
1779: {
1780: BEGIN STARTDEFS;
1781: LEXTRACE(", ");
1782: return ',';
1783: } /* return ',' */
1784: YY_BREAK
1785: case 5:
1786: YY_RULE_SETUP
1787: #line 142 "toke.l"
1788: {
1789: LEXTRACE("= ");
1790: return '=';
1791: } /* return '=' */
1792: YY_BREAK
1793: case 6:
1794: YY_RULE_SETUP
1795: #line 147 "toke.l"
1796: {
1797: LEXTRACE("+= ");
1798: return '+';
1799: } /* return '+' */
1800: YY_BREAK
1801: case 7:
1802: YY_RULE_SETUP
1803: #line 152 "toke.l"
1804: {
1805: LEXTRACE("-= ");
1806: return '-';
1807: } /* return '-' */
1808: YY_BREAK
1809: case 8:
1810: YY_RULE_SETUP
1811: #line 157 "toke.l"
1812: {
1813: LEXTRACE("BEGINSTR ");
1814: yylval.string = NULL;
1815: prev_state = YY_START;
1816: BEGIN INSTR;
1817: }
1818: YY_BREAK
1819: case 9:
1820: YY_RULE_SETUP
1821: #line 164 "toke.l"
1822: {
1823: LEXTRACE("WORD(2) ");
1824: if (!fill(yytext, yyleng))
1825: yyterminate();
1826: return WORD;
1827: }
1828: YY_BREAK
1829:
1830:
1831: case 10:
1832: YY_RULE_SETUP
1833: #line 173 "toke.l"
1834: {
1835: /* Line continuation char followed by newline. */
1836: ++sudolineno;
1837: continued = TRUE;
1838: }
1839: YY_BREAK
1840: case 11:
1841: YY_RULE_SETUP
1842: #line 179 "toke.l"
1843: {
1844: LEXTRACE("ENDSTR ");
1845: BEGIN prev_state;
1846:
1847: if (yylval.string == NULL) {
1848: LEXTRACE("ERROR "); /* empty string */
1849: return ERROR;
1850: }
1851: if (prev_state == INITIAL) {
1852: switch (yylval.string[0]) {
1853: case '%':
1854: if (yylval.string[1] == '\0' ||
1855: (yylval.string[1] == ':' &&
1856: yylval.string[2] == '\0')) {
1857: LEXTRACE("ERROR "); /* empty group */
1858: return ERROR;
1859: }
1860: LEXTRACE("USERGROUP ");
1861: return USERGROUP;
1862: case '+':
1863: if (yylval.string[1] == '\0') {
1864: LEXTRACE("ERROR "); /* empty netgroup */
1865: return ERROR;
1866: }
1867: LEXTRACE("NETGROUP ");
1868: return NETGROUP;
1869: }
1870: }
1871: LEXTRACE("WORD(4) ");
1872: return WORD;
1873: }
1874: YY_BREAK
1875: case 12:
1876: YY_RULE_SETUP
1877: #line 211 "toke.l"
1878: {
1879: LEXTRACE("BACKSLASH ");
1880: if (!append(yytext, yyleng))
1881: yyterminate();
1882: }
1883: YY_BREAK
1884: case 13:
1885: YY_RULE_SETUP
1886: #line 217 "toke.l"
1887: {
1888: LEXTRACE("STRBODY ");
1889: if (!append(yytext, yyleng))
1890: yyterminate();
1891: }
1892: YY_BREAK
1893:
1894:
1895: case 14:
1896: YY_RULE_SETUP
1897: #line 225 "toke.l"
1898: {
1899: /* quoted fnmatch glob char, pass verbatim */
1900: LEXTRACE("QUOTEDCHAR ");
1901: if (!fill_args(yytext, 2, sawspace))
1902: yyterminate();
1903: sawspace = FALSE;
1904: }
1905: YY_BREAK
1906: case 15:
1907: YY_RULE_SETUP
1908: #line 233 "toke.l"
1909: {
1910: /* quoted sudoers special char, strip backslash */
1911: LEXTRACE("QUOTEDCHAR ");
1912: if (!fill_args(yytext + 1, 1, sawspace))
1913: yyterminate();
1914: sawspace = FALSE;
1915: }
1916: YY_BREAK
1917: case 16:
1918: YY_RULE_SETUP
1919: #line 241 "toke.l"
1920: {
1921: BEGIN INITIAL;
1922: yyless(0);
1923: return COMMAND;
1924: } /* end of command line args */
1925: YY_BREAK
1926: case 17:
1927: YY_RULE_SETUP
1928: #line 247 "toke.l"
1929: {
1930: LEXTRACE("ARG ");
1931: if (!fill_args(yytext, yyleng, sawspace))
1932: yyterminate();
1933: sawspace = FALSE;
1934: } /* a command line arg */
1935: YY_BREAK
1936:
1937: case 18:
1938: YY_RULE_SETUP
1939: #line 255 "toke.l"
1940: {
1941: char *path;
1942:
1943: if (continued) {
1944: LEXTRACE("ERROR ");
1945: return ERROR;
1946: }
1947:
1948: if ((path = parse_include(yytext)) == NULL)
1949: yyterminate();
1950:
1951: LEXTRACE("INCLUDE\n");
1952:
1953: /* Push current buffer and switch to include file */
1954: if (!push_include(path))
1955: yyterminate();
1956: }
1957: YY_BREAK
1958: case 19:
1959: YY_RULE_SETUP
1960: #line 273 "toke.l"
1961: {
1962: char *path;
1963:
1964: if (continued) {
1965: LEXTRACE("ERROR ");
1966: return ERROR;
1967: }
1968:
1969: if ((path = parse_include(yytext)) == NULL)
1970: yyterminate();
1971:
1972: LEXTRACE("INCLUDEDIR\n");
1973:
1974: /*
1975: * Push current buffer and switch to include file.
1976: * We simply ignore empty directories.
1977: */
1978: if (!push_includedir(path) && parse_error)
1979: yyterminate();
1980: }
1981: YY_BREAK
1982: case 20:
1983: YY_RULE_SETUP
1984: #line 294 "toke.l"
1985: {
1986: char deftype;
1987: int n;
1988:
1989: if (continued) {
1990: LEXTRACE("ERROR ");
1991: return ERROR;
1992: }
1993:
1994: for (n = 0; isblank((unsigned char)yytext[n]); n++)
1995: continue;
1996: n += sizeof("Defaults") - 1;
1997: if ((deftype = yytext[n++]) != '\0') {
1998: while (isblank((unsigned char)yytext[n]))
1999: n++;
2000: }
2001: BEGIN GOTDEFS;
2002: switch (deftype) {
2003: case ':':
2004: yyless(n);
2005: LEXTRACE("DEFAULTS_USER ");
2006: return DEFAULTS_USER;
2007: case '>':
2008: yyless(n);
2009: LEXTRACE("DEFAULTS_RUNAS ");
2010: return DEFAULTS_RUNAS;
2011: case '@':
2012: yyless(n);
2013: LEXTRACE("DEFAULTS_HOST ");
2014: return DEFAULTS_HOST;
2015: case '!':
2016: yyless(n);
2017: LEXTRACE("DEFAULTS_CMND ");
2018: return DEFAULTS_CMND;
2019: default:
2020: LEXTRACE("DEFAULTS ");
2021: return DEFAULTS;
2022: }
2023: }
2024: YY_BREAK
2025: case 21:
2026: YY_RULE_SETUP
2027: #line 334 "toke.l"
2028: {
2029: int n;
2030:
2031: if (continued) {
2032: LEXTRACE("ERROR ");
2033: return ERROR;
2034: }
2035:
2036: for (n = 0; isblank((unsigned char)yytext[n]); n++)
2037: continue;
2038: switch (yytext[n]) {
2039: case 'H':
2040: LEXTRACE("HOSTALIAS ");
2041: return HOSTALIAS;
2042: case 'C':
2043: LEXTRACE("CMNDALIAS ");
2044: return CMNDALIAS;
2045: case 'U':
2046: LEXTRACE("USERALIAS ");
2047: return USERALIAS;
2048: case 'R':
2049: LEXTRACE("RUNASALIAS ");
2050: return RUNASALIAS;
2051: }
2052: }
2053: YY_BREAK
2054: case 22:
2055: YY_RULE_SETUP
2056: #line 360 "toke.l"
2057: {
2058: /* cmnd does not require passwd for this user */
2059: LEXTRACE("NOPASSWD ");
2060: return NOPASSWD;
2061: }
2062: YY_BREAK
2063: case 23:
2064: YY_RULE_SETUP
2065: #line 366 "toke.l"
2066: {
2067: /* cmnd requires passwd for this user */
2068: LEXTRACE("PASSWD ");
2069: return PASSWD;
2070: }
2071: YY_BREAK
2072: case 24:
2073: YY_RULE_SETUP
2074: #line 372 "toke.l"
2075: {
2076: LEXTRACE("NOEXEC ");
2077: return NOEXEC;
2078: }
2079: YY_BREAK
2080: case 25:
2081: YY_RULE_SETUP
2082: #line 377 "toke.l"
2083: {
2084: LEXTRACE("EXEC ");
2085: return EXEC;
2086: }
2087: YY_BREAK
2088: case 26:
2089: YY_RULE_SETUP
2090: #line 382 "toke.l"
2091: {
2092: LEXTRACE("SETENV ");
2093: return SETENV;
2094: }
2095: YY_BREAK
2096: case 27:
2097: YY_RULE_SETUP
2098: #line 387 "toke.l"
2099: {
2100: LEXTRACE("NOSETENV ");
2101: return NOSETENV;
2102: }
2103: YY_BREAK
2104: case 28:
2105: YY_RULE_SETUP
2106: #line 392 "toke.l"
2107: {
2108: LEXTRACE("LOG_OUTPUT ");
2109: return LOG_OUTPUT;
2110: }
2111: YY_BREAK
2112: case 29:
2113: YY_RULE_SETUP
2114: #line 397 "toke.l"
2115: {
2116: LEXTRACE("NOLOG_OUTPUT ");
2117: return NOLOG_OUTPUT;
2118: }
2119: YY_BREAK
2120: case 30:
2121: YY_RULE_SETUP
2122: #line 402 "toke.l"
2123: {
2124: LEXTRACE("LOG_INPUT ");
2125: return LOG_INPUT;
2126: }
2127: YY_BREAK
2128: case 31:
2129: YY_RULE_SETUP
2130: #line 407 "toke.l"
2131: {
2132: LEXTRACE("NOLOG_INPUT ");
2133: return NOLOG_INPUT;
2134: }
2135: YY_BREAK
2136: case 32:
2137: YY_RULE_SETUP
2138: #line 412 "toke.l"
2139: {
2140: /* empty group or netgroup */
2141: LEXTRACE("ERROR ");
2142: return ERROR;
2143: }
2144: YY_BREAK
2145: case 33:
2146: YY_RULE_SETUP
2147: #line 418 "toke.l"
2148: {
2149: /* netgroup */
2150: if (!fill(yytext, yyleng))
2151: yyterminate();
2152: LEXTRACE("NETGROUP ");
2153: return NETGROUP;
2154: }
2155: YY_BREAK
2156: case 34:
2157: YY_RULE_SETUP
2158: #line 426 "toke.l"
2159: {
2160: /* group */
2161: if (!fill(yytext, yyleng))
2162: yyterminate();
2163: LEXTRACE("USERGROUP ");
2164: return USERGROUP;
2165: }
2166: YY_BREAK
2167: case 35:
2168: YY_RULE_SETUP
2169: #line 434 "toke.l"
2170: {
2171: if (!fill(yytext, yyleng))
2172: yyterminate();
2173: LEXTRACE("NTWKADDR ");
2174: return NTWKADDR;
2175: }
2176: YY_BREAK
2177: case 36:
2178: YY_RULE_SETUP
2179: #line 441 "toke.l"
2180: {
2181: if (!fill(yytext, yyleng))
2182: yyterminate();
2183: LEXTRACE("NTWKADDR ");
2184: return NTWKADDR;
2185: }
2186: YY_BREAK
2187: case 37:
2188: YY_RULE_SETUP
2189: #line 448 "toke.l"
2190: {
2191: if (!ipv6_valid(yytext)) {
2192: LEXTRACE("ERROR ");
2193: return ERROR;
2194: }
2195: if (!fill(yytext, yyleng))
2196: yyterminate();
2197: LEXTRACE("NTWKADDR ");
2198: return NTWKADDR;
2199: }
2200: YY_BREAK
2201: case 38:
2202: YY_RULE_SETUP
2203: #line 459 "toke.l"
2204: {
2205: if (!ipv6_valid(yytext)) {
2206: LEXTRACE("ERROR ");
2207: return ERROR;
2208: }
2209: if (!fill(yytext, yyleng))
2210: yyterminate();
2211: LEXTRACE("NTWKADDR ");
2212: return NTWKADDR;
2213: }
2214: YY_BREAK
2215: case 39:
2216: YY_RULE_SETUP
2217: #line 470 "toke.l"
2218: {
2219: LEXTRACE("ALL ");
2220: return ALL;
2221:
2222: }
2223: YY_BREAK
2224: case 40:
2225: YY_RULE_SETUP
2226: #line 476 "toke.l"
2227: {
2228: #ifdef HAVE_SELINUX
2229: LEXTRACE("ROLE ");
2230: return ROLE;
2231: #else
2232: goto got_alias;
2233: #endif
2234: }
2235: YY_BREAK
2236: case 41:
2237: YY_RULE_SETUP
2238: #line 485 "toke.l"
2239: {
2240: #ifdef HAVE_SELINUX
2241: LEXTRACE("TYPE ");
2242: return TYPE;
2243: #else
2244: goto got_alias;
2245: #endif
2246: }
2247: YY_BREAK
2248: case 42:
2249: YY_RULE_SETUP
2250: #line 494 "toke.l"
2251: {
2252: #ifndef HAVE_SELINUX
2253: got_alias:
2254: #endif
2255: if (!fill(yytext, yyleng))
2256: yyterminate();
2257: LEXTRACE("ALIAS ");
2258: return ALIAS;
2259: }
2260: YY_BREAK
2261: case 43:
2262: YY_RULE_SETUP
2263: #line 504 "toke.l"
2264: {
2265: /* no command args allowed for Defaults!/path */
2266: if (!fill_cmnd(yytext, yyleng))
2267: yyterminate();
2268: LEXTRACE("COMMAND ");
2269: return COMMAND;
2270: }
2271: YY_BREAK
2272: case 44:
2273: YY_RULE_SETUP
2274: #line 512 "toke.l"
2275: {
2276: BEGIN GOTCMND;
2277: LEXTRACE("COMMAND ");
2278: if (!fill_cmnd(yytext, yyleng))
2279: yyterminate();
2280: } /* sudo -e */
2281: YY_BREAK
2282: case 45:
2283: YY_RULE_SETUP
2284: #line 519 "toke.l"
2285: {
2286: /* directories can't have args... */
2287: if (yytext[yyleng - 1] == '/') {
2288: LEXTRACE("COMMAND ");
2289: if (!fill_cmnd(yytext, yyleng))
2290: yyterminate();
2291: return COMMAND;
2292: } else {
2293: BEGIN GOTCMND;
2294: LEXTRACE("COMMAND ");
2295: if (!fill_cmnd(yytext, yyleng))
2296: yyterminate();
2297: }
2298: } /* a pathname */
2299: YY_BREAK
2300: case 46:
2301: YY_RULE_SETUP
2302: #line 534 "toke.l"
2303: {
2304: LEXTRACE("BEGINSTR ");
2305: yylval.string = NULL;
2306: prev_state = YY_START;
2307: BEGIN INSTR;
2308: }
2309: YY_BREAK
2310: case 47:
2311: YY_RULE_SETUP
2312: #line 541 "toke.l"
2313: {
2314: /* a word */
2315: if (!fill(yytext, yyleng))
2316: yyterminate();
2317: LEXTRACE("WORD(5) ");
2318: return WORD;
2319: }
2320: YY_BREAK
2321: case 48:
2322: YY_RULE_SETUP
2323: #line 549 "toke.l"
2324: {
2325: LEXTRACE("( ");
2326: return '(';
2327: }
2328: YY_BREAK
2329: case 49:
2330: YY_RULE_SETUP
2331: #line 554 "toke.l"
2332: {
2333: LEXTRACE(") ");
2334: return ')';
2335: }
2336: YY_BREAK
2337: case 50:
2338: YY_RULE_SETUP
2339: #line 559 "toke.l"
2340: {
2341: LEXTRACE(", ");
2342: return ',';
2343: } /* return ',' */
2344: YY_BREAK
2345: case 51:
2346: YY_RULE_SETUP
2347: #line 564 "toke.l"
2348: {
2349: LEXTRACE("= ");
2350: return '=';
2351: } /* return '=' */
2352: YY_BREAK
2353: case 52:
2354: YY_RULE_SETUP
2355: #line 569 "toke.l"
2356: {
2357: LEXTRACE(": ");
2358: return ':';
2359: } /* return ':' */
2360: YY_BREAK
2361: case 53:
2362: YY_RULE_SETUP
2363: #line 574 "toke.l"
2364: {
2365: if (yyleng & 1) {
2366: LEXTRACE("!");
2367: return '!'; /* return '!' */
2368: }
2369: }
2370: YY_BREAK
2371: case 54:
2372: YY_RULE_SETUP
2373: #line 581 "toke.l"
2374: {
2375: if (YY_START == INSTR) {
2376: LEXTRACE("ERROR ");
2377: return ERROR; /* line break in string */
2378: }
2379: BEGIN INITIAL;
2380: ++sudolineno;
2381: continued = FALSE;
2382: LEXTRACE("\n");
2383: return COMMENT;
2384: } /* return newline */
2385: YY_BREAK
2386: case 55:
2387: YY_RULE_SETUP
2388: #line 593 "toke.l"
2389: { /* throw away space/tabs */
2390: sawspace = TRUE; /* but remember for fill_args */
2391: }
2392: YY_BREAK
2393: case 56:
2394: YY_RULE_SETUP
2395: #line 597 "toke.l"
2396: {
2397: sawspace = TRUE; /* remember for fill_args */
2398: ++sudolineno;
2399: continued = TRUE;
2400: } /* throw away EOL after \ */
2401: YY_BREAK
2402: case 57:
2403: YY_RULE_SETUP
2404: #line 603 "toke.l"
2405: {
2406: BEGIN INITIAL;
2407: ++sudolineno;
2408: continued = FALSE;
2409: LEXTRACE("#\n");
2410: return COMMENT;
2411: } /* comment, not uid/gid */
2412: YY_BREAK
2413: case 58:
2414: YY_RULE_SETUP
2415: #line 611 "toke.l"
2416: {
2417: LEXTRACE("ERROR ");
2418: return ERROR;
2419: } /* parse error */
2420: YY_BREAK
2421: case YY_STATE_EOF(INITIAL):
2422: case YY_STATE_EOF(GOTDEFS):
2423: case YY_STATE_EOF(GOTCMND):
2424: case YY_STATE_EOF(STARTDEFS):
2425: case YY_STATE_EOF(INDEFS):
2426: case YY_STATE_EOF(INSTR):
2427: #line 616 "toke.l"
2428: {
2429: if (YY_START != INITIAL) {
2430: BEGIN INITIAL;
2431: LEXTRACE("ERROR ");
2432: return ERROR;
2433: }
2434: if (!pop_include())
2435: yyterminate();
2436: }
2437: YY_BREAK
2438: case 59:
2439: YY_RULE_SETUP
2440: #line 626 "toke.l"
2441: ECHO;
2442: YY_BREAK
2443: #line 2443 "lex.yy.c"
2444:
2445: case YY_END_OF_BUFFER:
2446: {
2447: /* Amount of text matched not including the EOB char. */
2448: int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
2449:
2450: /* Undo the effects of YY_DO_BEFORE_ACTION. */
2451: *yy_cp = yy_hold_char;
2452: YY_RESTORE_YY_MORE_OFFSET
2453:
2454: if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
2455: {
2456: /* We're scanning a new file or input source. It's
2457: * possible that this happened because the user
2458: * just pointed yyin at a new source and called
2459: * yylex(). If so, then we have to assure
2460: * consistency between yy_current_buffer and our
2461: * globals. Here is the right place to do so, because
2462: * this is the first action (other than possibly a
2463: * back-up) that will match for the new input source.
2464: */
2465: yy_n_chars = yy_current_buffer->yy_n_chars;
2466: yy_current_buffer->yy_input_file = yyin;
2467: yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
2468: }
2469:
2470: /* Note that here we test for yy_c_buf_p "<=" to the position
2471: * of the first EOB in the buffer, since yy_c_buf_p will
2472: * already have been incremented past the NUL character
2473: * (since all states make transitions on EOB to the
2474: * end-of-buffer state). Contrast this with the test
2475: * in input().
2476: */
2477: if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
2478: { /* This was really a NUL. */
2479: yy_state_type yy_next_state;
2480:
2481: yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
2482:
2483: yy_current_state = yy_get_previous_state();
2484:
2485: /* Okay, we're now positioned to make the NUL
2486: * transition. We couldn't have
2487: * yy_get_previous_state() go ahead and do it
2488: * for us because it doesn't know how to deal
2489: * with the possibility of jamming (and we don't
2490: * want to build jamming into it because then it
2491: * will run more slowly).
2492: */
2493:
2494: yy_next_state = yy_try_NUL_trans( yy_current_state );
2495:
2496: yy_bp = yytext_ptr + YY_MORE_ADJ;
2497:
2498: if ( yy_next_state )
2499: {
2500: /* Consume the NUL. */
2501: yy_cp = ++yy_c_buf_p;
2502: yy_current_state = yy_next_state;
2503: goto yy_match;
2504: }
2505:
2506: else
2507: {
2508: yy_cp = yy_c_buf_p;
2509: goto yy_find_action;
2510: }
2511: }
2512:
2513: else switch ( yy_get_next_buffer() )
2514: {
2515: case EOB_ACT_END_OF_FILE:
2516: {
2517: yy_did_buffer_switch_on_eof = 0;
2518:
2519: if ( yywrap() )
2520: {
2521: /* Note: because we've taken care in
2522: * yy_get_next_buffer() to have set up
2523: * yytext, we can now set up
2524: * yy_c_buf_p so that if some total
2525: * hoser (like flex itself) wants to
2526: * call the scanner after we return the
2527: * YY_NULL, it'll still work - another
2528: * YY_NULL will get returned.
2529: */
2530: yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
2531:
2532: yy_act = YY_STATE_EOF(YY_START);
2533: goto do_action;
2534: }
2535:
2536: else
2537: {
2538: if ( ! yy_did_buffer_switch_on_eof )
2539: YY_NEW_FILE;
2540: }
2541: break;
2542: }
2543:
2544: case EOB_ACT_CONTINUE_SCAN:
2545: yy_c_buf_p =
2546: yytext_ptr + yy_amount_of_matched_text;
2547:
2548: yy_current_state = yy_get_previous_state();
2549:
2550: yy_cp = yy_c_buf_p;
2551: yy_bp = yytext_ptr + YY_MORE_ADJ;
2552: goto yy_match;
2553:
2554: case EOB_ACT_LAST_MATCH:
2555: yy_c_buf_p =
2556: &yy_current_buffer->yy_ch_buf[yy_n_chars];
2557:
2558: yy_current_state = yy_get_previous_state();
2559:
2560: yy_cp = yy_c_buf_p;
2561: yy_bp = yytext_ptr + YY_MORE_ADJ;
2562: goto yy_find_action;
2563: }
2564: break;
2565: }
2566:
2567: default:
2568: YY_FATAL_ERROR(
2569: "fatal flex scanner internal error--no action found" );
2570: } /* end of action switch */
2571: } /* end of scanning one token */
2572: } /* end of yylex */
2573:
2574:
2575: /* yy_get_next_buffer - try to read in a new buffer
2576: *
2577: * Returns a code representing an action:
2578: * EOB_ACT_LAST_MATCH -
2579: * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2580: * EOB_ACT_END_OF_FILE - end of file
2581: */
2582:
2583: static int yy_get_next_buffer()
2584: {
2585: register char *dest = yy_current_buffer->yy_ch_buf;
2586: register char *source = yytext_ptr;
2587: register int number_to_move, i;
2588: int ret_val;
2589:
2590: if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
2591: YY_FATAL_ERROR(
2592: "fatal flex scanner internal error--end of buffer missed" );
2593:
2594: if ( yy_current_buffer->yy_fill_buffer == 0 )
2595: { /* Don't try to fill the buffer, so this is an EOF. */
2596: if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
2597: {
2598: /* We matched a single character, the EOB, so
2599: * treat this as a final EOF.
2600: */
2601: return EOB_ACT_END_OF_FILE;
2602: }
2603:
2604: else
2605: {
2606: /* We matched some text prior to the EOB, first
2607: * process it.
2608: */
2609: return EOB_ACT_LAST_MATCH;
2610: }
2611: }
2612:
2613: /* Try to read more data. */
2614:
2615: /* First move last chars to start of buffer. */
2616: number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
2617:
2618: for ( i = 0; i < number_to_move; ++i )
2619: *(dest++) = *(source++);
2620:
2621: if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2622: /* don't do the read, it's not guaranteed to return an EOF,
2623: * just force an EOF
2624: */
2625: yy_current_buffer->yy_n_chars = yy_n_chars = 0;
2626:
2627: else
2628: {
2629: int num_to_read =
2630: yy_current_buffer->yy_buf_size - number_to_move - 1;
2631:
2632: while ( num_to_read <= 0 )
2633: { /* Not enough room in the buffer - grow it. */
2634: #ifdef YY_USES_REJECT
2635: YY_FATAL_ERROR(
2636: "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
2637: #else
2638:
2639: /* just a shorter name for the current buffer */
2640: YY_BUFFER_STATE b = yy_current_buffer;
2641:
2642: int yy_c_buf_p_offset =
2643: (int) (yy_c_buf_p - b->yy_ch_buf);
2644:
2645: if ( b->yy_is_our_buffer )
2646: {
2647: int new_size = b->yy_buf_size * 2;
2648:
2649: if ( new_size <= 0 )
2650: b->yy_buf_size += b->yy_buf_size / 8;
2651: else
2652: b->yy_buf_size *= 2;
2653:
2654: b->yy_ch_buf = (char *)
2655: /* Include room in for 2 EOB chars. */
2656: yy_flex_realloc( (void *) b->yy_ch_buf,
2657: b->yy_buf_size + 2 );
2658: }
2659: else
2660: /* Can't grow it, we don't own it. */
2661: b->yy_ch_buf = 0;
2662:
2663: if ( ! b->yy_ch_buf )
2664: YY_FATAL_ERROR(
2665: "fatal error - scanner input buffer overflow" );
2666:
2667: yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
2668:
2669: num_to_read = yy_current_buffer->yy_buf_size -
2670: number_to_move - 1;
2671: #endif
2672: }
2673:
2674: if ( num_to_read > YY_READ_BUF_SIZE )
2675: num_to_read = YY_READ_BUF_SIZE;
2676:
2677: /* Read in more data. */
2678: YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
2679: yy_n_chars, num_to_read );
2680:
2681: yy_current_buffer->yy_n_chars = yy_n_chars;
2682: }
2683:
2684: if ( yy_n_chars == 0 )
2685: {
2686: if ( number_to_move == YY_MORE_ADJ )
2687: {
2688: ret_val = EOB_ACT_END_OF_FILE;
2689: yyrestart( yyin );
2690: }
2691:
2692: else
2693: {
2694: ret_val = EOB_ACT_LAST_MATCH;
2695: yy_current_buffer->yy_buffer_status =
2696: YY_BUFFER_EOF_PENDING;
2697: }
2698: }
2699:
2700: else
2701: ret_val = EOB_ACT_CONTINUE_SCAN;
2702:
2703: yy_n_chars += number_to_move;
2704: yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
2705: yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
2706:
2707: yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
2708:
2709: return ret_val;
2710: }
2711:
2712:
2713: /* yy_get_previous_state - get the state just before the EOB char was reached */
2714:
2715: static yy_state_type yy_get_previous_state()
2716: {
2717: register yy_state_type yy_current_state;
2718: register char *yy_cp;
2719:
2720: yy_current_state = yy_start;
2721: yy_current_state += YY_AT_BOL();
2722:
2723: for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
2724: {
2725: register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
2726: if ( yy_accept[yy_current_state] )
2727: {
2728: yy_last_accepting_state = yy_current_state;
2729: yy_last_accepting_cpos = yy_cp;
2730: }
2731: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2732: {
2733: yy_current_state = (int) yy_def[yy_current_state];
2734: if ( yy_current_state >= 607 )
2735: yy_c = yy_meta[(unsigned int) yy_c];
2736: }
2737: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2738: }
2739:
2740: return yy_current_state;
2741: }
2742:
2743:
2744: /* yy_try_NUL_trans - try to make a transition on the NUL character
2745: *
2746: * synopsis
2747: * next_state = yy_try_NUL_trans( current_state );
2748: */
2749:
2750: #ifdef YY_USE_PROTOS
2751: static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
2752: #else
2753: static yy_state_type yy_try_NUL_trans( yy_current_state )
2754: yy_state_type yy_current_state;
2755: #endif
2756: {
2757: register int yy_is_jam;
2758: register char *yy_cp = yy_c_buf_p;
2759:
2760: register YY_CHAR yy_c = 1;
2761: if ( yy_accept[yy_current_state] )
2762: {
2763: yy_last_accepting_state = yy_current_state;
2764: yy_last_accepting_cpos = yy_cp;
2765: }
2766: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2767: {
2768: yy_current_state = (int) yy_def[yy_current_state];
2769: if ( yy_current_state >= 607 )
2770: yy_c = yy_meta[(unsigned int) yy_c];
2771: }
2772: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2773: yy_is_jam = (yy_current_state == 606);
2774:
2775: return yy_is_jam ? 0 : yy_current_state;
2776: }
2777:
2778:
2779: #ifndef YY_NO_UNPUT
2780: #ifdef YY_USE_PROTOS
2781: static void yyunput( int c, register char *yy_bp )
2782: #else
2783: static void yyunput( c, yy_bp )
2784: int c;
2785: register char *yy_bp;
2786: #endif
2787: {
2788: register char *yy_cp = yy_c_buf_p;
2789:
2790: /* undo effects of setting up yytext */
2791: *yy_cp = yy_hold_char;
2792:
2793: if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
2794: { /* need to shift things up to make room */
2795: /* +2 for EOB chars. */
2796: register int number_to_move = yy_n_chars + 2;
2797: register char *dest = &yy_current_buffer->yy_ch_buf[
2798: yy_current_buffer->yy_buf_size + 2];
2799: register char *source =
2800: &yy_current_buffer->yy_ch_buf[number_to_move];
2801:
2802: while ( source > yy_current_buffer->yy_ch_buf )
2803: *--dest = *--source;
2804:
2805: yy_cp += (int) (dest - source);
2806: yy_bp += (int) (dest - source);
2807: yy_current_buffer->yy_n_chars =
2808: yy_n_chars = yy_current_buffer->yy_buf_size;
2809:
2810: if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
2811: YY_FATAL_ERROR( "flex scanner push-back overflow" );
2812: }
2813:
2814: *--yy_cp = (char) c;
2815:
2816:
2817: yytext_ptr = yy_bp;
2818: yy_hold_char = *yy_cp;
2819: yy_c_buf_p = yy_cp;
2820: }
2821: #endif /* ifndef YY_NO_UNPUT */
2822:
2823:
2824: #ifndef YY_NO_INPUT
2825: #ifdef __cplusplus
2826: static int yyinput()
2827: #else
2828: static int input()
2829: #endif
2830: {
2831: int c;
2832:
2833: *yy_c_buf_p = yy_hold_char;
2834:
2835: if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
2836: {
2837: /* yy_c_buf_p now points to the character we want to return.
2838: * If this occurs *before* the EOB characters, then it's a
2839: * valid NUL; if not, then we've hit the end of the buffer.
2840: */
2841: if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
2842: /* This was really a NUL. */
2843: *yy_c_buf_p = '\0';
2844:
2845: else
2846: { /* need more input */
2847: int offset = yy_c_buf_p - yytext_ptr;
2848: ++yy_c_buf_p;
2849:
2850: switch ( yy_get_next_buffer() )
2851: {
2852: case EOB_ACT_LAST_MATCH:
2853: /* This happens because yy_g_n_b()
2854: * sees that we've accumulated a
2855: * token and flags that we need to
2856: * try matching the token before
2857: * proceeding. But for input(),
2858: * there's no matching to consider.
2859: * So convert the EOB_ACT_LAST_MATCH
2860: * to EOB_ACT_END_OF_FILE.
2861: */
2862:
2863: /* Reset buffer status. */
2864: yyrestart( yyin );
2865:
2866: /* fall through */
2867:
2868: case EOB_ACT_END_OF_FILE:
2869: {
2870: if ( yywrap() )
2871: return EOF;
2872:
2873: if ( ! yy_did_buffer_switch_on_eof )
2874: YY_NEW_FILE;
2875: #ifdef __cplusplus
2876: return yyinput();
2877: #else
2878: return input();
2879: #endif
2880: }
2881:
2882: case EOB_ACT_CONTINUE_SCAN:
2883: yy_c_buf_p = yytext_ptr + offset;
2884: break;
2885: }
2886: }
2887: }
2888:
2889: c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
2890: *yy_c_buf_p = '\0'; /* preserve yytext */
2891: yy_hold_char = *++yy_c_buf_p;
2892:
2893: yy_current_buffer->yy_at_bol = (c == '\n');
2894:
2895: return c;
2896: }
2897: #endif /* ifndef YY_NO_INPUT */
2898:
2899:
2900: #ifdef YY_USE_PROTOS
2901: void yyrestart( FILE *input_file )
2902: #else
2903: void yyrestart( input_file )
2904: FILE *input_file;
2905: #endif
2906: {
2907: if ( ! yy_current_buffer )
2908: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
2909:
2910: yy_init_buffer( yy_current_buffer, input_file );
2911: yy_load_buffer_state();
2912: }
2913:
2914:
2915: #ifdef YY_USE_PROTOS
2916: void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
2917: #else
2918: void yy_switch_to_buffer( new_buffer )
2919: YY_BUFFER_STATE new_buffer;
2920: #endif
2921: {
2922: if ( yy_current_buffer == new_buffer )
2923: return;
2924:
2925: if ( yy_current_buffer )
2926: {
2927: /* Flush out information for old buffer. */
2928: *yy_c_buf_p = yy_hold_char;
2929: yy_current_buffer->yy_buf_pos = yy_c_buf_p;
2930: yy_current_buffer->yy_n_chars = yy_n_chars;
2931: }
2932:
2933: yy_current_buffer = new_buffer;
2934: yy_load_buffer_state();
2935:
2936: /* We don't actually know whether we did this switch during
2937: * EOF (yywrap()) processing, but the only time this flag
2938: * is looked at is after yywrap() is called, so it's safe
2939: * to go ahead and always set it.
2940: */
2941: yy_did_buffer_switch_on_eof = 1;
2942: }
2943:
2944:
2945: #ifdef YY_USE_PROTOS
2946: void yy_load_buffer_state( void )
2947: #else
2948: void yy_load_buffer_state()
2949: #endif
2950: {
2951: yy_n_chars = yy_current_buffer->yy_n_chars;
2952: yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
2953: yyin = yy_current_buffer->yy_input_file;
2954: yy_hold_char = *yy_c_buf_p;
2955: }
2956:
2957:
2958: #ifdef YY_USE_PROTOS
2959: YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
2960: #else
2961: YY_BUFFER_STATE yy_create_buffer( file, size )
2962: FILE *file;
2963: int size;
2964: #endif
2965: {
2966: YY_BUFFER_STATE b;
2967:
2968: b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
2969: if ( ! b )
2970: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2971:
2972: b->yy_buf_size = size;
2973:
2974: /* yy_ch_buf has to be 2 characters longer than the size given because
2975: * we need to put in 2 end-of-buffer characters.
2976: */
2977: b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
2978: if ( ! b->yy_ch_buf )
2979: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2980:
2981: b->yy_is_our_buffer = 1;
2982:
2983: yy_init_buffer( b, file );
2984:
2985: return b;
2986: }
2987:
2988:
2989: #ifdef YY_USE_PROTOS
2990: void yy_delete_buffer( YY_BUFFER_STATE b )
2991: #else
2992: void yy_delete_buffer( b )
2993: YY_BUFFER_STATE b;
2994: #endif
2995: {
2996: if ( ! b )
2997: return;
2998:
2999: if ( b == yy_current_buffer )
3000: yy_current_buffer = (YY_BUFFER_STATE) 0;
3001:
3002: if ( b->yy_is_our_buffer )
3003: yy_flex_free( (void *) b->yy_ch_buf );
3004:
3005: yy_flex_free( (void *) b );
3006: }
3007:
3008:
3009: #ifndef YY_ALWAYS_INTERACTIVE
3010: #ifndef YY_NEVER_INTERACTIVE
3011: #include <unistd.h>
3012: #endif
3013: #endif
3014:
3015: #ifdef YY_USE_PROTOS
3016: void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3017: #else
3018: void yy_init_buffer( b, file )
3019: YY_BUFFER_STATE b;
3020: FILE *file;
3021: #endif
3022:
3023:
3024: {
3025: int oerrno = errno;
3026:
3027: yy_flush_buffer( b );
3028:
3029: b->yy_input_file = file;
3030: b->yy_fill_buffer = 1;
3031:
3032: #if defined(YY_ALWAYS_INTERACTIVE) && YY_ALWAYS_INTERACTIVE
3033: b->yy_is_interactive = 1;
3034: #else
3035: #if defined(YY_NEVER_INTERACTIVE) && YY_NEVER_INTERACTIVE
3036: b->yy_is_interactive = 0;
3037: #else
3038: b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3039: #endif
3040: #endif
3041: errno = oerrno;
3042: }
3043:
3044:
3045: #ifdef YY_USE_PROTOS
3046: void yy_flush_buffer( YY_BUFFER_STATE b )
3047: #else
3048: void yy_flush_buffer( b )
3049: YY_BUFFER_STATE b;
3050: #endif
3051:
3052: {
3053: if ( ! b )
3054: return;
3055:
3056: b->yy_n_chars = 0;
3057:
3058: /* We always need two end-of-buffer characters. The first causes
3059: * a transition to the end-of-buffer state. The second causes
3060: * a jam in that state.
3061: */
3062: b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3063: b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3064:
3065: b->yy_buf_pos = &b->yy_ch_buf[0];
3066:
3067: b->yy_at_bol = 1;
3068: b->yy_buffer_status = YY_BUFFER_NEW;
3069:
3070: if ( b == yy_current_buffer )
3071: yy_load_buffer_state();
3072: }
3073:
3074:
3075: #ifndef YY_NO_SCAN_BUFFER
3076: #ifdef YY_USE_PROTOS
3077: YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3078: #else
3079: YY_BUFFER_STATE yy_scan_buffer( base, size )
3080: char *base;
3081: yy_size_t size;
3082: #endif
3083: {
3084: YY_BUFFER_STATE b;
3085:
3086: if ( size < 2 ||
3087: base[size-2] != YY_END_OF_BUFFER_CHAR ||
3088: base[size-1] != YY_END_OF_BUFFER_CHAR )
3089: /* They forgot to leave room for the EOB's. */
3090: return 0;
3091:
3092: b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3093: if ( ! b )
3094: YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3095:
3096: b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
3097: b->yy_buf_pos = b->yy_ch_buf = base;
3098: b->yy_is_our_buffer = 0;
3099: b->yy_input_file = 0;
3100: b->yy_n_chars = b->yy_buf_size;
3101: b->yy_is_interactive = 0;
3102: b->yy_at_bol = 1;
3103: b->yy_fill_buffer = 0;
3104: b->yy_buffer_status = YY_BUFFER_NEW;
3105:
3106: yy_switch_to_buffer( b );
3107:
3108: return b;
3109: }
3110: #endif
3111:
3112:
3113: #ifndef YY_NO_SCAN_STRING
3114: #ifdef YY_USE_PROTOS
3115: YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3116: #else
3117: YY_BUFFER_STATE yy_scan_string( yy_str )
3118: yyconst char *yy_str;
3119: #endif
3120: {
3121: int len;
3122: for ( len = 0; yy_str[len]; ++len )
3123: ;
3124:
3125: return yy_scan_bytes( yy_str, len );
3126: }
3127: #endif
3128:
3129:
3130: #ifndef YY_NO_SCAN_BYTES
3131: #ifdef YY_USE_PROTOS
3132: YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3133: #else
3134: YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3135: yyconst char *bytes;
3136: int len;
3137: #endif
3138: {
3139: YY_BUFFER_STATE b;
3140: char *buf;
3141: yy_size_t n;
3142: int i;
3143:
3144: /* Get memory for full buffer, including space for trailing EOB's. */
3145: n = len + 2;
3146: buf = (char *) yy_flex_alloc( n );
3147: if ( ! buf )
3148: YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3149:
3150: for ( i = 0; i < len; ++i )
3151: buf[i] = bytes[i];
3152:
3153: buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3154:
3155: b = yy_scan_buffer( buf, n );
3156: if ( ! b )
3157: YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3158:
3159: /* It's okay to grow etc. this buffer, and we should throw it
3160: * away when we're done.
3161: */
3162: b->yy_is_our_buffer = 1;
3163:
3164: return b;
3165: }
3166: #endif
3167:
3168:
3169: #ifndef YY_NO_PUSH_STATE
3170: #ifdef YY_USE_PROTOS
3171: static void yy_push_state( int new_state )
3172: #else
3173: static void yy_push_state( new_state )
3174: int new_state;
3175: #endif
3176: {
3177: if ( yy_start_stack_ptr >= yy_start_stack_depth )
3178: {
3179: yy_size_t new_size;
3180:
3181: yy_start_stack_depth += YY_START_STACK_INCR;
3182: new_size = yy_start_stack_depth * sizeof( int );
3183:
3184: if ( ! yy_start_stack )
3185: yy_start_stack = (int *) yy_flex_alloc( new_size );
3186:
3187: else
3188: yy_start_stack = (int *) yy_flex_realloc(
3189: (void *) yy_start_stack, new_size );
3190:
3191: if ( ! yy_start_stack )
3192: YY_FATAL_ERROR(
3193: "out of memory expanding start-condition stack" );
3194: }
3195:
3196: yy_start_stack[yy_start_stack_ptr++] = YY_START;
3197:
3198: BEGIN(new_state);
3199: }
3200: #endif
3201:
3202:
3203: #ifndef YY_NO_POP_STATE
3204: static void yy_pop_state()
3205: {
3206: if ( --yy_start_stack_ptr < 0 )
3207: YY_FATAL_ERROR( "start-condition stack underflow" );
3208:
3209: BEGIN(yy_start_stack[yy_start_stack_ptr]);
3210: }
3211: #endif
3212:
3213:
3214: #ifndef YY_NO_TOP_STATE
3215: static int yy_top_state()
3216: {
3217: return yy_start_stack[yy_start_stack_ptr - 1];
3218: }
3219: #endif
3220:
3221: #ifndef YY_EXIT_FAILURE
3222: #define YY_EXIT_FAILURE 2
3223: #endif
3224:
3225: #ifdef YY_USE_PROTOS
3226: static void yy_fatal_error( yyconst char msg[] )
3227: #else
3228: static void yy_fatal_error( msg )
3229: char msg[];
3230: #endif
3231: {
3232: (void) fprintf( stderr, "%s\n", msg );
3233: exit( YY_EXIT_FAILURE );
3234: }
3235:
3236:
3237:
3238: /* Redefine yyless() so it works in section 3 code. */
3239:
3240: #undef yyless
3241: #define yyless(n) \
3242: do \
3243: { \
3244: /* Undo effects of setting up yytext. */ \
3245: yytext[yyleng] = yy_hold_char; \
3246: yy_c_buf_p = yytext + n; \
3247: yy_hold_char = *yy_c_buf_p; \
3248: *yy_c_buf_p = '\0'; \
3249: yyleng = n; \
3250: } \
3251: while ( 0 )
3252:
3253:
3254: /* Internal utility routines. */
3255:
3256: #ifndef yytext_ptr
3257: #ifdef YY_USE_PROTOS
3258: static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3259: #else
3260: static void yy_flex_strncpy( s1, s2, n )
3261: char *s1;
3262: yyconst char *s2;
3263: int n;
3264: #endif
3265: {
3266: register int i;
3267: for ( i = 0; i < n; ++i )
3268: s1[i] = s2[i];
3269: }
3270: #endif
3271:
3272: #ifdef YY_NEED_STRLEN
3273: #ifdef YY_USE_PROTOS
3274: static int yy_flex_strlen( yyconst char *s )
3275: #else
3276: static int yy_flex_strlen( s )
3277: yyconst char *s;
3278: #endif
3279: {
3280: register int n;
3281: for ( n = 0; s[n]; ++n )
3282: ;
3283:
3284: return n;
3285: }
3286: #endif
3287:
3288:
3289: #ifdef YY_USE_PROTOS
3290: static void *yy_flex_alloc( yy_size_t size )
3291: #else
3292: static void *yy_flex_alloc( size )
3293: yy_size_t size;
3294: #endif
3295: {
3296: return (void *) malloc( size );
3297: }
3298:
3299: #ifdef YY_USE_PROTOS
3300: static void *yy_flex_realloc( void *ptr, yy_size_t size )
3301: #else
3302: static void *yy_flex_realloc( ptr, size )
3303: void *ptr;
3304: yy_size_t size;
3305: #endif
3306: {
3307: /* The cast to (char *) in the following accommodates both
3308: * implementations that use char* generic pointers, and those
3309: * that use void* generic pointers. It works with the latter
3310: * because both ANSI C and C++ allow castless assignment from
3311: * any pointer type to void*, and deal with argument conversions
3312: * as though doing an assignment.
3313: */
3314: return (void *) realloc( (char *) ptr, size );
3315: }
3316:
3317: #ifdef YY_USE_PROTOS
3318: static void yy_flex_free( void *ptr )
3319: #else
3320: static void yy_flex_free( ptr )
3321: void *ptr;
3322: #endif
3323: {
3324: free( ptr );
3325: }
3326:
3327: #if defined(YY_MAIN) && YY_MAIN
3328: int main()
3329: {
3330: yylex();
3331: return 0;
3332: }
3333: #endif
3334: #line 626 "toke.l"
3335:
3336: struct path_list {
3337: char *path;
3338: struct path_list *next;
3339: };
3340:
3341: struct include_stack {
3342: YY_BUFFER_STATE bs;
3343: char *path;
3344: struct path_list *more; /* more files in case of includedir */
3345: int lineno;
3346: int keepopen;
3347: };
3348:
3349: static int
3350: pl_compare(const void *v1, const void *v2)
3351: {
3352: const struct path_list * const *p1 = v1;
3353: const struct path_list * const *p2 = v2;
3354:
3355: return strcmp((*p1)->path, (*p2)->path);
3356: }
3357:
3358: static char *
3359: switch_dir(struct include_stack *stack, char *dirpath)
3360: {
3361: DIR *dir;
3362: int i, count = 0;
3363: char *path = NULL;
3364: struct dirent *dent;
3365: struct stat sb;
3366: struct path_list *pl, *first = NULL;
3367: struct path_list **sorted = NULL;
3368:
3369: if (!(dir = opendir(dirpath))) {
3370: if (errno != ENOENT) {
3371: char *errbuf;
3372: if (asprintf(&errbuf, _("%s: %s"), dirpath, strerror(errno)) != -1) {
3373: yyerror(errbuf);
3374: free(errbuf);
3375: } else {
3376: yyerror(_("unable to allocate memory"));
3377: }
3378: }
3379: goto done;
3380: }
3381: while ((dent = readdir(dir))) {
3382: /* Ignore files that end in '~' or have a '.' in them. */
3383: if (dent->d_name[0] == '\0' || dent->d_name[NAMLEN(dent) - 1] == '~'
3384: || strchr(dent->d_name, '.') != NULL) {
3385: continue;
3386: }
3387: if (asprintf(&path, "%s/%s", dirpath, dent->d_name) == -1) {
3388: closedir(dir);
3389: goto bad;
3390: }
3391: if (stat(path, &sb) != 0 || !S_ISREG(sb.st_mode)) {
3392: efree(path);
3393: path = NULL;
3394: continue;
3395: }
3396: pl = malloc(sizeof(*pl));
3397: if (pl == NULL)
3398: goto bad;
3399: pl->path = path;
3400: pl->next = first;
3401: first = pl;
3402: count++;
3403: }
3404: closedir(dir);
3405:
3406: if (count == 0)
3407: goto done;
3408:
3409: /* Sort the list as an array. */
3410: sorted = malloc(sizeof(*sorted) * count);
3411: if (sorted == NULL)
3412: goto bad;
3413: pl = first;
3414: for (i = 0; i < count; i++) {
3415: sorted[i] = pl;
3416: pl = pl->next;
3417: }
3418: qsort(sorted, count, sizeof(*sorted), pl_compare);
3419:
3420: /* Apply sorting to the list. */
3421: first = sorted[0];
3422: sorted[count - 1]->next = NULL;
3423: for (i = 1; i < count; i++)
3424: sorted[i - 1]->next = sorted[i];
3425: efree(sorted);
3426:
3427: /* Pull out the first element for parsing, leave the rest for later. */
3428: if (count) {
3429: path = first->path;
3430: pl = first->next;
3431: efree(first);
3432: stack->more = pl;
3433: } else {
3434: path = NULL;
3435: }
3436: done:
3437: efree(dirpath);
3438: return path;
3439: bad:
3440: while (first != NULL) {
3441: pl = first;
3442: first = pl->next;
3443: free(pl->path);
3444: free(pl);
3445: }
3446: efree(sorted);
3447: efree(dirpath);
3448: efree(path);
3449: return NULL;
3450: }
3451:
3452: #define MAX_SUDOERS_DEPTH 128
3453: #define SUDOERS_STACK_INCREMENT 16
3454:
3455: static size_t istacksize, idepth;
3456: static struct include_stack *istack;
3457: static int keepopen;
3458:
3459: void
3460: init_lexer(void)
3461: {
3462: struct path_list *pl;
3463:
3464: while (idepth) {
3465: idepth--;
3466: while ((pl = istack[idepth].more) != NULL) {
3467: istack[idepth].more = pl->next;
3468: efree(pl->path);
3469: efree(pl);
3470: }
3471: efree(istack[idepth].path);
3472: if (idepth && !istack[idepth].keepopen)
3473: fclose(istack[idepth].bs->yy_input_file);
3474: yy_delete_buffer(istack[idepth].bs);
3475: }
3476: efree(istack);
3477: istack = NULL;
3478: istacksize = idepth = 0;
3479: sudolineno = 1;
3480: keepopen = FALSE;
3481: sawspace = FALSE;
3482: continued = FALSE;
3483: prev_state = INITIAL;
3484: }
3485:
3486: static int
3487: _push_include(char *path, int isdir)
3488: {
3489: struct path_list *pl;
3490: FILE *fp;
3491:
3492: /* push current state onto stack */
3493: if (idepth >= istacksize) {
3494: if (idepth > MAX_SUDOERS_DEPTH) {
3495: yyerror(_("too many levels of includes"));
3496: return FALSE;
3497: }
3498: istacksize += SUDOERS_STACK_INCREMENT;
3499: istack = (struct include_stack *) realloc(istack,
3500: sizeof(*istack) * istacksize);
3501: if (istack == NULL) {
3502: yyerror(_("unable to allocate memory"));
3503: return FALSE;
3504: }
3505: }
3506: if (isdir) {
3507: if (!(path = switch_dir(&istack[idepth], path))) {
3508: /* switch_dir() called yyerror() for us */
3509: return FALSE;
3510: }
3511: while ((fp = open_sudoers(path, FALSE, &keepopen)) == NULL) {
3512: /* Unable to open path in includedir, go to next one, if any. */
3513: efree(path);
3514: if ((pl = istack[idepth].more) == NULL)
3515: return FALSE;
3516: path = pl->path;
3517: istack[idepth].more = pl->next;
3518: efree(pl);
3519: }
3520: } else {
3521: if ((fp = open_sudoers(path, TRUE, &keepopen)) == NULL) {
3522: char *errbuf;
3523: if (asprintf(&errbuf, _("%s: %s"), path, strerror(errno)) != -1) {
3524: yyerror(errbuf);
3525: free(errbuf);
3526: } else {
3527: yyerror(_("unable to allocate memory"));
3528: }
3529: return FALSE;
3530: }
3531: istack[idepth].more = NULL;
3532: }
3533: /* Push the old (current) file and open the new one. */
3534: istack[idepth].path = sudoers; /* push old path */
3535: istack[idepth].bs = YY_CURRENT_BUFFER;
3536: istack[idepth].lineno = sudolineno;
3537: istack[idepth].keepopen = keepopen;
3538: idepth++;
3539: sudolineno = 1;
3540: sudoers = path;
3541: yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
3542:
3543: return TRUE;
3544: }
3545:
3546: static int
3547: pop_include(void)
3548: {
3549: struct path_list *pl;
3550: FILE *fp;
3551:
3552: if (idepth == 0)
3553: return FALSE;
3554:
3555: if (!keepopen)
3556: fclose(YY_CURRENT_BUFFER->yy_input_file);
3557: yy_delete_buffer(YY_CURRENT_BUFFER);
3558: /* If we are in an include dir, move to the next file. */
3559: while ((pl = istack[idepth - 1].more) != NULL) {
3560: fp = open_sudoers(pl->path, FALSE, &keepopen);
3561: if (fp != NULL) {
3562: istack[idepth - 1].more = pl->next;
3563: efree(sudoers);
3564: sudoers = pl->path;
3565: sudolineno = 1;
3566: yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
3567: efree(pl);
3568: break;
3569: }
3570: /* Unable to open path in include dir, go to next one. */
3571: istack[idepth - 1].more = pl->next;
3572: efree(pl->path);
3573: efree(pl);
3574: }
3575: /* If no path list, just pop the last dir on the stack. */
3576: if (pl == NULL) {
3577: idepth--;
3578: yy_switch_to_buffer(istack[idepth].bs);
3579: efree(sudoers);
3580: sudoers = istack[idepth].path;
3581: sudolineno = istack[idepth].lineno;
3582: keepopen = istack[idepth].keepopen;
3583: }
3584: return TRUE;
3585: }
3586:
3587: static char *
3588: parse_include(char *base)
3589: {
3590: char *cp, *ep, *path;
3591: int len = 0, subst = 0;
3592: size_t shost_len = 0;
3593:
3594: /* Pull out path from #include line. */
3595: cp = base + sizeof("#include");
3596: if (*cp == 'i')
3597: cp += 3; /* includedir */
3598: while (isblank((unsigned char) *cp))
3599: cp++;
3600: ep = cp;
3601: while (*ep != '\0' && !isspace((unsigned char) *ep)) {
3602: if (ep[0] == '%' && ep[1] == 'h') {
3603: shost_len = strlen(user_shost);
3604: len += shost_len - 2;
3605: subst = 1;
3606: }
3607: ep++;
3608: }
3609:
3610: /* Make a copy of path and return it. */
3611: len += (int)(ep - cp);
3612: if ((path = malloc(len + 1)) == NULL) {
3613: yyerror(_("unable to allocate memory"));
3614: return NULL;
3615: }
3616: if (subst) {
3617: /* substitute for %h */
3618: char *pp = path;
3619: while (cp < ep) {
3620: if (cp[0] == '%' && cp[1] == 'h') {
3621: memcpy(pp, user_shost, shost_len);
3622: pp += shost_len;
3623: cp += 2;
3624: continue;
3625: }
3626: *pp++ = *cp++;
3627: }
3628: *pp = '\0';
3629: } else {
3630: memcpy(path, cp, len);
3631: path[len] = '\0';
3632: }
3633:
3634: /* Push any excess characters (e.g. comment, newline) back to the lexer */
3635: if (*ep != '\0')
3636: yyless((int)(ep - base));
3637:
3638: return path;
3639: }
3640:
3641: #ifdef TRACELEXER
3642: static int
3643: sudoers_trace_print(const char *msg)
3644: {
3645: return fputs(msg, stderr);
3646: }
3647: #endif /* TRACELEXER */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>