This commit is contained in:
Todd C. Miller
2004-06-08 19:56:01 +00:00
parent 906c12c753
commit 2087367461

View File

@@ -102,6 +102,7 @@ int printmatches = FALSE;
int pedantic = FALSE; int pedantic = FALSE;
int keepall = FALSE; int keepall = FALSE;
int quiet = FALSE; int quiet = FALSE;
int used_runas = FALSE;
/* /*
* Alias types * Alias types
@@ -233,7 +234,7 @@ yyerror(s)
} }
parse_error = TRUE; parse_error = TRUE;
} }
#line 220 "parse.yacc" #line 221 "parse.yacc"
#ifndef YYSTYPE_DEFINED #ifndef YYSTYPE_DEFINED
#define YYSTYPE_DEFINED #define YYSTYPE_DEFINED
typedef union { typedef union {
@@ -243,7 +244,7 @@ typedef union {
int tok; int tok;
} YYSTYPE; } YYSTYPE;
#endif /* YYSTYPE_DEFINED */ #endif /* YYSTYPE_DEFINED */
#line 247 "sudo.tab.c" #line 248 "sudo.tab.c"
#define COMMAND 257 #define COMMAND 257
#define ALIAS 258 #define ALIAS 258
#define DEFVAR 259 #define DEFVAR 259
@@ -673,7 +674,7 @@ short *yyss;
short *yysslim; short *yysslim;
YYSTYPE *yyvs; YYSTYPE *yyvs;
int yystacksize; int yystacksize;
#line 886 "parse.yacc" #line 891 "parse.yacc"
#define MOREALIASES (32) #define MOREALIASES (32)
aliasinfo *aliases = NULL; aliasinfo *aliases = NULL;
@@ -1030,7 +1031,7 @@ init_parser()
if (printmatches == TRUE) if (printmatches == TRUE)
expand_match_list(); expand_match_list();
} }
#line 982 "sudo.tab.c" #line 983 "sudo.tab.c"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */ /* allocate initial stack or double stack size, up to YYMAXDEPTH */
#if defined(__cplusplus) || defined(__STDC__) #if defined(__cplusplus) || defined(__STDC__)
static int yygrowstack(void) static int yygrowstack(void)
@@ -1224,85 +1225,85 @@ yyreduce:
switch (yyn) switch (yyn)
{ {
case 3: case 3:
#line 274 "parse.yacc" #line 275 "parse.yacc"
{ ; } { ; }
break; break;
case 4: case 4:
#line 276 "parse.yacc" #line 277 "parse.yacc"
{ yyerrok; } { yyerrok; }
break; break;
case 5: case 5:
#line 277 "parse.yacc" #line 278 "parse.yacc"
{ push; } { push; }
break; break;
case 6: case 6:
#line 277 "parse.yacc" #line 278 "parse.yacc"
{ {
while (top && user_matches != TRUE) while (top && user_matches != TRUE)
pop; pop;
} }
break; break;
case 7: case 7:
#line 282 "parse.yacc" #line 283 "parse.yacc"
{ ; } { ; }
break; break;
case 8: case 8:
#line 284 "parse.yacc" #line 285 "parse.yacc"
{ ; } { ; }
break; break;
case 9: case 9:
#line 286 "parse.yacc" #line 287 "parse.yacc"
{ ; } { ; }
break; break;
case 10: case 10:
#line 288 "parse.yacc" #line 289 "parse.yacc"
{ ; } { ; }
break; break;
case 11: case 11:
#line 290 "parse.yacc" #line 291 "parse.yacc"
{ ; } { ; }
break; break;
case 13: case 13:
#line 296 "parse.yacc" #line 297 "parse.yacc"
{ {
defaults_matches = TRUE; defaults_matches = TRUE;
} }
break; break;
case 14: case 14:
#line 299 "parse.yacc" #line 300 "parse.yacc"
{ push; } { push; }
break; break;
case 15: case 15:
#line 299 "parse.yacc" #line 300 "parse.yacc"
{ {
defaults_matches = user_matches; defaults_matches = user_matches;
pop; pop;
} }
break; break;
case 16: case 16:
#line 303 "parse.yacc" #line 304 "parse.yacc"
{ push; } { push; }
break; break;
case 17: case 17:
#line 303 "parse.yacc" #line 304 "parse.yacc"
{ {
defaults_matches = yyvsp[0].BOOLEAN == TRUE; defaults_matches = yyvsp[0].BOOLEAN == TRUE;
pop; pop;
} }
break; break;
case 18: case 18:
#line 307 "parse.yacc" #line 308 "parse.yacc"
{ push; } { push; }
break; break;
case 19: case 19:
#line 307 "parse.yacc" #line 308 "parse.yacc"
{ {
defaults_matches = host_matches; defaults_matches = host_matches;
pop; pop;
} }
break; break;
case 22: case 22:
#line 317 "parse.yacc" #line 318 "parse.yacc"
{ {
if (defaults_matches == TRUE && if (defaults_matches == TRUE &&
!set_default(yyvsp[0].string, NULL, TRUE)) { !set_default(yyvsp[0].string, NULL, TRUE)) {
@@ -1313,7 +1314,7 @@ case 22:
} }
break; break;
case 23: case 23:
#line 325 "parse.yacc" #line 326 "parse.yacc"
{ {
if (defaults_matches == TRUE && if (defaults_matches == TRUE &&
!set_default(yyvsp[0].string, NULL, FALSE)) { !set_default(yyvsp[0].string, NULL, FALSE)) {
@@ -1324,7 +1325,7 @@ case 23:
} }
break; break;
case 24: case 24:
#line 333 "parse.yacc" #line 334 "parse.yacc"
{ {
if (defaults_matches == TRUE && if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, TRUE)) { !set_default(yyvsp[-2].string, yyvsp[0].string, TRUE)) {
@@ -1336,7 +1337,7 @@ case 24:
} }
break; break;
case 25: case 25:
#line 342 "parse.yacc" #line 343 "parse.yacc"
{ {
if (defaults_matches == TRUE && if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, '+')) { !set_default(yyvsp[-2].string, yyvsp[0].string, '+')) {
@@ -1348,7 +1349,7 @@ case 25:
} }
break; break;
case 26: case 26:
#line 351 "parse.yacc" #line 352 "parse.yacc"
{ {
if (defaults_matches == TRUE && if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, '-')) { !set_default(yyvsp[-2].string, yyvsp[0].string, '-')) {
@@ -1360,7 +1361,7 @@ case 26:
} }
break; break;
case 29: case 29:
#line 366 "parse.yacc" #line 367 "parse.yacc"
{ {
/* /*
* We already did a push if necessary in * We already did a push if necessary in
@@ -1374,25 +1375,25 @@ case 29:
} }
break; break;
case 30: case 30:
#line 379 "parse.yacc" #line 380 "parse.yacc"
{ {
SETMATCH(host_matches, yyvsp[0].BOOLEAN); SETMATCH(host_matches, yyvsp[0].BOOLEAN);
} }
break; break;
case 31: case 31:
#line 382 "parse.yacc" #line 383 "parse.yacc"
{ {
SETNMATCH(host_matches, yyvsp[0].BOOLEAN); SETNMATCH(host_matches, yyvsp[0].BOOLEAN);
} }
break; break;
case 32: case 32:
#line 387 "parse.yacc" #line 388 "parse.yacc"
{ {
yyval.BOOLEAN = TRUE; yyval.BOOLEAN = TRUE;
} }
break; break;
case 33: case 33:
#line 390 "parse.yacc" #line 391 "parse.yacc"
{ {
if (addr_matches(yyvsp[0].string)) if (addr_matches(yyvsp[0].string))
yyval.BOOLEAN = TRUE; yyval.BOOLEAN = TRUE;
@@ -1402,7 +1403,7 @@ case 33:
} }
break; break;
case 34: case 34:
#line 397 "parse.yacc" #line 398 "parse.yacc"
{ {
if (netgr_matches(yyvsp[0].string, user_host, user_shost, NULL)) if (netgr_matches(yyvsp[0].string, user_host, user_shost, NULL))
yyval.BOOLEAN = TRUE; yyval.BOOLEAN = TRUE;
@@ -1412,7 +1413,7 @@ case 34:
} }
break; break;
case 35: case 35:
#line 404 "parse.yacc" #line 405 "parse.yacc"
{ {
if (hostname_matches(user_shost, user_host, yyvsp[0].string) == 0) if (hostname_matches(user_shost, user_host, yyvsp[0].string) == 0)
yyval.BOOLEAN = TRUE; yyval.BOOLEAN = TRUE;
@@ -1422,7 +1423,7 @@ case 35:
} }
break; break;
case 36: case 36:
#line 411 "parse.yacc" #line 412 "parse.yacc"
{ {
aliasinfo *aip = find_alias(yyvsp[0].string, HOST_ALIAS); aliasinfo *aip = find_alias(yyvsp[0].string, HOST_ALIAS);
@@ -1447,7 +1448,7 @@ case 36:
} }
break; break;
case 39: case 39:
#line 439 "parse.yacc" #line 440 "parse.yacc"
{ {
/* /*
* Push the entry onto the stack if it is worth * Push the entry onto the stack if it is worth
@@ -1477,13 +1478,13 @@ case 39:
} }
break; break;
case 40: case 40:
#line 468 "parse.yacc" #line 469 "parse.yacc"
{ {
SETMATCH(cmnd_matches, yyvsp[0].BOOLEAN); SETMATCH(cmnd_matches, yyvsp[0].BOOLEAN);
} }
break; break;
case 41: case 41:
#line 471 "parse.yacc" #line 472 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
if (in_alias == TRUE) if (in_alias == TRUE)
@@ -1495,13 +1496,13 @@ case 41:
} }
break; break;
case 42: case 42:
#line 479 "parse.yacc" #line 480 "parse.yacc"
{ {
SETNMATCH(cmnd_matches, yyvsp[0].BOOLEAN); SETNMATCH(cmnd_matches, yyvsp[0].BOOLEAN);
} }
break; break;
case 43: case 43:
#line 484 "parse.yacc" #line 485 "parse.yacc"
{ {
if (printmatches == TRUE && host_matches == TRUE && if (printmatches == TRUE && host_matches == TRUE &&
user_matches == TRUE) { user_matches == TRUE) {
@@ -1529,17 +1530,17 @@ case 43:
} }
break; break;
case 44: case 44:
#line 509 "parse.yacc" #line 510 "parse.yacc"
{ {
runas_matches = yyvsp[0].BOOLEAN; runas_matches = yyvsp[0].BOOLEAN;
} }
break; break;
case 45: case 45:
#line 514 "parse.yacc" #line 515 "parse.yacc"
{ ; } { ; }
break; break;
case 46: case 46:
#line 515 "parse.yacc" #line 516 "parse.yacc"
{ {
/* Later entries override earlier ones. */ /* Later entries override earlier ones. */
if (yyvsp[0].BOOLEAN != NOMATCH) if (yyvsp[0].BOOLEAN != NOMATCH)
@@ -1549,11 +1550,11 @@ case 46:
} }
break; break;
case 47: case 47:
#line 524 "parse.yacc" #line 525 "parse.yacc"
{ ; } { ; }
break; break;
case 48: case 48:
#line 525 "parse.yacc" #line 526 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
if (in_alias == TRUE) if (in_alias == TRUE)
@@ -1565,14 +1566,14 @@ case 48:
} }
break; break;
case 49: case 49:
#line 533 "parse.yacc" #line 534 "parse.yacc"
{ {
/* Set $$ to the negation of runasuser */ /* Set $$ to the negation of runasuser */
yyval.BOOLEAN = (yyvsp[0].BOOLEAN == NOMATCH ? NOMATCH : ! yyvsp[0].BOOLEAN); yyval.BOOLEAN = (yyvsp[0].BOOLEAN == NOMATCH ? NOMATCH : ! yyvsp[0].BOOLEAN);
} }
break; break;
case 50: case 50:
#line 539 "parse.yacc" #line 540 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
if (in_alias == TRUE) if (in_alias == TRUE)
@@ -1586,10 +1587,11 @@ case 50:
else else
yyval.BOOLEAN = NOMATCH; yyval.BOOLEAN = NOMATCH;
free(yyvsp[0].string); free(yyvsp[0].string);
used_runas = TRUE;
} }
break; break;
case 51: case 51:
#line 553 "parse.yacc" #line 555 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
if (in_alias == TRUE) if (in_alias == TRUE)
@@ -1603,10 +1605,11 @@ case 51:
else else
yyval.BOOLEAN = NOMATCH; yyval.BOOLEAN = NOMATCH;
free(yyvsp[0].string); free(yyvsp[0].string);
used_runas = TRUE;
} }
break; break;
case 52: case 52:
#line 567 "parse.yacc" #line 570 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
if (in_alias == TRUE) if (in_alias == TRUE)
@@ -1620,10 +1623,11 @@ case 52:
else else
yyval.BOOLEAN = NOMATCH; yyval.BOOLEAN = NOMATCH;
free(yyvsp[0].string); free(yyvsp[0].string);
used_runas = TRUE;
} }
break; break;
case 53: case 53:
#line 581 "parse.yacc" #line 585 "parse.yacc"
{ {
aliasinfo *aip = find_alias(yyvsp[0].string, RUNAS_ALIAS); aliasinfo *aip = find_alias(yyvsp[0].string, RUNAS_ALIAS);
@@ -1652,10 +1656,11 @@ case 53:
yyval.BOOLEAN = NOMATCH; yyval.BOOLEAN = NOMATCH;
} }
free(yyvsp[0].string); free(yyvsp[0].string);
used_runas = TRUE;
} }
break; break;
case 54: case 54:
#line 610 "parse.yacc" #line 615 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
if (in_alias == TRUE) if (in_alias == TRUE)
@@ -1668,7 +1673,7 @@ case 54:
} }
break; break;
case 55: case 55:
#line 622 "parse.yacc" #line 627 "parse.yacc"
{ {
/* Inherit {NOPASSWD,PASSWD,NOEXEC,EXEC} status. */ /* Inherit {NOPASSWD,PASSWD,NOEXEC,EXEC} status. */
if (printmatches == TRUE && host_matches == TRUE && if (printmatches == TRUE && host_matches == TRUE &&
@@ -1685,7 +1690,7 @@ case 55:
} }
break; break;
case 56: case 56:
#line 636 "parse.yacc" #line 641 "parse.yacc"
{ {
no_passwd = TRUE; no_passwd = TRUE;
if (printmatches == TRUE && host_matches == TRUE && if (printmatches == TRUE && host_matches == TRUE &&
@@ -1694,7 +1699,7 @@ case 56:
} }
break; break;
case 57: case 57:
#line 642 "parse.yacc" #line 647 "parse.yacc"
{ {
no_passwd = FALSE; no_passwd = FALSE;
if (printmatches == TRUE && host_matches == TRUE && if (printmatches == TRUE && host_matches == TRUE &&
@@ -1703,7 +1708,7 @@ case 57:
} }
break; break;
case 58: case 58:
#line 648 "parse.yacc" #line 653 "parse.yacc"
{ {
no_execve = TRUE; no_execve = TRUE;
if (printmatches == TRUE && host_matches == TRUE && if (printmatches == TRUE && host_matches == TRUE &&
@@ -1712,7 +1717,7 @@ case 58:
} }
break; break;
case 59: case 59:
#line 654 "parse.yacc" #line 659 "parse.yacc"
{ {
no_execve = FALSE; no_execve = FALSE;
if (printmatches == TRUE && host_matches == TRUE && if (printmatches == TRUE && host_matches == TRUE &&
@@ -1721,7 +1726,7 @@ case 59:
} }
break; break;
case 60: case 60:
#line 662 "parse.yacc" #line 667 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
if (in_alias == TRUE) if (in_alias == TRUE)
@@ -1741,7 +1746,7 @@ case 60:
} }
break; break;
case 61: case 61:
#line 679 "parse.yacc" #line 684 "parse.yacc"
{ {
aliasinfo *aip; aliasinfo *aip;
@@ -1773,7 +1778,7 @@ case 61:
} }
break; break;
case 62: case 62:
#line 708 "parse.yacc" #line 713 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
if (in_alias == TRUE) { if (in_alias == TRUE) {
@@ -1802,11 +1807,11 @@ case 62:
} }
break; break;
case 65: case 65:
#line 740 "parse.yacc" #line 745 "parse.yacc"
{ push; } { push; }
break; break;
case 66: case 66:
#line 740 "parse.yacc" #line 745 "parse.yacc"
{ {
if ((MATCHED(host_matches) || pedantic) && if ((MATCHED(host_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, HOST_ALIAS, host_matches)) { !add_alias(yyvsp[-3].string, HOST_ALIAS, host_matches)) {
@@ -1817,7 +1822,7 @@ case 66:
} }
break; break;
case 71: case 71:
#line 758 "parse.yacc" #line 763 "parse.yacc"
{ {
push; push;
if (printmatches == TRUE) { if (printmatches == TRUE) {
@@ -1830,7 +1835,7 @@ case 71:
} }
break; break;
case 72: case 72:
#line 767 "parse.yacc" #line 772 "parse.yacc"
{ {
if ((MATCHED(cmnd_matches) || pedantic) && if ((MATCHED(cmnd_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, CMND_ALIAS, cmnd_matches)) { !add_alias(yyvsp[-3].string, CMND_ALIAS, cmnd_matches)) {
@@ -1845,11 +1850,11 @@ case 72:
} }
break; break;
case 73: case 73:
#line 781 "parse.yacc" #line 786 "parse.yacc"
{ ; } { ; }
break; break;
case 77: case 77:
#line 789 "parse.yacc" #line 794 "parse.yacc"
{ {
if (printmatches == TRUE) { if (printmatches == TRUE) {
in_alias = TRUE; in_alias = TRUE;
@@ -1861,7 +1866,7 @@ case 77:
} }
break; break;
case 78: case 78:
#line 797 "parse.yacc" #line 802 "parse.yacc"
{ {
if ((yyvsp[0].BOOLEAN != NOMATCH || pedantic) && if ((yyvsp[0].BOOLEAN != NOMATCH || pedantic) &&
!add_alias(yyvsp[-3].string, RUNAS_ALIAS, yyvsp[0].BOOLEAN)) { !add_alias(yyvsp[-3].string, RUNAS_ALIAS, yyvsp[0].BOOLEAN)) {
@@ -1875,11 +1880,11 @@ case 78:
} }
break; break;
case 81: case 81:
#line 814 "parse.yacc" #line 819 "parse.yacc"
{ push; } { push; }
break; break;
case 82: case 82:
#line 814 "parse.yacc" #line 819 "parse.yacc"
{ {
if ((MATCHED(user_matches) || pedantic) && if ((MATCHED(user_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, USER_ALIAS, user_matches)) { !add_alias(yyvsp[-3].string, USER_ALIAS, user_matches)) {
@@ -1891,19 +1896,19 @@ case 82:
} }
break; break;
case 85: case 85:
#line 829 "parse.yacc" #line 834 "parse.yacc"
{ {
SETMATCH(user_matches, yyvsp[0].BOOLEAN); SETMATCH(user_matches, yyvsp[0].BOOLEAN);
} }
break; break;
case 86: case 86:
#line 832 "parse.yacc" #line 837 "parse.yacc"
{ {
SETNMATCH(user_matches, yyvsp[0].BOOLEAN); SETNMATCH(user_matches, yyvsp[0].BOOLEAN);
} }
break; break;
case 87: case 87:
#line 837 "parse.yacc" #line 842 "parse.yacc"
{ {
if (userpw_matches(yyvsp[0].string, user_name, sudo_user.pw)) if (userpw_matches(yyvsp[0].string, user_name, sudo_user.pw))
yyval.BOOLEAN = TRUE; yyval.BOOLEAN = TRUE;
@@ -1913,7 +1918,7 @@ case 87:
} }
break; break;
case 88: case 88:
#line 844 "parse.yacc" #line 849 "parse.yacc"
{ {
if (usergr_matches(yyvsp[0].string, user_name, sudo_user.pw)) if (usergr_matches(yyvsp[0].string, user_name, sudo_user.pw))
yyval.BOOLEAN = TRUE; yyval.BOOLEAN = TRUE;
@@ -1923,7 +1928,7 @@ case 88:
} }
break; break;
case 89: case 89:
#line 851 "parse.yacc" #line 856 "parse.yacc"
{ {
if (netgr_matches(yyvsp[0].string, NULL, NULL, user_name)) if (netgr_matches(yyvsp[0].string, NULL, NULL, user_name))
yyval.BOOLEAN = TRUE; yyval.BOOLEAN = TRUE;
@@ -1933,7 +1938,7 @@ case 89:
} }
break; break;
case 90: case 90:
#line 858 "parse.yacc" #line 863 "parse.yacc"
{ {
aliasinfo *aip = find_alias(yyvsp[0].string, USER_ALIAS); aliasinfo *aip = find_alias(yyvsp[0].string, USER_ALIAS);
@@ -1958,12 +1963,12 @@ case 90:
} }
break; break;
case 91: case 91:
#line 880 "parse.yacc" #line 885 "parse.yacc"
{ {
yyval.BOOLEAN = TRUE; yyval.BOOLEAN = TRUE;
} }
break; break;
#line 1915 "sudo.tab.c" #line 1920 "sudo.tab.c"
} }
yyssp -= yym; yyssp -= yym;
yystate = *yyssp; yystate = *yyssp;