diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-01-18 18:54:51 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-01-18 18:54:51 +0000 |
commit | 6d94715209000b8f0ed15a3ff414cdc86ee0f387 (patch) | |
tree | ac8ef301c70b33b34c192b4c0c372ff8429acbbc | |
parent | 59cee6155cfe9404ee0d1e9292229ca5852258fe (diff) |
Fix trunk version of manager support for users.conf. Now it actually pays
attention to the "hasmanager" option.
(Thanks to Anthony L. for pointing out that this was broken!)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@51247 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | main/manager.c | 119 |
1 files changed, 62 insertions, 57 deletions
diff --git a/main/manager.c b/main/manager.c index a8f356bba..593fc736c 100644 --- a/main/manager.c +++ b/main/manager.c @@ -887,70 +887,75 @@ static int authenticate(struct mansession *s, const struct message *m) return -1; while ( (cat = ast_category_browse(cfg, cat)) ) { /* "general" is not a valid user */ - if (!strcasecmp(cat, user) && strcasecmp(cat, "general")) - break; - } - if (!cat) { - ast_log(LOG_NOTICE, "%s tried to authenticate with nonexistent user '%s'\n", ast_inet_ntoa(s->sin.sin_addr), user); - ast_config_destroy(cfg); - return -1; - } - - /* collect parameters for the user's entry */ - for (v = ast_variable_browse(cfg, cat); v; v = v->next) { - if (!strcasecmp(v->name, "secret")) - password = ast_strdupa(v->value); - else if (!strcasecmp(v->name, "read")) - readperm = get_perm(v->value); - else if (!strcasecmp(v->name, "write")) - writeperm = get_perm(v->value); - else if (!strcasecmp(v->name, "permit") || - !strcasecmp(v->name, "deny")) { - ha = ast_append_ha(v->name, v->value, ha, NULL); - } else if (!strcasecmp(v->name, "writetimeout")) { - int val = atoi(v->value); - - if (val < 100) - ast_log(LOG_WARNING, "Invalid writetimeout value '%s' at line %d\n", v->value, v->lineno); - else - s->writetimeout = val; + if (strcasecmp(cat, user) || !strcasecmp(cat, "general")) + continue; + /* collect parameters for the user's entry */ + for (v = ast_variable_browse(cfg, cat); v; v = v->next) { + if (!strcasecmp(v->name, "secret")) + password = ast_strdupa(v->value); + else if (!strcasecmp(v->name, "read")) + readperm = get_perm(v->value); + else if (!strcasecmp(v->name, "write")) + writeperm = get_perm(v->value); + else if (!strcasecmp(v->name, "permit") || + !strcasecmp(v->name, "deny")) { + ha = ast_append_ha(v->name, v->value, ha, NULL); + } else if (!strcasecmp(v->name, "writetimeout")) { + int val = atoi(v->value); + + if (val < 100) + ast_log(LOG_WARNING, "Invalid writetimeout value '%s' at line %d\n", v->value, v->lineno); + else + s->writetimeout = val; + } } } + ast_config_destroy(cfg); - cfg = ast_config_load("users.conf"); - if (!cfg) - return -1; - cat = NULL; - while ( (cat = ast_category_browse(cfg, cat)) ) { - if (!strcasecmp(cat, user) && strcasecmp(cat, "general")) - break; - } if (!cat) { - ast_log(LOG_NOTICE, "%s tried to authenticate with nonexistent user '%s'\n", ast_inet_ntoa(s->sin.sin_addr), user); + /* Didn't find the user in manager.conf, check users.conf */ + int hasmanager = 0; + cfg = ast_config_load("users.conf"); + if (!cfg) + return -1; + while ( (cat = ast_category_browse(cfg, cat)) ) { + if (!strcasecmp(cat, user) && strcasecmp(cat, "general")) + break; + } + if (!cat) { + ast_log(LOG_NOTICE, "%s tried to authenticate with nonexistent user '%s'\n", ast_inet_ntoa(s->sin.sin_addr), user); + ast_config_destroy(cfg); + return -1; + } + /* collect parameters for the user's entry from users.conf */ + for (v = ast_variable_browse(cfg, cat); v; v = v->next) { + if (!strcasecmp(v->name, "secret")) + password = ast_strdupa(v->value); + else if (!strcasecmp(v->name, "read")) + readperm = get_perm(v->value); + else if (!strcasecmp(v->name, "write")) + writeperm = get_perm(v->value); + else if (!strcasecmp(v->name, "permit") || + !strcasecmp(v->name, "deny")) { + ha = ast_append_ha(v->name, v->value, ha, NULL); + } else if (!strcasecmp(v->name, "writetimeout")) { + int val = atoi(v->value); + + if (val < 100) + ast_log(LOG_WARNING, "Invalid writetimeout value '%s' at line %d\n", v->value, v->lineno); + else + s->writetimeout = val; + } else if (!strcasecmp(v->name, "hasmanager")) { + hasmanager = ast_true(v->value); + } + } ast_config_destroy(cfg); - return -1; - } - /* collect parameters for the user's entry from users.conf */ - for (v = ast_variable_browse(cfg, cat); v; v = v->next) { - if (!strcasecmp(v->name, "secret")) - password = ast_strdupa(v->value); - else if (!strcasecmp(v->name, "read")) - readperm = get_perm(v->value); - else if (!strcasecmp(v->name, "write")) - writeperm = get_perm(v->value); - else if (!strcasecmp(v->name, "permit") || - !strcasecmp(v->name, "deny")) { - ha = ast_append_ha(v->name, v->value, ha, NULL); - } else if (!strcasecmp(v->name, "writetimeout")) { - int val = atoi(v->value); - - if (val < 100) - ast_log(LOG_WARNING, "Invalid writetimeout value '%s' at line %d\n", v->value, v->lineno); - else - s->writetimeout = val; + if (!hasmanager) { + ast_log(LOG_NOTICE, "%s tried to authenticate with nonexistent user '%s'\n", ast_inet_ntoa(s->sin.sin_addr), user); + return -1; } } - ast_config_destroy(cfg); + } if (ha) { |