From: Richard Mudgett Date: Wed, 19 Jul 2017 23:11:19 +0000 (-0500) Subject: app_voicemail.c: Allow mailbox entry on authentication retry prompt. X-Git-Tag: 13.18.0-rc1~121^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ff9d8785db1f4dcd6ac61ac1ddd3fa59f66ab72;p=thirdparty%2Fasterisk.git app_voicemail.c: Allow mailbox entry on authentication retry prompt. The following testsuite voicemail tests were failing to re-enter the mailbox after the first login attempt. tests/apps/voicemail/authenticate_invalid_mailbox tests/apps/voicemail/authenticate_invalid_password The tests were noting the start of the vm-incorrect-mailbox prompt and immediately sending the mailbox for the next login attempt. Since the invalid message playback had to complete before the digits were recognized, the test passed for the wrong reason and added approximately 20 seconds to the test times. * Allow the vm-incorrect-mailbox prompt to get interrupted by the mailbox digits like the initial vm-login prompt so the tests are able to enter the intended mailbox. Change-Id: I1dc53fe917bfe03a4587b2c4cd24c94696a69df8 --- diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index e5591e583a..3836fa975b 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -10987,7 +10987,7 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_ int skipuser, int max_logins, int silent) { int useadsi = 0, valid = 0, logretries = 0; - char password[AST_MAX_EXTENSION]="", *passptr; + char password[AST_MAX_EXTENSION], *passptr; struct ast_vm_user vmus, *vmu = NULL; /* If ADSI is supported, setup login screen */ @@ -11029,7 +11029,8 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_ adsi_password(chan); if (!ast_strlen_zero(prefix)) { - char fullusername[80] = ""; + char fullusername[80]; + ast_copy_string(fullusername, prefix, sizeof(fullusername)); strncat(fullusername, mailbox, sizeof(fullusername) - 1 - strlen(fullusername)); ast_copy_string(mailbox, fullusername, mailbox_size); @@ -11087,6 +11088,10 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_ free_user(vmu); return -1; } + if (ast_waitstream(chan, "")) { /* Channel is hung up */ + free_user(vmu); + return -1; + } } else { if (useadsi) adsi_login(chan); @@ -11096,10 +11101,6 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_ return -1; } } - if (ast_waitstream(chan, "")) { /* Channel is hung up */ - free_user(vmu); - return -1; - } } } if (!valid && (logretries >= max_logins)) {