diff options
author | Russell Bryant <russell@russellbryant.com> | 2012-12-06 15:06:47 +0000 |
---|---|---|
committer | Russell Bryant <russell@russellbryant.com> | 2012-12-06 15:06:47 +0000 |
commit | 75827ca16bcf9de3b961557941429c4bf59bb056 (patch) | |
tree | 2777364d4d62a355c5b318d26a9d82804eab3f9d | |
parent | 905b2a5932e46957344e5cb845d2587ee289dad6 (diff) |
Add CLI tab completion to 'acl show'.
The 'acl show' CLI command allows you to show the details about a specific
named ACL in acl.conf. This patch adds tab completion to the command.
Review: https://reviewboard.asterisk.org/r/2230/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@377329 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | main/named_acl.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/main/named_acl.c b/main/named_acl.c index a70ca87a4..1127bca05 100644 --- a/main/named_acl.c +++ b/main/named_acl.c @@ -503,6 +503,13 @@ static void cli_display_named_acl_list(int fd) /* \brief ACL command show <name> */ static char *handle_show_named_acl_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { + RAII_VAR(struct named_acl_config *, cfg, ao2_global_obj_ref(globals), ao2_cleanup); + int length; + int which; + struct ao2_iterator i; + struct named_acl *named_acl; + char *match = NULL; + switch (cmd) { case CLI_INIT: e->command = "acl show"; @@ -511,7 +518,23 @@ static char *handle_show_named_acl_cmd(struct ast_cli_entry *e, int cmd, struct " Shows a list of named ACLs or lists all entries in a given named ACL.\n"; return NULL; case CLI_GENERATE: - return NULL; + if (!cfg) { + return NULL; + } + length = strlen(a->word); + which = 0; + i = ao2_iterator_init(cfg->named_acl_list, 0); + while ((named_acl = ao2_iterator_next(&i))) { + if (!strncasecmp(a->word, named_acl->name, length) && ++which > a->n) { + match = ast_strdup(named_acl->name); + ao2_ref(named_acl, -1); + break; + } + ao2_ref(named_acl, -1); + } + ao2_iterator_destroy(&i); + return match; + } if (a->argc == 2) { |