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); |
} |
} |