|
version 1.1.1.4, 2013/07/22 10:46:12
|
version 1.1.1.5, 2014/06/15 16:12:54
|
|
Line 16
|
Line 16
|
| #define yyrestart sudoersrestart |
#define yyrestart sudoersrestart |
| #define yytext sudoerstext |
#define yytext sudoerstext |
| |
|
| /* $OpenBSD: flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $ */ | /* $OpenBSD: flex.skl,v 1.12 2013/11/04 17:03:32 millert Exp $ */ |
| |
|
| /* A lexical scanner generated by flex */ |
/* A lexical scanner generated by flex */ |
| |
|
|
Line 148 extern FILE *yyin, *yyout;
|
Line 148 extern FILE *yyin, *yyout;
|
| /* Undo effects of setting up yytext. */ \ |
/* Undo effects of setting up yytext. */ \ |
| *yy_cp = yy_hold_char; \ |
*yy_cp = yy_hold_char; \ |
| YY_RESTORE_YY_MORE_OFFSET \ |
YY_RESTORE_YY_MORE_OFFSET \ |
| yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ | yy_cp = yy_bp + n - YY_MORE_ADJ; \ |
| YY_DO_BEFORE_ACTION; /* set up yytext again */ \ |
YY_DO_BEFORE_ACTION; /* set up yytext again */ \ |
| } \ |
} \ |
| while ( 0 ) |
while ( 0 ) |
|
Line 312 static yyconst short int yy_accept[814] =
|
Line 312 static yyconst short int yy_accept[814] =
|
| { 0, |
{ 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 68, 55, 63, 62, 61, 54, |
0, 0, 0, 0, 68, 55, 63, 62, 61, 54, |
| 66, 34, 56, 57, 34, 58, 55, 55, 55, 55, | 65, 34, 56, 57, 34, 58, 55, 55, 55, 55, |
| 60, 59, 66, 46, 46, 46, 46, 46, 46, 46, |
60, 59, 66, 46, 46, 46, 46, 46, 46, 46, |
| 46, 46, 46, 66, 55, 55, 63, 66, 46, 46, | 46, 46, 46, 66, 55, 55, 63, 65, 46, 46, |
| 46, 46, 46, 2, 66, 1, 55, 46, 46, 55, |
46, 46, 46, 2, 66, 1, 55, 46, 46, 55, |
| 17, 16, 17, 16, 16, 66, 66, 66, 3, 9, | 17, 16, 17, 16, 16, 66, 65, 66, 3, 9, |
| 8, 9, 4, 9, 5, 66, 13, 13, 13, 11, |
8, 9, 4, 9, 5, 66, 13, 13, 13, 11, |
| 12, 66, 19, 19, 18, 18, 18, 19, 18, 18, |
12, 66, 19, 19, 18, 18, 18, 19, 18, 18, |
| 18, 19, 19, 19, 19, 19, 18, 19, 19, 55, |
18, 19, 19, 19, 19, 19, 18, 19, 19, 55, |
| |
|
| 0, 63, 61, 0, 65, 0, 55, 36, 0, 34, | 0, 63, 61, 65, 65, 0, 55, 36, 0, 34, |
| 0, 35, 0, 53, 53, 0, 55, 55, 0, 55, |
0, 35, 0, 53, 53, 0, 55, 55, 0, 55, |
| 55, 55, 55, 0, 39, 46, 46, 46, 46, 46, |
55, 55, 55, 0, 39, 46, 46, 46, 46, 46, |
| 46, 46, 46, 46, 46, 46, 46, 55, 64, 55, |
46, 46, 46, 46, 46, 46, 46, 55, 64, 55, |
| 55, 63, 0, 0, 0, 0, 0, 0, 55, 55, | 55, 63, 0, 0, 0, 0, 0, 65, 55, 55, |
| 55, 55, 55, 2, 1, 0, 1, 47, 47, 0, |
55, 55, 55, 2, 1, 0, 1, 47, 47, 0, |
| 55, 17, 17, 15, 14, 15, 0, 0, 3, 9, |
55, 17, 17, 15, 14, 15, 0, 0, 3, 9, |
| 0, 6, 7, 9, 9, 13, 0, 13, 13, 0, |
0, 6, 7, 9, 9, 13, 0, 13, 13, 0, |
| 10, 36, 0, 0, 35, 19, 19, 0, 19, 0, |
10, 36, 0, 0, 35, 19, 19, 0, 19, 0, |
| 0, 18, 18, 18, 18, 18, 18, 19, 19, 46, |
0, 18, 18, 18, 18, 18, 18, 19, 19, 46, |
| |
|
| 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, | 19, 19, 19, 19, 19, 19, 19, 65, 65, 0, |
| 36, 55, 55, 55, 55, 55, 0, 0, 39, 39, |
36, 55, 55, 55, 55, 55, 0, 0, 39, 39, |
| 46, 41, 46, 46, 46, 46, 46, 46, 46, 46, |
46, 41, 46, 46, 46, 46, 46, 46, 46, 46, |
| 46, 46, 46, 46, 55, 55, 0, 0, 0, 0, |
46, 46, 46, 46, 55, 55, 0, 0, 0, 0, |
| 0, 0, 55, 55, 55, 55, 55, 0, 55, 10, | 0, 65, 55, 55, 55, 55, 55, 0, 55, 10, |
| 0, 0, 0, 18, 18, 18, 19, 19, 19, 19, |
0, 0, 0, 18, 18, 18, 19, 19, 19, 19, |
| 19, 19, 19, 19, 19, 19, 19, 0, 55, 55, | 19, 19, 19, 19, 19, 19, 19, 65, 55, 55, |
| 55, 55, 55, 55, 0, 40, 40, 40, 0, 0, |
55, 55, 55, 55, 0, 40, 40, 40, 0, 0, |
| 39, 39, 39, 39, 39, 39, 39, 46, 46, 46, |
39, 39, 39, 39, 39, 39, 39, 46, 46, 46, |
| 46, 46, 46, 46, 46, 46, 46, 42, 46, 43, |
46, 46, 46, 46, 46, 46, 46, 42, 46, 43, |
| |
|
| 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, | 55, 55, 55, 55, 0, 0, 0, 0, 0, 65, |
| 55, 55, 55, 55, 0, 0, 0, 0, 0, 18, |
55, 55, 55, 55, 0, 0, 0, 0, 0, 18, |
| 18, 19, 46, 19, 19, 19, 19, 19, 19, 19, |
18, 19, 46, 19, 19, 19, 19, 19, 19, 19, |
| 19, 19, 19, 55, 55, 55, 0, 0, 40, 40, |
19, 19, 19, 55, 55, 55, 0, 0, 40, 40, |
| 40, 0, 39, 39, 0, 39, 39, 39, 39, 39, |
40, 0, 39, 39, 0, 39, 39, 39, 39, 39, |
| 39, 39, 39, 39, 39, 39, 0, 27, 46, 46, |
39, 39, 39, 39, 39, 39, 0, 27, 46, 46, |
| 46, 46, 46, 46, 46, 46, 44, 46, 55, 55, |
46, 46, 46, 46, 46, 46, 44, 46, 55, 55, |
| 55, 55, 55, 0, 0, 0, 0, 55, 55, 55, | 55, 55, 55, 0, 0, 0, 65, 55, 55, 55, |
| 0, 0, 0, 18, 18, 46, 46, 19, 19, 19, |
0, 0, 0, 18, 18, 46, 46, 19, 19, 19, |
| 19, 19, 19, 19, 19, 19, 19, 19, 55, 55, |
19, 19, 19, 19, 19, 19, 19, 19, 55, 55, |
| |
|
|
Line 358 static yyconst short int yy_accept[814] =
|
Line 358 static yyconst short int yy_accept[814] =
|
| 0, 0, 39, 39, 39, 39, 39, 39, 39, 39, |
0, 0, 39, 39, 39, 39, 39, 39, 39, 39, |
| 39, 39, 39, 39, 39, 46, 46, 46, 46, 46, |
39, 39, 39, 39, 39, 46, 46, 46, 46, 46, |
| 46, 46, 46, 46, 48, 49, 50, 51, 55, 0, |
46, 46, 46, 46, 48, 49, 50, 51, 55, 0, |
| 0, 0, 55, 55, 55, 0, 0, 0, 0, 0, | 0, 65, 55, 55, 55, 0, 0, 0, 0, 0, |
| 46, 46, 19, 46, 19, 19, 19, 19, 19, 19, |
46, 46, 19, 46, 19, 19, 19, 19, 19, 19, |
| 19, 19, 19, 37, 37, 37, 0, 0, 39, 39, |
19, 19, 19, 37, 37, 37, 0, 0, 39, 39, |
| 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, |
39, 39, 39, 39, 39, 0, 0, 0, 0, 0, |
|
Line 366 static yyconst short int yy_accept[814] =
|
Line 366 static yyconst short int yy_accept[814] =
|
| 39, 39, 39, 39, 46, 46, 46, 0, 26, 46, |
39, 39, 39, 39, 46, 46, 46, 0, 26, 46, |
| |
|
| 46, 46, 46, 0, 25, 0, 28, 55, 0, 0, |
46, 46, 46, 0, 25, 0, 28, 55, 0, 0, |
| 0, 55, 55, 55, 37, 37, 37, 46, 46, 46, | 65, 55, 55, 55, 37, 37, 37, 46, 46, 46, |
| 46, 19, 19, 19, 55, 37, 37, 37, 37, 0, |
46, 19, 19, 19, 55, 37, 37, 37, 37, 0, |
| 39, 0, 39, 39, 39, 39, 39, 39, 39, 39, |
39, 0, 39, 39, 39, 39, 39, 39, 39, 39, |
| 39, 39, 39, 0, 0, 0, 39, 39, 39, 39, |
39, 39, 39, 0, 0, 0, 39, 39, 39, 39, |
| 39, 39, 39, 39, 39, 39, 39, 39, 39, 46, |
39, 39, 39, 39, 39, 39, 39, 39, 39, 46, |
| 46, 46, 46, 46, 46, 46, 52, 0, 0, 0, | 46, 46, 46, 46, 46, 46, 52, 0, 0, 65, |
| 55, 22, 47, 0, 37, 37, 37, 37, 46, 46, |
55, 22, 47, 0, 37, 37, 37, 37, 46, 46, |
| 46, 46, 19, 19, 19, 38, 38, 38, 38, 39, |
46, 46, 19, 19, 19, 38, 38, 38, 38, 39, |
| 0, 0, 0, 39, 39, 39, 39, 39, 39, 39, |
0, 0, 0, 39, 39, 39, 39, 39, 39, 39, |
|
Line 379 static yyconst short int yy_accept[814] =
|
Line 379 static yyconst short int yy_accept[814] =
|
| 39, 39, 39, 39, 39, 39, 0, 0, 0, 0, |
39, 39, 39, 39, 39, 39, 0, 0, 0, 0, |
| 0, 39, 39, 39, 39, 39, 39, 39, 39, 46, |
0, 39, 39, 39, 39, 39, 39, 39, 39, 46, |
| 46, 46, 46, 46, 0, 24, 0, 29, 0, 22, |
46, 46, 46, 46, 0, 24, 0, 29, 0, 22, |
| 0, 0, 55, 0, 55, 38, 38, 38, 38, 46, | 65, 65, 55, 0, 55, 38, 38, 38, 38, 46, |
| 46, 46, 46, 55, 55, 38, 38, 38, 38, 0, |
46, 46, 46, 55, 55, 38, 38, 38, 38, 0, |
| 0, 0, 0, 0, 39, 39, 39, 39, 39, 39, |
0, 0, 0, 0, 39, 39, 39, 39, 39, 39, |
| 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, |
39, 39, 39, 39, 39, 39, 39, 39, 39, 39, |
| 39, 39, 39, 39, 45, 0, 32, 46, 46, 46, |
39, 39, 39, 39, 45, 0, 32, 46, 46, 46, |
| 0, 0, 0, 20, 0, 23, 22, 0, 0, 0, | 0, 65, 65, 20, 65, 23, 22, 0, 0, 0, |
| 0, 0, 22, 0, 0, 0, 38, 38, 38, 38, |
0, 0, 22, 0, 0, 0, 38, 38, 38, 38, |
| |
|
| 46, 46, 46, 55, 55, 55, 0, 0, 0, 39, |
46, 46, 46, 55, 55, 55, 0, 0, 0, 39, |
| 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, |
39, 39, 39, 39, 39, 39, 39, 39, 39, 39, |
| 39, 39, 39, 39, 39, 39, 39, 0, 30, 46, |
39, 39, 39, 39, 39, 39, 39, 0, 30, 46, |
| 46, 23, 0, 0, 22, 0, 0, 0, 46, 46, | 46, 23, 65, 0, 22, 0, 0, 0, 46, 46, |
| 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, |
55, 55, 55, 55, 55, 0, 0, 0, 0, 0, |
| 39, 39, 39, 39, 39, 39, 39, 39, 0, 33, |
39, 39, 39, 39, 39, 39, 39, 39, 0, 33, |
| 46, 0, 0, 0, 0, 0, 0, 46, 55, 55, | 46, 65, 0, 0, 0, 0, 0, 46, 55, 55, |
| 55, 39, 39, 39, 39, 39, 39, 0, 31, 0, | 55, 39, 39, 39, 39, 39, 39, 0, 31, 65, |
| 0, 21, 0, 0, 0, 55, 55, 55, 55, 55, | 65, 21, 0, 0, 0, 55, 55, 55, 55, 55, |
| 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, |
39, 39, 39, 39, 39, 0, 0, 0, 0, 0, |
| |
|
| 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
|
Line 2007 char *yytext;
|
Line 2007 char *yytext;
|
| #include "sha2.h" |
#include "sha2.h" |
| #include "secure_path.h" |
#include "secure_path.h" |
| |
|
| extern YYSTYPE sudoerslval; | int sudolineno; /* current sudoers line number. */ |
| extern bool parse_error; | int last_token; /* last token that was parsed. */ |
| extern bool sudoers_warnings; | char *sudoers; /* sudoers file being parsed. */ |
| int sudolineno; | |
| int last_token; | |
| char *sudoers; | |
| |
|
| /* Default sudoers path, mode and owner (may be set via sudo.conf) */ |
/* Default sudoers path, mode and owner (may be set via sudo.conf) */ |
| const char *sudoers_file = _PATH_SUDOERS; |
const char *sudoers_file = _PATH_SUDOERS; |
|
Line 2053 int (*trace_print)(const char *msg) = sudoers_trace_pr
|
Line 2050 int (*trace_print)(const char *msg) = sudoers_trace_pr
|
| |
|
| #define WANTDIGEST 6 |
#define WANTDIGEST 6 |
| |
|
| #line 2056 "lex.sudoers.c" | #line 2053 "lex.sudoers.c" |
| |
|
| /* Macros after this point can all be overridden by user definitions in |
/* Macros after this point can all be overridden by user definitions in |
| * section 1. |
* section 1. |
|
Line 2207 YY_DECL
|
Line 2204 YY_DECL
|
| register char *yy_cp, *yy_bp; |
register char *yy_cp, *yy_bp; |
| register int yy_act; |
register int yy_act; |
| |
|
| #line 140 "toke.l" | #line 137 "toke.l" |
| |
|
| #line 2212 "lex.sudoers.c" | #line 2209 "lex.sudoers.c" |
| |
|
| if ( yy_init ) |
if ( yy_init ) |
| { |
{ |
|
Line 2295 do_action: /* This label is used only to access EOF ac
|
Line 2292 do_action: /* This label is used only to access EOF ac
|
| |
|
| case 1: |
case 1: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 141 "toke.l" | #line 138 "toke.l" |
| { |
{ |
| LEXTRACE(", "); |
LEXTRACE(", "); |
| LEXRETURN(','); |
LEXRETURN(','); |
|
Line 2303 YY_RULE_SETUP
|
Line 2300 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 2: |
case 2: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 146 "toke.l" | #line 143 "toke.l" |
| BEGIN STARTDEFS; |
BEGIN STARTDEFS; |
| YY_BREAK |
YY_BREAK |
| case 3: |
case 3: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 148 "toke.l" | #line 145 "toke.l" |
| { |
{ |
| BEGIN INDEFS; |
BEGIN INDEFS; |
| LEXTRACE("DEFVAR "); |
LEXTRACE("DEFVAR "); |
|
Line 2320 YY_RULE_SETUP
|
Line 2317 YY_RULE_SETUP
|
| |
|
| case 4: |
case 4: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 157 "toke.l" | #line 154 "toke.l" |
| { |
{ |
| BEGIN STARTDEFS; |
BEGIN STARTDEFS; |
| LEXTRACE(", "); |
LEXTRACE(", "); |
|
Line 2329 YY_RULE_SETUP
|
Line 2326 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 5: |
case 5: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 163 "toke.l" | #line 160 "toke.l" |
| { |
{ |
| LEXTRACE("= "); |
LEXTRACE("= "); |
| LEXRETURN('='); |
LEXRETURN('='); |
|
Line 2337 YY_RULE_SETUP
|
Line 2334 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 6: |
case 6: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 168 "toke.l" | #line 165 "toke.l" |
| { |
{ |
| LEXTRACE("+= "); |
LEXTRACE("+= "); |
| LEXRETURN('+'); |
LEXRETURN('+'); |
|
Line 2345 YY_RULE_SETUP
|
Line 2342 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 7: |
case 7: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 173 "toke.l" | #line 170 "toke.l" |
| { |
{ |
| LEXTRACE("-= "); |
LEXTRACE("-= "); |
| LEXRETURN('-'); |
LEXRETURN('-'); |
|
Line 2353 YY_RULE_SETUP
|
Line 2350 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 8: |
case 8: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 178 "toke.l" | #line 175 "toke.l" |
| { |
{ |
| LEXTRACE("BEGINSTR "); |
LEXTRACE("BEGINSTR "); |
| sudoerslval.string = NULL; |
sudoerslval.string = NULL; |
|
Line 2363 YY_RULE_SETUP
|
Line 2360 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 9: |
case 9: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 185 "toke.l" | #line 182 "toke.l" |
| { |
{ |
| LEXTRACE("WORD(2) "); |
LEXTRACE("WORD(2) "); |
| if (!fill(sudoerstext, sudoersleng)) |
if (!fill(sudoerstext, sudoersleng)) |
|
Line 2375 YY_RULE_SETUP
|
Line 2372 YY_RULE_SETUP
|
| |
|
| case 10: |
case 10: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 194 "toke.l" | #line 191 "toke.l" |
| { |
{ |
| /* Line continuation char followed by newline. */ |
/* Line continuation char followed by newline. */ |
| sudolineno++; |
sudolineno++; |
|
Line 2384 YY_RULE_SETUP
|
Line 2381 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 11: |
case 11: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 200 "toke.l" | #line 197 "toke.l" |
| { |
{ |
| LEXTRACE("ENDSTR "); |
LEXTRACE("ENDSTR "); |
| BEGIN prev_state; |
BEGIN prev_state; |
|
Line 2419 YY_RULE_SETUP
|
Line 2416 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 12: |
case 12: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 232 "toke.l" | #line 229 "toke.l" |
| { |
{ |
| LEXTRACE("BACKSLASH "); |
LEXTRACE("BACKSLASH "); |
| if (!append(sudoerstext, sudoersleng)) |
if (!append(sudoerstext, sudoersleng)) |
|
Line 2428 YY_RULE_SETUP
|
Line 2425 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 13: |
case 13: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 238 "toke.l" | #line 235 "toke.l" |
| { |
{ |
| LEXTRACE("STRBODY "); |
LEXTRACE("STRBODY "); |
| if (!append(sudoerstext, sudoersleng)) |
if (!append(sudoerstext, sudoersleng)) |
|
Line 2439 YY_RULE_SETUP
|
Line 2436 YY_RULE_SETUP
|
| |
|
| case 14: |
case 14: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 246 "toke.l" | #line 243 "toke.l" |
| { |
{ |
| /* quoted fnmatch glob char, pass verbatim */ |
/* quoted fnmatch glob char, pass verbatim */ |
| LEXTRACE("QUOTEDCHAR "); |
LEXTRACE("QUOTEDCHAR "); |
|
Line 2450 YY_RULE_SETUP
|
Line 2447 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 15: |
case 15: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 254 "toke.l" | #line 251 "toke.l" |
| { |
{ |
| /* quoted sudoers special char, strip backslash */ |
/* quoted sudoers special char, strip backslash */ |
| LEXTRACE("QUOTEDCHAR "); |
LEXTRACE("QUOTEDCHAR "); |
|
Line 2461 YY_RULE_SETUP
|
Line 2458 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 16: |
case 16: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 262 "toke.l" | #line 259 "toke.l" |
| { |
{ |
| BEGIN INITIAL; |
BEGIN INITIAL; |
| yyless(0); |
yyless(0); |
|
Line 2470 YY_RULE_SETUP
|
Line 2467 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 17: |
case 17: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 268 "toke.l" | #line 265 "toke.l" |
| { |
{ |
| LEXTRACE("ARG "); |
LEXTRACE("ARG "); |
| if (!fill_args(sudoerstext, sudoersleng, sawspace)) |
if (!fill_args(sudoerstext, sudoersleng, sawspace)) |
|
Line 2481 YY_RULE_SETUP
|
Line 2478 YY_RULE_SETUP
|
| |
|
| case 18: |
case 18: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 276 "toke.l" | #line 273 "toke.l" |
| { |
{ |
| /* Only return DIGEST if the length is correct. */ |
/* Only return DIGEST if the length is correct. */ |
| if (sudoersleng == digest_len * 2) { |
if (sudoersleng == digest_len * 2) { |
|
Line 2497 YY_RULE_SETUP
|
Line 2494 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 19: |
case 19: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 289 "toke.l" | #line 286 "toke.l" |
| { |
{ |
| /* Only return DIGEST if the length is correct. */ |
/* Only return DIGEST if the length is correct. */ |
| size_t len; | int len; |
| if (sudoerstext[sudoersleng - 1] == '=') { |
if (sudoerstext[sudoersleng - 1] == '=') { |
| /* use padding */ |
/* use padding */ |
| len = 4 * ((digest_len + 2) / 3); |
len = 4 * ((digest_len + 2) / 3); |
|
Line 2521 YY_RULE_SETUP
|
Line 2518 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 20: |
case 20: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 310 "toke.l" | #line 307 "toke.l" |
| { |
{ |
| char *path; |
char *path; |
| |
|
|
Line 2542 YY_RULE_SETUP
|
Line 2539 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 21: |
case 21: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 328 "toke.l" | #line 325 "toke.l" |
| { |
{ |
| char *path; |
char *path; |
| |
|
|
Line 2566 YY_RULE_SETUP
|
Line 2563 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 22: |
case 22: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 349 "toke.l" | #line 346 "toke.l" |
| { |
{ |
| char deftype; |
char deftype; |
| int n; |
int n; |
|
Line 2609 YY_RULE_SETUP
|
Line 2606 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 23: |
case 23: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 389 "toke.l" | #line 386 "toke.l" |
| { |
{ |
| int n; |
int n; |
| |
|
|
Line 2638 YY_RULE_SETUP
|
Line 2635 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 24: |
case 24: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 415 "toke.l" | #line 412 "toke.l" |
| { |
{ |
| /* cmnd does not require passwd for this user */ |
/* cmnd does not require passwd for this user */ |
| LEXTRACE("NOPASSWD "); |
LEXTRACE("NOPASSWD "); |
|
Line 2647 YY_RULE_SETUP
|
Line 2644 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 25: |
case 25: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 421 "toke.l" | #line 418 "toke.l" |
| { |
{ |
| /* cmnd requires passwd for this user */ |
/* cmnd requires passwd for this user */ |
| LEXTRACE("PASSWD "); |
LEXTRACE("PASSWD "); |
|
Line 2656 YY_RULE_SETUP
|
Line 2653 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 26: |
case 26: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 427 "toke.l" | #line 424 "toke.l" |
| { |
{ |
| LEXTRACE("NOEXEC "); |
LEXTRACE("NOEXEC "); |
| LEXRETURN(NOEXEC); |
LEXRETURN(NOEXEC); |
|
Line 2664 YY_RULE_SETUP
|
Line 2661 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 27: |
case 27: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 432 "toke.l" | #line 429 "toke.l" |
| { |
{ |
| LEXTRACE("EXEC "); |
LEXTRACE("EXEC "); |
| LEXRETURN(EXEC); |
LEXRETURN(EXEC); |
|
Line 2672 YY_RULE_SETUP
|
Line 2669 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 28: |
case 28: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 437 "toke.l" | #line 434 "toke.l" |
| { |
{ |
| LEXTRACE("SETENV "); |
LEXTRACE("SETENV "); |
| LEXRETURN(SETENV); |
LEXRETURN(SETENV); |
|
Line 2680 YY_RULE_SETUP
|
Line 2677 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 29: |
case 29: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 442 "toke.l" | #line 439 "toke.l" |
| { |
{ |
| LEXTRACE("NOSETENV "); |
LEXTRACE("NOSETENV "); |
| LEXRETURN(NOSETENV); |
LEXRETURN(NOSETENV); |
|
Line 2688 YY_RULE_SETUP
|
Line 2685 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 30: |
case 30: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 447 "toke.l" | #line 444 "toke.l" |
| { |
{ |
| LEXTRACE("LOG_OUTPUT "); |
LEXTRACE("LOG_OUTPUT "); |
| LEXRETURN(LOG_OUTPUT); |
LEXRETURN(LOG_OUTPUT); |
|
Line 2696 YY_RULE_SETUP
|
Line 2693 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 31: |
case 31: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 452 "toke.l" | #line 449 "toke.l" |
| { |
{ |
| LEXTRACE("NOLOG_OUTPUT "); |
LEXTRACE("NOLOG_OUTPUT "); |
| LEXRETURN(NOLOG_OUTPUT); |
LEXRETURN(NOLOG_OUTPUT); |
|
Line 2704 YY_RULE_SETUP
|
Line 2701 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 32: |
case 32: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 457 "toke.l" | #line 454 "toke.l" |
| { |
{ |
| LEXTRACE("LOG_INPUT "); |
LEXTRACE("LOG_INPUT "); |
| LEXRETURN(LOG_INPUT); |
LEXRETURN(LOG_INPUT); |
|
Line 2712 YY_RULE_SETUP
|
Line 2709 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 33: |
case 33: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 462 "toke.l" | #line 459 "toke.l" |
| { |
{ |
| LEXTRACE("NOLOG_INPUT "); |
LEXTRACE("NOLOG_INPUT "); |
| LEXRETURN(NOLOG_INPUT); |
LEXRETURN(NOLOG_INPUT); |
|
Line 2720 YY_RULE_SETUP
|
Line 2717 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 34: |
case 34: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 467 "toke.l" | #line 464 "toke.l" |
| { |
{ |
| /* empty group or netgroup */ |
/* empty group or netgroup */ |
| LEXTRACE("ERROR "); |
LEXTRACE("ERROR "); |
|
Line 2729 YY_RULE_SETUP
|
Line 2726 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 35: |
case 35: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 473 "toke.l" | #line 470 "toke.l" |
| { |
{ |
| /* netgroup */ |
/* netgroup */ |
| if (!fill(sudoerstext, sudoersleng)) |
if (!fill(sudoerstext, sudoersleng)) |
|
Line 2740 YY_RULE_SETUP
|
Line 2737 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 36: |
case 36: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 481 "toke.l" | #line 478 "toke.l" |
| { |
{ |
| /* group */ |
/* group */ |
| if (!fill(sudoerstext, sudoersleng)) |
if (!fill(sudoerstext, sudoersleng)) |
|
Line 2751 YY_RULE_SETUP
|
Line 2748 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 37: |
case 37: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 489 "toke.l" | #line 486 "toke.l" |
| { |
{ |
| if (!fill(sudoerstext, sudoersleng)) |
if (!fill(sudoerstext, sudoersleng)) |
| yyterminate(); |
yyterminate(); |
|
Line 2761 YY_RULE_SETUP
|
Line 2758 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 38: |
case 38: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 496 "toke.l" | #line 493 "toke.l" |
| { |
{ |
| if (!fill(sudoerstext, sudoersleng)) |
if (!fill(sudoerstext, sudoersleng)) |
| yyterminate(); |
yyterminate(); |
|
Line 2771 YY_RULE_SETUP
|
Line 2768 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 39: |
case 39: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 503 "toke.l" | #line 500 "toke.l" |
| { |
{ |
| if (!ipv6_valid(sudoerstext)) { |
if (!ipv6_valid(sudoerstext)) { |
| LEXTRACE("ERROR "); |
LEXTRACE("ERROR "); |
|
Line 2785 YY_RULE_SETUP
|
Line 2782 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 40: |
case 40: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 514 "toke.l" | #line 511 "toke.l" |
| { |
{ |
| if (!ipv6_valid(sudoerstext)) { |
if (!ipv6_valid(sudoerstext)) { |
| LEXTRACE("ERROR "); |
LEXTRACE("ERROR "); |
|
Line 2799 YY_RULE_SETUP
|
Line 2796 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 41: |
case 41: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 525 "toke.l" | #line 522 "toke.l" |
| { |
{ |
| LEXTRACE("ALL "); |
LEXTRACE("ALL "); |
| LEXRETURN(ALL); |
LEXRETURN(ALL); |
|
Line 2808 YY_RULE_SETUP
|
Line 2805 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 42: |
case 42: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 531 "toke.l" | #line 528 "toke.l" |
| { |
{ |
| #ifdef HAVE_SELINUX |
#ifdef HAVE_SELINUX |
| LEXTRACE("ROLE "); |
LEXTRACE("ROLE "); |
|
Line 2820 YY_RULE_SETUP
|
Line 2817 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 43: |
case 43: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 540 "toke.l" | #line 537 "toke.l" |
| { |
{ |
| #ifdef HAVE_SELINUX |
#ifdef HAVE_SELINUX |
| LEXTRACE("TYPE "); |
LEXTRACE("TYPE "); |
|
Line 2832 YY_RULE_SETUP
|
Line 2829 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 44: |
case 44: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 548 "toke.l" | #line 545 "toke.l" |
| { |
{ |
| #ifdef HAVE_PRIV_SET |
#ifdef HAVE_PRIV_SET |
| LEXTRACE("PRIVS "); |
LEXTRACE("PRIVS "); |
|
Line 2844 YY_RULE_SETUP
|
Line 2841 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 45: |
case 45: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 557 "toke.l" | #line 554 "toke.l" |
| { |
{ |
| #ifdef HAVE_PRIV_SET |
#ifdef HAVE_PRIV_SET |
| LEXTRACE("LIMITPRIVS "); |
LEXTRACE("LIMITPRIVS "); |
|
Line 2856 YY_RULE_SETUP
|
Line 2853 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 46: |
case 46: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 566 "toke.l" | #line 563 "toke.l" |
| { |
{ |
| got_alias: |
got_alias: |
| if (!fill(sudoerstext, sudoersleng)) |
if (!fill(sudoerstext, sudoersleng)) |
|
Line 2867 YY_RULE_SETUP
|
Line 2864 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 47: |
case 47: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 574 "toke.l" | #line 571 "toke.l" |
| { |
{ |
| /* XXX - no way to specify digest for command */ |
/* XXX - no way to specify digest for command */ |
| /* no command args allowed for Defaults!/path */ |
/* no command args allowed for Defaults!/path */ |
|
Line 2879 YY_RULE_SETUP
|
Line 2876 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 48: |
case 48: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 583 "toke.l" | #line 580 "toke.l" |
| { |
{ |
| digest_len = SHA224_DIGEST_LENGTH; |
digest_len = SHA224_DIGEST_LENGTH; |
| BEGIN WANTDIGEST; |
BEGIN WANTDIGEST; |
|
Line 2889 YY_RULE_SETUP
|
Line 2886 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 49: |
case 49: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 590 "toke.l" | #line 587 "toke.l" |
| { |
{ |
| digest_len = SHA256_DIGEST_LENGTH; |
digest_len = SHA256_DIGEST_LENGTH; |
| BEGIN WANTDIGEST; |
BEGIN WANTDIGEST; |
|
Line 2899 YY_RULE_SETUP
|
Line 2896 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 50: |
case 50: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 597 "toke.l" | #line 594 "toke.l" |
| { |
{ |
| digest_len = SHA384_DIGEST_LENGTH; |
digest_len = SHA384_DIGEST_LENGTH; |
| BEGIN WANTDIGEST; |
BEGIN WANTDIGEST; |
|
Line 2909 YY_RULE_SETUP
|
Line 2906 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 51: |
case 51: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 604 "toke.l" | #line 601 "toke.l" |
| { |
{ |
| digest_len = SHA512_DIGEST_LENGTH; |
digest_len = SHA512_DIGEST_LENGTH; |
| BEGIN WANTDIGEST; |
BEGIN WANTDIGEST; |
|
Line 2919 YY_RULE_SETUP
|
Line 2916 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 52: |
case 52: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 611 "toke.l" | #line 608 "toke.l" |
| { |
{ |
| BEGIN GOTCMND; |
BEGIN GOTCMND; |
| LEXTRACE("COMMAND "); |
LEXTRACE("COMMAND "); |
|
Line 2929 YY_RULE_SETUP
|
Line 2926 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 53: |
case 53: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 618 "toke.l" | #line 615 "toke.l" |
| { |
{ |
| /* directories can't have args... */ |
/* directories can't have args... */ |
| if (sudoerstext[sudoersleng - 1] == '/') { |
if (sudoerstext[sudoersleng - 1] == '/') { |
|
Line 2947 YY_RULE_SETUP
|
Line 2944 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 54: |
case 54: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 633 "toke.l" | #line 630 "toke.l" |
| { |
{ |
| LEXTRACE("BEGINSTR "); |
LEXTRACE("BEGINSTR "); |
| sudoerslval.string = NULL; |
sudoerslval.string = NULL; |
|
Line 2957 YY_RULE_SETUP
|
Line 2954 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 55: |
case 55: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 640 "toke.l" | #line 637 "toke.l" |
| { |
{ |
| /* a word */ |
/* a word */ |
| if (!fill(sudoerstext, sudoersleng)) |
if (!fill(sudoerstext, sudoersleng)) |
|
Line 2968 YY_RULE_SETUP
|
Line 2965 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 56: |
case 56: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 648 "toke.l" | #line 645 "toke.l" |
| { |
{ |
| LEXTRACE("( "); |
LEXTRACE("( "); |
| LEXRETURN('('); |
LEXRETURN('('); |
|
Line 2976 YY_RULE_SETUP
|
Line 2973 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 57: |
case 57: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 653 "toke.l" | #line 650 "toke.l" |
| { |
{ |
| LEXTRACE(") "); |
LEXTRACE(") "); |
| LEXRETURN(')'); |
LEXRETURN(')'); |
|
Line 2984 YY_RULE_SETUP
|
Line 2981 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 58: |
case 58: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 658 "toke.l" | #line 655 "toke.l" |
| { |
{ |
| LEXTRACE(", "); |
LEXTRACE(", "); |
| LEXRETURN(','); |
LEXRETURN(','); |
|
Line 2992 YY_RULE_SETUP
|
Line 2989 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 59: |
case 59: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 663 "toke.l" | #line 660 "toke.l" |
| { |
{ |
| LEXTRACE("= "); |
LEXTRACE("= "); |
| LEXRETURN('='); |
LEXRETURN('='); |
|
Line 3000 YY_RULE_SETUP
|
Line 2997 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 60: |
case 60: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 668 "toke.l" | #line 665 "toke.l" |
| { |
{ |
| LEXTRACE(": "); |
LEXTRACE(": "); |
| LEXRETURN(':'); |
LEXRETURN(':'); |
|
Line 3008 YY_RULE_SETUP
|
Line 3005 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 61: |
case 61: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 673 "toke.l" | #line 670 "toke.l" |
| { |
{ |
| if (sudoersleng & 1) { |
if (sudoersleng & 1) { |
| LEXTRACE("!"); |
LEXTRACE("!"); |
|
Line 3018 YY_RULE_SETUP
|
Line 3015 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 62: |
case 62: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 680 "toke.l" | #line 677 "toke.l" |
| { |
{ |
| if (YY_START == INSTR) { |
if (YY_START == INSTR) { |
| LEXTRACE("ERROR "); |
LEXTRACE("ERROR "); |
|
Line 3033 YY_RULE_SETUP
|
Line 3030 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 63: |
case 63: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 692 "toke.l" | #line 689 "toke.l" |
| { /* throw away space/tabs */ |
{ /* throw away space/tabs */ |
| sawspace = true; /* but remember for fill_args */ |
sawspace = true; /* but remember for fill_args */ |
| } |
} |
| YY_BREAK |
YY_BREAK |
| case 64: |
case 64: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 696 "toke.l" | #line 693 "toke.l" |
| { |
{ |
| sawspace = true; /* remember for fill_args */ |
sawspace = true; /* remember for fill_args */ |
| sudolineno++; |
sudolineno++; |
|
Line 3049 YY_RULE_SETUP
|
Line 3046 YY_RULE_SETUP
|
| YY_BREAK |
YY_BREAK |
| case 65: |
case 65: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 702 "toke.l" | #line 699 "toke.l" |
| { |
{ |
| BEGIN INITIAL; | if (sudoerstext[sudoersleng - 1] == '\n') { |
| sudolineno++; | /* comment ending in a newline */ |
| continued = false; | BEGIN INITIAL; |
| | sudolineno++; |
| | continued = false; |
| | } else if (!feof(yyin)) { |
| | LEXTRACE("ERROR "); |
| | LEXRETURN(ERROR); |
| | } |
| LEXTRACE("#\n"); |
LEXTRACE("#\n"); |
| LEXRETURN(COMMENT); |
LEXRETURN(COMMENT); |
| } /* comment, not uid/gid */ |
} /* comment, not uid/gid */ |
| YY_BREAK |
YY_BREAK |
| case 66: |
case 66: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 710 "toke.l" | #line 713 "toke.l" |
| { |
{ |
| LEXTRACE("ERROR "); |
LEXTRACE("ERROR "); |
| LEXRETURN(ERROR); |
LEXRETURN(ERROR); |
|
Line 3073 case YY_STATE_EOF(STARTDEFS):
|
Line 3076 case YY_STATE_EOF(STARTDEFS):
|
| case YY_STATE_EOF(INDEFS): |
case YY_STATE_EOF(INDEFS): |
| case YY_STATE_EOF(INSTR): |
case YY_STATE_EOF(INSTR): |
| case YY_STATE_EOF(WANTDIGEST): |
case YY_STATE_EOF(WANTDIGEST): |
| #line 715 "toke.l" | #line 718 "toke.l" |
| { |
{ |
| if (YY_START != INITIAL) { |
if (YY_START != INITIAL) { |
| BEGIN INITIAL; |
BEGIN INITIAL; |
|
Line 3086 case YY_STATE_EOF(WANTDIGEST):
|
Line 3089 case YY_STATE_EOF(WANTDIGEST):
|
| YY_BREAK |
YY_BREAK |
| case 67: |
case 67: |
| YY_RULE_SETUP |
YY_RULE_SETUP |
| #line 725 "toke.l" | #line 728 "toke.l" |
| ECHO; |
ECHO; |
| YY_BREAK |
YY_BREAK |
| #line 3092 "lex.sudoers.c" | #line 3095 "lex.sudoers.c" |
| |
|
| case YY_END_OF_BUFFER: |
case YY_END_OF_BUFFER: |
| { |
{ |
|
Line 3229 ECHO;
|
Line 3232 ECHO;
|
| * EOB_ACT_END_OF_FILE - end of file |
* EOB_ACT_END_OF_FILE - end of file |
| */ |
*/ |
| |
|
| static int yy_get_next_buffer() | static int yy_get_next_buffer YY_PROTO(( void )) |
| { |
{ |
| register char *dest = yy_current_buffer->yy_ch_buf; |
register char *dest = yy_current_buffer->yy_ch_buf; |
| register char *source = yytext_ptr; |
register char *source = yytext_ptr; |
|
Line 3361 static int yy_get_next_buffer()
|
Line 3364 static int yy_get_next_buffer()
|
| |
|
| /* yy_get_previous_state - get the state just before the EOB char was reached */ |
/* yy_get_previous_state - get the state just before the EOB char was reached */ |
| |
|
| static yy_state_type yy_get_previous_state() | static yy_state_type yy_get_previous_state YY_PROTO(( void )) |
| { |
{ |
| register yy_state_type yy_current_state; |
register yy_state_type yy_current_state; |
| register char *yy_cp; |
register char *yy_cp; |
|
Line 3472 register char *yy_bp;
|
Line 3475 register char *yy_bp;
|
| |
|
| #ifndef YY_NO_INPUT |
#ifndef YY_NO_INPUT |
| #ifdef __cplusplus |
#ifdef __cplusplus |
| static int yyinput() | static int yyinput YY_PROTO(( void )) |
| #else |
#else |
| static int input() | static int input YY_PROTO(( void )) |
| #endif |
#endif |
| { |
{ |
| int c; |
int c; |
|
Line 3850 int new_state;
|
Line 3853 int new_state;
|
| |
|
| |
|
| #ifndef YY_NO_POP_STATE |
#ifndef YY_NO_POP_STATE |
| static void yy_pop_state() | static void yy_pop_state YY_PROTO(( void )) |
| { |
{ |
| if ( --yy_start_stack_ptr < 0 ) |
if ( --yy_start_stack_ptr < 0 ) |
| YY_FATAL_ERROR( "start-condition stack underflow" ); |
YY_FATAL_ERROR( "start-condition stack underflow" ); |
|
Line 3861 static void yy_pop_state()
|
Line 3864 static void yy_pop_state()
|
| |
|
| |
|
| #ifndef YY_NO_TOP_STATE |
#ifndef YY_NO_TOP_STATE |
| static int yy_top_state() | static int yy_top_state YY_PROTO(( void )) |
| { |
{ |
| return yy_start_stack[yy_start_stack_ptr - 1]; |
return yy_start_stack[yy_start_stack_ptr - 1]; |
| } |
} |
|
Line 3980 int main()
|
Line 3983 int main()
|
| return 0; |
return 0; |
| } |
} |
| #endif |
#endif |
| #line 725 "toke.l" | #line 728 "toke.l" |
| |
|
| struct path_list { |
struct path_list { |
| |
SLIST_ENTRY(path_list) entries; |
| char *path; |
char *path; |
| struct path_list *next; |
|
| }; |
}; |
| |
|
| |
SLIST_HEAD(path_list_head, path_list); |
| |
|
| struct include_stack { |
struct include_stack { |
| YY_BUFFER_STATE bs; |
YY_BUFFER_STATE bs; |
| char *path; |
char *path; |
| struct path_list *more; /* more files in case of includedir */ | struct path_list_head more; /* more files in case of includedir */ |
| int lineno; |
int lineno; |
| bool keepopen; |
bool keepopen; |
| }; |
}; |
| |
|
| |
/* |
| |
* Compare two struct path_list structs in reverse order. |
| |
*/ |
| static int |
static int |
| pl_compare(const void *v1, const void *v2) |
pl_compare(const void *v1, const void *v2) |
| { |
{ |
| const struct path_list * const *p1 = v1; |
const struct path_list * const *p1 = v1; |
| const struct path_list * const *p2 = v2; |
const struct path_list * const *p2 = v2; |
| |
|
| return strcmp((*p1)->path, (*p2)->path); | return strcmp((*p2)->path, (*p1)->path); |
| } |
} |
| |
|
| static char * |
static char * |
| switch_dir(struct include_stack *stack, char *dirpath) |
switch_dir(struct include_stack *stack, char *dirpath) |
| { |
{ |
| DIR *dir; |
DIR *dir; |
| int i, count = 0; | unsigned int i, count = 0; |
| | unsigned int max_paths = 32; |
| char *path = NULL; |
char *path = NULL; |
| struct dirent *dent; |
struct dirent *dent; |
| struct stat sb; |
struct stat sb; |
| struct path_list *pl, *first = NULL; | struct path_list *pl, **paths = NULL; |
| struct path_list **sorted = NULL; | |
| debug_decl(switch_dir, SUDO_DEBUG_PARSER) |
debug_decl(switch_dir, SUDO_DEBUG_PARSER) |
| |
|
| if (!(dir = opendir(dirpath))) { |
if (!(dir = opendir(dirpath))) { |
|
Line 4023 switch_dir(struct include_stack *stack, char *dirpath)
|
Line 4031 switch_dir(struct include_stack *stack, char *dirpath)
|
| } |
} |
| goto done; |
goto done; |
| } |
} |
| |
paths = malloc(sizeof(*paths) * max_paths); |
| |
if (paths == NULL) { |
| |
closedir(dir); |
| |
goto bad; |
| |
} |
| while ((dent = readdir(dir))) { |
while ((dent = readdir(dir))) { |
| /* Ignore files that end in '~' or have a '.' in them. */ |
/* Ignore files that end in '~' or have a '.' in them. */ |
| if (dent->d_name[0] == '\0' || dent->d_name[NAMLEN(dent) - 1] == '~' |
if (dent->d_name[0] == '\0' || dent->d_name[NAMLEN(dent) - 1] == '~' |
|
Line 4042 switch_dir(struct include_stack *stack, char *dirpath)
|
Line 4055 switch_dir(struct include_stack *stack, char *dirpath)
|
| if (pl == NULL) |
if (pl == NULL) |
| goto bad; |
goto bad; |
| pl->path = path; |
pl->path = path; |
| pl->next = first; | if (count >= max_paths) { |
| first = pl; | struct path_list **tmp; |
| | max_paths <<= 1; |
| | tmp = realloc(paths, sizeof(*paths) * max_paths); |
| | if (tmp == NULL) { |
| | closedir(dir); |
| | goto bad; |
| | } |
| | paths = tmp; |
| | } |
| | paths[count++] = pl; |
| path = NULL; |
path = NULL; |
| count++; |
|
| } |
} |
| closedir(dir); |
closedir(dir); |
| |
|
| if (count == 0) |
if (count == 0) |
| goto done; |
goto done; |
| |
|
| /* Sort the list as an array. */ | /* Sort the list as an array in reverse order. */ |
| sorted = malloc(sizeof(*sorted) * count); | qsort(paths, count, sizeof(*paths), pl_compare); |
| if (sorted == NULL) | |
| goto bad; | /* Build up the list in sorted order. */ |
| pl = first; | |
| for (i = 0; i < count; i++) { |
for (i = 0; i < count; i++) { |
| sorted[i] = pl; | SLIST_INSERT_HEAD(&stack->more, paths[i], entries); |
| pl = pl->next; | |
| } |
} |
| qsort(sorted, count, sizeof(*sorted), pl_compare); |
|
| |
|
| /* Apply sorting to the list. */ |
|
| first = sorted[0]; |
|
| sorted[count - 1]->next = NULL; |
|
| for (i = 1; i < count; i++) |
|
| sorted[i - 1]->next = sorted[i]; |
|
| efree(sorted); |
|
| |
|
| /* Pull out the first element for parsing, leave the rest for later. */ |
/* Pull out the first element for parsing, leave the rest for later. */ |
| if (count) { | pl = SLIST_FIRST(&stack->more); |
| path = first->path; | SLIST_REMOVE_HEAD(&stack->more, entries); |
| pl = first->next; | path = pl->path; |
| efree(first); | efree(pl); |
| stack->more = pl; | |
| } else { | |
| path = NULL; | |
| } | |
| done: |
done: |
| |
efree(paths); |
| efree(dirpath); |
efree(dirpath); |
| debug_return_str(path); |
debug_return_str(path); |
| bad: |
bad: |
| while (first != NULL) { | for (i = 0; i < count; i++) { |
| pl = first; | efree(paths[i]->path); |
| first = pl->next; | efree(paths[i]); |
| efree(pl->path); | |
| efree(pl); | |
| } |
} |
| efree(sorted); | efree(paths); |
| efree(dirpath); |
efree(dirpath); |
| efree(path); |
efree(path); |
| debug_return_str(NULL); |
debug_return_str(NULL); |
|
Line 4110 init_lexer(void)
|
Line 4116 init_lexer(void)
|
| |
|
| while (idepth) { |
while (idepth) { |
| idepth--; |
idepth--; |
| while ((pl = istack[idepth].more) != NULL) { | while ((pl = SLIST_FIRST(&istack[idepth].more)) != NULL) { |
| istack[idepth].more = pl->next; | SLIST_REMOVE_HEAD(&istack[idepth].more, entries); |
| efree(pl->path); |
efree(pl->path); |
| efree(pl); |
efree(pl); |
| } |
} |
|
Line 4141 _push_include(char *path, bool isdir)
|
Line 4147 _push_include(char *path, bool isdir)
|
| |
|
| /* push current state onto stack */ |
/* push current state onto stack */ |
| if (idepth >= istacksize) { |
if (idepth >= istacksize) { |
| |
struct include_stack *new_istack; |
| |
|
| if (idepth > MAX_SUDOERS_DEPTH) { |
if (idepth > MAX_SUDOERS_DEPTH) { |
| sudoerserror(N_("too many levels of includes")); |
sudoerserror(N_("too many levels of includes")); |
| debug_return_bool(false); |
debug_return_bool(false); |
| } |
} |
| istacksize += SUDOERS_STACK_INCREMENT; |
istacksize += SUDOERS_STACK_INCREMENT; |
| istack = (struct include_stack *) realloc(istack, | new_istack = (struct include_stack *) realloc(istack, |
| sizeof(*istack) * istacksize); |
sizeof(*istack) * istacksize); |
| if (istack == NULL) { | if (new_istack == NULL) { |
| warning(NULL); |
warning(NULL); |
| sudoerserror(NULL); |
sudoerserror(NULL); |
| debug_return_bool(false); |
debug_return_bool(false); |
| } |
} |
| |
istack = new_istack; |
| } |
} |
| |
SLIST_INIT(&istack[idepth].more); |
| if (isdir) { |
if (isdir) { |
| struct stat sb; |
struct stat sb; |
| switch (sudo_secure_dir(path, sudoers_uid, sudoers_gid, &sb)) { |
switch (sudo_secure_dir(path, sudoers_uid, sudoers_gid, &sb)) { |
|
Line 4169 _push_include(char *path, bool isdir)
|
Line 4179 _push_include(char *path, bool isdir)
|
| debug_return_bool(false); |
debug_return_bool(false); |
| case SUDO_PATH_WRONG_OWNER: |
case SUDO_PATH_WRONG_OWNER: |
| if (sudoers_warnings) { |
if (sudoers_warnings) { |
| warningx(_("%s is owned by uid %u, should be %u"), | warningx(U_("%s is owned by uid %u, should be %u"), |
| path, (unsigned int) sb.st_uid, |
path, (unsigned int) sb.st_uid, |
| (unsigned int) sudoers_uid); |
(unsigned int) sudoers_uid); |
| } |
} |
| debug_return_bool(false); |
debug_return_bool(false); |
| case SUDO_PATH_WORLD_WRITABLE: |
case SUDO_PATH_WORLD_WRITABLE: |
| if (sudoers_warnings) { |
if (sudoers_warnings) { |
| warningx(_("%s is world writable"), path); | warningx(U_("%s is world writable"), path); |
| } |
} |
| debug_return_bool(false); |
debug_return_bool(false); |
| case SUDO_PATH_GROUP_WRITABLE: |
case SUDO_PATH_GROUP_WRITABLE: |
| if (sudoers_warnings) { |
if (sudoers_warnings) { |
| warningx(_("%s is owned by gid %u, should be %u"), | warningx(U_("%s is owned by gid %u, should be %u"), |
| path, (unsigned int) sb.st_gid, |
path, (unsigned int) sb.st_gid, |
| (unsigned int) sudoers_gid); |
(unsigned int) sudoers_gid); |
| } |
} |
|
Line 4197 _push_include(char *path, bool isdir)
|
Line 4207 _push_include(char *path, bool isdir)
|
| while ((fp = open_sudoers(path, false, &keepopen)) == NULL) { |
while ((fp = open_sudoers(path, false, &keepopen)) == NULL) { |
| /* Unable to open path in includedir, go to next one, if any. */ |
/* Unable to open path in includedir, go to next one, if any. */ |
| efree(path); |
efree(path); |
| if ((pl = istack[idepth].more) == NULL) | if ((pl = SLIST_FIRST(&istack[idepth].more)) == NULL) |
| debug_return_bool(false); |
debug_return_bool(false); |
| |
SLIST_REMOVE_HEAD(&istack[idepth].more, entries); |
| path = pl->path; |
path = pl->path; |
| istack[idepth].more = pl->next; |
|
| efree(pl); |
efree(pl); |
| } |
} |
| } else { |
} else { |
|
Line 4209 _push_include(char *path, bool isdir)
|
Line 4219 _push_include(char *path, bool isdir)
|
| sudoerserror(NULL); |
sudoerserror(NULL); |
| debug_return_bool(false); |
debug_return_bool(false); |
| } |
} |
| istack[idepth].more = NULL; |
|
| } |
} |
| /* Push the old (current) file and open the new one. */ |
/* Push the old (current) file and open the new one. */ |
| istack[idepth].path = sudoers; /* push old path */ |
istack[idepth].path = sudoers; /* push old path */ |
|
Line 4238 pop_include(void)
|
Line 4247 pop_include(void)
|
| fclose(YY_CURRENT_BUFFER->yy_input_file); |
fclose(YY_CURRENT_BUFFER->yy_input_file); |
| sudoers_delete_buffer(YY_CURRENT_BUFFER); |
sudoers_delete_buffer(YY_CURRENT_BUFFER); |
| /* If we are in an include dir, move to the next file. */ |
/* If we are in an include dir, move to the next file. */ |
| while ((pl = istack[idepth - 1].more) != NULL) { | while ((pl = SLIST_FIRST(&istack[idepth - 1].more)) != NULL) { |
| | SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); |
| fp = open_sudoers(pl->path, false, &keepopen); |
fp = open_sudoers(pl->path, false, &keepopen); |
| if (fp != NULL) { |
if (fp != NULL) { |
| istack[idepth - 1].more = pl->next; |
|
| efree(sudoers); |
efree(sudoers); |
| sudoers = pl->path; |
sudoers = pl->path; |
| sudolineno = 1; |
sudolineno = 1; |
|
Line 4250 pop_include(void)
|
Line 4259 pop_include(void)
|
| break; |
break; |
| } |
} |
| /* Unable to open path in include dir, go to next one. */ |
/* Unable to open path in include dir, go to next one. */ |
| istack[idepth - 1].more = pl->next; |
|
| efree(pl->path); |
efree(pl->path); |
| efree(pl); |
efree(pl); |
| } |
} |