diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 25d977ff2ccc52baa02b8b8543e575468c53936a..14531240ff05a8993be6ff1dfb39199de3f1ac1f 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -402,6 +402,10 @@ static char VM_SPOOL_DIR[PATH_MAX]; static char ext_pass_cmd[128]; +#define PWDCHANGE_INTERNAL (1 << 1) +#define PWDCHANGE_EXTERNAL (1 << 2) +static int pwdchange = PWDCHANGE_INTERNAL; + #if ODBC_STORAGE #define tdesc "Comedian Mail (Voicemail System) with ODBC Storage" #elif IMAP_STORAGE @@ -5741,10 +5745,11 @@ static int vm_newuser(struct ast_channel *chan, struct ast_vm_user *vmu, struct if (++tries == 3) return -1; } - if (ast_strlen_zero(ext_pass_cmd)) - vm_change_password(vmu,newpassword); - else - vm_change_password_shell(vmu,newpassword); + if (pwdchange & PWDCHANGE_INTERNAL) + vm_change_password(vmu, newpassword); + if ((pwdchange & PWDCHANGE_EXTERNAL) && !ast_strlen_zero(ext_pass_cmd)) + vm_change_password_shell(vmu, newpassword); + if (option_debug) ast_log(LOG_DEBUG,"User %s set password to %s of length %d\n",vms->username,newpassword,(int)strlen(newpassword)); cmd = ast_play_and_wait(chan, vm_passchanged); @@ -5844,10 +5849,11 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct cmd = ast_play_and_wait(chan, vm_mismatch); break; } - if (ast_strlen_zero(ext_pass_cmd)) - vm_change_password(vmu,newpassword); - else - vm_change_password_shell(vmu,newpassword); + if (pwdchange & PWDCHANGE_INTERNAL) + vm_change_password(vmu, newpassword); + if ((pwdchange & PWDCHANGE_EXTERNAL) && !ast_strlen_zero(ext_pass_cmd)) + vm_change_password_shell(vmu, newpassword); + if (option_debug) ast_log(LOG_DEBUG,"User %s set password to %s of length %d\n",vms->username,newpassword,(int)strlen(newpassword)); cmd = ast_play_and_wait(chan, vm_passchanged); @@ -7176,7 +7182,12 @@ static int load_config(void) /* External password changing command */ if ((extpc = ast_variable_retrieve(cfg, "general", "externpass"))) { ast_copy_string(ext_pass_cmd,extpc,sizeof(ext_pass_cmd)); + pwdchange = PWDCHANGE_EXTERNAL; + } else if ((extpc = ast_variable_retrieve(cfg, "general", "externpassnotify"))) { + ast_copy_string(ext_pass_cmd,extpc,sizeof(ext_pass_cmd)); + pwdchange = PWDCHANGE_EXTERNAL | PWDCHANGE_INTERNAL; } + #ifdef IMAP_STORAGE /* IMAP server address */ if ((imap_server = ast_variable_retrieve(cfg, "general", "imapserver"))) { diff --git a/configs/voicemail.conf.sample b/configs/voicemail.conf.sample index c9d16f21d4c30fa47259518400ce4e5885e5c970..a78bb0605735fb995c9f8c5d234e54aec5688345 100644 --- a/configs/voicemail.conf.sample +++ b/configs/voicemail.conf.sample @@ -66,7 +66,11 @@ maxlogins=3 ; If you need to have an external program, i.e. /usr/bin/myapp ; called when a voicemail password is changed, uncomment this: +; Note: If this is set, the password will NOT be changed in voicemail.conf +; If you would like to also change the password in voicemail.conf, use +; the externpassnotify option below instead. ;externpass=/usr/bin/myapp +;externpassnotify=/usr/bin/myapp ; For the directory, you can override the intro file if you want ;directoryintro=dir-intro ; The character set for voicemail messages can be specified here