top--; \
} while (0)
+
+/*
+ * For testing if foo_matches variable was set to TRUE or FALSE
+ */
+#define MATCHED(_v) ((_v) >= 0)
+
/*
* Shortcuts for append()
*/
}
parse_error = TRUE;
}
-#line 214 "parse.yacc"
+#line 220 "parse.yacc"
#ifndef YYSTYPE_DEFINED
#define YYSTYPE_DEFINED
typedef union {
int tok;
} YYSTYPE;
#endif /* YYSTYPE_DEFINED */
-#line 241 "sudo.tab.c"
+#line 247 "sudo.tab.c"
#define COMMAND 257
#define ALIAS 258
#define DEFVAR 259
short *yysslim;
YYSTYPE *yyvs;
int yystacksize;
-#line 878 "parse.yacc"
+#line 886 "parse.yacc"
#define MOREALIASES (32)
aliasinfo *aliases = NULL;
if (printmatches == TRUE)
expand_match_list();
}
-#line 976 "sudo.tab.c"
+#line 982 "sudo.tab.c"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
#if defined(__cplusplus) || defined(__STDC__)
static int yygrowstack(void)
switch (yyn)
{
case 3:
-#line 268 "parse.yacc"
+#line 274 "parse.yacc"
{ ; }
break;
case 4:
-#line 270 "parse.yacc"
+#line 276 "parse.yacc"
{ yyerrok; }
break;
case 5:
-#line 271 "parse.yacc"
+#line 277 "parse.yacc"
{ push; }
break;
case 6:
-#line 271 "parse.yacc"
+#line 277 "parse.yacc"
{
while (top && user_matches != TRUE)
pop;
}
break;
case 7:
-#line 276 "parse.yacc"
+#line 282 "parse.yacc"
{ ; }
break;
case 8:
-#line 278 "parse.yacc"
+#line 284 "parse.yacc"
{ ; }
break;
case 9:
-#line 280 "parse.yacc"
+#line 286 "parse.yacc"
{ ; }
break;
case 10:
-#line 282 "parse.yacc"
+#line 288 "parse.yacc"
{ ; }
break;
case 11:
-#line 284 "parse.yacc"
+#line 290 "parse.yacc"
{ ; }
break;
case 13:
-#line 290 "parse.yacc"
+#line 296 "parse.yacc"
{
defaults_matches = TRUE;
}
break;
case 14:
-#line 293 "parse.yacc"
+#line 299 "parse.yacc"
{ push; }
break;
case 15:
-#line 293 "parse.yacc"
+#line 299 "parse.yacc"
{
defaults_matches = user_matches;
pop;
}
break;
case 16:
-#line 297 "parse.yacc"
+#line 303 "parse.yacc"
{ push; }
break;
case 17:
-#line 297 "parse.yacc"
+#line 303 "parse.yacc"
{
defaults_matches = yyvsp[0].BOOLEAN == TRUE;
pop;
}
break;
case 18:
-#line 301 "parse.yacc"
+#line 307 "parse.yacc"
{ push; }
break;
case 19:
-#line 301 "parse.yacc"
+#line 307 "parse.yacc"
{
defaults_matches = host_matches;
pop;
}
break;
case 22:
-#line 311 "parse.yacc"
+#line 317 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[0].string, NULL, TRUE)) {
}
break;
case 23:
-#line 319 "parse.yacc"
+#line 325 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[0].string, NULL, FALSE)) {
}
break;
case 24:
-#line 327 "parse.yacc"
+#line 333 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, TRUE)) {
}
break;
case 25:
-#line 336 "parse.yacc"
+#line 342 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, '+')) {
}
break;
case 26:
-#line 345 "parse.yacc"
+#line 351 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, '-')) {
}
break;
case 29:
-#line 360 "parse.yacc"
+#line 366 "parse.yacc"
{
/*
* We already did a push if necessary in
}
break;
case 30:
-#line 373 "parse.yacc"
+#line 379 "parse.yacc"
{
SETMATCH(host_matches, yyvsp[0].BOOLEAN);
}
break;
case 31:
-#line 376 "parse.yacc"
+#line 382 "parse.yacc"
{
SETNMATCH(host_matches, yyvsp[0].BOOLEAN);
}
break;
case 32:
-#line 381 "parse.yacc"
+#line 387 "parse.yacc"
{
yyval.BOOLEAN = TRUE;
}
break;
case 33:
-#line 384 "parse.yacc"
+#line 390 "parse.yacc"
{
if (addr_matches(yyvsp[0].string))
yyval.BOOLEAN = TRUE;
}
break;
case 34:
-#line 391 "parse.yacc"
+#line 397 "parse.yacc"
{
if (netgr_matches(yyvsp[0].string, user_host, user_shost, NULL))
yyval.BOOLEAN = TRUE;
}
break;
case 35:
-#line 398 "parse.yacc"
+#line 404 "parse.yacc"
{
if (hostname_matches(user_shost, user_host, yyvsp[0].string) == 0)
yyval.BOOLEAN = TRUE;
}
break;
case 36:
-#line 405 "parse.yacc"
+#line 411 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, HOST_ALIAS);
}
break;
case 39:
-#line 433 "parse.yacc"
+#line 439 "parse.yacc"
{
/*
* Push the entry onto the stack if it is worth
* If keepall is set and the user matches then
* we need to keep entries around too...
*/
- if (user_matches >= 0 && host_matches >= 0 &&
- cmnd_matches >= 0 && runas_matches >= 0)
+ if (MATCHED(user_matches) &&
+ MATCHED(host_matches) &&
+ MATCHED(cmnd_matches) &&
+ MATCHED(runas_matches))
pushcp;
- else if (user_matches >= 0 && (top == 1 ||
- (top == 2 && host_matches >= 0 &&
- match[0].host < 0)))
+ else if (MATCHED(user_matches) && (top == 1 ||
+ (top == 2 && MATCHED(host_matches) &&
+ !MATCHED(match[0].host))))
pushcp;
else if (user_matches == TRUE && keepall)
pushcp;
}
break;
case 40:
-#line 460 "parse.yacc"
+#line 468 "parse.yacc"
{
SETMATCH(cmnd_matches, yyvsp[0].BOOLEAN);
}
break;
case 41:
-#line 463 "parse.yacc"
+#line 471 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 42:
-#line 471 "parse.yacc"
+#line 479 "parse.yacc"
{
SETNMATCH(cmnd_matches, yyvsp[0].BOOLEAN);
}
break;
case 43:
-#line 476 "parse.yacc"
+#line 484 "parse.yacc"
{
if (printmatches == TRUE && host_matches == TRUE &&
user_matches == TRUE) {
}
break;
case 44:
-#line 501 "parse.yacc"
+#line 509 "parse.yacc"
{
runas_matches = yyvsp[0].BOOLEAN;
}
break;
case 45:
-#line 506 "parse.yacc"
+#line 514 "parse.yacc"
{ ; }
break;
case 46:
-#line 507 "parse.yacc"
+#line 515 "parse.yacc"
{
/* Later entries override earlier ones. */
if (yyvsp[0].BOOLEAN != NOMATCH)
}
break;
case 47:
-#line 516 "parse.yacc"
+#line 524 "parse.yacc"
{ ; }
break;
case 48:
-#line 517 "parse.yacc"
+#line 525 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 49:
-#line 525 "parse.yacc"
+#line 533 "parse.yacc"
{
/* Set $$ to the negation of runasuser */
yyval.BOOLEAN = (yyvsp[0].BOOLEAN == NOMATCH ? NOMATCH : ! yyvsp[0].BOOLEAN);
}
break;
case 50:
-#line 531 "parse.yacc"
+#line 539 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 51:
-#line 545 "parse.yacc"
+#line 553 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 52:
-#line 559 "parse.yacc"
+#line 567 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 53:
-#line 573 "parse.yacc"
+#line 581 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, RUNAS_ALIAS);
}
break;
case 54:
-#line 602 "parse.yacc"
+#line 610 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 55:
-#line 614 "parse.yacc"
+#line 622 "parse.yacc"
{
/* Inherit {NOPASSWD,PASSWD,NOEXEC,EXEC} status. */
if (printmatches == TRUE && host_matches == TRUE &&
}
break;
case 56:
-#line 628 "parse.yacc"
+#line 636 "parse.yacc"
{
no_passwd = TRUE;
if (printmatches == TRUE && host_matches == TRUE &&
}
break;
case 57:
-#line 634 "parse.yacc"
+#line 642 "parse.yacc"
{
no_passwd = FALSE;
if (printmatches == TRUE && host_matches == TRUE &&
}
break;
case 58:
-#line 640 "parse.yacc"
+#line 648 "parse.yacc"
{
no_execve = TRUE;
if (printmatches == TRUE && host_matches == TRUE &&
}
break;
case 59:
-#line 646 "parse.yacc"
+#line 654 "parse.yacc"
{
no_execve = FALSE;
if (printmatches == TRUE && host_matches == TRUE &&
}
break;
case 60:
-#line 654 "parse.yacc"
+#line 662 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 61:
-#line 671 "parse.yacc"
+#line 679 "parse.yacc"
{
aliasinfo *aip;
}
break;
case 62:
-#line 700 "parse.yacc"
+#line 708 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE) {
}
break;
case 65:
-#line 732 "parse.yacc"
+#line 740 "parse.yacc"
{ push; }
break;
case 66:
-#line 732 "parse.yacc"
+#line 740 "parse.yacc"
{
- if ((host_matches >= 0 || pedantic) &&
+ if ((MATCHED(host_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, HOST_ALIAS, host_matches)) {
yyerror(NULL);
YYERROR;
}
break;
case 71:
-#line 750 "parse.yacc"
+#line 758 "parse.yacc"
{
push;
if (printmatches == TRUE) {
}
break;
case 72:
-#line 759 "parse.yacc"
+#line 767 "parse.yacc"
{
- if ((cmnd_matches >= 0 || pedantic) &&
+ if ((MATCHED(cmnd_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, CMND_ALIAS, cmnd_matches)) {
yyerror(NULL);
YYERROR;
}
break;
case 73:
-#line 773 "parse.yacc"
+#line 781 "parse.yacc"
{ ; }
break;
case 77:
-#line 781 "parse.yacc"
+#line 789 "parse.yacc"
{
if (printmatches == TRUE) {
in_alias = TRUE;
}
break;
case 78:
-#line 789 "parse.yacc"
+#line 797 "parse.yacc"
{
if ((yyvsp[0].BOOLEAN != NOMATCH || pedantic) &&
!add_alias(yyvsp[-3].string, RUNAS_ALIAS, yyvsp[0].BOOLEAN)) {
}
break;
case 81:
-#line 806 "parse.yacc"
+#line 814 "parse.yacc"
{ push; }
break;
case 82:
-#line 806 "parse.yacc"
+#line 814 "parse.yacc"
{
- if ((user_matches >= 0 || pedantic) &&
+ if ((MATCHED(user_matches) || pedantic) &&
!add_alias(yyvsp[-3].string, USER_ALIAS, user_matches)) {
yyerror(NULL);
YYERROR;
}
break;
case 85:
-#line 821 "parse.yacc"
+#line 829 "parse.yacc"
{
SETMATCH(user_matches, yyvsp[0].BOOLEAN);
}
break;
case 86:
-#line 824 "parse.yacc"
+#line 832 "parse.yacc"
{
SETNMATCH(user_matches, yyvsp[0].BOOLEAN);
}
break;
case 87:
-#line 829 "parse.yacc"
+#line 837 "parse.yacc"
{
if (userpw_matches(yyvsp[0].string, user_name, sudo_user.pw))
yyval.BOOLEAN = TRUE;
}
break;
case 88:
-#line 836 "parse.yacc"
+#line 844 "parse.yacc"
{
if (usergr_matches(yyvsp[0].string, user_name, sudo_user.pw))
yyval.BOOLEAN = TRUE;
}
break;
case 89:
-#line 843 "parse.yacc"
+#line 851 "parse.yacc"
{
if (netgr_matches(yyvsp[0].string, NULL, NULL, user_name))
yyval.BOOLEAN = TRUE;
}
break;
case 90:
-#line 850 "parse.yacc"
+#line 858 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, USER_ALIAS);
}
break;
case 91:
-#line 872 "parse.yacc"
+#line 880 "parse.yacc"
{
yyval.BOOLEAN = TRUE;
}
break;
-#line 1907 "sudo.tab.c"
+#line 1915 "sudo.tab.c"
}
yyssp -= yym;
yystate = *yyssp;