mirror of
https://github.com/sudo-project/sudo.git
synced 2025-09-03 15:55:40 +00:00
Got back to calling alias_free() on alias_add() failure.
We now need to remove the name and members from the leak list *before* calling alias_add() since alias_add() will consume them for both success and failure.
This commit is contained in:
@@ -136,11 +136,11 @@ alias_add(struct sudoers_parse_tree *parse_tree, char *name, int type,
|
||||
HLTQ_TO_TAILQ(&a->members, members, entries);
|
||||
switch (rbinsert(parse_tree->aliases, a, NULL)) {
|
||||
case 1:
|
||||
free(a);
|
||||
alias_free(a);
|
||||
errno = EEXIST;
|
||||
debug_return_bool(false);
|
||||
case -1:
|
||||
free(a);
|
||||
alias_free(a);
|
||||
debug_return_bool(false);
|
||||
}
|
||||
debug_return_bool(true);
|
||||
|
@@ -2828,13 +2828,13 @@ yyreduce:
|
||||
case 113: /* hostalias: ALIAS $@1 '=' hostlist */
|
||||
#line 948 "gram.y"
|
||||
{
|
||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
||||
if (!alias_add(&parsed_policy, (yyvsp[-3].string), HOSTALIAS,
|
||||
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
||||
alias_error((yyvsp[-3].string), errno);
|
||||
YYERROR;
|
||||
}
|
||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
||||
}
|
||||
#line 2834 "gram.c"
|
||||
break;
|
||||
@@ -2861,13 +2861,13 @@ yyreduce:
|
||||
case 120: /* cmndalias: ALIAS $@2 '=' cmndlist */
|
||||
#line 975 "gram.y"
|
||||
{
|
||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
||||
if (!alias_add(&parsed_policy, (yyvsp[-3].string), CMNDALIAS,
|
||||
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
||||
alias_error((yyvsp[-3].string), errno);
|
||||
YYERROR;
|
||||
}
|
||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
||||
}
|
||||
#line 2867 "gram.c"
|
||||
break;
|
||||
@@ -2894,13 +2894,13 @@ yyreduce:
|
||||
case 127: /* runasalias: ALIAS $@3 '=' userlist */
|
||||
#line 1002 "gram.y"
|
||||
{
|
||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
||||
if (!alias_add(&parsed_policy, (yyvsp[-3].string), RUNASALIAS,
|
||||
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
||||
alias_error((yyvsp[-3].string), errno);
|
||||
YYERROR;
|
||||
}
|
||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
||||
}
|
||||
#line 2900 "gram.c"
|
||||
break;
|
||||
@@ -2917,13 +2917,13 @@ yyreduce:
|
||||
case 132: /* useralias: ALIAS $@4 '=' userlist */
|
||||
#line 1021 "gram.y"
|
||||
{
|
||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
||||
if (!alias_add(&parsed_policy, (yyvsp[-3].string), USERALIAS,
|
||||
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
||||
alias_error((yyvsp[-3].string), errno);
|
||||
YYERROR;
|
||||
}
|
||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
||||
}
|
||||
#line 2923 "gram.c"
|
||||
break;
|
||||
|
@@ -946,13 +946,13 @@ hostalias : ALIAS {
|
||||
alias_line = this_lineno;
|
||||
alias_column = sudolinebuf.toke_start + 1;
|
||||
} '=' hostlist {
|
||||
parser_leak_remove(LEAK_PTR, $1);
|
||||
parser_leak_remove(LEAK_MEMBER, $4);
|
||||
if (!alias_add(&parsed_policy, $1, HOSTALIAS,
|
||||
sudoers, alias_line, alias_column, $4)) {
|
||||
alias_error($1, errno);
|
||||
YYERROR;
|
||||
}
|
||||
parser_leak_remove(LEAK_PTR, $1);
|
||||
parser_leak_remove(LEAK_MEMBER, $4);
|
||||
}
|
||||
| reserved_alias '=' hostlist
|
||||
;
|
||||
@@ -973,13 +973,13 @@ cmndalias : ALIAS {
|
||||
alias_line = this_lineno;
|
||||
alias_column = sudolinebuf.toke_start + 1;
|
||||
} '=' cmndlist {
|
||||
parser_leak_remove(LEAK_PTR, $1);
|
||||
parser_leak_remove(LEAK_MEMBER, $4);
|
||||
if (!alias_add(&parsed_policy, $1, CMNDALIAS,
|
||||
sudoers, alias_line, alias_column, $4)) {
|
||||
alias_error($1, errno);
|
||||
YYERROR;
|
||||
}
|
||||
parser_leak_remove(LEAK_PTR, $1);
|
||||
parser_leak_remove(LEAK_MEMBER, $4);
|
||||
}
|
||||
| reserved_alias '=' cmndlist
|
||||
;
|
||||
@@ -1000,13 +1000,13 @@ runasalias : ALIAS {
|
||||
alias_line = this_lineno;
|
||||
alias_column = sudolinebuf.toke_start + 1;
|
||||
} '=' userlist {
|
||||
parser_leak_remove(LEAK_PTR, $1);
|
||||
parser_leak_remove(LEAK_MEMBER, $4);
|
||||
if (!alias_add(&parsed_policy, $1, RUNASALIAS,
|
||||
sudoers, alias_line, alias_column, $4)) {
|
||||
alias_error($1, errno);
|
||||
YYERROR;
|
||||
}
|
||||
parser_leak_remove(LEAK_PTR, $1);
|
||||
parser_leak_remove(LEAK_MEMBER, $4);
|
||||
}
|
||||
| reserved_alias '=' userlist
|
||||
;
|
||||
@@ -1019,13 +1019,13 @@ useralias : ALIAS {
|
||||
alias_line = this_lineno;
|
||||
alias_column = sudolinebuf.toke_start + 1;
|
||||
} '=' userlist {
|
||||
parser_leak_remove(LEAK_PTR, $1);
|
||||
parser_leak_remove(LEAK_MEMBER, $4);
|
||||
if (!alias_add(&parsed_policy, $1, USERALIAS,
|
||||
sudoers, alias_line, alias_column, $4)) {
|
||||
alias_error($1, errno);
|
||||
YYERROR;
|
||||
}
|
||||
parser_leak_remove(LEAK_PTR, $1);
|
||||
parser_leak_remove(LEAK_MEMBER, $4);
|
||||
}
|
||||
| reserved_alias '=' userlist
|
||||
;
|
||||
|
Reference in New Issue
Block a user