mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
check we don't exceed userland with config param bits
This commit is contained in:
parent
3e7fd464dc
commit
6d7689b7e3
@ -858,10 +858,10 @@ str2chain( const char *s )
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PC_CHAINING = 1,
|
CH_CHAINING = 1,
|
||||||
PC_CACHE_URI = 2,
|
CH_CACHE_URI = 2,
|
||||||
|
|
||||||
PC_LAST
|
CH_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
||||||
@ -873,13 +873,13 @@ static ConfigLDAPadd chain_ldadd;
|
|||||||
static ConfigTable chaincfg[] = {
|
static ConfigTable chaincfg[] = {
|
||||||
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
||||||
{ "chain-chaining", "args",
|
{ "chain-chaining", "args",
|
||||||
2, 4, 0, ARG_MAGIC|ARG_BERVAL|PC_CHAINING, chain_cf_gen,
|
2, 4, 0, ARG_MAGIC|ARG_BERVAL|CH_CHAINING, chain_cf_gen,
|
||||||
"( OLcfgOvAt:3.1 NAME 'olcChainingBehavior' "
|
"( OLcfgOvAt:3.1 NAME 'olcChainingBehavior' "
|
||||||
"DESC 'Chaining behavior control parameters (draft-sermersheim-ldap-chaining)' "
|
"DESC 'Chaining behavior control parameters (draft-sermersheim-ldap-chaining)' "
|
||||||
"SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
|
"SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
|
||||||
#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
||||||
{ "chain-cache-uris", "TRUE/FALSE",
|
{ "chain-cache-uris", "TRUE/FALSE",
|
||||||
2, 2, 0, ARG_MAGIC|ARG_ON_OFF|PC_CACHE_URI, chain_cf_gen,
|
2, 2, 0, ARG_MAGIC|ARG_ON_OFF|CH_CACHE_URI, chain_cf_gen,
|
||||||
"( OLcfgOvAt:3.2 NAME 'olcCacheURIs' "
|
"( OLcfgOvAt:3.2 NAME 'olcCacheURIs' "
|
||||||
"DESC 'Enables caching of URIs not present in configuration' "
|
"DESC 'Enables caching of URIs not present in configuration' "
|
||||||
"SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
|
"SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
|
||||||
@ -999,7 +999,7 @@ chain_cf_gen( ConfigArgs *c )
|
|||||||
if ( c->op == SLAP_CONFIG_EMIT ) {
|
if ( c->op == SLAP_CONFIG_EMIT ) {
|
||||||
switch( c->type ) {
|
switch( c->type ) {
|
||||||
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
||||||
case PC_CHAINING: {
|
case CH_CHAINING: {
|
||||||
struct berval resolve = BER_BVNULL,
|
struct berval resolve = BER_BVNULL,
|
||||||
continuation = BER_BVNULL;
|
continuation = BER_BVNULL;
|
||||||
|
|
||||||
@ -1030,7 +1030,7 @@ chain_cf_gen( ConfigArgs *c )
|
|||||||
}
|
}
|
||||||
#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
||||||
|
|
||||||
case PC_CACHE_URI:
|
case CH_CACHE_URI:
|
||||||
c->value_int = LDAP_CHAIN_CACHE_URI( lc );
|
c->value_int = LDAP_CHAIN_CACHE_URI( lc );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1042,10 +1042,10 @@ chain_cf_gen( ConfigArgs *c )
|
|||||||
|
|
||||||
} else if ( c->op == LDAP_MOD_DELETE ) {
|
} else if ( c->op == LDAP_MOD_DELETE ) {
|
||||||
switch( c->type ) {
|
switch( c->type ) {
|
||||||
case PC_CHAINING:
|
case CH_CHAINING:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PC_CACHE_URI:
|
case CH_CACHE_URI:
|
||||||
lc->lc_flags &= ~LDAP_CHAIN_F_CACHE_URI;
|
lc->lc_flags &= ~LDAP_CHAIN_F_CACHE_URI;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1057,7 +1057,7 @@ chain_cf_gen( ConfigArgs *c )
|
|||||||
|
|
||||||
switch( c->type ) {
|
switch( c->type ) {
|
||||||
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
||||||
case PC_CHAINING: {
|
case CH_CHAINING: {
|
||||||
char **argv = c->argv;
|
char **argv = c->argv;
|
||||||
int argc = c->argc;
|
int argc = c->argc;
|
||||||
BerElementBuffer berbuf;
|
BerElementBuffer berbuf;
|
||||||
@ -1172,7 +1172,7 @@ chain_cf_gen( ConfigArgs *c )
|
|||||||
}
|
}
|
||||||
#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
||||||
|
|
||||||
case PC_CACHE_URI:
|
case CH_CACHE_URI:
|
||||||
if ( c->value_int ) {
|
if ( c->value_int ) {
|
||||||
lc->lc_flags |= LDAP_CHAIN_F_CACHE_URI;
|
lc->lc_flags |= LDAP_CHAIN_F_CACHE_URI;
|
||||||
} else {
|
} else {
|
||||||
@ -1621,7 +1621,8 @@ chain_init( void )
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
assert( PC_LAST <= ARGS_USERLAND );
|
/* Make sure we don't exceed the bits reserved for userland */
|
||||||
|
config_check_userland( CH_LAST );
|
||||||
|
|
||||||
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
||||||
rc = register_supported_control( LDAP_CONTROL_X_CHAINING_BEHAVIOR,
|
rc = register_supported_control( LDAP_CONTROL_X_CHAINING_BEHAVIOR,
|
||||||
|
@ -60,7 +60,9 @@ enum {
|
|||||||
LDAP_BACK_CFG_T_F,
|
LDAP_BACK_CFG_T_F,
|
||||||
LDAP_BACK_CFG_WHOAMI,
|
LDAP_BACK_CFG_WHOAMI,
|
||||||
LDAP_BACK_CFG_TIMEOUT,
|
LDAP_BACK_CFG_TIMEOUT,
|
||||||
LDAP_BACK_CFG_REWRITE
|
LDAP_BACK_CFG_REWRITE,
|
||||||
|
|
||||||
|
LDAP_BACK_CFG_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
static ConfigTable ldapcfg[] = {
|
static ConfigTable ldapcfg[] = {
|
||||||
@ -1132,6 +1134,9 @@ ldap_back_init_cf( BackendInfo *bi )
|
|||||||
AttributeDescription *ad = NULL;
|
AttributeDescription *ad = NULL;
|
||||||
const char *text;
|
const char *text;
|
||||||
|
|
||||||
|
/* Make sure we don't exceed the bits reserved for userland */
|
||||||
|
config_check_userland( LDAP_BACK_CFG_LAST );
|
||||||
|
|
||||||
bi->bi_cf_ocs = ldapocs;
|
bi->bi_cf_ocs = ldapocs;
|
||||||
|
|
||||||
rc = config_register_schema( ldapcfg, ldapocs );
|
rc = config_register_schema( ldapcfg, ldapocs );
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
* <http://www.OpenLDAP.org/license.html>.
|
* <http://www.OpenLDAP.org/license.html>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
typedef struct ConfigTable {
|
typedef struct ConfigTable {
|
||||||
char *name;
|
char *name;
|
||||||
char *what;
|
char *what;
|
||||||
@ -169,3 +172,9 @@ int read_config_file(const char *fname, int depth, ConfigArgs *cf,
|
|||||||
ConfigTable * config_find_keyword(ConfigTable *ct, ConfigArgs *c);
|
ConfigTable * config_find_keyword(ConfigTable *ct, ConfigArgs *c);
|
||||||
Entry * config_build_entry( Operation *op, SlapReply *rs, CfEntryInfo *parent,
|
Entry * config_build_entry( Operation *op, SlapReply *rs, CfEntryInfo *parent,
|
||||||
ConfigArgs *c, struct berval *rdn, ConfigOCs *main, ConfigOCs *extra );
|
ConfigArgs *c, struct berval *rdn, ConfigOCs *main, ConfigOCs *extra );
|
||||||
|
|
||||||
|
/* Make sure we don't exceed the bits reserved for userland */
|
||||||
|
#define config_check_userland(last) \
|
||||||
|
assert( ( ( (last) - 1 ) & ARGS_USERLAND ) == ( (last) - 1 ) );
|
||||||
|
|
||||||
|
#endif /* CONFIG_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user