From 676a9288a065515e66d5ce5cd52632f2fa2039fa Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Tue, 8 Jan 2013 17:49:40 +0100 Subject: [PATCH] more about ITS#7487 --- servers/slapd/overlays/memberof.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/servers/slapd/overlays/memberof.c b/servers/slapd/overlays/memberof.c index 84c1457699..c3cc3cfbf0 100644 --- a/servers/slapd/overlays/memberof.c +++ b/servers/slapd/overlays/memberof.c @@ -817,6 +817,7 @@ memberof_op_modify( Operation *op, SlapReply *rs ) switch ( ml->sml_op ) { case LDAP_MOD_DELETE: case LDAP_MOD_REPLACE: + case SLAP_MOD_SOFTDEL: /* ITS#7487: can be used by syncrepl (in mirror mode?) */ save_member = 1; break; } @@ -844,6 +845,7 @@ memberof_op_modify( Operation *op, SlapReply *rs ) switch ( ml->sml_op ) { case LDAP_MOD_DELETE: + case SLAP_MOD_SOFTDEL: /* ITS#7487: can be used by syncrepl (in mirror mode?) */ /* we don't care about cancellations: if the value * exists, fine; if it doesn't, we let the underlying * database fail as appropriate; */ @@ -858,6 +860,8 @@ memberof_op_modify( Operation *op, SlapReply *rs ) } case LDAP_MOD_ADD: + case SLAP_MOD_SOFTADD: /* ITS#7487 */ + case SLAP_MOD_ADD_IF_NOT_PRESENT: /* ITS#7487 */ /* NOTE: right now, the attributeType we use * for member must have a normalized value */ assert( ml->sml_nvalues != NULL ); @@ -946,6 +950,7 @@ memberof_op_modify( Operation *op, SlapReply *rs ) switch ( ml->sml_op ) { case LDAP_MOD_DELETE: + case SLAP_MOD_SOFTDEL: /* ITS#7487: can be used by syncrepl (in mirror mode?) */ if ( ml->sml_nvalues != NULL ) { AccessControlState acl_state = ACL_STATE_INIT; @@ -1056,12 +1061,15 @@ memberof_op_modify( Operation *op, SlapReply *rs ) goto done2; } - if ( ml->sml_op == LDAP_MOD_DELETE || !ml->sml_values ) { + if ( ml->sml_op == LDAP_MOD_DELETE || ml->sml_op == SLAP_MOD_SOFTDEL || !ml->sml_values ) { break; } /* fall thru */ - case LDAP_MOD_ADD: { + case LDAP_MOD_ADD: + case SLAP_MOD_SOFTADD: /* ITS#7487 */ + case SLAP_MOD_ADD_IF_NOT_PRESENT: /* ITS#7487 */ + { AccessControlState acl_state = ACL_STATE_INIT; for ( i = 0; !BER_BVISNULL( &ml->sml_nvalues[ i ] ); i++ ) { @@ -1363,6 +1371,7 @@ memberof_res_modify( Operation *op, SlapReply *rs ) switch ( mml->sml_op ) { case LDAP_MOD_DELETE: + case SLAP_MOD_SOFTDEL: /* ITS#7487: can be used by syncrepl (in mirror mode?) */ if ( vals != NULL ) { for ( i = 0; !BER_BVISNULL( &vals[ i ] ); i++ ) { memberof_value_modify( op, @@ -1396,6 +1405,8 @@ memberof_res_modify( Operation *op, SlapReply *rs ) /* fall thru */ case LDAP_MOD_ADD: + case SLAP_MOD_SOFTADD: /* ITS#7487 */ + case SLAP_MOD_ADD_IF_NOT_PRESENT: /* ITS#7487 */ assert( vals != NULL ); for ( i = 0; !BER_BVISNULL( &vals[ i ] ); i++ ) { @@ -1446,7 +1457,7 @@ memberof_res_modify( Operation *op, SlapReply *rs ) } } - if ( ml->sml_op == LDAP_MOD_DELETE || !ml->sml_values ) { + if ( ml->sml_op == LDAP_MOD_DELETE || ml->sml_op == SLAP_MOD_SOFTDEL || !ml->sml_values ) { break; } /* fall thru */ -- 2.39.5