From 48185a529eb82dd67206b7d6969c82531cc4b3f2 Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount <quanah@openldap.org> Date: Wed, 8 Jul 2009 05:29:16 +0000 Subject: [PATCH] ITS#6195 --- CHANGES | 1 + servers/slapd/ldapsync.c | 23 +++++++++++------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGES b/CHANGES index 1b2d783151..9d54c4c915 100644 --- a/CHANGES +++ b/CHANGES @@ -17,6 +17,7 @@ OpenLDAP 2.4.17 Engineering Fixed slapd cancel behavior (ITS#6137) Fixed slapd cert validation (ITS#6098) Fixed slapd connection_destroy assert (ITS#6089) + Fixed slapd csn normalization (ITS#6195) Fixed slapd errno handling (ITS#6037) Fixed slapd global alloc handling (ITS#6054) Fixed slapd hung writers (ITS#5836) diff --git a/servers/slapd/ldapsync.c b/servers/slapd/ldapsync.c index f71bedaf45..0e08030119 100644 --- a/servers/slapd/ldapsync.c +++ b/servers/slapd/ldapsync.c @@ -176,7 +176,7 @@ slap_parse_sync_cookie( char *csn_str; char *cval; char *next, *end; - AttributeDescription *ad = slap_schema.si_ad_modifyTimestamp; + AttributeDescription *ad = slap_schema.si_ad_entryCSN; if ( cookie == NULL ) return -1; @@ -230,13 +230,11 @@ slap_parse_sync_cookie( continue; } if ( !strncmp( next, "csn=", STRLENOF("csn=") )) { - slap_syntax_validate_func *validate; struct berval stamp; next += STRLENOF("csn="); while ( next < end ) { csn_str = next; - /* FIXME use csnValidate when it gets implemented */ csn_ptr = strchr( csn_str, '#' ); if ( !csn_ptr || csn_ptr > end ) break; @@ -244,14 +242,6 @@ slap_parse_sync_cookie( * want to parse the rid then. But we still iterate * through the string to find the end. */ - if ( ad ) { - stamp.bv_val = csn_str; - stamp.bv_len = csn_ptr - csn_str; - validate = ad->ad_type->sat_syntax->ssyn_validate; - if ( validate( ad->ad_type->sat_syntax, &stamp ) - != LDAP_SUCCESS ) - break; - } cval = strchr( csn_ptr, ';' ); if ( !cval ) cval = strchr(csn_ptr, ',' ); @@ -261,7 +251,16 @@ slap_parse_sync_cookie( stamp.bv_len = end - csn_str; if ( ad ) { struct berval bv; - ber_dupbv_x( &bv, &stamp, memctx ); + stamp.bv_val = csn_str; + if ( ad->ad_type->sat_syntax->ssyn_validate( + ad->ad_type->sat_syntax, &stamp ) != LDAP_SUCCESS ) + break; + if ( ad->ad_type->sat_equality->smr_normalize( + SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX, + ad->ad_type->sat_syntax, + ad->ad_type->sat_equality, + &stamp, &bv, memctx ) != LDAP_SUCCESS ) + break; ber_bvarray_add_x( &cookie->ctxcsn, &bv, memctx ); cookie->numcsns++; } -- GitLab