mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
save old values when deleting (ITS#5258; not optimal)
This commit is contained in:
parent
7a3f73efd8
commit
8958bcd60f
@ -748,10 +748,40 @@ memberof_op_modify( Operation *op, SlapReply *rs )
|
||||
save_dn = op->o_dn;
|
||||
save_ndn = op->o_ndn;
|
||||
|
||||
if ( MEMBEROF_DANGLING_CHECK( mo )
|
||||
&& !get_relax( op )
|
||||
&& memberof_isGroupOrMember( op, &iswhat ) == LDAP_SUCCESS
|
||||
if ( memberof_isGroupOrMember( op, &iswhat ) == LDAP_SUCCESS
|
||||
&& ( iswhat & MEMBEROF_IS_GROUP ) )
|
||||
{
|
||||
Modifications *ml;
|
||||
int save_member = 0;
|
||||
|
||||
for ( ml = op->orm_modlist; ml; ml = ml->sml_next ) {
|
||||
if ( ml->sml_desc == mo->mo_ad_member ) {
|
||||
switch ( ml->sml_op ) {
|
||||
case LDAP_MOD_DELETE:
|
||||
case LDAP_MOD_REPLACE:
|
||||
save_member = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( save_member ) {
|
||||
BerVarray vals = NULL;
|
||||
|
||||
op->o_dn = op->o_bd->be_rootdn;
|
||||
op->o_dn = op->o_bd->be_rootndn;
|
||||
op->o_bd->bd_info = (BackendInfo *)on->on_info;
|
||||
rc = backend_attribute( op, NULL, &op->o_req_ndn,
|
||||
mo->mo_ad_member, &vals, ACL_READ );
|
||||
op->o_bd->bd_info = (BackendInfo *)on;
|
||||
if ( rc == LDAP_SUCCESS && vals != NULL ) {
|
||||
memberof_saved_member_set( op, &saved_member_vals, vals );
|
||||
ber_bvarray_free_x( vals, op->o_tmpmemctx );
|
||||
}
|
||||
}
|
||||
|
||||
if ( MEMBEROF_DANGLING_CHECK( mo )
|
||||
&& !get_relax( op ) )
|
||||
{
|
||||
op->o_dn = op->o_bd->be_rootdn;
|
||||
op->o_dn = op->o_bd->be_rootndn;
|
||||
@ -843,6 +873,7 @@ memberof_op_modify( Operation *op, SlapReply *rs )
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( mmlp != NULL ) {
|
||||
Modifications *ml = *mmlp;
|
||||
@ -1280,12 +1311,10 @@ memberof_res_modify( Operation *op, SlapReply *rs )
|
||||
/* fall thru */
|
||||
|
||||
case LDAP_MOD_REPLACE:
|
||||
vals = memberof_saved_member_get( op, &saved_member_vals );
|
||||
|
||||
/* delete all ... */
|
||||
op->o_bd->bd_info = (BackendInfo *)on->on_info;
|
||||
rc = backend_attribute( op, NULL, &op->o_req_ndn,
|
||||
mo->mo_ad_member, &vals, ACL_READ );
|
||||
op->o_bd->bd_info = (BackendInfo *)on;
|
||||
if ( rc == LDAP_SUCCESS ) {
|
||||
if ( vals != NULL ) {
|
||||
for ( i = 0; !BER_BVISNULL( &vals[ i ] ); i++ ) {
|
||||
(void)memberof_value_modify( op, rs,
|
||||
&vals[ i ], mo->mo_ad_memberof,
|
||||
|
Loading…
Reference in New Issue
Block a user