more about ITS#7487

This commit is contained in:
Pierangelo Masarati 2013-01-08 17:49:40 +01:00
parent 02f8963f74
commit f6cd91aadb

View File

@ -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 */