mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
misc addition to the previous glueing commit
This commit is contained in:
parent
d7d19b7420
commit
4e3c30bbf0
@ -23,6 +23,11 @@
|
||||
#include "back-bdb.h"
|
||||
#include "external.h"
|
||||
|
||||
static struct berval scbva[] = {
|
||||
BER_BVC("glue"),
|
||||
BER_BVNULL
|
||||
};
|
||||
|
||||
int bdb_modify_internal(
|
||||
Operation *op,
|
||||
DB_TXN *tid,
|
||||
@ -56,13 +61,18 @@ int bdb_modify_internal(
|
||||
e->e_attrs = attrs_dup( e->e_attrs );
|
||||
|
||||
for ( ml = modlist; ml != NULL; ml = ml->sml_next ) {
|
||||
int match;
|
||||
mod = &ml->sml_mod;
|
||||
switch( mod->sm_op ) {
|
||||
case LDAP_MOD_ADD:
|
||||
case LDAP_MOD_REPLACE:
|
||||
if ( mod->sm_desc == slap_schema.si_ad_structuralObjectClass ) {
|
||||
/* sc modify is internally allowed only to make an entry a glue */
|
||||
glue_attr_delete = 1;
|
||||
value_match( &match, slap_schema.si_ad_structuralObjectClass,
|
||||
slap_schema.si_ad_structuralObjectClass->ad_type->sat_equality,
|
||||
SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
|
||||
&mod->sm_values[0], &scbva[0], text );
|
||||
if ( !match )
|
||||
glue_attr_delete = 1;
|
||||
}
|
||||
}
|
||||
if ( glue_attr_delete )
|
||||
|
@ -1032,6 +1032,11 @@ done:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static struct berval uuidbva[] = {
|
||||
BER_BVNULL,
|
||||
BER_BVNULL
|
||||
};
|
||||
|
||||
int
|
||||
syncrepl_entry(
|
||||
syncinfo_t* si,
|
||||
@ -1185,10 +1190,26 @@ syncrepl_entry(
|
||||
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
if ( rc == LDAP_ALREADY_EXISTS ) {
|
||||
Modifications *mod;
|
||||
Modifications *modtail;
|
||||
|
||||
for ( mod = modlist; mod != NULL; mod = mod->sml_next ) {
|
||||
modtail = mod;
|
||||
}
|
||||
|
||||
mod = (Modifications *)ch_calloc(1, sizeof(Modifications));
|
||||
ber_dupbv( &uuidbva[0], syncUUID );
|
||||
mod->sml_op = LDAP_MOD_REPLACE;
|
||||
mod->sml_desc = slap_schema.si_ad_entryUUID;
|
||||
mod->sml_type = mod->sml_desc->ad_cname;
|
||||
mod->sml_bvalues = uuidbva;
|
||||
modtail->sml_next = mod;
|
||||
|
||||
op->o_tag = LDAP_REQ_MODIFY;
|
||||
op->orm_modlist = modlist;
|
||||
op->o_req_dn = e->e_name;
|
||||
op->o_req_ndn = e->e_nname;
|
||||
|
||||
rc = be->be_modify( op, &rs );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
#ifdef NEW_LOGGING
|
||||
|
Loading…
Reference in New Issue
Block a user