From: Ralf Haferkamp Date: Thu, 24 Feb 2011 17:50:08 +0000 (+0000) Subject: ITS#6843 Fix cn=config slapadd for global overlays with private X-Git-Tag: MIGRATION_CVS2GIT~54 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=db7304fc4e8cd4a69fee21ff43c9e0506e584002;p=openldap ITS#6843 Fix cn=config slapadd for global overlays with private database instances (e.g. slapo-chain) --- diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c index 1710f8e0d1..d38cbc3606 100644 --- a/servers/slapd/bconfig.c +++ b/servers/slapd/bconfig.c @@ -7140,6 +7140,7 @@ config_tool_entry_put( BackendDB *be, Entry *e, struct berval *text ) Operation *op = NULL; void *thrctx; int isFrontend = 0; + int isFrontendChild = 0; /* Create entry for frontend database if it does not exist already */ if ( !entry_put_got_frontend ) { @@ -7193,8 +7194,34 @@ config_tool_entry_put( BackendDB *be, Entry *e, struct berval *text ) } } } + + /* Child entries of the frontend database, e.g. slapo-chain's back-ldap + * instances, may appear before the config database entry in the ldif, skip + * auto-creation of olcDatabase={0}config in such a case */ + if ( !entry_put_got_config && + !strncmp( e->e_nname.bv_val, "olcDatabase", STRLENOF( "olcDatabase" ))) { + struct berval pdn; + dnParent( &e->e_nname, &pdn ); + while ( pdn.bv_len ) { + if ( !strncmp( pdn.bv_val, "olcDatabase", + STRLENOF( "olcDatabase" ))) { + if ( !strncmp( pdn.bv_val + + STRLENOF( "olcDatabase" ), "={-1}frontend", + STRLENOF( "={-1}frontend" )) || + !strncmp( pdn.bv_val + + STRLENOF( "olcDatabase" ), "=frontend", + STRLENOF( "=frontend" ))) { + + isFrontendChild = 1; + break; + } + } + dnParent( &pdn, &pdn ); + } + } + /* Create entry for config database if it does not exist already */ - if ( !entry_put_got_config && !isFrontend ) { + if ( !entry_put_got_config && !isFrontend && !isFrontendChild ) { if ( !strncmp( e->e_nname.bv_val, "olcDatabase", STRLENOF( "olcDatabase" ))) { if ( strncmp( e->e_nname.bv_val +