]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Make the "hasmanager" option in users.conf actually have an effect.
authorRussell Bryant <russell@russellbryant.com>
Thu, 18 Jan 2007 17:18:43 +0000 (17:18 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 18 Jan 2007 17:18:43 +0000 (17:18 +0000)
(issue #8740, LnxPrgr3)

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

main/manager.c

index 79ca6e94240c2b0cbb0744b9392162bb139e4c3d..e319962a61df65ba4a14b2750fea9604525d6777 100644 (file)
@@ -958,6 +958,40 @@ static int authenticate(struct mansession *s, const struct message *m)
                        set_eventmask(s, events);
                return 0;
        }
+       ast_config_destroy(cfg);
+       cfg = ast_config_load("users.conf");
+       if (!cfg)
+               return -1;
+       cat = ast_category_browse(cfg, NULL);
+       while (cat) {
+               struct ast_variable *v;
+               const char *password = NULL;
+               int hasmanager = 0;
+               if (strcasecmp(cat, user) || !strcasecmp(cat, "general")) {
+                       cat = ast_category_browse(cfg, cat);
+                       continue;
+               }
+               for (v = ast_variable_browse(cfg, cat); v; v = v->next) {
+                       if (!strcasecmp(v->name, "secret"))
+                               password = v->value;
+                       else if (!strcasecmp(v->name, "hasmanager"))
+                               hasmanager = ast_true(v->value);
+               }
+               if (!hasmanager)
+                       break;
+               if (!password || strcmp(password, pass)) {
+                       ast_log(LOG_NOTICE, "%s failed to authenticate as '%s'\n", ast_inet_ntoa(s->sin.sin_addr), user);
+                       ast_config_destroy(cfg);
+                       return -1;
+               }
+               ast_copy_string(s->username, cat, sizeof(s->username));
+               s->readperm = -1;
+               s->writeperm = -1;
+               ast_config_destroy(cfg);
+               if (events)
+                       set_eventmask(s, events);
+               return 0;
+       }
        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;