]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
rlm_ldap: cleanup memory after ldap version query
authorAleksey Katargin <gureedo@intersvyaz.net>
Wed, 19 Oct 2016 10:25:07 +0000 (15:25 +0500)
committerAleksey Katargin <gureedo@intersvyaz.net>
Fri, 21 Oct 2016 04:47:56 +0000 (09:47 +0500)
Signed-off-by: Aleksey Katargin <gureedo@intersvyaz.net>
src/modules/rlm_ldap/rlm_ldap.c

index 94130268ac088db7a4ab3eec0cd9b5ef40f76025..15f3368c9b3e3391bda321b3a25c38965cc23465 100644 (file)
@@ -670,6 +670,8 @@ static int mod_instantiate(CONF_SECTION *conf, void *instance)
 
                ldap_errno = ldap_get_option(NULL, LDAP_OPT_API_INFO, &info);
                if (ldap_errno == LDAP_OPT_SUCCESS) {
+                       int i;
+
                        /*
                         *      Don't generate warnings if the compile type vendor name
                         *      is found within the link time vendor name.
@@ -691,8 +693,11 @@ static int mod_instantiate(CONF_SECTION *conf, void *instance)
                        INFO("rlm_ldap: libldap vendor: %s, version: %i", info.ldapai_vendor_name,
                             info.ldapai_vendor_version);
 
-                       ldap_memfree(info.ldapai_vendor_name);
+                       for ( i = 0; info.ldapai_extensions[i] != NULL; i++) {
+                               ldap_memfree(info.ldapai_extensions[i]);
+                       }
                        ldap_memfree(info.ldapai_extensions);
+                       ldap_memfree(info.ldapai_vendor_name);
                } else {
                        DEBUG("rlm_ldap: Falling back to build time libldap version info.  Query for LDAP_OPT_API_INFO "
                              "returned: %i", ldap_errno);
@@ -839,6 +844,7 @@ static int mod_instantiate(CONF_SECTION *conf, void *instance)
        /*
         *      Now iterate over all the 'server' config items
         */
+       if (!inst->server) inst->server = talloc_strdup(inst, "");
        for (cp = cf_pair_find(conf, "server");
             cp;
             cp = cf_pair_find_next(conf, cp, "server")) {