Blob Blame History Raw
Don't unparse empty uri string.

Resolves: #628726
Upstream ITS: #6465 (http://www.openldap.org/its/index.cgi/Software%20Bugs?id=6465)

diff -urpNP openldap-2.4.21/servers/slapd/config.c openldap-2.4.21.new/servers/slapd/config.c
--- openldap-2.4.21/servers/slapd/config.c	2009-12-12 07:18:52.000000000 +0100
+++ openldap-2.4.21.new/servers/slapd/config.c	2010-09-16 13:44:43.574647921 +0200
@@ -1458,23 +1458,31 @@ slap_cf_aux_table_unparse( void *src, st
 			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;
+			{
+				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;
+
+					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: