diff options
author | Todd C. Miller <Todd.Miller@courtesan.com> | 1999-08-17 15:29:47 +0000 |
---|---|---|
committer | Todd C. Miller <Todd.Miller@courtesan.com> | 1999-08-17 15:29:47 +0000 |
commit | 87a0064777ffb845d141e6a8d33f28a6404bf4c3 (patch) | |
tree | 3763b1de2f50f6089bfabafa13ab46add0cfc853 /sudo.tab.c | |
parent | 282a1cfd802eca7aaaefc41762248f87c9947861 (diff) | |
download | sudo-87a0064777ffb845d141e6a8d33f28a6404bf4c3.tar.gz |
o NewArgv and NewArgc don't need to be externally visible.
o If pedantic > 1, it is a parse error.
o Add -s (strict) option to visudo which sets pedantic to 2.
Diffstat (limited to 'sudo.tab.c')
-rw-r--r-- | sudo.tab.c | 169 |
1 files changed, 98 insertions, 71 deletions
diff --git a/sudo.tab.c b/sudo.tab.c index b02f7efec..b90584da7 100644 --- a/sudo.tab.c +++ b/sudo.tab.c @@ -16,7 +16,7 @@ static char yyrcsid[] #define yyerrok (yyerrflag=0) #define YYRECOVERING() (yyerrflag!=0) #define YYPREFIX "yy" -#line 2 "parse.yacc" +#line 2 "./parse.yacc" /* * Copyright (c) 1996, 1998, 1999 Todd C. Miller <Todd.Miller@courtesan.com> * All rights reserved. @@ -214,22 +214,24 @@ yyerror(s) /* Save the line the first error occured on. */ if (errorlineno == -1) errorlineno = sudolineno ? sudolineno - 1 : 0; + if (s) { #ifndef TRACELEXER - (void) fprintf(stderr, ">>> sudoers file: %s, line %d <<<\n", s, - sudolineno ? sudolineno - 1 : 0); + (void) fprintf(stderr, ">>> sudoers file: %s, line %d <<<\n", s, + sudolineno ? sudolineno - 1 : 0); #else - (void) fprintf(stderr, "<*> "); + (void) fprintf(stderr, "<*> "); #endif + } parse_error = TRUE; } -#line 209 "parse.yacc" +#line 211 "./parse.yacc" typedef union { char *string; int BOOLEAN; struct sudo_command command; int tok; } YYSTYPE; -#line 233 "sudo.tab.c" +#line 235 "sudo.tab.c" #define COMMAND 257 #define ALIAS 258 #define NTWKADDR 259 @@ -534,7 +536,7 @@ short *yyss; short *yysslim; YYSTYPE *yyvs; int yystacksize; -#line 735 "parse.yacc" +#line 759 "./parse.yacc" #define MOREALIASES (32) aliasinfo *aliases = NULL; @@ -660,6 +662,9 @@ dumpaliases() size_t n; for (n = 0; n < naliases; n++) { + if (aliases[n].val == -1) + continue; + switch (aliases[n].type) { case HOST_ALIAS: (void) puts("HOST_ALIAS"); @@ -875,7 +880,7 @@ init_parser() if (printmatches == TRUE) expand_match_list(); } -#line 879 "sudo.tab.c" +#line 884 "sudo.tab.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ #if defined(__cplusplus) || __STDC__ static int yygrowstack(void) @@ -1056,42 +1061,42 @@ yyreduce: switch (yyn) { case 3: -#line 254 "parse.yacc" +#line 256 "./parse.yacc" { ; } break; case 4: -#line 256 "parse.yacc" +#line 258 "./parse.yacc" { yyerrok; } break; case 5: -#line 257 "parse.yacc" +#line 259 "./parse.yacc" { push; } break; case 6: -#line 257 "parse.yacc" +#line 259 "./parse.yacc" { while (top && user_matches != TRUE) pop; } break; case 7: -#line 262 "parse.yacc" +#line 264 "./parse.yacc" { ; } break; case 8: -#line 264 "parse.yacc" +#line 266 "./parse.yacc" { ; } break; case 9: -#line 266 "parse.yacc" +#line 268 "./parse.yacc" { ; } break; case 10: -#line 268 "parse.yacc" +#line 270 "./parse.yacc" { ; } break; case 13: -#line 276 "parse.yacc" +#line 278 "./parse.yacc" { /* * We already did a push if necessary in @@ -1104,27 +1109,27 @@ case 13: } break; case 14: -#line 288 "parse.yacc" +#line 290 "./parse.yacc" { if (yyvsp[0].BOOLEAN != -1) host_matches = yyvsp[0].BOOLEAN; } break; case 15: -#line 292 "parse.yacc" +#line 294 "./parse.yacc" { if (yyvsp[0].BOOLEAN != -1) host_matches = ! yyvsp[0].BOOLEAN; } break; case 16: -#line 297 "parse.yacc" +#line 299 "./parse.yacc" { yyval.BOOLEAN = TRUE; } break; case 17: -#line 300 "parse.yacc" +#line 302 "./parse.yacc" { if (addr_matches(yyvsp[0].string)) yyval.BOOLEAN = TRUE; @@ -1134,7 +1139,7 @@ case 17: } break; case 18: -#line 307 "parse.yacc" +#line 309 "./parse.yacc" { if (netgr_matches(yyvsp[0].string, user_host, NULL)) yyval.BOOLEAN = TRUE; @@ -1144,7 +1149,7 @@ case 18: } break; case 19: -#line 314 "parse.yacc" +#line 316 "./parse.yacc" { if (strcasecmp(user_shost, yyvsp[0].string) == 0) yyval.BOOLEAN = TRUE; @@ -1154,7 +1159,7 @@ case 19: } break; case 20: -#line 321 "parse.yacc" +#line 323 "./parse.yacc" { if (strcasecmp(user_host, yyvsp[0].string) == 0) yyval.BOOLEAN = TRUE; @@ -1164,7 +1169,7 @@ case 20: } break; case 21: -#line 328 "parse.yacc" +#line 330 "./parse.yacc" { aliasinfo *aip = find_alias(yyvsp[0].string, HOST_ALIAS); @@ -1174,16 +1179,22 @@ case 21: else if (strcasecmp(user_shost, yyvsp[0].string) == 0) yyval.BOOLEAN = TRUE; else { - if (pedantic) + if (pedantic) { (void) fprintf(stderr, - "Warning: undeclared Host_Alias `%s' referenced near line %d\n", yyvsp[0].string, sudolineno); + "%s: undeclared Host_Alias `%s' referenced near line %d\n", + (pedantic == 1) ? "Warning" : "Error", yyvsp[0].string, sudolineno); + if (pedantic > 1) { + yyerror(NULL); + YYERROR; + } + } yyval.BOOLEAN = -1; } free(yyvsp[0].string); } break; case 24: -#line 350 "parse.yacc" +#line 358 "./parse.yacc" { /* * Push the entry onto the stack if it is worth @@ -1198,14 +1209,14 @@ case 24: } break; case 25: -#line 364 "parse.yacc" +#line 372 "./parse.yacc" { if (yyvsp[0].BOOLEAN != -1) cmnd_matches = yyvsp[0].BOOLEAN; } break; case 26: -#line 368 "parse.yacc" +#line 376 "./parse.yacc" { if (printmatches == TRUE) { if (in_alias == TRUE) @@ -1217,14 +1228,14 @@ case 26: } break; case 27: -#line 376 "parse.yacc" +#line 384 "./parse.yacc" { if (yyvsp[0].BOOLEAN != -1) cmnd_matches = ! yyvsp[0].BOOLEAN; } break; case 28: -#line 382 "parse.yacc" +#line 390 "./parse.yacc" { if (printmatches == TRUE && host_matches == TRUE && user_matches == TRUE) { @@ -1250,18 +1261,18 @@ case 28: } break; case 29: -#line 405 "parse.yacc" +#line 413 "./parse.yacc" { ; } break; case 32: -#line 412 "parse.yacc" +#line 420 "./parse.yacc" { if (yyvsp[0].BOOLEAN != -1) runas_matches = yyvsp[0].BOOLEAN; } break; case 33: -#line 416 "parse.yacc" +#line 424 "./parse.yacc" { if (printmatches == TRUE) { if (in_alias == TRUE) @@ -1273,14 +1284,14 @@ case 33: } break; case 34: -#line 424 "parse.yacc" +#line 432 "./parse.yacc" { if (yyvsp[0].BOOLEAN != -1) runas_matches = ! yyvsp[0].BOOLEAN; } break; case 35: -#line 429 "parse.yacc" +#line 437 "./parse.yacc" { if (printmatches == TRUE) { if (in_alias == TRUE) @@ -1297,7 +1308,7 @@ case 35: } break; case 36: -#line 443 "parse.yacc" +#line 451 "./parse.yacc" { if (printmatches == TRUE) { if (in_alias == TRUE) @@ -1314,7 +1325,7 @@ case 36: } break; case 37: -#line 457 "parse.yacc" +#line 465 "./parse.yacc" { if (printmatches == TRUE) { if (in_alias == TRUE) @@ -1331,7 +1342,7 @@ case 37: } break; case 38: -#line 471 "parse.yacc" +#line 479 "./parse.yacc" { aliasinfo *aip = find_alias(yyvsp[0].string, RUNAS_ALIAS); @@ -1348,16 +1359,22 @@ case 38: else if (strcmp(yyvsp[0].string, user_runas) == 0) yyval.BOOLEAN = TRUE; else { - if (pedantic) + if (pedantic) { (void) fprintf(stderr, - "Warning: undeclared Runas_Alias `%s' referenced near line %d\n", yyvsp[0].string, sudolineno); + "%s: undeclared Runas_Alias `%s' referenced near line %d\n", + (pedantic == 1) ? "Warning" : "Error", yyvsp[0].string, sudolineno); + if (pedantic > 1) { + yyerror(NULL); + YYERROR; + } + } yyval.BOOLEAN = -1; } free(yyvsp[0].string); } break; case 39: -#line 494 "parse.yacc" +#line 508 "./parse.yacc" { if (printmatches == TRUE) { if (in_alias == TRUE) @@ -1370,7 +1387,7 @@ case 39: } break; case 40: -#line 506 "parse.yacc" +#line 520 "./parse.yacc" { /* Inherit NOPASSWD/PASSWD status. */ if (printmatches == TRUE && host_matches == TRUE && @@ -1383,7 +1400,7 @@ case 40: } break; case 41: -#line 516 "parse.yacc" +#line 530 "./parse.yacc" { no_passwd = TRUE; if (printmatches == TRUE && host_matches == TRUE && @@ -1392,7 +1409,7 @@ case 41: } break; case 42: -#line 522 "parse.yacc" +#line 536 "./parse.yacc" { no_passwd = FALSE; if (printmatches == TRUE && host_matches == TRUE && @@ -1401,7 +1418,7 @@ case 42: } break; case 43: -#line 530 "parse.yacc" +#line 544 "./parse.yacc" { if (printmatches == TRUE) { if (in_alias == TRUE) @@ -1421,7 +1438,7 @@ case 43: } break; case 44: -#line 547 "parse.yacc" +#line 561 "./parse.yacc" { aliasinfo *aip; @@ -1438,16 +1455,22 @@ case 44: if ((aip = find_alias(yyvsp[0].string, CMND_ALIAS))) yyval.BOOLEAN = aip->val; else { - if (pedantic) + if (pedantic) { (void) fprintf(stderr, - "Warning: undeclared Cmnd_Alias `%s' referenced near line %d\n", yyvsp[0].string, sudolineno); + "%s: undeclared Cmnd_Alias `%s' referenced near line %d\n", + (pedantic == 1) ? "Warning" : "Error", yyvsp[0].string, sudolineno); + if (pedantic > 1) { + yyerror(NULL); + YYERROR; + } + } yyval.BOOLEAN = -1; } free(yyvsp[0].string); } break; case 45: -#line 570 "parse.yacc" +#line 590 "./parse.yacc" { if (printmatches == TRUE) { if (in_alias == TRUE) { @@ -1476,11 +1499,11 @@ case 45: } break; case 48: -#line 602 "parse.yacc" +#line 622 "./parse.yacc" { push; } break; case 49: -#line 602 "parse.yacc" +#line 622 "./parse.yacc" { if ((host_matches != -1 || pedantic) && !add_alias(yyvsp[-3].string, HOST_ALIAS, host_matches)) @@ -1489,7 +1512,7 @@ case 49: } break; case 54: -#line 618 "parse.yacc" +#line 638 "./parse.yacc" { push; if (printmatches == TRUE) { @@ -1501,7 +1524,7 @@ case 54: } break; case 55: -#line 626 "parse.yacc" +#line 646 "./parse.yacc" { if ((cmnd_matches != -1 || pedantic) && !add_alias(yyvsp[-3].string, CMND_ALIAS, cmnd_matches)) @@ -1514,11 +1537,11 @@ case 55: } break; case 56: -#line 638 "parse.yacc" +#line 658 "./parse.yacc" { ; } break; case 60: -#line 646 "parse.yacc" +#line 666 "./parse.yacc" { push; if (printmatches == TRUE) { @@ -1530,7 +1553,7 @@ case 60: } break; case 61: -#line 654 "parse.yacc" +#line 674 "./parse.yacc" { if ((runas_matches != -1 || pedantic) && !add_alias(yyvsp[-3].string, RUNAS_ALIAS, runas_matches)) @@ -1543,11 +1566,11 @@ case 61: } break; case 64: -#line 670 "parse.yacc" +#line 690 "./parse.yacc" { push; } break; case 65: -#line 670 "parse.yacc" +#line 690 "./parse.yacc" { if ((user_matches != -1 || pedantic) && !add_alias(yyvsp[-3].string, USER_ALIAS, user_matches)) @@ -1557,25 +1580,25 @@ case 65: } break; case 66: -#line 679 "parse.yacc" +#line 699 "./parse.yacc" { ; } break; case 68: -#line 683 "parse.yacc" +#line 703 "./parse.yacc" { if (yyvsp[0].BOOLEAN != -1) user_matches = yyvsp[0].BOOLEAN; } break; case 69: -#line 687 "parse.yacc" +#line 707 "./parse.yacc" { if (yyvsp[0].BOOLEAN != -1) user_matches = ! yyvsp[0].BOOLEAN; } break; case 70: -#line 692 "parse.yacc" +#line 712 "./parse.yacc" { if (strcmp(yyvsp[0].string, user_name) == 0) yyval.BOOLEAN = TRUE; @@ -1585,7 +1608,7 @@ case 70: } break; case 71: -#line 699 "parse.yacc" +#line 719 "./parse.yacc" { if (usergr_matches(yyvsp[0].string, user_name)) yyval.BOOLEAN = TRUE; @@ -1595,7 +1618,7 @@ case 71: } break; case 72: -#line 706 "parse.yacc" +#line 726 "./parse.yacc" { if (netgr_matches(yyvsp[0].string, NULL, user_name)) yyval.BOOLEAN = TRUE; @@ -1605,7 +1628,7 @@ case 72: } break; case 73: -#line 713 "parse.yacc" +#line 733 "./parse.yacc" { aliasinfo *aip = find_alias(yyvsp[0].string, USER_ALIAS); @@ -1615,21 +1638,25 @@ case 73: else if (strcmp(yyvsp[0].string, user_name) == 0) yyval.BOOLEAN = TRUE; else { - if (pedantic) + if (pedantic) { (void) fprintf(stderr, - "Warning: undeclared User_Alias `%s' referenced near line %d\n", yyvsp[0].string, sudolineno); + "%s: undeclared User_Alias `%s' referenced near line %d\n", + (pedantic == 1) ? "Warning" : "Error", yyvsp[0].string, sudolineno); + if (pedantic > 1) + YYERROR; + } yyval.BOOLEAN = -1; } free(yyvsp[0].string); } break; case 74: -#line 729 "parse.yacc" +#line 753 "./parse.yacc" { yyval.BOOLEAN = TRUE; } break; -#line 1633 "sudo.tab.c" +#line 1660 "sudo.tab.c" } yyssp -= yym; yystate = *yyssp; |