aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2007-11-28 22:30:46 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2007-11-28 22:30:46 +0000
commit124163b1dc67b24ebc504f50afb97316cec79072 (patch)
treed126e9165bc1ad5edb050c41d2f964532087b327
parentf3b8ea3b521b29409270b308c28279bc5205806f (diff)
it is impossible to set permissions for manager accounts created by users.conf (reported internally, patched by me)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@90098 f38db490-d61c-443f-a65b-d21fe96a405b
-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);