From 9b1b2841b3697ff03a788c536bb05bdce9e0531f Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sat, 12 Dec 2009 07:18:52 +0000 Subject: [PATCH] ITS#6430, more for #6419 --- servers/slapd/config.c | 34 ++++++++++++++++++++++++++++++++++ servers/slapd/slap.h | 8 ++++++++ 2 files changed, 42 insertions(+) diff --git a/servers/slapd/config.c b/servers/slapd/config.c index df317d0028..78a270e71f 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -1353,6 +1353,20 @@ slap_cf_aux_table_parse( const char *word, void *dst, slap_cf_aux_table *tab0, L rc = lutil_atoulx( ulptr, val, 0 ); break; + + case 'x': + if ( tab->aux != NULL ) { + struct berval value; + slap_cf_aux_table_parse_x *func = (slap_cf_aux_table_parse_x *)tab->aux; + + ber_str2bv( val, 0, 1, &value ); + + rc = func( &value, (void *)((char *)dst + tab->off), tab, tabmsg, 0 ); + + } else { + rc = 1; + } + break; } if ( rc ) { @@ -1443,6 +1457,26 @@ slap_cf_aux_table_unparse( void *src, struct berval *bv, slap_cf_aux_table *tab0 ptr += snprintf( ptr, sizeof( buf ) - ( ptr - buf ), "%lu", *ulptr ); break; + case 'x': + *ptr++ = ' '; + ptr = lutil_strcopy( ptr, tab->key.bv_val ); + if ( tab->quote ) *ptr++ = '"'; + if ( tab->aux != NULL ) { + struct berval value; + slap_cf_aux_table_parse_x *func = (slap_cf_aux_table_parse_x *)tab->aux; + int rc; + + value.bv_val = ptr; + value.bv_len = buf + sizeof( buf ) - ptr; + + rc = func( &value, (void *)((char *)src + tab->off), tab, "(unparse)", 1 ); + if ( rc == 0 ) { + ptr += value.bv_len; + } + } + if ( tab->quote ) *ptr++ = '"'; + break; + default: assert( 0 ); } diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index 076b898a5b..82e3d79674 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -1630,6 +1630,14 @@ typedef struct slap_cf_aux_table { void *aux; } slap_cf_aux_table; +typedef int +slap_cf_aux_table_parse_x LDAP_P(( + struct berval *val, + void *bc, + slap_cf_aux_table *tab0, + const char *tabmsg, + int unparse )); + #define SLAP_LIMIT_TIME 1 #define SLAP_LIMIT_SIZE 2 -- 2.39.5