diff --git a/main/manager.c b/main/manager.c index 011ae103ef4a7cac3333aa627bc8854dbb26f60a..ba5beb42e8dd8bb7116bc09d0a4e3b421d03a491 100644 --- a/main/manager.c +++ b/main/manager.c @@ -7149,7 +7149,7 @@ static char *handle_manager_show_events(struct ast_cli_entry *e, int cmd, struct static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { - struct ao2_container *events; + RAII_VAR(struct ao2_container *, events, NULL, ao2_cleanup); struct ao2_iterator it_events; struct ast_xml_doc_item *item, *temp; int length; @@ -7184,7 +7184,6 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct ao2_ref(item, -1); } ao2_iterator_destroy(&it_events); - ao2_ref(events, -1); return match; } @@ -7194,7 +7193,6 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct if (!(item = ao2_find(events, a->argv[3], OBJ_KEY))) { ast_cli(a->fd, "Could not find event '%s'\n", a->argv[3]); - ao2_ref(events, -1); return CLI_SUCCESS; } @@ -7234,7 +7232,6 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct } ao2_ref(item, -1); - ao2_ref(events, -1); return CLI_SUCCESS; } diff --git a/main/named_acl.c b/main/named_acl.c index a70ca87a4879c7ab3aca900566baec11de1ae3ac..074f4c57f276000830926e477cdfc43033ece6fc 100644 --- a/main/named_acl.c +++ b/main/named_acl.c @@ -177,7 +177,7 @@ static void destroy_named_acl(void *obj) * \retval NULL failure *\retval non-NULL successfully allocated named ACL */ -void *named_acl_alloc(const char *cat) +static void *named_acl_alloc(const char *cat) { struct named_acl *named_acl; @@ -198,7 +198,7 @@ void *named_acl_alloc(const char *cat) * \param cat name of the ACL wanted to be found * \retval pointer to the named ACL if available. Null if not found. */ -void *named_acl_find(struct ao2_container *container, const char *cat) +static void *named_acl_find(struct ao2_container *container, const char *cat) { struct named_acl tmp; ast_copy_string(tmp.name, cat, sizeof(tmp.name)); @@ -309,7 +309,8 @@ static struct named_acl *named_acl_find_realtime(const char *name) return acl; } -struct ast_ha *ast_named_acl_find(const char *name, int *is_realtime, int *is_undefined) { +struct ast_ha *ast_named_acl_find(const char *name, int *is_realtime, int *is_undefined) +{ struct ast_ha *ha = NULL; RAII_VAR(struct named_acl_config *, cfg, ao2_global_obj_ref(globals), ao2_cleanup); @@ -503,6 +504,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 +519,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) {