]> git.sur5r.net Git - openldap/commitdiff
more about ITS#7487
authorPierangelo Masarati <ando@OpenLDAP.org>
Tue, 8 Jan 2013 16:49:40 +0000 (17:49 +0100)
committerPierangelo Masarati <ando@OpenLDAP.org>
Tue, 8 Jan 2013 16:50:13 +0000 (17:50 +0100)
servers/slapd/overlays/memberof.c

index 84c145769954dbc0e140e3899d2314e1c07c0e26..c3cc3cfbf02d105a6e801b02dbd0ce63bdc62766 100644 (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 */