diff --git a/CHANGES b/CHANGES
index deaeb919daa9c7edc8cacd44d304d9d405b72026..b2b433e64354e347413b2c8589dd59445aac3941 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,7 @@
 OpenLDAP 2.4 Change Log
 
 OpenLDAP 2.4.23 Engineering
+	Fixed libldap memleaks (ITS#6568)
 	Fixed liblutil off-by-one with delta (ITS#6541)
 	Fixed slapd syncrepl rid logging (ITS#6533)
 	Fixed slapd-bdb hasSubordinates computation (ITS#6549)
diff --git a/libraries/libldap/request.c b/libraries/libldap/request.c
index 2c1e787bdf3721b822e7e8cfd122802b34705611..205599300a3fe8747f0a2b4029f29f4374e23a9e 100644
--- a/libraries/libldap/request.c
+++ b/libraries/libldap/request.c
@@ -124,10 +124,14 @@ ldap_send_initial_request(
 			if (ld->ld_options.ldo_cldapdn)
 				ldap_memfree(ld->ld_options.ldo_cldapdn);
 			ld->ld_options.ldo_cldapdn = ldap_strdup(dn);
+			ber_free( ber, 1 );
 			return 0;
 		}
 		if (msgtype != LDAP_REQ_ABANDON && msgtype != LDAP_REQ_SEARCH)
+		{
+			ber_free( ber, 1 );
 			return LDAP_PARAM_ERROR;
+		}
 	}
 #endif
 #ifdef LDAP_R_COMPILE
diff --git a/libraries/libldap/unbind.c b/libraries/libldap/unbind.c
index 15e6ee4f1b23c62756e542f4f42ba4af7ac7b26d..bd4df7a8497fb6674592b28e82f7aef1784396c2 100644
--- a/libraries/libldap/unbind.c
+++ b/libraries/libldap/unbind.c
@@ -154,6 +154,11 @@ ldap_ld_free(
 		LDAP_FREE( ld->ld_options.ldo_peer );
 		ld->ld_options.ldo_peer = NULL;
 	}
+
+	if ( ld->ld_options.ldo_cldapdn != NULL ) {
+		LDAP_FREE( ld->ld_options.ldo_cldapdn );
+		ld->ld_options.ldo_cldapdn = NULL;
+	}
 #endif
 
 #ifdef HAVE_CYRUS_SASL