Commit afa19de2 authored by Ondřej Kuzník's avatar Ondřej Kuzník Committed by Quanah Gibson-Mount
Browse files

ITS#9295 Handle add+delete on a single-value attr

parent 08861212
......@@ -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=$?
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment