mirror of https://github.com/yandex/odyssey.git
odissey: allow to set options for default (any) user
This commit is contained in:
parent
0511e41bdb
commit
a537306106
|
@ -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;
|
||||
|
|
|
@ -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 '****'");
|
||||
|
|
|
@ -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*);
|
||||
|
|
|
@ -46,7 +46,7 @@ odissey {
|
|||
}
|
||||
|
||||
users {
|
||||
"test" {
|
||||
default {
|
||||
authentication "none"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue