From c6f373bce154566af98c13a4b739ad3c0f9eb06f Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Mon, 21 Feb 2005 01:10:23 +0000 Subject: [PATCH] Juggle ARG flags, needed some more bits --- servers/slapd/config.c | 27 ++++++++++++++++----------- servers/slapd/config.h | 36 +++++++++++++++++++----------------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/servers/slapd/config.c b/servers/slapd/config.c index f78143195d..e9967fb6e4 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -190,7 +190,7 @@ static OidRec OidMacros[] = { /* alphabetical ordering */ ConfigTable SystemConfiguration[] = { - { "access", NULL, 0, 0, 0, ARG_MAGIC|CFG_ACL, + { "access", NULL, 0, 0, 0, ARG_MAY_DB|ARG_MAGIC|CFG_ACL, &config_generic, "( OLcfgAt:1 NAME 'olcAccess' " "DESC 'Access Control List' " "EQUALITY caseIgnoreMatch " @@ -244,7 +244,7 @@ ConfigTable SystemConfiguration[] = { &config_generic, "( OLcfgAt:13 NAME 'olcDatabase' " "DESC 'The backend type for a database instance' " "SUP olcBackend )", NULL, NULL }, - { "defaultSearchBase", "dn", 2, 2, 0, ARG_DN|ARG_MAGIC, + { "defaultSearchBase", "dn", 2, 2, 0, ARG_PRE_BI|ARG_PRE_DB|ARG_DN|ARG_MAGIC, &config_search_base, "( OLcfgAt:14 NAME 'olcDefaultSearchBase' " "SYNTAX OMsDN )", NULL, NULL }, { "disallows", "features", 2, 0, 8, ARG_PRE_DB|ARG_MAGIC, @@ -338,7 +338,7 @@ ConfigTable SystemConfiguration[] = { { "pluginlog", NULL, 0, 0, 0, ARG_IGNORED, NULL, NULL, NULL, NULL }, #endif - { "readonly", "on|off", 2, 2, 0, ARG_ON_OFF|ARG_MAGIC|CFG_RO, + { "readonly", "on|off", 2, 2, 0, ARG_MAY_DB|ARG_ON_OFF|ARG_MAGIC|CFG_RO, &config_generic, "( OLcfgAt:40 NAME 'olcReadOnly' " "SYNTAX OMsBoolean )", NULL, NULL }, { "referral", "url", 2, 2, 0, ARG_MAGIC, @@ -356,10 +356,10 @@ ConfigTable SystemConfiguration[] = { { "replicationInterval", NULL, 0, 0, 0, ARG_IGNORED, NULL, "( OLcfgAt:45 NAME 'olcReplicationInterval' " "SYNTAX OMsInteger )", NULL, NULL }, - { "replogfile", "filename", 2, 2, 0, ARG_MAGIC|ARG_STRING|CFG_REPLOG, + { "replogfile", "filename", 2, 2, 0, ARG_MAY_DB|ARG_MAGIC|ARG_STRING|CFG_REPLOG, &config_generic, "( OLcfgAt:46 NAME 'olcReplogFile' " "SYNTAX OMsDirectoryString )", NULL, NULL }, - { "require", "features", 2, 0, 7, ARG_MAGIC, + { "require", "features", 2, 0, 7, ARG_MAY_DB|ARG_MAGIC, &config_requires, "( OLcfgAt:47 NAME 'olcRequires' " "SYNTAX OMsDirectoryString )", NULL, NULL }, { "restrict", "op_list", 2, 0, 0, ARG_MAGIC, @@ -411,20 +411,20 @@ ConfigTable SystemConfiguration[] = { { "schemacheck", "on|off", 2, 2, 0, ARG_ON_OFF|ARG_MAGIC|CFG_CHECK, &config_generic, "( OLcfgAt:57 NAME 'olcSchemaCheck' " "SYNTAX OMsBoolean )", NULL, NULL }, - { "schemadn", "dn", 2, 2, 0, ARG_DN|ARG_MAGIC, + { "schemadn", "dn", 2, 2, 0, ARG_MAY_DB|ARG_DN|ARG_MAGIC, &config_schema_dn, "( OLcfgAt:58 NAME 'olcSchemaDN' " "SYNTAX OMsDN )", NULL, NULL }, - { "security", "factors", 2, 0, 0, ARG_MAGIC, + { "security", "factors", 2, 0, 0, ARG_MAY_DB|ARG_MAGIC, &config_security, "( OLcfgAt:59 NAME 'olcSecurity' " "SYNTAX OMsDirectoryString )", NULL, NULL }, - { "sizelimit", "limit", 2, 2, 0, ARG_MAGIC|CFG_SIZE, + { "sizelimit", "limit", 2, 2, 0, ARG_MAY_DB|ARG_MAGIC|CFG_SIZE, &config_sizelimit, "( OLcfgAt:60 NAME 'olcSizeLimit' " "SYNTAX OMsInteger )", NULL, NULL }, { "sockbuf_max_incoming", "max", 2, 2, 0, ARG_LONG, &sockbuf_max_incoming, "( OLcfgAt:61 NAME 'olcSockbufMaxIncoming' " "SYNTAX OMsInteger )", NULL, NULL }, { "sockbuf_max_incoming_auth", "max", 2, 2, 0, ARG_LONG, - &sockbuf_max_incoming_auth, "( OLcfgAt:62 NAME 'olcSuckbufMaxIncomingAuth' " + &sockbuf_max_incoming_auth, "( OLcfgAt:62 NAME 'olcSockbufMaxIncomingAuth' " "SYNTAX OMsInteger )", NULL, NULL }, #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND { "srvtab", "file", 2, 2, 0, ARG_STRING, @@ -440,7 +440,7 @@ ConfigTable SystemConfiguration[] = { { "threads", "count", 2, 2, 0, ARG_INT|ARG_MAGIC|CFG_THREADS, &config_generic, "( OLcfgAt:66 NAME 'olcThreads' " "SYNTAX OMsInteger )", NULL, NULL }, - { "timelimit", "limit", 2, 2, 0, ARG_MAGIC|CFG_TIME, + { "timelimit", "limit", 2, 2, 0, ARG_MAY_DB|ARG_MAGIC|CFG_TIME, &config_timelimit, "( OLcfgAt:67 NAME 'olcTimeLimit' " "SYNTAX OMsInteger )", NULL, NULL }, #ifdef HAVE_TLS @@ -525,7 +525,12 @@ int parse_config_table(ConfigTable *Conf, ConfigArgs *c) { c->log, Conf[i].name, 0); return(ARG_BAD_CONF); } - if((arg_type & ARG_PRE_DB) && c->be) { + if((arg_type & ARG_PRE_BI) && c->bi) { + Debug(LDAP_DEBUG_CONFIG, "%s: keyword <%s> must appear before any backend declaration\n", + c->log, Conf[i].name, 0); + return(ARG_BAD_CONF); + } + if((arg_type & ARG_PRE_DB) && c->be && c->be != frontendDB) { Debug(LDAP_DEBUG_CONFIG, "%s: keyword <%s> must appear before any database declaration\n", c->log, Conf[i].name, 0); return(ARG_BAD_CONF); diff --git a/servers/slapd/config.h b/servers/slapd/config.h index 3c614e7355..c5eb1eb44e 100644 --- a/servers/slapd/config.h +++ b/servers/slapd/config.h @@ -28,24 +28,26 @@ typedef struct ConfigTable { void *notify; } ConfigTable; -#define ARGS_USERLAND 0x0000ffff -#define ARGS_TYPES 0x00ff0000 -#define ARGS_POINTER 0x001f0000 -#define ARGS_NUMERIC 0x000f0000 -#define ARG_INT 0x00010000 -#define ARG_LONG 0x00020000 -#define ARG_BER_LEN_T 0x00040000 -#define ARG_ON_OFF 0x00080000 -#define ARG_STRING 0x00100000 -#define ARG_DN 0x00200000 -#define ARG_EXISTS 0x00400000 /* XXX not yet */ -#define ARG_IGNORED 0x00800000 +#define ARGS_USERLAND 0x00000fff +#define ARGS_TYPES 0x000ff000 +#define ARGS_POINTER 0x0001f000 +#define ARGS_NUMERIC 0x0000f000 +#define ARG_INT 0x00001000 +#define ARG_LONG 0x00002000 +#define ARG_BER_LEN_T 0x00004000 +#define ARG_ON_OFF 0x00008000 +#define ARG_STRING 0x00010000 +#define ARG_DN 0x00020000 +#define ARG_EXISTS 0x00040000 /* XXX not yet */ +#define ARG_IGNORED 0x00080000 -#define ARGS_SYNTAX 0xff000000 -#define ARG_DB 0x01000000 -#define ARG_PRE_DB 0x02000000 -#define ARG_PAREN 0x04000000 -#define ARG_NONZERO 0x08000000 +#define ARGS_SYNTAX 0xfff00000 +#define ARG_PRE_BI 0x00100000 +#define ARG_PRE_DB 0x00200000 +#define ARG_DB 0x00400000 /* Only applies to DB */ +#define ARG_MAY_DB 0x00800000 /* May apply to DB */ +#define ARG_PAREN 0x01000000 +#define ARG_NONZERO 0x02000000 #define ARG_UNIQUE 0x10000000 #define ARG_SPECIAL 0x20000000 /* one special case */ #define ARG_OFFSET 0x40000000 -- 2.39.5