mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-25 09:09:54 -05:00
ITS#9295 Handle add+delete on a single-value attr
This commit is contained in:
parent
0886121233
commit
afa19de2cb
3 changed files with 39 additions and 5 deletions
|
|
@ -2296,9 +2296,16 @@ syncrepl_accesslog_mods(
|
|||
mod->sml_nvalues = NULL;
|
||||
mod->sml_numvals = 0;
|
||||
|
||||
/* Keep 'op' to reflect what we read out from accesslog */
|
||||
if ( op == LDAP_MOD_ADD && is_at_single_value( ad->ad_type ))
|
||||
mod->sml_op = LDAP_MOD_REPLACE;
|
||||
if ( is_at_single_value( ad->ad_type ) ) {
|
||||
if ( op == LDAP_MOD_ADD ) {
|
||||
/* ITS#9295 an ADD might conflict with an existing value */
|
||||
mod->sml_op = LDAP_MOD_REPLACE;
|
||||
} else if ( op == LDAP_MOD_DELETE ) {
|
||||
/* ITS#9295 the above REPLACE could invalidate subsequent
|
||||
* DELETEs */
|
||||
mod->sml_op = SLAP_MOD_SOFTDEL;
|
||||
}
|
||||
}
|
||||
|
||||
*modtail = mod;
|
||||
modtail = &mod->sml_next;
|
||||
|
|
@ -2556,6 +2563,7 @@ syncrepl_resolve_cb( Operation *op, SlapReply *rs )
|
|||
continue;
|
||||
}
|
||||
if ( m2->sml_op == LDAP_MOD_DELETE ||
|
||||
m2->sml_op == SLAP_MOD_SOFTDEL ||
|
||||
m2->sml_op == LDAP_MOD_REPLACE ) {
|
||||
int numvals = m2->sml_numvals;
|
||||
if ( m2->sml_op == LDAP_MOD_REPLACE )
|
||||
|
|
@ -2567,7 +2575,8 @@ drop:
|
|||
op->o_tmpfree( m1, op->o_tmpmemctx );
|
||||
continue;
|
||||
}
|
||||
if ( m1->sml_op == LDAP_MOD_DELETE ) {
|
||||
if ( m1->sml_op == LDAP_MOD_DELETE ||
|
||||
m1->sml_op == SLAP_MOD_SOFTDEL ) {
|
||||
if ( m1->sml_numvals == 0 ) {
|
||||
/* turn this to SOFTDEL later */
|
||||
m1->sml_flags = SLAP_MOD_INTERNAL;
|
||||
|
|
|
|||
|
|
@ -177,6 +177,17 @@ sn: Jones
|
|||
-
|
||||
add: sn
|
||||
sn: Jones
|
||||
-
|
||||
add: displayName
|
||||
displayName: The one
|
||||
|
||||
dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
|
||||
changetype: modify
|
||||
add: displayName
|
||||
displayName: James the First
|
||||
-
|
||||
delete: displayName
|
||||
displayName: The one
|
||||
|
||||
dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
|
||||
changetype: modify
|
||||
|
|
|
|||
|
|
@ -307,7 +307,9 @@ n=`expr $n + 1`
|
|||
done
|
||||
|
||||
echo "Using ldapadd to populate server 2..."
|
||||
$LDAPADD -D "$MANAGERDN" -H $URI2 -w $PASSWD -f $LDIFADD1 \
|
||||
cp $LDIFADD1 $TESTDIR/add.ldif
|
||||
echo "displayName: The other" >>$TESTDIR/add.ldif
|
||||
$LDAPADD -D "$MANAGERDN" -H $URI2 -w $PASSWD -f $TESTDIR/add.ldif \
|
||||
>> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
|
|
@ -397,6 +399,12 @@ dn: $THEDN
|
|||
changetype: modify
|
||||
add: description
|
||||
description: Amazing
|
||||
-
|
||||
add: displayName
|
||||
displayName: James the Second
|
||||
-
|
||||
delete: displayName
|
||||
displayName: The other
|
||||
|
||||
EOF
|
||||
RC=$?
|
||||
|
|
@ -414,6 +422,12 @@ replace: employeetype
|
|||
-
|
||||
add: description
|
||||
description: Stupendous
|
||||
-
|
||||
add: displayName
|
||||
displayName: James II
|
||||
-
|
||||
delete: displayName
|
||||
displayName: The other
|
||||
|
||||
EOF
|
||||
RC=$?
|
||||
|
|
|
|||
Loading…
Reference in a new issue