do { \
if (top >= stacksize) { \
while ((stacksize += STACKINCREMENT) < top); \
- match = (struct matchstack *) erealloc(match, sizeof(struct matchstack) * stacksize); \
+ match = (struct matchstack *) erealloc3(match, stacksize, sizeof(struct matchstack)); \
} \
match[top].user = -1; \
match[top].cmnd = -1; \
do { \
if (top >= stacksize) { \
while ((stacksize += STACKINCREMENT) < top); \
- match = (struct matchstack *) erealloc(match, sizeof(struct matchstack) * stacksize); \
+ match = (struct matchstack *) erealloc3(match, stacksize, sizeof(struct matchstack)); \
} \
match[top].user = match[top-1].user; \
match[top].cmnd = match[top-1].cmnd; \
short *yysslim;
YYSTYPE *yyvs;
int yystacksize;
-#line 859 "parse.yacc"
+#line 865 "parse.yacc"
#define MOREALIASES (32)
aliasinfo *aliases = NULL;
/* Assumes dst will be NULL if not set. */
if (dst == NULL) {
dst = (char *) emalloc(BUFSIZ);
+ *dst = '\0';
*dst_size = BUFSIZ;
*dst_len = 0;
*dstp = dst;
}
/* Copy src -> dst adding a separator if appropriate and adjust len. */
- dst += *dst_len;
- *dst_len += src_len;
- *dst = '\0';
if (separator)
- (void) strcat(dst, separator);
- (void) strcat(dst, src);
+ (void) strlcat(dst, separator, *dst_size);
+ (void) strlcat(dst, src, *dst_size);
+ *dst_len += src_len;
}
/*
while ((ga_list_size += STACKINCREMENT) < ga_list_len)
;
ga_list = (struct generic_alias *)
- erealloc(ga_list, sizeof(struct generic_alias) * ga_list_size);
+ erealloc3(ga_list, ga_list_size, sizeof(struct generic_alias));
}
ga_list[ga_list_len - 1].entries = NULL;
if (cm_list == NULL)
cm_list_len = 0; /* start at 0 since it is a subscript */
cm_list = (struct command_match *)
- erealloc(cm_list, sizeof(struct command_match) * cm_list_size);
+ erealloc3(cm_list, cm_list_size, sizeof(struct command_match));
}
cm_list[cm_list_len].runas = cm_list[cm_list_len].cmnd = NULL;
/* Allocate space for the matching stack. */
stacksize = STACKINCREMENT;
- match = (struct matchstack *) emalloc(sizeof(struct matchstack) * stacksize);
+ match = (struct matchstack *) emalloc2(stacksize, sizeof(struct matchstack));
/* Allocate space for the match list (for `sudo -l'). */
if (printmatches == TRUE)
expand_match_list();
}
-#line 945 "sudo.tab.c"
+#line 944 "sudo.tab.c"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
#if defined(__cplusplus) || defined(__STDC__)
static int yygrowstack(void)
{ ; }
break;
case 13:
-#line 286 "parse.yacc"
+#line 287 "parse.yacc"
{
defaults_matches = TRUE;
}
break;
case 14:
-#line 289 "parse.yacc"
+#line 290 "parse.yacc"
{ push; }
break;
case 15:
-#line 289 "parse.yacc"
+#line 290 "parse.yacc"
{
defaults_matches = user_matches;
pop;
}
break;
case 16:
-#line 293 "parse.yacc"
+#line 294 "parse.yacc"
{ push; }
break;
case 17:
-#line 293 "parse.yacc"
+#line 294 "parse.yacc"
{
defaults_matches = yyvsp[0].BOOLEAN == TRUE;
pop;
}
break;
case 18:
-#line 297 "parse.yacc"
+#line 298 "parse.yacc"
{ push; }
break;
case 19:
-#line 297 "parse.yacc"
+#line 298 "parse.yacc"
{
defaults_matches = host_matches;
pop;
}
break;
case 22:
-#line 306 "parse.yacc"
+#line 308 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[0].string, NULL, TRUE)) {
}
break;
case 23:
-#line 314 "parse.yacc"
+#line 316 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[0].string, NULL, FALSE)) {
}
break;
case 24:
-#line 322 "parse.yacc"
+#line 324 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, TRUE)) {
}
break;
case 25:
-#line 331 "parse.yacc"
+#line 333 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, '+')) {
}
break;
case 26:
-#line 340 "parse.yacc"
+#line 342 "parse.yacc"
{
if (defaults_matches == TRUE &&
!set_default(yyvsp[-2].string, yyvsp[0].string, '-')) {
}
break;
case 29:
-#line 354 "parse.yacc"
+#line 357 "parse.yacc"
{
/*
* We already did a push if necessary in
}
break;
case 30:
-#line 369 "parse.yacc"
+#line 372 "parse.yacc"
{
if (yyvsp[0].BOOLEAN != -1)
host_matches = yyvsp[0].BOOLEAN;
}
break;
case 31:
-#line 373 "parse.yacc"
+#line 376 "parse.yacc"
{
if (yyvsp[0].BOOLEAN != -1)
host_matches = ! yyvsp[0].BOOLEAN;
}
break;
case 32:
-#line 378 "parse.yacc"
+#line 382 "parse.yacc"
{
yyval.BOOLEAN = TRUE;
}
break;
case 33:
-#line 381 "parse.yacc"
+#line 385 "parse.yacc"
{
if (addr_matches(yyvsp[0].string))
yyval.BOOLEAN = TRUE;
}
break;
case 34:
-#line 388 "parse.yacc"
+#line 392 "parse.yacc"
{
if (netgr_matches(yyvsp[0].string, user_host, user_shost, NULL))
yyval.BOOLEAN = TRUE;
}
break;
case 35:
-#line 395 "parse.yacc"
+#line 399 "parse.yacc"
{
if (hostname_matches(user_shost, user_host, yyvsp[0].string) == 0)
yyval.BOOLEAN = TRUE;
}
break;
case 36:
-#line 402 "parse.yacc"
+#line 406 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, HOST_ALIAS);
}
break;
case 39:
-#line 430 "parse.yacc"
+#line 434 "parse.yacc"
{
/*
* Push the entry onto the stack if it is worth
}
break;
case 40:
-#line 457 "parse.yacc"
+#line 461 "parse.yacc"
{
if (yyvsp[0].BOOLEAN != -1)
cmnd_matches = yyvsp[0].BOOLEAN;
}
break;
case 41:
-#line 461 "parse.yacc"
+#line 465 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 42:
-#line 469 "parse.yacc"
+#line 473 "parse.yacc"
{
if (yyvsp[0].BOOLEAN != -1)
cmnd_matches = ! yyvsp[0].BOOLEAN;
}
break;
case 43:
-#line 475 "parse.yacc"
+#line 479 "parse.yacc"
{
if (printmatches == TRUE && host_matches == TRUE &&
user_matches == TRUE) {
}
break;
case 44:
-#line 498 "parse.yacc"
+#line 502 "parse.yacc"
{
runas_matches = (yyvsp[0].BOOLEAN == TRUE ? TRUE : FALSE);
}
break;
case 45:
-#line 503 "parse.yacc"
+#line 507 "parse.yacc"
{ ; }
break;
case 46:
-#line 504 "parse.yacc"
+#line 508 "parse.yacc"
{
/* Later entries override earlier ones. */
if (yyvsp[0].BOOLEAN != -1)
}
break;
case 47:
-#line 513 "parse.yacc"
+#line 517 "parse.yacc"
{ ; }
break;
case 48:
-#line 514 "parse.yacc"
+#line 518 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 49:
-#line 522 "parse.yacc"
+#line 526 "parse.yacc"
{
/* Set $$ to the negation of runasuser */
yyval.BOOLEAN = (yyvsp[0].BOOLEAN == -1 ? -1 : ! yyvsp[0].BOOLEAN);
}
break;
case 50:
-#line 527 "parse.yacc"
+#line 532 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 51:
-#line 541 "parse.yacc"
+#line 546 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 52:
-#line 555 "parse.yacc"
+#line 560 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 53:
-#line 569 "parse.yacc"
+#line 574 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, RUNAS_ALIAS);
}
break;
case 54:
-#line 598 "parse.yacc"
+#line 603 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 55:
-#line 610 "parse.yacc"
+#line 615 "parse.yacc"
{
/* Inherit NOPASSWD/PASSWD status. */
if (printmatches == TRUE && host_matches == TRUE &&
}
break;
case 56:
-#line 620 "parse.yacc"
+#line 625 "parse.yacc"
{
no_passwd = TRUE;
if (printmatches == TRUE && host_matches == TRUE &&
}
break;
case 57:
-#line 626 "parse.yacc"
+#line 631 "parse.yacc"
{
no_passwd = FALSE;
if (printmatches == TRUE && host_matches == TRUE &&
}
break;
case 58:
-#line 634 "parse.yacc"
+#line 639 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE)
}
break;
case 59:
-#line 651 "parse.yacc"
+#line 656 "parse.yacc"
{
aliasinfo *aip;
}
break;
case 60:
-#line 680 "parse.yacc"
+#line 685 "parse.yacc"
{
if (printmatches == TRUE) {
if (in_alias == TRUE) {
}
break;
case 63:
-#line 712 "parse.yacc"
+#line 717 "parse.yacc"
{ push; }
break;
case 64:
-#line 712 "parse.yacc"
+#line 717 "parse.yacc"
{
if ((host_matches != -1 || pedantic) &&
!add_alias(yyvsp[-3].string, HOST_ALIAS, host_matches)) {
}
break;
case 69:
-#line 730 "parse.yacc"
+#line 735 "parse.yacc"
{
push;
if (printmatches == TRUE) {
}
break;
case 70:
-#line 739 "parse.yacc"
+#line 744 "parse.yacc"
{
if ((cmnd_matches != -1 || pedantic) &&
!add_alias(yyvsp[-3].string, CMND_ALIAS, cmnd_matches)) {
}
break;
case 71:
-#line 753 "parse.yacc"
+#line 758 "parse.yacc"
{ ; }
break;
case 75:
-#line 761 "parse.yacc"
+#line 766 "parse.yacc"
{
if (printmatches == TRUE) {
in_alias = TRUE;
}
break;
case 76:
-#line 769 "parse.yacc"
+#line 774 "parse.yacc"
{
if ((yyvsp[0].BOOLEAN != -1 || pedantic) &&
!add_alias(yyvsp[-3].string, RUNAS_ALIAS, yyvsp[0].BOOLEAN)) {
}
break;
case 79:
-#line 786 "parse.yacc"
+#line 791 "parse.yacc"
{ push; }
break;
case 80:
-#line 786 "parse.yacc"
+#line 791 "parse.yacc"
{
if ((user_matches != -1 || pedantic) &&
!add_alias(yyvsp[-3].string, USER_ALIAS, user_matches)) {
}
break;
case 83:
-#line 801 "parse.yacc"
+#line 806 "parse.yacc"
{
if (yyvsp[0].BOOLEAN != -1)
user_matches = yyvsp[0].BOOLEAN;
}
break;
case 84:
-#line 805 "parse.yacc"
+#line 810 "parse.yacc"
{
if (yyvsp[0].BOOLEAN != -1)
user_matches = ! yyvsp[0].BOOLEAN;
}
break;
case 85:
-#line 810 "parse.yacc"
+#line 816 "parse.yacc"
{
if (strcmp(yyvsp[0].string, user_name) == 0)
yyval.BOOLEAN = TRUE;
}
break;
case 86:
-#line 817 "parse.yacc"
+#line 823 "parse.yacc"
{
if (usergr_matches(yyvsp[0].string, user_name))
yyval.BOOLEAN = TRUE;
}
break;
case 87:
-#line 824 "parse.yacc"
+#line 830 "parse.yacc"
{
if (netgr_matches(yyvsp[0].string, NULL, NULL, user_name))
yyval.BOOLEAN = TRUE;
}
break;
case 88:
-#line 831 "parse.yacc"
+#line 837 "parse.yacc"
{
aliasinfo *aip = find_alias(yyvsp[0].string, USER_ALIAS);
}
break;
case 89:
-#line 853 "parse.yacc"
+#line 859 "parse.yacc"
{
yyval.BOOLEAN = TRUE;
}
break;
-#line 1860 "sudo.tab.c"
+#line 1859 "sudo.tab.c"
}
yyssp -= yym;
yystate = *yyssp;