mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-31 22:35:10 +00:00
Add free_userspecs() and free_default() and use them instead of
looping over the lists and calling free_userspec() and free_default().
This commit is contained in:
@@ -71,9 +71,6 @@ sudo_file_open(struct sudo_nss *nss)
|
||||
static int
|
||||
sudo_file_close(struct sudo_nss *nss)
|
||||
{
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct defaults *def;
|
||||
struct userspec *us;
|
||||
debug_decl(sudo_file_close, SUDOERS_DEBUG_NSS)
|
||||
|
||||
if (nss->handle != NULL) {
|
||||
@@ -82,14 +79,8 @@ sudo_file_close(struct sudo_nss *nss)
|
||||
sudoersin = NULL;
|
||||
|
||||
/* XXX - do in main module? */
|
||||
while ((us = TAILQ_FIRST(&nss->userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
while ((def = TAILQ_FIRST(&nss->defaults)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->defaults, def, entries);
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
free_userspecs(&nss->userspecs);
|
||||
free_defaults(&nss->defaults);
|
||||
}
|
||||
|
||||
debug_return_int(0);
|
||||
|
@@ -870,6 +870,21 @@ free_members(struct member_list *members)
|
||||
debug_return;
|
||||
}
|
||||
|
||||
void
|
||||
free_defaults(struct defaults_list *defs)
|
||||
{
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct defaults *def;
|
||||
debug_decl(free_defaults, SUDOERS_DEBUG_PARSER)
|
||||
|
||||
while ((def = TAILQ_FIRST(defs)) != NULL) {
|
||||
TAILQ_REMOVE(defs, def, entries);
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
|
||||
debug_return;
|
||||
}
|
||||
|
||||
void
|
||||
free_default(struct defaults *def, struct member_list **binding)
|
||||
{
|
||||
@@ -954,6 +969,20 @@ free_privilege(struct privilege *priv)
|
||||
debug_return;
|
||||
}
|
||||
|
||||
void
|
||||
free_userspecs(struct userspec_list *usl)
|
||||
{
|
||||
struct userspec *us;
|
||||
debug_decl(free_userspecs, SUDOERS_DEBUG_PARSER)
|
||||
|
||||
while ((us = TAILQ_FIRST(usl)) != NULL) {
|
||||
TAILQ_REMOVE(usl, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
|
||||
debug_return;
|
||||
}
|
||||
|
||||
void
|
||||
free_userspec(struct userspec *us)
|
||||
{
|
||||
@@ -984,23 +1013,11 @@ free_userspec(struct userspec *us)
|
||||
bool
|
||||
init_parser(const char *path, bool quiet)
|
||||
{
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct defaults *def;
|
||||
struct userspec *us;
|
||||
bool ret = true;
|
||||
void *next;
|
||||
debug_decl(init_parser, SUDOERS_DEBUG_PARSER)
|
||||
|
||||
TAILQ_FOREACH_SAFE(us, &userspecs, entries, next) {
|
||||
free_userspec(us);
|
||||
}
|
||||
TAILQ_INIT(&userspecs);
|
||||
|
||||
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
TAILQ_INIT(&defaults);
|
||||
|
||||
free_userspecs(&userspecs);
|
||||
free_defaults(&defaults);
|
||||
init_lexer();
|
||||
|
||||
if (!init_aliases()) {
|
||||
@@ -1045,7 +1062,7 @@ init_options(struct command_options *opts)
|
||||
opts->limitprivs = NULL;
|
||||
#endif
|
||||
}
|
||||
#line 996 "gram.c"
|
||||
#line 1013 "gram.c"
|
||||
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
|
||||
#if defined(__cplusplus) || defined(__STDC__)
|
||||
static int yygrowstack(void)
|
||||
@@ -2170,7 +2187,7 @@ case 116:
|
||||
}
|
||||
}
|
||||
break;
|
||||
#line 2121 "gram.c"
|
||||
#line 2138 "gram.c"
|
||||
}
|
||||
yyssp -= yym;
|
||||
yystate = *yyssp;
|
||||
|
@@ -1098,6 +1098,21 @@ free_members(struct member_list *members)
|
||||
debug_return;
|
||||
}
|
||||
|
||||
void
|
||||
free_defaults(struct defaults_list *defs)
|
||||
{
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct defaults *def;
|
||||
debug_decl(free_defaults, SUDOERS_DEBUG_PARSER)
|
||||
|
||||
while ((def = TAILQ_FIRST(defs)) != NULL) {
|
||||
TAILQ_REMOVE(defs, def, entries);
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
|
||||
debug_return;
|
||||
}
|
||||
|
||||
void
|
||||
free_default(struct defaults *def, struct member_list **binding)
|
||||
{
|
||||
@@ -1182,6 +1197,20 @@ free_privilege(struct privilege *priv)
|
||||
debug_return;
|
||||
}
|
||||
|
||||
void
|
||||
free_userspecs(struct userspec_list *usl)
|
||||
{
|
||||
struct userspec *us;
|
||||
debug_decl(free_userspecs, SUDOERS_DEBUG_PARSER)
|
||||
|
||||
while ((us = TAILQ_FIRST(usl)) != NULL) {
|
||||
TAILQ_REMOVE(usl, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
|
||||
debug_return;
|
||||
}
|
||||
|
||||
void
|
||||
free_userspec(struct userspec *us)
|
||||
{
|
||||
@@ -1212,23 +1241,11 @@ free_userspec(struct userspec *us)
|
||||
bool
|
||||
init_parser(const char *path, bool quiet)
|
||||
{
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct defaults *def;
|
||||
struct userspec *us;
|
||||
bool ret = true;
|
||||
void *next;
|
||||
debug_decl(init_parser, SUDOERS_DEBUG_PARSER)
|
||||
|
||||
TAILQ_FOREACH_SAFE(us, &userspecs, entries, next) {
|
||||
free_userspec(us);
|
||||
}
|
||||
TAILQ_INIT(&userspecs);
|
||||
|
||||
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
TAILQ_INIT(&defaults);
|
||||
|
||||
free_userspecs(&userspecs);
|
||||
free_defaults(&defaults);
|
||||
init_lexer();
|
||||
|
||||
if (!init_aliases()) {
|
||||
|
@@ -1253,10 +1253,7 @@ ldap_to_sudoers(LDAP *ld, struct ldap_result *lres,
|
||||
|
||||
oom:
|
||||
sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
|
||||
while ((us = TAILQ_FIRST(ldap_userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(ldap_userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
free_userspecs(ldap_userspecs);
|
||||
debug_return_ptr(NULL);
|
||||
}
|
||||
|
||||
@@ -1668,9 +1665,7 @@ sudo_ldap_getdefs(struct sudo_nss *nss)
|
||||
{
|
||||
struct ldap_config_str *base;
|
||||
struct sudo_ldap_handle *handle = nss->handle;
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct timeval tv, *tvp = NULL;
|
||||
struct defaults *def;
|
||||
LDAP *ld;
|
||||
LDAPMessage *entry, *result = NULL;
|
||||
char *filt;
|
||||
@@ -1682,10 +1677,7 @@ sudo_ldap_getdefs(struct sudo_nss *nss)
|
||||
ld = handle->ld;
|
||||
|
||||
/* Free old defaults, if any. */
|
||||
while ((def = TAILQ_FIRST(&nss->defaults)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->defaults, def, entries);
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
free_defaults(&nss->defaults);
|
||||
|
||||
filt = sudo_ldap_build_default_filter();
|
||||
if (filt == NULL) {
|
||||
@@ -1811,23 +1803,14 @@ static void
|
||||
sudo_ldap_result_free_nss(struct sudo_nss *nss)
|
||||
{
|
||||
struct sudo_ldap_handle *handle = nss->handle;
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct defaults *def;
|
||||
struct userspec *us;
|
||||
debug_decl(sudo_ldap_result_free_nss, SUDOERS_DEBUG_LDAP)
|
||||
|
||||
if (handle->pw != NULL)
|
||||
sudo_pw_delref(handle->pw);
|
||||
|
||||
/* XXX - do in main module? */
|
||||
while ((us = TAILQ_FIRST(&nss->userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
while ((def = TAILQ_FIRST(&nss->defaults)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->defaults, def, entries);
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
free_userspecs(&nss->userspecs);
|
||||
free_defaults(&nss->defaults);
|
||||
|
||||
debug_return;
|
||||
}
|
||||
@@ -1970,7 +1953,6 @@ sudo_ldap_query(struct sudo_nss *nss, struct passwd *pw)
|
||||
{
|
||||
struct sudo_ldap_handle *handle = nss->handle;
|
||||
struct ldap_result *lres = NULL;
|
||||
struct userspec *us;
|
||||
int ret = 0;
|
||||
LDAP *ld;
|
||||
debug_decl(sudo_ldap_query, SUDOERS_DEBUG_LDAP)
|
||||
@@ -1988,10 +1970,7 @@ sudo_ldap_query(struct sudo_nss *nss, struct passwd *pw)
|
||||
}
|
||||
|
||||
/* Free old userspecs, if any. */
|
||||
while ((us = TAILQ_FIRST(&nss->userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
free_userspecs(&nss->userspecs);
|
||||
|
||||
DPRINTF1("%s: ldap search user %s, host %s", __func__, pw->pw_name,
|
||||
user_runhost);
|
||||
@@ -2013,12 +1992,8 @@ sudo_ldap_query(struct sudo_nss *nss, struct passwd *pw)
|
||||
done:
|
||||
/* Cleanup. */
|
||||
sudo_ldap_result_free(lres);
|
||||
if (ret == -1) {
|
||||
while ((us = TAILQ_FIRST(&nss->userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
}
|
||||
if (ret == -1)
|
||||
free_userspecs(&nss->userspecs);
|
||||
debug_return_int(ret);
|
||||
}
|
||||
|
||||
|
@@ -270,7 +270,9 @@ void free_member(struct member *m);
|
||||
void free_members(struct member_list *members);
|
||||
void free_privilege(struct privilege *priv);
|
||||
void free_userspec(struct userspec *us);
|
||||
void free_userspecs(struct userspec_list *usl);
|
||||
void free_default(struct defaults *def, struct member_list **binding);
|
||||
void free_defaults(struct defaults_list *defs);
|
||||
|
||||
/* match_addr.c */
|
||||
bool addr_matches(char *n);
|
||||
|
@@ -279,9 +279,6 @@ sudo_sss_open(struct sudo_nss *nss)
|
||||
static int
|
||||
sudo_sss_close(struct sudo_nss *nss)
|
||||
{
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct defaults *def;
|
||||
struct userspec *us;
|
||||
struct sudo_sss_handle *handle;
|
||||
debug_decl(sudo_sss_close, SUDOERS_DEBUG_SSSD);
|
||||
|
||||
@@ -297,14 +294,8 @@ sudo_sss_close(struct sudo_nss *nss)
|
||||
nss->handle = NULL;
|
||||
|
||||
/* XXX - do in main module? */
|
||||
while ((us = TAILQ_FIRST(&nss->userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
while ((def = TAILQ_FIRST(&nss->defaults)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->defaults, def, entries);
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
free_userspecs(&nss->userspecs);
|
||||
free_defaults(&nss->defaults);
|
||||
}
|
||||
debug_return_int(0);
|
||||
}
|
||||
@@ -317,7 +308,6 @@ sudo_sss_query(struct sudo_nss *nss, struct passwd *pw)
|
||||
{
|
||||
struct sudo_sss_handle *handle = nss->handle;
|
||||
struct sss_sudo_result *sss_result = NULL;
|
||||
struct userspec *us;
|
||||
int ret = 0;
|
||||
debug_decl(sudo_sss_query, SUDOERS_DEBUG_SSSD);
|
||||
|
||||
@@ -330,10 +320,7 @@ sudo_sss_query(struct sudo_nss *nss, struct passwd *pw)
|
||||
}
|
||||
|
||||
/* Free old userspecs, if any. */
|
||||
while ((us = TAILQ_FIRST(&nss->userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
free_userspecs(&nss->userspecs);
|
||||
|
||||
/* Fetch list of sudoRole entries that match user and host. */
|
||||
sss_result = sudo_sss_result_get(nss, pw);
|
||||
@@ -358,12 +345,8 @@ sudo_sss_query(struct sudo_nss *nss, struct passwd *pw)
|
||||
done:
|
||||
/* Cleanup */
|
||||
handle->fn_free_result(sss_result);
|
||||
if (ret == -1) {
|
||||
while ((us = TAILQ_FIRST(&nss->userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
}
|
||||
if (ret == -1)
|
||||
free_userspecs(&nss->userspecs);
|
||||
|
||||
sudo_debug_printf(SUDO_DEBUG_DIAG, "Done with LDAP searches");
|
||||
|
||||
@@ -384,8 +367,6 @@ sudo_sss_getdefs(struct sudo_nss *nss)
|
||||
struct sudo_sss_handle *handle = nss->handle;
|
||||
struct sss_sudo_result *sss_result = NULL;
|
||||
struct sss_sudo_rule *sss_rule;
|
||||
struct member_list *prev_binding = NULL;
|
||||
struct defaults *def;
|
||||
uint32_t sss_error;
|
||||
unsigned int i;
|
||||
int rc;
|
||||
@@ -395,10 +376,7 @@ sudo_sss_getdefs(struct sudo_nss *nss)
|
||||
debug_return_int(-1);
|
||||
|
||||
/* Free old defaults, if any. */
|
||||
while ((def = TAILQ_FIRST(&nss->defaults)) != NULL) {
|
||||
TAILQ_REMOVE(&nss->defaults, def, entries);
|
||||
free_default(def, &prev_binding);
|
||||
}
|
||||
free_defaults(&nss->defaults);
|
||||
|
||||
sudo_debug_printf(SUDO_DEBUG_DIAG, "Looking for cn=defaults");
|
||||
|
||||
@@ -787,10 +765,7 @@ sss_to_sudoers(struct sudo_sss_handle *handle, struct sss_sudo_result *sss_resul
|
||||
|
||||
oom:
|
||||
sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
|
||||
while ((us = TAILQ_FIRST(sss_userspecs)) != NULL) {
|
||||
TAILQ_REMOVE(sss_userspecs, us, entries);
|
||||
free_userspec(us);
|
||||
}
|
||||
free_userspecs(sss_userspecs);
|
||||
debug_return_bool(false);
|
||||
}
|
||||
#endif /* HAVE_SSSD */
|
||||
|
Reference in New Issue
Block a user