odissey: allow to set options for default (any) user

This commit is contained in:
Dmitry Simonenko 2017-01-24 15:04:32 +03:00
parent 0511e41bdb
commit a537306106
4 changed files with 41 additions and 8 deletions

View File

@ -428,7 +428,12 @@ od_configparse_user(od_config_t *config, od_token_t *name)
od_schemeuser_add(config->scheme);
if (user == NULL)
return -1;
user->user = name->v.string;
if (name == NULL) {
user->is_default = 1;
user->user = "";
} else {
user->user = name->v.string;
}
if (od_confignext(config, '{', NULL) == -1)
return -1;
od_token_t *tk;
@ -476,12 +481,18 @@ od_configparse_users(od_config_t *config)
{
rc = od_lexpop(&config->lex, &tk);
switch (rc) {
/* user (user name) */
/* user */
case OD_LSTRING:
rc = od_configparse_user(config, tk);
if (rc == -1)
return -1;
break;
/* user default */
case OD_LDEFAULT:
rc = od_configparse_user(config, NULL);
if (rc == -1)
return -1;
break;
case OD_LEOF:
od_configerror(config, tk, "unexpected end of config file");
return -1;

View File

@ -42,6 +42,7 @@ void od_schemeinit(od_scheme_t *scheme)
scheme->routing_mode = OD_RUNDEF;
scheme->routing_default = NULL;
scheme->server_id = 0;
scheme->users_default = NULL;
od_listinit(&scheme->servers);
od_listinit(&scheme->routing_table);
od_listinit(&scheme->users);
@ -198,7 +199,7 @@ int od_schemevalidate(od_scheme_t *scheme, od_log_t *log)
/* servers */
if (od_listempty(&scheme->servers)) {
od_error(log, NULL, "no servers are defined");
od_error(log, NULL, "no servers defined");
return -1;
}
od_list_t *i;
@ -240,12 +241,22 @@ int od_schemevalidate(od_scheme_t *scheme, od_log_t *log)
scheme->routing_default = default_route;
/* users */
if (od_listempty(&scheme->users)) {
od_error(log, NULL, "no users defined");
return -1;
}
od_schemeuser_t *default_user = NULL;
od_listforeach(&scheme->users, i) {
od_schemeuser_t *user;
user = od_container_of(i, od_schemeuser_t, link);
if (! user->auth) {
od_error(log, NULL, "user '%s' authentication mode is not defined",
user->user);
if (user->is_default)
od_error(log, NULL, "default user authentication mode is not defined");
else
od_error(log, NULL, "user '%s' authentication mode is not defined",
user->user);
return -1;
}
if (strcmp(user->auth, "none") == 0) {
@ -261,6 +272,13 @@ int od_schemevalidate(od_scheme_t *scheme, od_log_t *log)
user->user);
return -1;
}
if (user->is_default) {
if (default_user) {
od_error(log, NULL, "more than one default user");
return -1;
}
default_user = user;
}
}
return 0;
}
@ -324,14 +342,16 @@ void od_schemeprint(od_scheme_t *scheme, od_log_t *log)
od_log(log, NULL, " pool_min %d", route->pool_min);
od_log(log, NULL, " pool_max %d", route->pool_max);
}
od_log(log, NULL, "");
if (! od_listempty(&scheme->users)) {
od_log(log, NULL, "");
od_log(log, NULL, "users");
od_listforeach(&scheme->users, i) {
od_schemeuser_t *user;
user = od_container_of(i, od_schemeuser_t, link);
od_log(log, NULL, " <%s>", user->user);
if (user->is_default)
od_log(log, NULL, " default");
else
od_log(log, NULL, " <%s>", user->user);
od_log(log, NULL, " authentication '%s'", user->auth);
if (user->password)
od_log(log, NULL, " password '****'");

View File

@ -59,6 +59,7 @@ struct od_schemeuser_t {
od_auth_t auth_mode;
char *user;
char *password;
int is_default;
od_list_t link;
};
@ -92,6 +93,7 @@ struct od_scheme_t {
od_list_t routing_table;
/* users */
od_list_t users;
od_schemeuser_t *users_default;
};
void od_schemeinit(od_scheme_t*);

View File

@ -46,7 +46,7 @@ odissey {
}
users {
"test" {
default {
authentication "none"
}
}