mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 00:29:35 -05:00
Disable databases & overlays (experimental)
Do not use. backend/overlay code needs to be fixed accordingly. In particular, code which currently frees configuration in _db_close() must be changed to free only in _db_destroy(). After restructuring, it must be possible to call _db_close()/_db_open() multiple times in succession without requiring _db_config() in between.
This commit is contained in:
parent
b7df586674
commit
1d252a9236
4 changed files with 96 additions and 3 deletions
|
|
@ -264,6 +264,9 @@ int backend_startup(Backend *be)
|
|||
}
|
||||
|
||||
if(be != NULL) {
|
||||
/* silent noop if disabled */
|
||||
if ( SLAP_DBDISABLED( be ))
|
||||
return 0;
|
||||
if ( be->bd_info->bi_open ) {
|
||||
rc = be->bd_info->bi_open( be->bd_info );
|
||||
if ( rc != 0 ) {
|
||||
|
|
@ -315,6 +318,8 @@ int backend_startup(Backend *be)
|
|||
i = -1;
|
||||
LDAP_STAILQ_FOREACH(be, &backendDB, be_next) {
|
||||
i++;
|
||||
if ( SLAP_DBDISABLED( be ))
|
||||
continue;
|
||||
if ( be->be_suffix == NULL ) {
|
||||
Debug( LDAP_DEBUG_ANY,
|
||||
"backend_startup: warning, database %d (%s) "
|
||||
|
|
@ -372,6 +377,8 @@ int backend_shutdown( Backend *be )
|
|||
|
||||
/* close each backend database */
|
||||
LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) {
|
||||
if ( SLAP_DBDISABLED( be ))
|
||||
continue;
|
||||
if ( be->bd_info->bi_db_close ) {
|
||||
be->bd_info->bi_db_close( be, NULL );
|
||||
}
|
||||
|
|
@ -666,7 +673,7 @@ select_backend(
|
|||
Backend *be;
|
||||
|
||||
LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) {
|
||||
if ( be->be_nsuffix == NULL || SLAP_DBHIDDEN( be )) {
|
||||
if ( be->be_nsuffix == NULL || SLAP_DBHIDDEN( be ) || SLAP_DBDISABLED( be )) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -150,6 +150,8 @@ over_db_open(
|
|||
}
|
||||
|
||||
for (; on && rc == 0; on=on->on_next) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
db.bd_info = &on->on_bi;
|
||||
if ( db.bd_info->bi_db_open ) {
|
||||
rc = db.bd_info->bi_db_open( &db, cr );
|
||||
|
|
@ -171,6 +173,8 @@ over_db_close(
|
|||
int rc = 0;
|
||||
|
||||
for (; on && rc == 0; on=on->on_next) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
be->bd_info = &on->on_bi;
|
||||
if ( be->bd_info->bi_db_close ) {
|
||||
rc = be->bd_info->bi_db_close( be, cr );
|
||||
|
|
@ -203,6 +207,8 @@ over_db_destroy(
|
|||
}
|
||||
|
||||
for (; on && rc == 0; on=on->on_next) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
be->bd_info = &on->on_bi;
|
||||
if ( be->bd_info->bi_db_destroy ) {
|
||||
rc = be->bd_info->bi_db_destroy( be, cr );
|
||||
|
|
@ -232,6 +238,8 @@ over_back_response ( Operation *op, SlapReply *rs )
|
|||
db.be_flags |= SLAP_DBFLAG_OVERLAY;
|
||||
op->o_bd = &db;
|
||||
for (; on; on=on->on_next ) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
if ( on->on_response ) {
|
||||
db.bd_info = (BackendInfo *)on;
|
||||
rc = on->on_response( op, rs );
|
||||
|
|
@ -277,6 +285,8 @@ over_access_allowed(
|
|||
on = oi->oi_list;
|
||||
|
||||
for ( ; on; on = on->on_next ) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
if ( on->on_bi.bi_access_allowed ) {
|
||||
/* NOTE: do not copy the structure until required */
|
||||
if ( !SLAP_ISOVERLAY( op->o_bd ) ) {
|
||||
|
|
@ -338,6 +348,8 @@ overlay_entry_get_ov(
|
|||
int rc = SLAP_CB_CONTINUE;
|
||||
|
||||
for ( ; on; on = on->on_next ) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
if ( on->on_bi.bi_entry_get_rw ) {
|
||||
/* NOTE: do not copy the structure until required */
|
||||
if ( !SLAP_ISOVERLAY( op->o_bd ) ) {
|
||||
|
|
@ -409,6 +421,8 @@ overlay_entry_release_ov(
|
|||
int rc = SLAP_CB_CONTINUE;
|
||||
|
||||
for ( ; on; on = on->on_next ) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
if ( on->on_bi.bi_entry_release_rw ) {
|
||||
/* NOTE: do not copy the structure until required */
|
||||
if ( !SLAP_ISOVERLAY( op->o_bd ) ) {
|
||||
|
|
@ -487,6 +501,8 @@ over_acl_group(
|
|||
on = oi->oi_list;
|
||||
|
||||
for ( ; on; on = on->on_next ) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
if ( on->on_bi.bi_acl_group ) {
|
||||
/* NOTE: do not copy the structure until required */
|
||||
if ( !SLAP_ISOVERLAY( op->o_bd ) ) {
|
||||
|
|
@ -556,6 +572,8 @@ over_acl_attribute(
|
|||
on = oi->oi_list;
|
||||
|
||||
for ( ; on; on = on->on_next ) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
if ( on->on_bi.bi_acl_attribute ) {
|
||||
/* NOTE: do not copy the structure until required */
|
||||
if ( !SLAP_ISOVERLAY( op->o_bd ) ) {
|
||||
|
|
@ -655,6 +673,8 @@ int overlay_op_walk(
|
|||
int rc = SLAP_CB_CONTINUE;
|
||||
|
||||
for (; on; on=on->on_next ) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
func = &on->on_bi.bi_op_bind;
|
||||
if ( func[which] ) {
|
||||
op->o_bd->bd_info = (BackendInfo *)on;
|
||||
|
|
@ -849,6 +869,8 @@ over_connection_func(
|
|||
}
|
||||
|
||||
for ( ; on; on = on->on_next ) {
|
||||
if ( on->on_bi.bi_flags & SLAPO_BFLAG_DISABLED )
|
||||
continue;
|
||||
func = &on->on_bi.bi_connection_init;
|
||||
if ( func[ which ] ) {
|
||||
bd->bd_info = (BackendInfo *)on;
|
||||
|
|
|
|||
|
|
@ -197,6 +197,7 @@ enum {
|
|||
CFG_SYNC_SUBENTRY,
|
||||
CFG_LTHREADS,
|
||||
CFG_IX_HASH64,
|
||||
CFG_DISABLED,
|
||||
|
||||
CFG_LAST
|
||||
};
|
||||
|
|
@ -364,6 +365,9 @@ static ConfigTable config_back_cf_table[] = {
|
|||
{ "defaultSearchBase", "dn", 2, 2, 0, ARG_PRE_BI|ARG_PRE_DB|ARG_DN|ARG_QUOTE|ARG_MAGIC,
|
||||
&config_search_base, "( OLcfgGlAt:14 NAME 'olcDefaultSearchBase' "
|
||||
"SYNTAX OMsDN SINGLE-VALUE )", NULL, NULL },
|
||||
{ "disabled", "on|off", 2, 2, 0, ARG_DB|ARG_ON_OFF|ARG_MAGIC|CFG_DISABLED,
|
||||
&config_generic, "( OLcfgDbAt:0.21 NAME 'olcDisabled' "
|
||||
"SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
|
||||
{ "disallows", "features", 2, 0, 8, ARG_PRE_DB|ARG_MAGIC,
|
||||
&config_disallows, "( OLcfgGlAt:15 NAME 'olcDisallows' "
|
||||
"EQUALITY caseIgnoreMatch "
|
||||
|
|
@ -865,7 +869,7 @@ static ConfigOCs cf_ocs[] = {
|
|||
"DESC 'OpenLDAP Database-specific options' "
|
||||
"SUP olcConfig STRUCTURAL "
|
||||
"MUST olcDatabase "
|
||||
"MAY ( olcHidden $ olcSuffix $ olcSubordinate $ olcAccess $ "
|
||||
"MAY ( olcDisabled $ olcHidden $ olcSuffix $ olcSubordinate $ olcAccess $ "
|
||||
"olcAddContentAcl $ olcLastMod $ olcLimits $ "
|
||||
"olcMaxDerefDepth $ olcPlugin $ olcReadOnly $ olcReplica $ "
|
||||
"olcReplicaArgsFile $ olcReplicaPidFile $ olcReplicationInterval $ "
|
||||
|
|
@ -878,7 +882,8 @@ static ConfigOCs cf_ocs[] = {
|
|||
"NAME 'olcOverlayConfig' "
|
||||
"DESC 'OpenLDAP Overlay-specific options' "
|
||||
"SUP olcConfig STRUCTURAL "
|
||||
"MUST olcOverlay )", Cft_Overlay, NULL, cfAddOverlay },
|
||||
"MUST olcOverlay "
|
||||
"MAY olcDisabled )", Cft_Overlay, NULL, cfAddOverlay },
|
||||
{ "( OLcfgGlOc:6 "
|
||||
"NAME 'olcIncludeFile' "
|
||||
"DESC 'OpenLDAP configuration include file' "
|
||||
|
|
@ -1043,6 +1048,23 @@ config_generic(ConfigArgs *c) {
|
|||
case CFG_DEPTH:
|
||||
c->value_int = c->be->be_max_deref_depth;
|
||||
break;
|
||||
case CFG_DISABLED:
|
||||
if ( c->bi ) {
|
||||
/* overlay */
|
||||
if ( c->bi->bi_flags & SLAPO_BFLAG_DISABLED ) {
|
||||
c->value_int = 1;
|
||||
} else {
|
||||
rc = 1;
|
||||
}
|
||||
} else {
|
||||
/* database */
|
||||
if ( SLAP_DBDISABLED( c->be )) {
|
||||
c->value_int = 1;
|
||||
} else {
|
||||
rc = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CFG_HIDDEN:
|
||||
if ( SLAP_DBHIDDEN( c->be )) {
|
||||
c->value_int = 1;
|
||||
|
|
@ -1385,6 +1407,21 @@ config_generic(ConfigArgs *c) {
|
|||
c->be->be_flags &= ~SLAP_DBFLAG_HIDDEN;
|
||||
break;
|
||||
|
||||
case CFG_DISABLED:
|
||||
if ( c->bi ) {
|
||||
c->bi->bi_flags &= ~SLAP_DBFLAG_DISABLED;
|
||||
if ( c->bi->bi_db_open ) {
|
||||
BackendInfo *bi_orig = c->be->bd_info;
|
||||
c->be->bd_info = c->bi;
|
||||
rc = c->bi->bi_db_open( c->be, &c->reply );
|
||||
c->be->bd_info = bi_orig;
|
||||
}
|
||||
} else {
|
||||
c->be->be_flags &= ~SLAP_DBFLAG_DISABLED;
|
||||
rc = backend_startup_one( c->be, &c->reply );
|
||||
}
|
||||
break;
|
||||
|
||||
case CFG_IX_HASH64:
|
||||
slap_hash64( 0 );
|
||||
break;
|
||||
|
|
@ -2129,6 +2166,29 @@ sortval_reject:
|
|||
SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_MONITORING;
|
||||
break;
|
||||
|
||||
case CFG_DISABLED:
|
||||
if ( c->bi ) {
|
||||
if (c->value_int) {
|
||||
if ( c->bi->bi_db_close ) {
|
||||
BackendInfo *bi_orig = c->be->bd_info;
|
||||
c->be->bd_info = c->bi;
|
||||
c->bi->bi_db_close( c->be, &c->reply );
|
||||
c->be->bd_info = bi_orig;
|
||||
}
|
||||
c->bi->bi_flags |= SLAPO_BFLAG_DISABLED;
|
||||
} else {
|
||||
c->bi->bi_flags &= ~SLAPO_BFLAG_DISABLED;
|
||||
}
|
||||
} else {
|
||||
if (c->value_int) {
|
||||
backend_shutdown( c->be );
|
||||
SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_DISABLED;
|
||||
} else {
|
||||
SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_DISABLED;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CFG_HIDDEN:
|
||||
if (c->value_int)
|
||||
SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_HIDDEN;
|
||||
|
|
|
|||
|
|
@ -1854,11 +1854,13 @@ struct BackendDB {
|
|||
#define SLAP_DBFLAG_ACL_ADD 0x20000U /* check attr ACLs on adds */
|
||||
#define SLAP_DBFLAG_SYNC_SUBENTRY 0x40000U /* use subentry for context */
|
||||
#define SLAP_DBFLAG_MULTI_SHADOW 0x80000U /* uses mirrorMode/multi-master */
|
||||
#define SLAP_DBFLAG_DISABLED 0x100000U
|
||||
slap_mask_t be_flags;
|
||||
#define SLAP_DBFLAGS(be) ((be)->be_flags)
|
||||
#define SLAP_NOLASTMOD(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_NOLASTMOD)
|
||||
#define SLAP_LASTMOD(be) (!SLAP_NOLASTMOD(be))
|
||||
#define SLAP_DBHIDDEN(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_HIDDEN)
|
||||
#define SLAP_DBDISABLED(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_DISABLED)
|
||||
#define SLAP_DB_ONE_SUFFIX(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_ONE_SUFFIX)
|
||||
#define SLAP_ISOVERLAY(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_OVERLAY)
|
||||
#define SLAP_ISGLOBALOVERLAY(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_GLOBAL_OVERLAY)
|
||||
|
|
@ -2318,6 +2320,7 @@ struct BackendInfo {
|
|||
#define SLAPO_BFLAG_SINGLE 0x01000000U
|
||||
#define SLAPO_BFLAG_DBONLY 0x02000000U
|
||||
#define SLAPO_BFLAG_GLOBONLY 0x04000000U
|
||||
#define SLAPO_BFLAG_DISABLED 0x08000000U
|
||||
#define SLAPO_BFLAG_MASK 0xFF000000U
|
||||
|
||||
#define SLAP_BFLAGS(be) ((be)->bd_info->bi_flags)
|
||||
|
|
@ -2336,6 +2339,7 @@ struct BackendInfo {
|
|||
#define SLAPO_SINGLE(be) (SLAP_BFLAGS(be) & SLAPO_BFLAG_SINGLE)
|
||||
#define SLAPO_DBONLY(be) (SLAP_BFLAGS(be) & SLAPO_BFLAG_DBONLY)
|
||||
#define SLAPO_GLOBONLY(be) (SLAP_BFLAGS(be) & SLAPO_BFLAG_GLOBONLY)
|
||||
#define SLAPO_DISABLED(be) (SLAP_BFLAGS(be) & SLAPO_BFLAG_DISABLED)
|
||||
|
||||
char **bi_controls; /* supported controls */
|
||||
char bi_ctrls[SLAP_MAX_CIDS + 1];
|
||||
|
|
|
|||
Loading…
Reference in a new issue