summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2011-11-14 16:21:06 +0000
committerJonathan Rose <jrose@digium.com>2011-11-14 16:21:06 +0000
commitec237d2e4a4c100c1a7ee87ec7a916c12cd5cd9a (patch)
treed231191f1af42aacc476c228e35bb76913e7784c
parent818ac23b928497b2550127d7743bd9d362c5a8c4 (diff)
Moves voicemail setup password entry to the end of the setup process.
This change was made because forcegreeting and forcename settings in voicemail could be circumvented by hanging up after entering a password, because the only way voicemail currently observes whether a mailbox is new or not is by checking to see if the password is the same as the mailbox number or not. (closes issue ASTERISK-18282) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/1581/ ........ Merged revisions 345062 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 345117 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@345120 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--apps/app_voicemail.c60
1 files changed, 31 insertions, 29 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 55afc074d..1e2942b83 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -9193,8 +9193,37 @@ static int vm_newuser(struct ast_channel *chan, struct ast_vm_user *vmu, struct
ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DISPLAY);
}
- /* First, have the user change their password
- so they won't get here again */
+ /* If forcename is set, have the user record their name */
+ if (ast_test_flag(vmu, VM_FORCENAME)) {
+ snprintf(prefile, sizeof(prefile), "%s%s/%s/greet", VM_SPOOL_DIR, vmu->context, vms->username);
+ if (ast_fileexists(prefile, NULL, NULL) < 1) {
+ cmd = play_record_review(chan, "vm-rec-name", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
+ if (cmd < 0 || cmd == 't' || cmd == '#')
+ return cmd;
+ }
+ }
+
+ /* If forcegreetings is set, have the user record their greetings */
+ if (ast_test_flag(vmu, VM_FORCEGREET)) {
+ snprintf(prefile, sizeof(prefile), "%s%s/%s/unavail", VM_SPOOL_DIR, vmu->context, vms->username);
+ if (ast_fileexists(prefile, NULL, NULL) < 1) {
+ cmd = play_record_review(chan, "vm-rec-unv", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
+ if (cmd < 0 || cmd == 't' || cmd == '#')
+ return cmd;
+ }
+
+ snprintf(prefile, sizeof(prefile), "%s%s/%s/busy", VM_SPOOL_DIR, vmu->context, vms->username);
+ if (ast_fileexists(prefile, NULL, NULL) < 1) {
+ cmd = play_record_review(chan, "vm-rec-busy", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
+ if (cmd < 0 || cmd == 't' || cmd == '#')
+ return cmd;
+ }
+ }
+
+ /*
+ * Change the password last since new users will be able to skip over any steps this one comes before
+ * by hanging up and calling back to voicemail main since the password is used to verify new user status.
+ */
for (;;) {
newpassword[1] = '\0';
newpassword[0] = cmd = ast_play_and_wait(chan, vm_newpassword);
@@ -9238,33 +9267,6 @@ static int vm_newuser(struct ast_channel *chan, struct ast_vm_user *vmu, struct
ast_debug(1, "User %s set password to %s of length %d\n", vms->username, newpassword, (int) strlen(newpassword));
cmd = ast_play_and_wait(chan, vm_passchanged);
- /* If forcename is set, have the user record their name */
- if (ast_test_flag(vmu, VM_FORCENAME)) {
- snprintf(prefile, sizeof(prefile), "%s%s/%s/greet", VM_SPOOL_DIR, vmu->context, vms->username);
- if (ast_fileexists(prefile, NULL, NULL) < 1) {
- cmd = play_record_review(chan, "vm-rec-name", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
- if (cmd < 0 || cmd == 't' || cmd == '#')
- return cmd;
- }
- }
-
- /* If forcegreetings is set, have the user record their greetings */
- if (ast_test_flag(vmu, VM_FORCEGREET)) {
- snprintf(prefile, sizeof(prefile), "%s%s/%s/unavail", VM_SPOOL_DIR, vmu->context, vms->username);
- if (ast_fileexists(prefile, NULL, NULL) < 1) {
- cmd = play_record_review(chan, "vm-rec-unv", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
- if (cmd < 0 || cmd == 't' || cmd == '#')
- return cmd;
- }
-
- snprintf(prefile, sizeof(prefile), "%s%s/%s/busy", VM_SPOOL_DIR, vmu->context, vms->username);
- if (ast_fileexists(prefile, NULL, NULL) < 1) {
- cmd = play_record_review(chan, "vm-rec-busy", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
- if (cmd < 0 || cmd == 't' || cmd == '#')
- return cmd;
- }
- }
-
return cmd;
}