mirror of
https://github.com/sudo-project/sudo.git
synced 2025-09-03 07:45:47 +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);
|
HLTQ_TO_TAILQ(&a->members, members, entries);
|
||||||
switch (rbinsert(parse_tree->aliases, a, NULL)) {
|
switch (rbinsert(parse_tree->aliases, a, NULL)) {
|
||||||
case 1:
|
case 1:
|
||||||
free(a);
|
alias_free(a);
|
||||||
errno = EEXIST;
|
errno = EEXIST;
|
||||||
debug_return_bool(false);
|
debug_return_bool(false);
|
||||||
case -1:
|
case -1:
|
||||||
free(a);
|
alias_free(a);
|
||||||
debug_return_bool(false);
|
debug_return_bool(false);
|
||||||
}
|
}
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
|
@@ -2828,13 +2828,13 @@ yyreduce:
|
|||||||
case 113: /* hostalias: ALIAS $@1 '=' hostlist */
|
case 113: /* hostalias: ALIAS $@1 '=' hostlist */
|
||||||
#line 948 "gram.y"
|
#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,
|
if (!alias_add(&parsed_policy, (yyvsp[-3].string), HOSTALIAS,
|
||||||
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
||||||
alias_error((yyvsp[-3].string), errno);
|
alias_error((yyvsp[-3].string), errno);
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
|
||||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
|
||||||
}
|
}
|
||||||
#line 2834 "gram.c"
|
#line 2834 "gram.c"
|
||||||
break;
|
break;
|
||||||
@@ -2861,13 +2861,13 @@ yyreduce:
|
|||||||
case 120: /* cmndalias: ALIAS $@2 '=' cmndlist */
|
case 120: /* cmndalias: ALIAS $@2 '=' cmndlist */
|
||||||
#line 975 "gram.y"
|
#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,
|
if (!alias_add(&parsed_policy, (yyvsp[-3].string), CMNDALIAS,
|
||||||
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
||||||
alias_error((yyvsp[-3].string), errno);
|
alias_error((yyvsp[-3].string), errno);
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
|
||||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
|
||||||
}
|
}
|
||||||
#line 2867 "gram.c"
|
#line 2867 "gram.c"
|
||||||
break;
|
break;
|
||||||
@@ -2894,13 +2894,13 @@ yyreduce:
|
|||||||
case 127: /* runasalias: ALIAS $@3 '=' userlist */
|
case 127: /* runasalias: ALIAS $@3 '=' userlist */
|
||||||
#line 1002 "gram.y"
|
#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,
|
if (!alias_add(&parsed_policy, (yyvsp[-3].string), RUNASALIAS,
|
||||||
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
||||||
alias_error((yyvsp[-3].string), errno);
|
alias_error((yyvsp[-3].string), errno);
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
|
||||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
|
||||||
}
|
}
|
||||||
#line 2900 "gram.c"
|
#line 2900 "gram.c"
|
||||||
break;
|
break;
|
||||||
@@ -2917,13 +2917,13 @@ yyreduce:
|
|||||||
case 132: /* useralias: ALIAS $@4 '=' userlist */
|
case 132: /* useralias: ALIAS $@4 '=' userlist */
|
||||||
#line 1021 "gram.y"
|
#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,
|
if (!alias_add(&parsed_policy, (yyvsp[-3].string), USERALIAS,
|
||||||
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
sudoers, alias_line, alias_column, (yyvsp[0].member))) {
|
||||||
alias_error((yyvsp[-3].string), errno);
|
alias_error((yyvsp[-3].string), errno);
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
parser_leak_remove(LEAK_PTR, (yyvsp[-3].string));
|
|
||||||
parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member));
|
|
||||||
}
|
}
|
||||||
#line 2923 "gram.c"
|
#line 2923 "gram.c"
|
||||||
break;
|
break;
|
||||||
|
@@ -946,13 +946,13 @@ hostalias : ALIAS {
|
|||||||
alias_line = this_lineno;
|
alias_line = this_lineno;
|
||||||
alias_column = sudolinebuf.toke_start + 1;
|
alias_column = sudolinebuf.toke_start + 1;
|
||||||
} '=' hostlist {
|
} '=' hostlist {
|
||||||
|
parser_leak_remove(LEAK_PTR, $1);
|
||||||
|
parser_leak_remove(LEAK_MEMBER, $4);
|
||||||
if (!alias_add(&parsed_policy, $1, HOSTALIAS,
|
if (!alias_add(&parsed_policy, $1, HOSTALIAS,
|
||||||
sudoers, alias_line, alias_column, $4)) {
|
sudoers, alias_line, alias_column, $4)) {
|
||||||
alias_error($1, errno);
|
alias_error($1, errno);
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
parser_leak_remove(LEAK_PTR, $1);
|
|
||||||
parser_leak_remove(LEAK_MEMBER, $4);
|
|
||||||
}
|
}
|
||||||
| reserved_alias '=' hostlist
|
| reserved_alias '=' hostlist
|
||||||
;
|
;
|
||||||
@@ -973,13 +973,13 @@ cmndalias : ALIAS {
|
|||||||
alias_line = this_lineno;
|
alias_line = this_lineno;
|
||||||
alias_column = sudolinebuf.toke_start + 1;
|
alias_column = sudolinebuf.toke_start + 1;
|
||||||
} '=' cmndlist {
|
} '=' cmndlist {
|
||||||
|
parser_leak_remove(LEAK_PTR, $1);
|
||||||
|
parser_leak_remove(LEAK_MEMBER, $4);
|
||||||
if (!alias_add(&parsed_policy, $1, CMNDALIAS,
|
if (!alias_add(&parsed_policy, $1, CMNDALIAS,
|
||||||
sudoers, alias_line, alias_column, $4)) {
|
sudoers, alias_line, alias_column, $4)) {
|
||||||
alias_error($1, errno);
|
alias_error($1, errno);
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
parser_leak_remove(LEAK_PTR, $1);
|
|
||||||
parser_leak_remove(LEAK_MEMBER, $4);
|
|
||||||
}
|
}
|
||||||
| reserved_alias '=' cmndlist
|
| reserved_alias '=' cmndlist
|
||||||
;
|
;
|
||||||
@@ -1000,13 +1000,13 @@ runasalias : ALIAS {
|
|||||||
alias_line = this_lineno;
|
alias_line = this_lineno;
|
||||||
alias_column = sudolinebuf.toke_start + 1;
|
alias_column = sudolinebuf.toke_start + 1;
|
||||||
} '=' userlist {
|
} '=' userlist {
|
||||||
|
parser_leak_remove(LEAK_PTR, $1);
|
||||||
|
parser_leak_remove(LEAK_MEMBER, $4);
|
||||||
if (!alias_add(&parsed_policy, $1, RUNASALIAS,
|
if (!alias_add(&parsed_policy, $1, RUNASALIAS,
|
||||||
sudoers, alias_line, alias_column, $4)) {
|
sudoers, alias_line, alias_column, $4)) {
|
||||||
alias_error($1, errno);
|
alias_error($1, errno);
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
parser_leak_remove(LEAK_PTR, $1);
|
|
||||||
parser_leak_remove(LEAK_MEMBER, $4);
|
|
||||||
}
|
}
|
||||||
| reserved_alias '=' userlist
|
| reserved_alias '=' userlist
|
||||||
;
|
;
|
||||||
@@ -1019,13 +1019,13 @@ useralias : ALIAS {
|
|||||||
alias_line = this_lineno;
|
alias_line = this_lineno;
|
||||||
alias_column = sudolinebuf.toke_start + 1;
|
alias_column = sudolinebuf.toke_start + 1;
|
||||||
} '=' userlist {
|
} '=' userlist {
|
||||||
|
parser_leak_remove(LEAK_PTR, $1);
|
||||||
|
parser_leak_remove(LEAK_MEMBER, $4);
|
||||||
if (!alias_add(&parsed_policy, $1, USERALIAS,
|
if (!alias_add(&parsed_policy, $1, USERALIAS,
|
||||||
sudoers, alias_line, alias_column, $4)) {
|
sudoers, alias_line, alias_column, $4)) {
|
||||||
alias_error($1, errno);
|
alias_error($1, errno);
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
parser_leak_remove(LEAK_PTR, $1);
|
|
||||||
parser_leak_remove(LEAK_MEMBER, $4);
|
|
||||||
}
|
}
|
||||||
| reserved_alias '=' userlist
|
| reserved_alias '=' userlist
|
||||||
;
|
;
|
||||||
|
Reference in New Issue
Block a user