From acfc393638ad1b81a4234173b060bb63907ee52c Mon Sep 17 00:00:00 2001 From: Pavel Zhukov Date: Mon, 1 Oct 2018 15:51:01 +0200 Subject: [PATCH] Replace simple return with cleanup flow Make cleanup more consistence to prevent leaks of memory pointed by filter/base/res --- ptclient/ldap.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/ptclient/ldap.c b/ptclient/ldap.c index 0b82d2c6b..65bae7bd6 100644 --- a/ptclient/ldap.c +++ b/ptclient/ldap.c @@ -1388,13 +1388,14 @@ static int ptsmodule_make_authstate_group( if (strncmp(canon_id, "group:", 6)) { // Sanity check *reply = "not a group identifier"; - return PTSM_FAIL; + rc = PTSM_FAIL; + goto done; } rc = ptsmodule_connect(); if (rc != PTSM_OK) { *reply = "ptsmodule_connect() failed"; - return rc; + goto done;; } rc = ptsmodule_expand_tokens(ptsm->group_filter, canon_id+6, NULL, &filter); @@ -1425,17 +1426,19 @@ static int ptsmodule_make_authstate_group( if (rc != LDAP_SUCCESS) { syslog(LOG_DEBUG, "(groups) Result from domain query not OK"); - return rc; + goto done; } else { syslog(LOG_DEBUG, "(groups) Result from domain query OK"); } if (ldap_count_entries(ptsm->ld, res) < 1) { syslog(LOG_ERR, "(groups) No domain %s found", domain); - return PTSM_FAIL; + rc = PTSM_FAIL; + goto done; } else if (ldap_count_entries(ptsm->ld, res) > 1) { syslog(LOG_ERR, "(groups) Multiple domains %s found", domain); - return PTSM_FAIL; + rc = PTSM_FAIL; + goto done; } else { syslog(LOG_DEBUG, "(groups) Domain %s found", domain); if ((entry = ldap_first_entry(ptsm->ld, res)) != NULL) { @@ -1452,7 +1455,7 @@ static int ptsmodule_make_authstate_group( } if (rc != PTSM_OK) { - return rc; + goto done; } else { base = xstrdup(ptsm->group_base); syslog(LOG_DEBUG, "Continuing with ptsm->group_base: %s", ptsm->group_base); @@ -1462,7 +1465,7 @@ static int ptsmodule_make_authstate_group( } else { rc = ptsmodule_expand_tokens(ptsm->group_base, canon_id, NULL, &base); if (rc != PTSM_OK) - return rc; + goto done; } syslog(LOG_DEBUG, "(groups) about to search %s for %s", base, filter);