Commit c5a8b794 authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

ITS#5735,ITS#5736

parent eeed8ea2
......@@ -5,8 +5,10 @@ OpenLDAP 2.4.13 Engineering
Fixed slapd database open with real structure (ITS#5724)
Fixed slapd rewriting undefined filter (ITS#5731)
Added slapd GSSAPI refactoring (ITS#5369)
Added slapd private databases to be instantiated by global overlays (ITS#5735,ITS#5736)
Added slapd support for certificateListExactMatch from RFC4523 (ITS#5700)
Fixed slapd-bdb/hdb invalid db crash (ITS#5698)
Fixed slapo-chain/translucent back-config support (ITS#5736)
Added slapo-constraint parameter to allow LDAP URI constraints (ITS#5704)
Added slapo-constraint support for constraining rename (ITS#5703)
Added slapo-constraint support for relax control (ITS#5705)
......
......@@ -63,6 +63,7 @@ typedef enum {
LDAP_CH_RES,
LDAP_CH_ERR
} ldap_chain_status_t;
static BackendInfo *lback;
typedef struct ldap_chain_t {
......@@ -1096,7 +1097,7 @@ static ConfigOCs chainocs[] = {
"NAME 'olcChainDatabase' "
"DESC 'Chain remote server configuration' "
"AUXILIARY )",
Cft_Misc, chaincfg, chain_ldadd },
Cft_Misc, olcDatabaseDummy, chain_ldadd },
{ NULL, 0, NULL }
};
......@@ -1187,6 +1188,8 @@ chain_ldadd( CfEntryInfo *p, Entry *e, ConfigArgs *ca )
}
}
ca->ca_private = on;
done:;
if ( rc != LDAP_SUCCESS ) {
(void)ldap_chain_db_destroy_one( ca->be, NULL );
......@@ -1510,17 +1513,11 @@ ldap_chain_db_init(
ldap_chain_t *lc = NULL;
if ( lback == NULL ) {
static BackendInfo lback2;
lback = backend_info( "ldap" );
if ( lback == NULL ) {
return 1;
}
lback2 = *lback;
lback2.bi_type = ldapchain.on_bi.bi_type;
lback = &lback2;
}
lc = ch_malloc( sizeof( ldap_chain_t ) );
......@@ -2062,7 +2059,8 @@ ldap_chain_parse_ctrl(
int
chain_initialize( void )
{
int rc;
int rc;
const char *text;
/* Make sure we don't exceed the bits reserved for userland */
config_check_userland( CH_LAST );
......
......@@ -160,12 +160,12 @@ monitor_subsys_database_init_one(
"monitor_subsys_database_init: "
"missing suffix for %s\n",
rdnval, 0, 0 );
return -1;
}
attr_merge( e, slap_schema.si_ad_namingContexts,
} else {
attr_merge( e, slap_schema.si_ad_namingContexts,
be->be_suffix, be->be_nsuffix );
attr_merge( e_database, slap_schema.si_ad_namingContexts,
attr_merge( e_database, slap_schema.si_ad_namingContexts,
be->be_suffix, be->be_nsuffix );
}
}
(void)init_readOnly( mi, e, be->be_restrictops );
......
......@@ -696,6 +696,15 @@ static ConfigTable config_back_cf_table[] = {
NULL, NULL, NULL, NULL }
};
/* Need to no-op this keyword for dynamic config */
ConfigTable olcDatabaseDummy[] = {
{ "", "", 0, 0, 0, ARG_IGNORED,
NULL, "( OLcfgGlAt:13 NAME 'olcDatabase' "
"DESC 'The backend type for a database instance' "
"SUP olcBackend SINGLE-VALUE X-ORDERED 'SIBLINGS' )", NULL, NULL },
{ NULL, NULL, 0, 0, 0, ARG_IGNORED }
};
/* Routines to check if a child can be added to this type */
static ConfigLDAPadd cfAddSchema, cfAddInclude, cfAddDatabase,
cfAddBackend, cfAddModule, cfAddOverlay;
......@@ -3253,7 +3262,7 @@ typedef struct setup_cookie {
ConfigArgs *ca;
Entry *frontend;
Entry *config;
int got_frontend;
int got_frontend;
int got_config;
} setup_cookie;
......@@ -3262,15 +3271,18 @@ config_ldif_resp( Operation *op, SlapReply *rs )
{
if ( rs->sr_type == REP_SEARCH ) {
setup_cookie *sc = op->o_callback->sc_private;
struct berval pdn;
sc->cfb->cb_got_ldif = 1;
/* Does the frontend exist? */
if ( !sc->got_frontend ) {
if ( !strncmp( rs->sr_entry->e_nname.bv_val,
"olcDatabase", STRLENOF( "olcDatabase" ))) {
"olcDatabase", STRLENOF( "olcDatabase" )))
{
if ( strncmp( rs->sr_entry->e_nname.bv_val +
STRLENOF( "olcDatabase" ), "={-1}frontend",
STRLENOF( "={-1}frontend" ))) {
STRLENOF( "={-1}frontend" )))
{
struct berval rdn;
int i = op->o_noop;
sc->ca->be = frontendDB;
......@@ -3293,13 +3305,19 @@ config_ldif_resp( Operation *op, SlapReply *rs )
}
}
}
dnParent( &rs->sr_entry->e_nname, &pdn );
/* Does the configDB exist? */
if ( sc->got_frontend && !sc->got_config &&
!strncmp( rs->sr_entry->e_nname.bv_val,
"olcDatabase", STRLENOF( "olcDatabase" ))) {
"olcDatabase", STRLENOF( "olcDatabase" )) &&
dn_match( &config_rdn, &pdn ) )
{
if ( strncmp( rs->sr_entry->e_nname.bv_val +
STRLENOF( "olcDatabase" ), "={0}config",
STRLENOF( "={0}config" ))) {
STRLENOF( "={0}config" )))
{
struct berval rdn;
int i = op->o_noop;
sc->ca->be = LDAP_STAILQ_FIRST( &backendDB );
......@@ -6443,6 +6461,9 @@ config_back_initialize( BackendInfo *bi )
i = config_register_schema( ct, cf_ocs );
if ( i ) return i;
i = slap_str2ad( "olcDatabase", &olcDatabaseDummy[0].ad, &text );
if ( i ) return i;
/* setup olcRootPW to be base64-encoded when written in LDIF form;
* basically, we don't care if it fails */
i = slap_str2ad( "olcRootPW", &ad, &text );
......
......@@ -201,6 +201,8 @@ int config_shadow( ConfigArgs *c, int flag );
extern slap_verbmasks *slap_ldap_response_code;
extern int slap_ldap_response_code_register( struct berval *bv, int err );
extern ConfigTable olcDatabaseDummy[];
LDAP_END_DECL
#endif /* CONFIG_H */
......@@ -2655,15 +2655,6 @@ static ConfigTable pccfg[] = {
{ NULL, NULL, 0, 0, 0, ARG_IGNORED }
};
/* Need to no-op this keyword for dynamic config */
static ConfigTable pcdummy[] = {
{ "", "", 0, 0, 0, ARG_IGNORED,
NULL, "( OLcfgGlAt:13 NAME 'olcDatabase' "
"DESC 'The backend type for a database instance' "
"SUP olcBackend SINGLE-VALUE X-ORDERED 'SIBLINGS' )", NULL, NULL },
{ NULL, NULL, 0, 0, 0, ARG_IGNORED }
};
static ConfigOCs pcocs[] = {
{ "( OLcfgOvOc:2.1 "
"NAME 'olcPcacheConfig' "
......@@ -2675,7 +2666,7 @@ static ConfigOCs pcocs[] = {
{ "( OLcfgOvOc:2.2 "
"NAME 'olcPcacheDatabase' "
"DESC 'Cache database configuration' "
"AUXILIARY )", Cft_Misc, pcdummy, pc_ldadd },
"AUXILIARY )", Cft_Misc, olcDatabaseDummy, pc_ldadd },
{ NULL, 0, NULL }
};
......@@ -3995,11 +3986,6 @@ pcache_initialize()
code = config_register_schema( pccfg, pcocs );
if ( code ) return code;
{
const char *text;
code = slap_str2ad( "olcDatabase", &pcdummy[0].ad, &text );
if ( code ) return code;
}
return overlay_register( &pcache );
}
......
......@@ -95,14 +95,6 @@ static ConfigTable translucentcfg[] = {
{ NULL, NULL, 0, 0, 0, ARG_IGNORED }
};
static ConfigTable transdummy[] = {
{ "", "", 0, 0, 0, ARG_IGNORED,
NULL, "( OLcfgGlAt:13 NAME 'olcDatabase' "
"DESC 'The backend type for a database instance' "
"SUP olcBackend SINGLE-VALUE X-ORDERED 'SIBLINGS' )", NULL, NULL },
{ NULL, NULL, 0, 0, 0, ARG_IGNORED }
};
static ConfigOCs translucentocs[] = {
{ "( OLcfgOvOc:14.1 "
"NAME 'olcTranslucentConfig' "
......@@ -115,7 +107,7 @@ static ConfigOCs translucentocs[] = {
{ "( OLcfgOvOc:14.2 "
"NAME 'olcTranslucentDatabase' "
"DESC 'Translucent target database configuration' "
"AUXILIARY )", Cft_Misc, transdummy, translucent_ldadd },
"AUXILIARY )", Cft_Misc, olcDatabaseDummy, translucent_ldadd },
{ NULL, 0, NULL }
};
/* for translucent_init() */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment