s4:ldap_server use talloc_unlink() to avoid talloc_free() with references
authorAndrew Bartlett <abartlet@samba.org>
Wed, 18 Aug 2010 00:00:40 +0000 (10:00 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 18 Aug 2010 00:08:43 +0000 (10:08 +1000)
Both the session_info and the ldb can have references.

Andrew Bartlett

source4/ldap_server/ldap_bind.c

index 1b235f2a1bdacb5f67abd2eb5b59f2efe83df369..c97211cb2cb716b293615a60070873e56eb05e94 100644 (file)
@@ -63,12 +63,12 @@ static NTSTATUS ldapsrv_BindSimple(struct ldapsrv_call *call)
                result = LDAP_SUCCESS;
                errstr = NULL;
 
-               talloc_free(call->conn->session_info);
+               talloc_unlink(call->conn, call->conn->session_info);
                call->conn->session_info = session_info;
                talloc_steal(call->conn, session_info);
 
                /* don't leak the old LDB */
-               talloc_free(call->conn->ldb);
+               talloc_unlink(call->conn, call->conn->ldb);
 
                status = ldapsrv_backend_Init(call->conn);              
                
@@ -234,11 +234,11 @@ static NTSTATUS ldapsrv_BindSASL(struct ldapsrv_call *call)
                                                         "SASL:[%s]: Failed to get session info: %s", 
                                                         req->creds.SASL.mechanism, nt_errstr(status));
                        } else {
-                               talloc_free(old_session_info);
+                               talloc_unlink(conn, old_session_info);
                                talloc_steal(conn, conn->session_info);
                                
                                /* don't leak the old LDB */
-                               talloc_free(conn->ldb);
+                               talloc_unlink(conn, conn->ldb);
                                
                                status = ldapsrv_backend_Init(conn);