From: Nick Porter Date: Mon, 10 Feb 2025 14:03:21 +0000 (+0000) Subject: Ensure ldap controls are freed on error X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b941f979d89b829f7879d1b1aa98eef0251401ea;p=thirdparty%2Ffreeradius-server.git Ensure ldap controls are freed on error --- diff --git a/src/lib/ldap/util.c b/src/lib/ldap/util.c index 7d786dfe762..201d18a916c 100644 --- a/src/lib/ldap/util.c +++ b/src/lib/ldap/util.c @@ -333,8 +333,14 @@ int fr_ldap_parse_url_extensions(LDAPControl **sss, size_t sss_len, char *extens int ret; if (!fr_sbuff_next_if_char(&sbuff, '=')) { + LDAPControl **s = sss; fr_strerror_const("Server side sort extension must be " "in the format \"[!]sss=[,key]\""); + error: + while (s < sss_p) { + if (*s) ldap_control_free(*s); + s++; + } return -1; } @@ -342,7 +348,7 @@ int fr_ldap_parse_url_extensions(LDAPControl **sss, size_t sss_len, char *extens if (ret != LDAP_SUCCESS) { fr_strerror_printf("Invalid server side sort value \"%s\": %s", fr_sbuff_current(&sbuff), ldap_err2string(ret)); - return -1; + goto error; } if (*sss_p) ldap_control_free(*sss_p); @@ -352,7 +358,7 @@ int fr_ldap_parse_url_extensions(LDAPControl **sss, size_t sss_len, char *extens if (ret != LDAP_SUCCESS) { fr_strerror_printf("Failed creating server sort control: %s", ldap_err2string(ret)); - return -1; + goto error; } sss_p++;