]> granicus.if.org Git - sudo/commitdiff
Fix memory leak in sudo_netgroup_lookup() in the non-error case.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 7 May 2016 13:57:15 +0000 (07:57 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 7 May 2016 13:57:15 +0000 (07:57 -0600)
Coverity CID 104572, 104573, 104574, 104575.

plugins/sudoers/ldap.c

index 91d53acc61bab169d2bf4cad353caa384f1ccc08..1c2091ac9c72e503917d90c5fa0417f2c6cae68b 100644 (file)
@@ -1407,6 +1407,7 @@ sudo_netgroup_lookup(LDAP *ld, struct passwd *pw,
     char *escaped_domain = NULL, *escaped_user = NULL;
     char *escaped_host = NULL, *escaped_shost = NULL, *filt = NULL;
     int filt_len, rc;
+    bool rval = false;
     debug_decl(sudo_netgroup_lookup, SUDOERS_DEBUG_LDAP);
 
     if (ldap_conf.timeout > 0) {
@@ -1533,13 +1534,15 @@ sudo_netgroup_lookup(LDAP *ld, struct passwd *pw,
        ng = old_tail ? STAILQ_NEXT(old_tail, entries) : STAILQ_FIRST(netgroups);
        if (ng != NULL) {
            if (!sudo_netgroup_lookup_nested(ld, base->val, tvp, netgroups, ng))
-               debug_return_bool(false);
+               goto done;
        }
     }
-    free(filt);
-    debug_return_bool(true);
+    rval = true;
+    goto done;
+
 oom:
     sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
+done:
     free(escaped_domain);
     free(escaped_user);
     free(escaped_host);
@@ -1547,7 +1550,7 @@ oom:
        free(escaped_shost);
     free(filt);
     ldap_msgfree(result);
-    debug_return_bool(false);
+    debug_return_bool(rval);
 }
 
 /*