From d9c80f55a362f3e425927650c9e2d4c8db00eb92 Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Fri, 30 Jan 2009 20:10:13 +0000
Subject: [PATCH] ITS#5898

---
 CHANGES                          | 1 +
 servers/slapd/overlays/dynlist.c | 5 ++++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/CHANGES b/CHANGES
index 37facb64de..5e3f098bd8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -36,6 +36,7 @@ OpenLDAP 2.4.14 Engineering
 	Fixed slapd-ldif numerous bugs (ITS#5408)
 	Fixed slapd-ldif rename on same DN (ITS#5319)
 	Fixed slapd-ldif deadlock (ITS#5329)
+	Fixed slapo-dynlist handling of flags (ITS#5898)
 	Fixed slapo-memberof multiple instantiation (ITS#5903)
 	Fixed slapd-meta double response sending (ITS#5854)
 	Fixed slapd-meta alias deref for retry (ITS#5889)
diff --git a/servers/slapd/overlays/dynlist.c b/servers/slapd/overlays/dynlist.c
index 655151a69a..1210b6582a 100644
--- a/servers/slapd/overlays/dynlist.c
+++ b/servers/slapd/overlays/dynlist.c
@@ -452,12 +452,13 @@ dynlist_prepare_entry( Operation *op, SlapReply *rs, dynlist_info_t *dli )
 		o.o_groups = NULL;
 	}
 
+	e_flags = rs->sr_flags;
 	if ( !( rs->sr_flags & REP_ENTRY_MODIFIABLE ) ) {
 		e = entry_dup( rs->sr_entry );
+		e_flags |= ( REP_ENTRY_MODIFIABLE | REP_ENTRY_MUSTBEFREED );
 	} else {
 		e = rs->sr_entry;
 	}
-	e_flags = rs->sr_flags | ( REP_ENTRY_MODIFIABLE | REP_ENTRY_MUSTBEFREED );
 
 	dlc.dlc_e = e;
 	dlc.dlc_dli = dli;
@@ -855,6 +856,8 @@ done:;
 
 		if ( r.sr_flags & REP_ENTRY_MUSTBEFREED ) {
 			entry_free( r.sr_entry );
+			r.sr_entry = NULL;
+			r.sr_flags ^= REP_ENTRY_MUSTBEFREED;
 		}
 	}
 
-- 
GitLab