summaryrefslogtreecommitdiff
path: root/main/manager.c
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2007-01-18 18:54:51 +0000
committerRussell Bryant <russell@russellbryant.com>2007-01-18 18:54:51 +0000
commit0e8bd82efe3fb80bdac44443d0a9422d2fc8e9c2 (patch)
treeac8ef301c70b33b34c192b4c0c372ff8429acbbc /main/manager.c
parentc27d2141b3945397711366650372087b60fc99e1 (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: https://origsvn.digium.com/svn/asterisk/trunk@51247 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/manager.c')
-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) {