diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-11-28 22:30:46 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-11-28 22:30:46 +0000 |
commit | 124163b1dc67b24ebc504f50afb97316cec79072 (patch) | |
tree | d126e9165bc1ad5edb050c41d2f964532087b327 | |
parent | f3b8ea3b521b29409270b308c28279bc5205806f (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.sample | 5 | ||||
-rw-r--r-- | main/manager.c | 11 |
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); |