Merged revisions 51233 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Thu, 18 Jan 2007 17:33:33 +0000 (17:33 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 18 Jan 2007 17:33:33 +0000 (17:33 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r51233 | russell | 2007-01-18 11:18:43 -0600 (Thu, 18 Jan 2007) | 3 lines

Make the "hasmanager" option in users.conf actually have an effect.
(issue #8740, LnxPrgr3)

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@51234 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/manager.c

index a071283..a8f356b 100644 (file)
@@ -917,7 +917,41 @@ static int authenticate(struct mansession *s, const struct message *m)
                }
        }
        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);
+               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;
+               }
+       }
+       ast_config_destroy(cfg);
+       }
 
        if (ha) {
                int good = ast_apply_ha(ha, &(s->sin));