mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
ITS#2808 fix UUIDNormalize, use it.
This commit is contained in:
parent
f2e1d7434b
commit
ccf224a759
@ -855,7 +855,15 @@ int slap_mods_opattrs(
|
|||||||
mod->sml_values[1].bv_len = 0;
|
mod->sml_values[1].bv_len = 0;
|
||||||
mod->sml_values[1].bv_val = NULL;
|
mod->sml_values[1].bv_val = NULL;
|
||||||
assert( mod->sml_values[0].bv_val );
|
assert( mod->sml_values[0].bv_val );
|
||||||
mod->sml_nvalues = NULL;
|
mod->sml_nvalues =
|
||||||
|
(BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
|
||||||
|
(*mod->sml_desc->ad_type->sat_equality->smr_normalize)(
|
||||||
|
SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
|
||||||
|
mod->sml_desc->ad_type->sat_syntax,
|
||||||
|
mod->sml_desc->ad_type->sat_equality,
|
||||||
|
mod->sml_values, mod->sml_nvalues, NULL );
|
||||||
|
mod->sml_nvalues[1].bv_len = 0;
|
||||||
|
mod->sml_nvalues[1].bv_val = NULL;
|
||||||
*modtail = mod;
|
*modtail = mod;
|
||||||
modtail = &mod->sml_next;
|
modtail = &mod->sml_next;
|
||||||
|
|
||||||
|
@ -1835,11 +1835,11 @@ UUIDNormalize(
|
|||||||
return LDAP_INVALID_SYNTAX;
|
return LDAP_INVALID_SYNTAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( j % 2 ) {
|
if( j & 1 ) {
|
||||||
octet = nibble << 4;
|
|
||||||
} else {
|
|
||||||
octet |= nibble;
|
octet |= nibble;
|
||||||
normalized->bv_val[j>>1] = octet;
|
normalized->bv_val[j>>1] = octet;
|
||||||
|
} else {
|
||||||
|
octet = nibble << 4;
|
||||||
}
|
}
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
@ -895,6 +895,7 @@ syncrepl_entry(
|
|||||||
AttributeAssertion ava = {0};
|
AttributeAssertion ava = {0};
|
||||||
int rc = LDAP_SUCCESS;
|
int rc = LDAP_SUCCESS;
|
||||||
int ret = LDAP_SUCCESS;
|
int ret = LDAP_SUCCESS;
|
||||||
|
const char *text;
|
||||||
|
|
||||||
if ( refresh &&
|
if ( refresh &&
|
||||||
( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_ADD ))
|
( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_ADD ))
|
||||||
@ -908,6 +909,17 @@ syncrepl_entry(
|
|||||||
return e ? 1 : 0;
|
return e ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f.f_choice = LDAP_FILTER_EQUALITY;
|
||||||
|
f.f_ava = &ava;
|
||||||
|
ava.aa_desc = slap_schema.si_ad_entryUUID;
|
||||||
|
rc = asserted_value_validate_normalize(
|
||||||
|
ava.aa_desc, ad_mr(ava.aa_desc, SLAP_MR_EQUALITY),
|
||||||
|
SLAP_MR_EQUALITY, syncUUID, &ava.aa_value, &text, op->o_tmpmemctx );
|
||||||
|
if ( rc != LDAP_SUCCESS ) {
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
op->ors_filter = &f;
|
||||||
|
|
||||||
op->ors_filterstr.bv_len = (sizeof("entryUUID=")-1) + syncUUID->bv_len;
|
op->ors_filterstr.bv_len = (sizeof("entryUUID=")-1) + syncUUID->bv_len;
|
||||||
op->ors_filterstr.bv_val = (char *) sl_malloc(
|
op->ors_filterstr.bv_val = (char *) sl_malloc(
|
||||||
op->ors_filterstr.bv_len + 1, op->o_tmpmemctx );
|
op->ors_filterstr.bv_len + 1, op->o_tmpmemctx );
|
||||||
@ -916,11 +928,6 @@ syncrepl_entry(
|
|||||||
syncUUID->bv_val, syncUUID->bv_len );
|
syncUUID->bv_val, syncUUID->bv_len );
|
||||||
op->ors_filterstr.bv_val[op->ors_filterstr.bv_len] = '\0';
|
op->ors_filterstr.bv_val[op->ors_filterstr.bv_len] = '\0';
|
||||||
|
|
||||||
f.f_choice = LDAP_FILTER_EQUALITY;
|
|
||||||
f.f_ava = &ava;
|
|
||||||
ava.aa_desc = slap_schema.si_ad_entryUUID;
|
|
||||||
ava.aa_value = *syncUUID;
|
|
||||||
op->ors_filter = &f;
|
|
||||||
op->ors_scope = LDAP_SCOPE_SUBTREE;
|
op->ors_scope = LDAP_SCOPE_SUBTREE;
|
||||||
|
|
||||||
/* get syncrepl cookie of shadow replica from subentry */
|
/* get syncrepl cookie of shadow replica from subentry */
|
||||||
@ -960,8 +967,8 @@ syncrepl_entry(
|
|||||||
rc == LDAP_NO_SUCH_OBJECT )
|
rc == LDAP_NO_SUCH_OBJECT )
|
||||||
{
|
{
|
||||||
attr_delete( &e->e_attrs, slap_schema.si_ad_entryUUID );
|
attr_delete( &e->e_attrs, slap_schema.si_ad_entryUUID );
|
||||||
attr_merge_normalize_one( e, slap_schema.si_ad_entryUUID,
|
attr_merge_one( e, slap_schema.si_ad_entryUUID,
|
||||||
syncUUID, op->o_tmpmemctx );
|
syncUUID, &ava.aa_value );
|
||||||
|
|
||||||
op->o_tag = LDAP_REQ_ADD;
|
op->o_tag = LDAP_REQ_ADD;
|
||||||
op->ora_e = e;
|
op->ora_e = e;
|
||||||
@ -1050,6 +1057,9 @@ syncrepl_entry(
|
|||||||
|
|
||||||
done :
|
done :
|
||||||
|
|
||||||
|
if ( ava.aa_value.bv_val ) {
|
||||||
|
ber_memfree_x( ava.aa_value.bv_val, op->o_tmpmemctx );
|
||||||
|
}
|
||||||
if ( si->si_syncUUID_ndn.bv_val ) {
|
if ( si->si_syncUUID_ndn.bv_val ) {
|
||||||
ber_memfree_x( si->si_syncUUID_ndn.bv_val, op->o_tmpmemctx );
|
ber_memfree_x( si->si_syncUUID_ndn.bv_val, op->o_tmpmemctx );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user