diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_chanspy.c | 55 |
1 files changed, 22 insertions, 33 deletions
diff --git a/apps/app_chanspy.c b/apps/app_chanspy.c index 7e79eacf0..310e14ab5 100644 --- a/apps/app_chanspy.c +++ b/apps/app_chanspy.c @@ -713,22 +713,9 @@ static int common_exec(struct ast_channel *chan, struct ast_flags *flags, chanspy_ds_free(peer_chanspy_ds), prev = peer, peer_chanspy_ds = next_chanspy_ds ? next_chanspy_ds : next_channel(chan, prev, spec, exten, context, &chanspy_ds), next_chanspy_ds = NULL) { - const char *group; int igrp = !mygroup; - char *groups[NUM_SPYGROUPS]; - char *mygroups[NUM_SPYGROUPS]; - int num_groups = 0; - char dup_group[512]; - int num_mygroups = 0; - char *dup_mygroup; - int x; - int y; - char *s; - char *buffer; - char *end; - char *ext; - char *form_enforced; int ienf = !myenforced; + char *s; peer = peer_chanspy_ds->chan; @@ -757,7 +744,16 @@ static int common_exec(struct ast_channel *chan, struct ast_flags *flags, } if (mygroup) { - dup_mygroup = ast_strdupa(mygroup); + int num_groups = 0; + int num_mygroups = 0; + char dup_group[512]; + char dup_mygroup[512]; + char *groups[NUM_SPYGROUPS]; + char *mygroups[NUM_SPYGROUPS]; + const char *group; + int x; + int y; + ast_copy_string(dup_mygroup, mygroup, sizeof(dup_mygroup)); num_mygroups = ast_app_separate_args(dup_mygroup, ':', mygroups, ARRAY_LEN(mygroups)); @@ -783,35 +779,28 @@ static int common_exec(struct ast_channel *chan, struct ast_flags *flags, } if (myenforced) { + char ext[AST_CHANNEL_NAME + 3]; + char buffer[512]; + char *end; - /* We don't need to allocate more space than just the - length of (peer->name) for ext as we will cut the - channel name's ending before copying into ext */ - - ext = alloca(strlen(peer->name)); - - form_enforced = alloca(strlen(myenforced) + 3); + snprintf(buffer, sizeof(buffer) - 1, ":%s:", myenforced); - strcpy(form_enforced, ":"); - strcat(form_enforced, myenforced); - strcat(form_enforced, ":"); - - buffer = ast_strdupa(peer->name); - - if ((end = strchr(buffer, '-'))) { + ast_copy_string(ext + 1, peer->name, sizeof(ext) - 1); + if ((end = strchr(ext, '-'))) { *end++ = ':'; *end = '\0'; } - strcpy(ext, ":"); - strcat(ext, buffer); + ext[0] = ':'; - if (strcasestr(form_enforced, ext)) + if (strcasestr(buffer, ext)) { ienf = 1; + } } - if (!ienf) + if (!ienf) { continue; + } strcpy(peer_name, "spy-"); strncat(peer_name, peer->name, AST_NAME_STRLEN - 4 - 1); |