s3-libads: Do not leak the msg on error
authorAndreas Schneider <asn@samba.org>
Wed, 5 Oct 2016 08:33:26 +0000 (10:33 +0200)
committerRalph Boehme <slow@samba.org>
Wed, 8 Mar 2017 13:59:35 +0000 (14:59 +0100)
ldap_search_ext_s manpage states:
Note that res parameter of ldap_search_ext_s should be freed with
ldap_msgfree() regardless of return value of these functions.

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph B√∂hme <slow@samba.org>
Autobuild-Date(master): Wed Mar  8 14:59:35 CET 2017 on sn-devel-144

source3/libads/ldap.c

index 34d250fda50eb7b56ef13b741af8d8715dfbeba7..c70cdeb5163a129b5cddb9f756472b2514fca1e6 100644 (file)
@@ -1036,6 +1036,11 @@ done:
                ber_bvfree(ext_bv);
        }
 
+       if (rc != LDAP_SUCCESS && *res != NULL) {
+               ads_msgfree(ads, *res);
+               *res = NULL;
+       }
+
        /* if/when we decide to utf8-encode attrs, take out this next line */
        TALLOC_FREE(search_attrs);
 
@@ -1086,9 +1091,6 @@ static ADS_STATUS ads_do_paged_search(ADS_STRUCT *ads, const char *bind_path,
                status = ads_do_paged_search_args(ads, bind_path, scope, expr,
                                              attrs, args, &res2, &count, &cookie);
                if (!ADS_ERR_OK(status)) {
-                       /* Ensure we free all collected results */
-                       ads_msgfree(ads, *res);
-                       *res = NULL;
                        break;
                }