summaryrefslogtreecommitdiff
path: root/sudo.tab.c
diff options
context:
space:
mode:
authorTodd C. Miller <Todd.Miller@courtesan.com>1999-08-17 15:29:47 +0000
committerTodd C. Miller <Todd.Miller@courtesan.com>1999-08-17 15:29:47 +0000
commit87a0064777ffb845d141e6a8d33f28a6404bf4c3 (patch)
tree3763b1de2f50f6089bfabafa13ab46add0cfc853 /sudo.tab.c
parent282a1cfd802eca7aaaefc41762248f87c9947861 (diff)
downloadsudo-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.c169
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;