aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-18 18:54:51 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-18 18:54:51 +0000
commit6d94715209000b8f0ed15a3ff414cdc86ee0f387 (patch)
treeac8ef301c70b33b34c192b4c0c372ff8429acbbc
parent59cee6155cfe9404ee0d1e9292229ca5852258fe (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.c119
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) {