]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:ldap_server: avoid using talloc_reference()
authorStefan Metzmacher <metze@samba.org>
Fri, 12 May 2017 10:38:59 +0000 (12:38 +0200)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 15 Jun 2017 07:13:24 +0000 (09:13 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/ldap_server/ldap_bind.c

index 3ba7ea391112bc5b2d04034d5588866e0c423e60..71376429756dfc491534e3fc1bc483703104f7de 100644 (file)
@@ -506,10 +506,6 @@ static NTSTATUS ldapsrv_BindSASL(struct ldapsrv_call *call)
                                         req->creds.SASL.mechanism, nt_errstr(status));
                        goto do_reply;
                }
-
-               if (!talloc_reference(context->sasl, conn->gensec)) {
-                       return NT_STATUS_NO_MEMORY;
-               }
        }
 
        status = gensec_session_info(conn->gensec, call, &session_info);
@@ -541,11 +537,19 @@ static NTSTATUS ldapsrv_BindSASL(struct ldapsrv_call *call)
        }
 
        if (context != NULL) {
+               const void *ptr = NULL;
+
+               ptr = talloc_reparent(conn, context->sasl, conn->gensec);
+               if (ptr == NULL) {
+                       return NT_STATUS_NO_MEMORY;
+               }
+
                call->postprocess_send = ldapsrv_sasl_postprocess_send;
                call->postprocess_recv = ldapsrv_sasl_postprocess_recv;
                call->postprocess_private = context;
+       } else {
+               talloc_unlink(conn, conn->gensec);
        }
-       talloc_unlink(conn, conn->gensec);
        conn->gensec = NULL;
 
        *resp->SASL.secblob = output;