/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2005-2014 The OpenLDAP Foundation.
+ * Copyright 2005-2015 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
if(tbe == c->be) {
Debug( LDAP_DEBUG_ANY, "%s: suffix already served by this backend!.\n",
c->log, 0, 0);
- return 1;
free(pdn.bv_val);
free(ndn.bv_val);
+ return 1;
} else if(tbe) {
BackendDB *b2 = tbe;
}
tbe = select_backend(&c->be->be_rootndn, 0);
- if(tbe != c->be) {
+ if(tbe != c->be && !SLAP_DBHIDDEN( c->be )) {
snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> can only be set when rootdn is under suffix",
c->argv[0] );
Debug(LDAP_DEBUG_ANY, "%s: %s\n",
if ( ce_type == Cft_Database )
nsibs--;
- if ( index != nsibs ) {
+ if ( index != nsibs || isfrontend ) {
if ( gotindex ) {
if ( index < nsibs ) {
if ( tailindex ) return LDAP_NAMING_VIOLATION;
{
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;
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;
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;
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;
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,
return NOID;
}
} else {
- if ( !strncmp( e->e_nname.bv_val +
- STRLENOF( "olcDatabase" ), "=frontend",
- STRLENOF( "=frontend" ) ) )
- {
- struct berval rdn, pdn, ndn;
- dnParent( &e->e_nname, &pdn );
- rdn.bv_val = ca.log;
- rdn.bv_len = snprintf(rdn.bv_val, sizeof( ca.log ),
- "%s=" SLAP_X_ORDERED_FMT "%s",
- cfAd_database->ad_cname.bv_val, -1,
- frontendDB->bd_info->bi_type );
- build_new_dn( &ndn, &pdn, &rdn, NULL );
- ber_memfree( e->e_name.bv_val );
- e->e_name = ndn;
- ber_bvreplace( &e->e_nname, &e->e_name );
- }
entry_put_got_frontend++;
isFrontend = 1;
}