looping over the lists and calling free_userspec() and free_default().
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) {
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);
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)
{
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)
{
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()) {
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)
}
}
break;
-#line 2121 "gram.c"
+#line 2138 "gram.c"
}
yyssp -= yym;
yystate = *yyssp;
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)
{
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)
{
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()) {
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);
}
{
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;
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) {
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;
}
{
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)
}
/* 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);
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);
}
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);
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);
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);
}
{
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);
}
/* 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);
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");
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;
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");
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 */