]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/rwm.c
per LDAPext discussion, delete pwdAccountLockedTime on password change
[openldap] / servers / slapd / overlays / rwm.c
index 19c18add906687ad16e8a7f03d43b1fc54743124..de1f5a830c40a81d53407b99441ab30a7d5c5567 100644 (file)
@@ -154,7 +154,8 @@ rwm_op_add( Operation *op, SlapReply *rs )
                                }
                        }
 
-               } else if ( !isupdate && (*ap)->a_desc->ad_type->sat_no_user_mod ) {
+               } else if ( !isupdate && !get_manageDIT( op ) && (*ap)->a_desc->ad_type->sat_no_user_mod )
+               {
                        goto next_attr;
 
                } else {
@@ -368,7 +369,10 @@ rwm_op_compare( Operation *op, SlapReply *rs )
                        }
 
                        if ( mapped_vals[ 0 ].bv_val != op->orc_ava->aa_value.bv_val ) {
-                               ber_bvreplace_x( &op->orc_ava->aa_value, &mapped_vals[0],
+                               /* NOTE: if we get here, rwm_dnattr_rewrite()
+                                * already freed the old value, so now 
+                                * it's invalid */
+                               ber_dupbv_x( &op->orc_ava->aa_value, &mapped_vals[0],
                                                op->o_tmpmemctx );
                                ber_memfree_x( mapped_vals[ 0 ].bv_val, NULL );
                        }
@@ -434,7 +438,8 @@ rwm_op_modify( Operation *op, SlapReply *rs )
                {
                        is_oc = 1;
 
-               } else if ( !isupdate && (*mlp)->sml_desc->ad_type->sat_no_user_mod  ) {
+               } else if ( !isupdate && !get_manageDIT( op ) && (*mlp)->sml_desc->ad_type->sat_no_user_mod  )
+               {
                        goto next_mod;
 
                } else {
@@ -892,6 +897,7 @@ rwm_attrs( Operation *op, SlapReply *rs, Attribute** a_first, int stripEntryDN )
                        }
                        
                } else if ( !isupdate
+                       && !get_manageDIT( op )
                        && (*ap)->a_desc->ad_type->sat_no_user_mod 
                        && (*ap)->a_desc->ad_type != slap_schema.si_at_undefined )
                {