summaryrefslogtreecommitdiff
path: root/main/named_acl.c
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2012-12-06 15:06:47 +0000
committerRussell Bryant <russell@russellbryant.com>2012-12-06 15:06:47 +0000
commit75827ca16bcf9de3b961557941429c4bf59bb056 (patch)
tree2777364d4d62a355c5b318d26a9d82804eab3f9d /main/named_acl.c
parent905b2a5932e46957344e5cb845d2587ee289dad6 (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
Diffstat (limited to 'main/named_acl.c')
-rw-r--r--main/named_acl.c25
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) {