diff --git a/CHANGES b/CHANGES index 37facb64de94b7cc806d5c1ca35c6c6d46f906c3..5e3f098bd8c648f5217e3a36779b9b6c0da2c0a9 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 655151a69a4f1d42118dce59c6bee6b7840270b5..1210b6582a61d67de7eac416cd27328711fe3854 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; } }