From 2cdbd25a602c176812fd6c7e90fb6b3ba45b0e99 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Wed, 26 Feb 2003 01:41:22 +0000 Subject: [PATCH] SLAP_NVALUES mostly populated now --- servers/slapd/entry.c | 6 ++++-- servers/slapd/modify.c | 44 +++++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index 9884fff3fd..566fd63262 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -696,10 +696,12 @@ int entry_decode(struct berval *bv, Entry **e) if( rc ) { #ifdef NEW_LOGGING LDAP_LOG( OPERATION, DETAIL1, - "str2entry: NULL (ssyn_normalize %d)\n" , rc, 0, 0 ); + "entry_decode: NULL (ssyn_normalize %d)\n", + rc, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, - "<= str2entry NULL (ssyn_normalize %d)\n", rc, 0, 0 ); + "<= entry_decode NULL (ssyn_normalize %d)\n", + rc, 0, 0 ); #endif return rc; diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index c3a2763d96..aafd723610 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -562,7 +562,7 @@ int slap_mods_check( /* * check values */ - if( ml->sml_bvalues != NULL ) { + if( ml->sml_nvalues != NULL ) { ber_len_t nvals; slap_syntax_validate_func *validate = ad->ad_type->sat_syntax->ssyn_validate; @@ -583,14 +583,14 @@ int slap_mods_check( * check that each value is valid per syntax * and pretty if appropriate */ - for( nvals = 0; ml->sml_bvalues[nvals].bv_val; nvals++ ) { + for( nvals = 0; ml->sml_nvalues[nvals].bv_val; nvals++ ) { struct berval pval; if( pretty ) { rc = pretty( ad->ad_type->sat_syntax, - &ml->sml_bvalues[nvals], &pval ); + &ml->sml_nvalues[nvals], &pval ); } else { rc = validate( ad->ad_type->sat_syntax, - &ml->sml_bvalues[nvals] ); + &ml->sml_nvalues[nvals] ); } if( rc != 0 ) { @@ -602,16 +602,46 @@ int slap_mods_check( } if( pretty ) { - ber_memfree( ml->sml_bvalues[nvals].bv_val ); - ml->sml_bvalues[nvals] = pval; + ber_memfree( ml->sml_nvalues[nvals].bv_val ); + ml->sml_nvalues[nvals] = pval; } } +#ifdef SLAP_NVALUES + if( nvals && ad->ad_type->sat_equality && + ad->ad_type->sat_equality->smr_match && + ad->ad_type->sat_syntax->ssyn_normalize ) + { + ml->sml_nvalues = ch_malloc( (nvals+1)*sizeof(struct berval) ); + for( nvals = 0; ml->sml_nvalues[nvals].bv_val; nvals++ ) { + rc = ad->ad_type->sat_syntax->ssyn_normalize( + ad->ad_type->sat_syntax, + &ml->sml_values[nvals], &ml->sml_nvalues[nvals] ); + if( rc ) { +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, DETAIL1, + "str2entry: NULL (ssyn_normalize %d)\n", + rc, 0, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "<= str2entry NULL (ssyn_normalize %d)\n", + rc, 0, 0 ); +#endif + snprintf( textbuf, textlen, + "%s: value #%ld normalization failed", + ml->sml_type.bv_val, (long) nvals ); + *text = textbuf; + return rc; + } + } + } +#endif + /* * a rough single value check... an additional check is needed * to catch add of single value to existing single valued attribute */ - if( ( ml->sml_op == LDAP_MOD_ADD || ml->sml_op == LDAP_MOD_REPLACE ) + if ((ml->sml_op == LDAP_MOD_ADD || ml->sml_op == LDAP_MOD_REPLACE) && nvals > 1 && is_at_single_value( ad->ad_type )) { snprintf( textbuf, textlen, -- 2.39.5