summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/manager.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/main/manager.c b/main/manager.c
index 2c6751776..fc0ec2631 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -1357,7 +1357,30 @@ static int function_capable_string_allowed_with_auths(const char *evaluating, in
return 1;
}
-/*! \brief Convert authority code to a list of options */
+/*! \brief Convert authority code to a list of options for a user. This will only
+ * display those authority codes that have an explicit match on authority */
+static const char *user_authority_to_str(int authority, struct ast_str **res)
+{
+ int i;
+ char *sep = "";
+
+ ast_str_reset(*res);
+ for (i = 0; i < ARRAY_LEN(perms) - 1; i++) {
+ if ((authority & perms[i].num) == perms[i].num) {
+ ast_str_append(res, 0, "%s%s", sep, perms[i].label);
+ sep = ",";
+ }
+ }
+
+ if (ast_str_strlen(*res) == 0) /* replace empty string with something sensible */
+ ast_str_append(res, 0, "<none>");
+
+ return ast_str_buffer(*res);
+}
+
+
+/*! \brief Convert authority code to a list of options. Note that the EVENT_FLAG_ALL
+ * authority will always be returned. */
static const char *authority_to_str(int authority, struct ast_str **res)
{
int i;
@@ -1756,8 +1779,8 @@ static char *handle_showmanager(struct ast_cli_entry *e, int cmd, struct ast_cli
(user->username ? user->username : "(N/A)"),
(user->secret ? "<Set>" : "(N/A)"),
((user->acl && !ast_acl_list_is_empty(user->acl)) ? "yes" : "no"),
- authority_to_str(user->readperm, &rauthority),
- authority_to_str(user->writeperm, &wauthority),
+ user_authority_to_str(user->readperm, &rauthority),
+ user_authority_to_str(user->writeperm, &wauthority),
(user->displayconnects ? "yes" : "no"));
ast_cli(a->fd, " Variables: \n");
for (v = user->chanvars ; v ; v = v->next) {