From 772b816c4488db36f48de98a88c3962aadc0f7ca Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 12 May 2017 12:38:59 +0200 Subject: [PATCH] s4:ldap_server: avoid using talloc_reference() Signed-off-by: Stefan Metzmacher Reviewed-by: Andrew Bartlett --- source4/ldap_server/ldap_bind.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/source4/ldap_server/ldap_bind.c b/source4/ldap_server/ldap_bind.c index 3ba7ea39111..71376429756 100644 --- a/source4/ldap_server/ldap_bind.c +++ b/source4/ldap_server/ldap_bind.c @@ -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; -- 2.47.2