diff --git a/CHANGES b/CHANGES index bcb099b4db24a582413369bf856416096000f6ad..a246ccc7482ae1fed89f5d0bb0abf960c6ed01f2 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,7 @@ OpenLDAP 2.4 Change Log OpenLDAP 2.4.22 Engineering Added slapd SLAP_SCHEMA_EXPOSE flag for hidden schema elements (ITS#6435) Fixed slapd certificateListValidate (ITS#6466) + Fixed slapd empty URI parsing (ITS#6465) Fixed slapd REP_ENTRY flag handling (ITS#5340) Fixed slapd sasl auxprop_lookup (ITS#6441) Fixed slapo-collect REP_ENTRY flag handling (ITS#5340,ITS#6423) diff --git a/servers/slapd/config.c b/servers/slapd/config.c index a08242ddf3a07a9f6b4ca1acb75e4689153a1157..bc1e4b486bce10372e4f21d08505b4c199e40d30 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -1458,23 +1458,31 @@ slap_cf_aux_table_unparse( void *src, struct berval *bv, slap_cf_aux_table *tab0 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; + { + char *saveptr=ptr; + *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; + 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; + rc = func( &value, (void *)((char *)src + tab->off), tab, "(unparse)", 1 ); + if ( rc == 0 ) { + if (value.bv_len) { + ptr += value.bv_len; + } else { + ptr = saveptr; + break; + } + } } + if ( tab->quote ) *ptr++ = '"'; } - if ( tab->quote ) *ptr++ = '"'; break; default: