From: Pierangelo Masarati Date: Tue, 8 Jan 2013 16:49:40 +0000 (+0100) Subject: more about ITS#7487 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=f6cd91aadb479425615c3d6e510b0c721ec55905;p=openldap more about ITS#7487 --- 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 */