From 53ca6f11530a73838d73d3064f4b3d48e477f614 Mon Sep 17 00:00:00 2001
From: Alan Hicks <ahicks@p-o.co.uk>
Date: Fri, 28 Oct 2016 16:38:20 +0100
Subject: [PATCH 25/33] Update to ldap_unbind_ext_s and remove redundant
 sigaction

---
 src/modules/authldap.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git src/modules/authldap.c src/modules/authldap.c
index 2180ed0..05c3331 100644
--- src/modules/authldap.c
+++ src/modules/authldap.c
@@ -167,14 +167,15 @@ static LDAP * ldap_con_get(void)
 static void authldap_free(gpointer data)
 {
 	LDAP *c = (LDAP *)data;
-	struct sigaction act, oldact;
-
-	memset(&act, 0, sizeof(act));
-	memset(&oldact, 0, sizeof(oldact));
-	act.sa_handler = SIG_IGN;
-	sigaction(SIGPIPE, &act, &oldact);
-	ldap_unbind_ext(c, NULL, NULL);
-	sigaction(SIGPIPE, &oldact, 0);
+
+	int err = ldap_set_option(c, LDAP_OPT_SERVER_CONTROLS, NULL );
+	if ( err != LDAP_OPT_SUCCESS ) {
+		TRACE(TRACE_ERR, "Could not unset controls");
+	}
+
+	if ((err = ldap_unbind_ext_s(c, NULL, NULL))) {
+		TRACE(TRACE_ERR, "ldap_unbind_ext_s failed: %s",  ldap_err2string(err));
+	}
 }
 
 /*
@@ -639,7 +640,7 @@ int auth_connect(void)
 int auth_disconnect(void)
 {
 	// Just free the pointer,
-        // G_PRIVATE_INIT calls GDestroyNotify
+	// G_PRIVATE_INIT calls GDestroyNotify
 	// which calls authldap_free()
 	g_private_replace(&ldap_conn_key, NULL);
 	return 0;
-- 
2.10.1 (Apple Git-78)

