mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-30 13:30:57 +08:00
allow backends to automatically install overlays; issue warnings in case of duplicates (fixes ITS#3395 for cases (1.a), (1.b) and (2) simultaneously)
This commit is contained in:
parent
04b078d6eb
commit
ee4c10d5d0
@ -265,7 +265,7 @@ ldap_back_db_config(
|
||||
|| strcasecmp( argv[0], "map" ) == 0
|
||||
|| strncasecmp( argv[0], "rewrite", STRLENOF( "rewrite" ) ) == 0 )
|
||||
{
|
||||
if ( li->rwm_started == 0 && !overlay_is_inst( be, "rwm" ) ) {
|
||||
if ( li->rwm_started == 0 ) {
|
||||
if ( overlay_config( be, "rwm" ) ) {
|
||||
fprintf( stderr, "%s: line %d: "
|
||||
"unable to configure the \"rwm\" "
|
||||
|
@ -77,6 +77,48 @@ over_db_config(
|
||||
be->bd_info = oi->oi_orig;
|
||||
rc = oi->oi_orig->bi_db_config( be, fname, lineno,
|
||||
argc, argv );
|
||||
|
||||
if ( be->bd_info != oi->oi_orig ) {
|
||||
slap_overinfo *oi2;
|
||||
slap_overinst *on2, **onp;
|
||||
BackendDB be2 = *be;
|
||||
int i;
|
||||
|
||||
/* a database added an overlay;
|
||||
* work it around... */
|
||||
assert( overlay_is_over( be ) );
|
||||
|
||||
oi2 = ( slap_overinfo * )be->bd_info->bi_private;
|
||||
on2 = oi2->oi_list;
|
||||
|
||||
/* need to put a uniqueness check here as well;
|
||||
* note that in principle there could be more than
|
||||
* one overlay as a result of multiple calls to
|
||||
* overlay_config() */
|
||||
be2.bd_info = (BackendInfo *)oi;
|
||||
|
||||
for ( i = 0, onp = &on2; *onp; i++, onp = &(*onp)->on_next ) {
|
||||
if ( overlay_is_inst( &be2, (*onp)->on_bi.bi_type ) ) {
|
||||
Debug( LDAP_DEBUG_ANY, "over_db_config(): "
|
||||
"warning, freshly added "
|
||||
"overlay #%d \"%s\" is already in list\n",
|
||||
i, (*onp)->on_bi.bi_type, 0 );
|
||||
|
||||
/* NOTE: if the overlay already exists,
|
||||
* there is no way to merge the results
|
||||
* of the configuration that may have
|
||||
* occurred during bi_db_config(); we
|
||||
* just issue a warning, and the
|
||||
* administrator should deal with this */
|
||||
}
|
||||
}
|
||||
*onp = oi->oi_list;
|
||||
|
||||
oi->oi_list = on2;
|
||||
|
||||
ch_free( be->bd_info );
|
||||
}
|
||||
|
||||
be->bd_info = (BackendInfo *)oi;
|
||||
if ( rc != SLAP_CONF_UNKNOWN ) return rc;
|
||||
}
|
||||
@ -405,7 +447,7 @@ overlay_config( BackendDB *be, const char *ov )
|
||||
|
||||
on = overlay_find( ov );
|
||||
if ( !on ) {
|
||||
Debug( LDAP_DEBUG_ANY, "overlay %s not found\n", ov, 0, 0 );
|
||||
Debug( LDAP_DEBUG_ANY, "overlay \"%s\" not found\n", ov, 0, 0 );
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -457,6 +499,12 @@ overlay_config( BackendDB *be, const char *ov )
|
||||
be->bd_info = bi;
|
||||
|
||||
} else {
|
||||
if ( overlay_is_inst( be, ov ) ) {
|
||||
Debug( LDAP_DEBUG_ANY, "overlay_config(): "
|
||||
"warning, overlay \"%s\" "
|
||||
"already in list\n", ov, 0, 0 );
|
||||
}
|
||||
|
||||
oi = be->bd_info->bi_private;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user