Cleanup verb/mask processing

This commit is contained in:
Howard Chu 2005-03-02 14:49:54 +00:00
parent 51ab3f558d
commit 530e93f96e
6 changed files with 51 additions and 35 deletions

View file

@ -129,7 +129,7 @@ bdb_cf_oc(ConfigArgs *c)
return 1;
}
static struct verb_mask_list bdb_lockd[] = {
static slap_verbmasks bdb_lockd[] = {
{ "default", DB_LOCK_DEFAULT },
{ "oldest", DB_LOCK_OLDEST },
{ "random", DB_LOCK_RANDOM },
@ -213,7 +213,7 @@ bdb_cf_gen(ConfigArgs *c)
break;
case BDB_LOCKD:
rc = verb_to_mask( c, bdb_lockd, 1 );
rc = verb_to_mask( c->argv[1], bdb_lockd );
if ( !bdb_lockd[rc].word ) {
fprintf( stderr, "%s: "
"bad policy (%s) in \"lockDetect <policy>\" line\n",

View file

@ -1323,7 +1323,7 @@ static int
config_restrict(ConfigArgs *c) {
slap_mask_t restrictops = 0;
int i;
struct verb_mask_list restrictable_ops[] = {
slap_verbmasks restrictable_ops[] = {
{ "bind", SLAP_RESTRICT_OP_BIND },
{ "add", SLAP_RESTRICT_OP_ADD },
{ "modify", SLAP_RESTRICT_OP_MODIFY },
@ -1343,9 +1343,10 @@ config_restrict(ConfigArgs *c) {
};
if (c->emit) {
return mask_to_verbs( c, restrictable_ops, c->be->be_restrictops );
return mask_to_verbs( restrictable_ops, c->be->be_restrictops,
&c->rvalue_vals );
}
i = verbs_to_mask( c, restrictable_ops, &restrictops );
i = verbs_to_mask( c->argc, c->argv, restrictable_ops, &restrictops );
if ( i ) {
Debug(LDAP_DEBUG_ANY, "%s: "
"unknown operation %s in \"restrict <features>\" line\n",
@ -1362,7 +1363,7 @@ static int
config_allows(ConfigArgs *c) {
slap_mask_t allows = 0;
int i;
struct verb_mask_list allowable_ops[] = {
slap_verbmasks allowable_ops[] = {
{ "bind_v2", SLAP_ALLOW_BIND_V2 },
{ "bind_anon_cred", SLAP_ALLOW_BIND_ANON_CRED },
{ "bind_anon_dn", SLAP_ALLOW_BIND_ANON_DN },
@ -1370,9 +1371,9 @@ config_allows(ConfigArgs *c) {
{ NULL, 0 }
};
if (c->emit) {
return mask_to_verbs( c, allowable_ops, global_allows );
return mask_to_verbs( allowable_ops, global_allows, &c->rvalue_vals );
}
i = verbs_to_mask(c, allowable_ops, &allows);
i = verbs_to_mask(c->argc, c->argv, allowable_ops, &allows);
if ( i ) {
Debug(LDAP_DEBUG_ANY, "%s: "
"unknown feature %s in \"allow <features>\" line\n",
@ -1387,7 +1388,7 @@ static int
config_disallows(ConfigArgs *c) {
slap_mask_t disallows = 0;
int i;
struct verb_mask_list disallowable_ops[] = {
slap_verbmasks disallowable_ops[] = {
{ "bind_anon", SLAP_DISALLOW_BIND_ANON },
{ "bind_simple", SLAP_DISALLOW_BIND_SIMPLE },
{ "bind_krb4", SLAP_DISALLOW_BIND_KRBV4 },
@ -1396,9 +1397,9 @@ config_disallows(ConfigArgs *c) {
{ NULL, 0 }
};
if (c->emit) {
return mask_to_verbs( c, disallowable_ops, global_disallows );
return mask_to_verbs( disallowable_ops, global_disallows, &c->rvalue_vals );
}
i = verbs_to_mask(c, disallowable_ops, &disallows);
i = verbs_to_mask(c->argc, c->argv, disallowable_ops, &disallows);
if ( i ) {
Debug(LDAP_DEBUG_ANY, "%s: "
"unknown feature %s in \"disallow <features>\" line\n",
@ -1413,7 +1414,7 @@ static int
config_requires(ConfigArgs *c) {
slap_mask_t requires = 0;
int i;
struct verb_mask_list requires_ops[] = {
slap_verbmasks requires_ops[] = {
{ "bind", SLAP_REQUIRE_BIND },
{ "LDAPv3", SLAP_REQUIRE_LDAP_V3 },
{ "authc", SLAP_REQUIRE_AUTHC },
@ -1422,9 +1423,9 @@ config_requires(ConfigArgs *c) {
{ NULL, 0 }
};
if (c->emit) {
return mask_to_verbs( c, requires_ops, c->be->be_requires );
return mask_to_verbs( requires_ops, c->be->be_requires, &c->rvalue_vals );
}
i = verbs_to_mask(c, requires_ops, &requires);
i = verbs_to_mask(c->argc, c->argv, requires_ops, &requires);
if ( i ) {
Debug(LDAP_DEBUG_ANY, "%s: "
"unknown feature %s in \"require <features>\" line\n",
@ -1439,7 +1440,7 @@ static int
config_loglevel(ConfigArgs *c) {
int i;
char *next;
struct verb_mask_list loglevel_ops[] = {
slap_verbmasks loglevel_ops[] = {
{ "Trace", LDAP_DEBUG_TRACE },
{ "Packets", LDAP_DEBUG_PACKETS },
{ "Args", LDAP_DEBUG_ARGS },
@ -1459,7 +1460,7 @@ config_loglevel(ConfigArgs *c) {
};
if (c->emit) {
return mask_to_verbs( c, loglevel_ops, ldap_syslog );
return mask_to_verbs( loglevel_ops, ldap_syslog, &c->rvalue_vals );
}
ldap_syslog = 0;
@ -1477,7 +1478,7 @@ config_loglevel(ConfigArgs *c) {
return( 1 );
}
} else {
int j = verb_to_mask(c, loglevel_ops, c->argv[i][0]);
int j = verb_to_mask(c->argv[i], loglevel_ops);
if(!loglevel_ops[j].word) {
Debug( LDAP_DEBUG_ANY,
"%s: unknown level \"%s\" "
@ -1904,13 +1905,13 @@ config_tls_option(ConfigArgs *c) {
static int
config_tls_config(ConfigArgs *c) {
int i, flag;
struct verb_mask_list crlkeys[] = {
slap_verbmasks crlkeys[] = {
{ "none", LDAP_OPT_X_TLS_CRL_NONE },
{ "peer", LDAP_OPT_X_TLS_CRL_PEER },
{ "all", LDAP_OPT_X_TLS_CRL_ALL },
{ NULL, 0 }
};
struct verb_mask_list vfykeys[] = {
slap_verbmasks vfykeys[] = {
{ "never", LDAP_OPT_X_TLS_NEVER },
{ "demand", LDAP_OPT_X_TLS_DEMAND },
{ "try", LDAP_OPT_X_TLS_TRY },

View file

@ -549,19 +549,19 @@ badline:
/* restrictops, allows, disallows, requires, loglevel */
int
verb_to_mask(ConfigArgs *c, struct verb_mask_list *v, int word) {
int j;
for(j = 0; v[j].word; j++)
if(!strcasecmp(c->argv[word], v[j].word))
verb_to_mask(const char *word, slap_verbmasks *v) {
int i;
for(i = 0; v[i].word; i++)
if(!strcasecmp(word, v[i].word))
break;
return(j);
return(i);
}
int
verbs_to_mask(ConfigArgs *c, struct verb_mask_list *v, slap_mask_t *m) {
verbs_to_mask(int argc, char *argv[], slap_verbmasks *v, slap_mask_t *m) {
int i, j;
for(i = 1; i < c->argc; i++) {
j = verb_to_mask(c, v, i);
for(i = 1; i < argc; i++) {
j = verb_to_mask(argv[i], v);
if(!v[j].word) return(1);
while (!v[j].mask) j--;
*m |= v[j].mask;
@ -570,7 +570,7 @@ verbs_to_mask(ConfigArgs *c, struct verb_mask_list *v, slap_mask_t *m) {
}
int
mask_to_verbs(ConfigArgs *c, struct verb_mask_list *v, slap_mask_t m) {
mask_to_verbs(slap_verbmasks *v, slap_mask_t m, BerVarray *bva) {
int i, j;
struct berval bv;
@ -579,19 +579,19 @@ mask_to_verbs(ConfigArgs *c, struct verb_mask_list *v, slap_mask_t m) {
if (!v[i].mask) continue;
if (( m & v[i].mask ) == v[i].mask ) {
ber_str2bv( v[i].word, 0, 0, &bv );
value_add_one( &c->rvalue_vals, &bv );
value_add_one( bva, &bv );
}
}
return 0;
}
static struct verb_mask_list tlskey[] = {
static slap_verbmasks tlskey[] = {
{ "no", SB_TLS_OFF },
{ "yes", SB_TLS_ON },
{ "critical", SB_TLS_CRITICAL }
};
static struct verb_mask_list methkey[] = {
static slap_verbmasks methkey[] = {
{ "simple", LDAP_AUTH_SIMPLE },
#ifdef HAVE_CYRUS_SASL
{ "sasl", LDAP_AUTH_SASL },
@ -603,7 +603,7 @@ typedef struct cf_aux_table {
struct berval key;
int off;
int quote;
struct verb_mask_list *aux;
slap_verbmasks *aux;
} cf_aux_table;
static cf_aux_table bindkey[] = {
@ -619,7 +619,7 @@ static cf_aux_table bindkey[] = {
{ BER_BVNULL, 0, 0, NULL }
};
int bindconf_parse( char *word, slap_bindconf *bc ) {
int bindconf_parse( const char *word, slap_bindconf *bc ) {
int i, rc = 0;
char **cptr;
cf_aux_table *tab;

View file

@ -101,6 +101,4 @@ typedef struct config_args_s {
typedef int (ConfigDriver)(ConfigArgs *c);
struct verb_mask_list { char *word; int mask; };
int config_get_vals(ConfigTable *ct, ConfigArgs *c);

View file

@ -443,6 +443,18 @@ LDAP_SLAPD_F (int) read_config LDAP_P(( const char *fname, int depth ));
LDAP_SLAPD_F (void) config_destroy LDAP_P ((void));
LDAP_SLAPD_F (char **) slap_str2clist LDAP_P((
char ***, char *, const char * ));
LDAP_SLAPD_F (int) verb_to_mask LDAP_P((
const char *word, slap_verbmasks *v ));
LDAP_SLAPD_F (int) verbs_to_mask LDAP_P((
int argc, char *argv[], slap_verbmasks *v, slap_mask_t *m ));
LDAP_SLAPD_F (int) mask_to_verbs LDAP_P((
slap_verbmasks *v, slap_mask_t m, BerVarray *bva ));
LDAP_SLAPD_F (int) bindconf_parse LDAP_P((
const char *word, slap_bindconf *bc ));
LDAP_SLAPD_F (int) bindconf_unparse LDAP_P((
slap_bindconf *bc, struct berval *bv ));
LDAP_SLAPD_F (void) bindconf_free LDAP_P(( slap_bindconf *bc ));
#ifdef LDAP_SLAPI
LDAP_SLAPD_V (int) slapi_plugins_used;
#endif

View file

@ -1418,6 +1418,11 @@ struct slap_replica_info {
slap_bindconf ri_bindconf; /* for back-config */
};
typedef struct slap_verbmasks {
const char *word;
const int mask;
} slap_verbmasks;
#define SLAP_LIMIT_TIME 1
#define SLAP_LIMIT_SIZE 2