Add ability to notify an external application/script that the voicemail password was,
while also still changing the password "internally". Issue 7371, initial patch by pdunkel, with rewrite/config comments by me. Additional modifications (yay bitmask) by pdunkel. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@47814 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
eaad3b43af
commit
9f5ca42bcf
|
@ -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"))) {
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in New Issue