aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_voicemail.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-05-15 05:23:05 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-05-15 05:23:05 +0000
commit5b2aecdd56726ba2af2180019cca1876f13fa201 (patch)
tree74049deaa9142033caafbc744e27af9aa4f36c40 /apps/app_voicemail.c
parent9bc8a6439f7e53f4d782d7bb64feacdc769d801b (diff)
add silent option to VMAuthenticate application (bug #4157)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5672 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_voicemail.c')
-rwxr-xr-xapps/app_voicemail.c47
1 files changed, 32 insertions, 15 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 43c906130..68817b46a 100755
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -264,12 +264,13 @@ static char *synopsis_vmauthenticate =
"Authenticate off voicemail passwords";
static char *descrip_vmauthenticate =
-" VMAuthenticate([mailbox][@context]): Behaves identically to the Authenticate\n"
-"application, with the exception that the passwords are taken from\n"
-"voicemail.conf.\n"
+" VMAuthenticate([mailbox][@context][|options]): Behaves identically to\n"
+"the Authenticate application, with the exception that the passwords are\n"
+"taken from voicemail.conf.\n"
" If the mailbox is specified, only that mailbox's password will be considered\n"
"valid. If the mailbox is not specified, the channel variable AUTH_MAILBOX will\n"
-"be set with the authenticated mailbox.\n";
+"be set with the authenticated mailbox.\n"
+"If the options contain 's' then no initial prompts will be played.\n";
/* Leave a message */
static char *app = "VoiceMail";
@@ -4375,7 +4376,9 @@ static int vm_browse_messages(struct ast_channel *chan, struct vm_state *vms, st
}
}
-static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_size, struct ast_vm_user *res_vmu, const char *context, const char *prefix, int skipuser, int maxlogins)
+static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_size,
+ struct ast_vm_user *res_vmu, const char *context, const char *prefix,
+ int skipuser, int maxlogins, int silent)
{
int useadsi, valid=0, logretries=0;
char password[AST_MAX_EXTENSION]="", *passptr;
@@ -4385,7 +4388,7 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
adsi_begin(chan, &useadsi);
if (!skipuser && useadsi)
adsi_login(chan);
- if (!skipuser && ast_streamfile(chan, "vm-login", chan->language)) {
+ if (!silent && !skipuser && ast_streamfile(chan, "vm-login", chan->language)) {
ast_log(LOG_WARNING, "Couldn't stream login file\n");
return -1;
}
@@ -4553,7 +4556,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
}
if (!valid) {
- res = vm_authenticate(chan, vms.username, sizeof(vms.username), &vmus, context, prefixstr, skipuser, maxlogins);
+ res = vm_authenticate(chan, vms.username, sizeof(vms.username), &vmus, context, prefixstr, skipuser, maxlogins, 0);
}
if (!res) {
@@ -4993,10 +4996,14 @@ static int vm_box_exists(struct ast_channel *chan, void *data)
return 0;
}
-static int vmauthenticate(struct ast_channel *chan, void *data) {
+static int vmauthenticate(struct ast_channel *chan, void *data)
+{
struct localuser *u;
char *s = data, *user=NULL, *context=NULL, mailbox[AST_MAX_EXTENSION];
struct ast_vm_user vmus;
+ char *options = NULL;
+ int silent = 0;
+ int res = -1;
if (s) {
s = ast_strdupa(s);
@@ -5004,20 +5011,30 @@ static int vmauthenticate(struct ast_channel *chan, void *data) {
ast_log(LOG_ERROR, "Out of memory\n");
return -1;
}
- user = strsep(&s, "@");
- context = strsep(&s, "");
+ user = strsep(&s, "|");
+ options = strsep(&s, "|");
+ if (user) {
+ s = user;
+ user = strsep(&s, "@");
+ context = strsep(&s, "");
+ }
}
+
+ if (options) {
+ silent = (strchr(options, 's')) != NULL;
+ }
+
LOCAL_USER_ADD(u);
- if (!vm_authenticate(chan, mailbox, sizeof(mailbox), &vmus, context, NULL, 0, 3)) {
+ if (!vm_authenticate(chan, mailbox, sizeof(mailbox), &vmus, context, NULL, 0, 3, silent)) {
pbx_builtin_setvar_helper(chan, "AUTH_MAILBOX", mailbox);
pbx_builtin_setvar_helper(chan, "AUTH_CONTEXT", vmus.context);
LOCAL_USER_REMOVE(u);
- return 0;
- } else {
- LOCAL_USER_REMOVE(u);
- return -1;
+ res = 0;
}
+
+ LOCAL_USER_REMOVE(u);
+ return res;
}
static char show_voicemail_users_help[] =