From 7f9712344d5d952a0c21277b304eab7d601d4806 Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@openldap.org>
Date: Tue, 9 Sep 2014 14:40:11 +0100
Subject: [PATCH] ITS#7935 partially revert prev patch

Can't allow special chars in RDN, not all OSs/filesystems support it.
---
 servers/slapd/bconfig.c | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c
index c501135236..0868ea6d41 100644
--- a/servers/slapd/bconfig.c
+++ b/servers/slapd/bconfig.c
@@ -6434,6 +6434,8 @@ config_build_entry( Operation *op, SlapReply *rs, CfEntryInfo *parent,
 {
 	Entry *e = entry_alloc();
 	CfEntryInfo *ce = ch_calloc( 1, sizeof(CfEntryInfo) );
+	struct berval val;
+	struct berval ad_name;
 	AttributeDescription *ad = NULL;
 	int rc;
 	char *ptr;
@@ -6442,7 +6444,6 @@ config_build_entry( Operation *op, SlapReply *rs, CfEntryInfo *parent,
 	struct berval pdn;
 	ObjectClass *oc;
 	CfEntryInfo *ceprev = NULL;
-	LDAPRDN srdn = NULL;
 
 	Debug( LDAP_DEBUG_TRACE, "config_build_entry: \"%s\"\n", rdn->bv_val, 0, 0);
 	e->e_private = ce;
@@ -6471,17 +6472,16 @@ config_build_entry( Operation *op, SlapReply *rs, CfEntryInfo *parent,
 	if ( extra )
 		attr_merge_normalize_one(e, slap_schema.si_ad_objectClass,
 			extra->co_name, NULL );
-	if ( ldap_bv2rdn_x( rdn, &srdn, &ptr, LDAP_DN_FORMAT_LDAP, op->o_tmpmemctx ))
-		goto fail;
-
-	rc = slap_bv2ad( &srdn[0]->la_attr, &ad, &text );
+	ptr = strchr(rdn->bv_val, '=');
+	ad_name.bv_val = rdn->bv_val;
+	ad_name.bv_len = ptr - rdn->bv_val;
+	rc = slap_bv2ad( &ad_name, &ad, &text );
 	if ( rc ) {
-		ldap_rdnfree_x( srdn, op->o_tmpmemctx );
 		goto fail;
 	}
-	attr_merge_normalize_one(e, ad, &srdn[0]->la_value, NULL );
-	ldap_rdnfree_x( srdn, op->o_tmpmemctx );
-	srdn = NULL;
+	val.bv_val = ptr+1;
+	val.bv_len = rdn->bv_len - (val.bv_val - rdn->bv_val);
+	attr_merge_normalize_one(e, ad, &val, NULL );
 
 	oc = main->co_oc;
 	c->table = main->co_type;
@@ -6570,7 +6570,7 @@ config_build_schema_inc( ConfigArgs *c, CfEntryInfo *ceparent,
 		ptr = strchr( bv.bv_val, '.' );
 		if ( ptr )
 			bv.bv_len = ptr - bv.bv_val;
-		c->value_dn.bv_len = snprintf(c->value_dn.bv_val, sizeof( c->log ), "cn=\"" SLAP_X_ORDERED_FMT, c->depth);
+		c->value_dn.bv_len = snprintf(c->value_dn.bv_val, sizeof( c->log ), "cn=" SLAP_X_ORDERED_FMT, c->depth);
 		if ( c->value_dn.bv_len >= sizeof( c->log ) ) {
 			/* FIXME: how can indicate error? */
 			return -1;
@@ -6578,8 +6578,6 @@ config_build_schema_inc( ConfigArgs *c, CfEntryInfo *ceparent,
 		strncpy( c->value_dn.bv_val + c->value_dn.bv_len, bv.bv_val,
 			bv.bv_len );
 		c->value_dn.bv_len += bv.bv_len;
-		c->value_dn.bv_val[c->value_dn.bv_len] ='"';
-		c->value_dn.bv_len++;
 		c->value_dn.bv_val[c->value_dn.bv_len] ='\0';
 		if ( rdnNormalize( 0, NULL, NULL, &c->value_dn, &rdn, NULL )) {
 			Debug( LDAP_DEBUG_ANY,
-- 
GitLab