From: Kurt Zeilenga Date: Wed, 5 Dec 2001 21:36:59 +0000 (+0000) Subject: Add basic infrastructure for pretty routines X-Git-Tag: LDBM_PRE_GIANT_RWLOCK~760 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=f26e1b390e706679f6577fbab088aeed6febf1c5;p=openldap Add basic infrastructure for pretty routines A pretty routine may rewrite the representation of a value but must not alter the value itself. --- diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index c4d49baec1..ccb773a5a7 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -176,10 +176,23 @@ str2entry( char *s ) } if( slapMode & SLAP_TOOL_MODE ) { + struct berval *pval; slap_syntax_validate_func *validate = ad->ad_type->sat_syntax->ssyn_validate; + slap_syntax_transform_func *pretty = + ad->ad_type->sat_syntax->ssyn_pretty; - if( !validate ) { + if( pretty ) { + rc = pretty( ad->ad_type->sat_syntax, + &value, &pval ); + + } else if( validate ) { + /* + * validate value per syntax + */ + rc = validate( ad->ad_type->sat_syntax, &value ); + + } else { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_INFO, "str2entry: no validator for syntax %s\n", @@ -195,11 +208,6 @@ str2entry( char *s ) return NULL; } - /* - * validate value per syntax - */ - rc = validate( ad->ad_type->sat_syntax, &value ); - if( rc != 0 ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, @@ -215,6 +223,12 @@ str2entry( char *s ) free( type ); return NULL; } + + if( pretty ) { + free( value.bv_val ); + value = *pval; + free( pval ); + } } rc = attr_merge( e, ad, vals ); diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index b63fd72234..313c134602 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -490,8 +490,10 @@ int slap_modlist2mods( ber_len_t nvals; slap_syntax_validate_func *validate = ad->ad_type->sat_syntax->ssyn_validate; - - if( !validate ) { + slap_syntax_transform_func *pretty = + ad->ad_type->sat_syntax->ssyn_pretty; + + if( !pretty && !validate ) { slap_mods_free( mod ); *text = "no validator for syntax"; snprintf( textbuf, textlen, @@ -504,9 +506,17 @@ int slap_modlist2mods( /* * check that each value is valid per syntax + * and pretty if appropriate */ for( nvals = 0; ml->ml_bvalues[nvals]; nvals++ ) { - rc = validate( ad->ad_type->sat_syntax, ml->ml_bvalues[nvals] ); + struct berval *pval; + if( pretty ) { + rc = pretty( ad->ad_type->sat_syntax, + ml->ml_bvalues[nvals], &pval ); + } else { + rc = validate( ad->ad_type->sat_syntax, + ml->ml_bvalues[nvals] ); + } if( rc != 0 ) { slap_mods_free( mod ); @@ -516,6 +526,12 @@ int slap_modlist2mods( *text = textbuf; return LDAP_INVALID_SYNTAX; } + + if( pretty ) { + ber_memfree( ml->ml_bvalues[nvals]->bv_val ); + *ml->ml_bvalues[nvals] = *pval; + free( pval ); + } } /* diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c index 0b0c581623..62e871b1c4 100644 --- a/servers/slapd/schema_init.c +++ b/servers/slapd/schema_init.c @@ -436,7 +436,7 @@ int dnPretty( Syntax *syntax, struct berval *val, - struct berval **normalized) + struct berval **pretty) { struct berval *out = NULL; @@ -479,7 +479,7 @@ dnPretty( out = ber_bvdup( val ); } - *normalized = out; + *pretty = out; return( LDAP_SUCCESS ); }