aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configs/users.conf.sample5
-rw-r--r--main/manager.c11
2 files changed, 14 insertions, 2 deletions
diff --git a/configs/users.conf.sample b/configs/users.conf.sample
index f88adee9c..2a816d7e4 100644
--- a/configs/users.conf.sample
+++ b/configs/users.conf.sample
@@ -46,6 +46,11 @@ hasiax = yes
;
hasmanager = no
;
+; Set permissions for manager entry (see manager.conf.sample for documentation)
+; (defaults to *all* permissions)
+;managerread = system,call,log,verbose,command,agent,user,config
+;managerwrite = system,call,log,verbose,command,agent,user,config
+;
; Remaining options are not specific to users.conf entries but are general.
;
callwaiting = yes
diff --git a/main/manager.c b/main/manager.c
index d2f115886..cecb2ca89 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -1054,6 +1054,9 @@ static int authenticate(struct mansession *s, const struct message *m)
struct ast_variable *v;
const char *password = NULL;
int hasmanager = 0;
+ const char *readperms = NULL;
+ const char *writeperms = NULL;
+
if (strcasecmp(cat, user) || !strcasecmp(cat, "general")) {
cat = ast_category_browse(cfg, cat);
continue;
@@ -1063,6 +1066,10 @@ static int authenticate(struct mansession *s, const struct message *m)
password = v->value;
else if (!strcasecmp(v->name, "hasmanager"))
hasmanager = ast_true(v->value);
+ else if (!strcasecmp(v->name, "managerread"))
+ readperms = v->value;
+ else if (!strcasecmp(v->name, "managerwrite"))
+ writeperms = v->value;
}
if (!hasmanager)
break;
@@ -1072,8 +1079,8 @@ static int authenticate(struct mansession *s, const struct message *m)
return -1;
}
ast_copy_string(s->username, cat, sizeof(s->username));
- s->readperm = -1;
- s->writeperm = -1;
+ s->readperm = readperms ? get_perm(readperms) : -1;
+ s->writeperm = writeperms ? get_perm(writeperms) : -1;
ast_config_destroy(cfg);
if (events)
set_eventmask(s, events);