mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-28 18:49:34 -05:00
ITS#6843 Fix cn=config slapadd for global overlays with private
database instances (e.g. slapo-chain)
This commit is contained in:
parent
eeb7603de6
commit
db7304fc4e
1 changed files with 28 additions and 1 deletions
|
|
@ -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 +
|
||||
|
|
|
|||
Loading…
Reference in a new issue