ldap/servers/slapd/connection.c | 1 +
ldap/servers/slapd/daemon.c | 7 +++++++
ldap/servers/slapd/proto-slap.h | 1 +
3 files changed, 9 insertions(+)
New commits:
commit ed26da0722a23a50fb286e8bc57ec4fea8dde4a2
Author: Matthew Via <​matthew.via(a)mailtrust.com>
Date: Wed Jul 10 11:30:57 2013 -0600
Ticket #47428 - Memory leak in 389-ds-base 1.2.11.15
https://fedorahosted.org/389/ticket/47428
Reviewed by: rmeggins
Branch: 389-ds-base-1.3.1
Fix Description: Call ber_sockbuf_remove_io to remove our openldap io layer
from the connection c_sb and free the data associated with it.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
(cherry picked from commit df93b03da12c22d18a4153105f687671e52efdd5)
diff --git a/ldap/servers/slapd/connection.c b/ldap/servers/slapd/connection.c
index 866731d..63bf847 100644
--- a/ldap/servers/slapd/connection.c
+++ b/ldap/servers/slapd/connection.c
@@ -203,6 +203,7 @@ connection_cleanup(Connection *conn)
/* destroy any sasl context */
sasl_dispose((sasl_conn_t**)&conn->c_sasl_conn);
/* PAGED_RESULTS */
+ handle_closed_connection(conn); /* Clean up sockbufs */
pagedresults_cleanup(conn, 0 /* do not need to lock inside */);
/* free the connection socket buffer */
diff --git a/ldap/servers/slapd/daemon.c b/ldap/servers/slapd/daemon.c
index 6c8792f..a745b6d 100644
--- a/ldap/servers/slapd/daemon.c
+++ b/ldap/servers/slapd/daemon.c
@@ -2593,6 +2593,13 @@ bail:
#endif /* ENABLE_AUTOBIND */
#endif /* ENABLE_LDAPI */
+void
+handle_closed_connection(Connection *conn)
+{
+ ber_sockbuf_remove_io(conn->c_sb, &openldap_sockbuf_io,
+ LBER_SBIOD_LEVEL_PROVIDER);
+}
+
/* NOTE: this routine is not reentrant */
static int
handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *pr_acceptfd, int
secure, int local)
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
index 2b973be..ad4b87a 100644
--- a/ldap/servers/slapd/proto-slap.h
+++ b/ldap/servers/slapd/proto-slap.h
@@ -1405,6 +1405,7 @@ int sasl_io_setup(Connection *c);
/*
* daemon.c
*/
+void handle_closed_connection(Connection *);
#ifndef LINUX
void slapd_do_nothing(int);
#endif