rendered paste body; Disa using voicemail passowords via agi
[custom-disa]
exten => s,1,Set(LOOPCOUNT=0)
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n(begin),Set(TIMEOUT(digit)=3)
exten => s,n,Set(TIMEOUT(response)=10)
exten => s,n,Playback(please-enter-the&extension)
exten => s,n,Read(ext_num,then-press-pound,,)
exten => s,n,Wait(1)
exten => s,n,Playback(pls-enter-vm-password)
exten => s,n,Read(ext_pwd,then-press-pound,,)
exten => s,n,Wait(1)
exten => s,n,agi,chk_vm_pwd.agi|/etc/asterisk/voicemail.conf|${ext_num}|${ext_pwd}
exten => s,n,GotoIf($["${result}" = "0"]?D:custom-disa,i,1)
exten => s,n,Set(CALLERIDNUM=${ext_num})
exten => s,n(D),DISA(no-password|from-internal)
exten => h,1,Hangup
exten => i,1,Playback(invalid)
exten => i,n,Goto(loop,1)
exten => t,1,Goto(loop,1)
exten => loop,1,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
exten => loop,n,GotoIf($[${LOOPCOUNT} > 2]?hang,1)
exten => loop,n,Goto(custom-disa,s,begin)
exten => hang,1,Playback(vm-goodbye)
exten => hang,n,Hangup
---------------------------------cut here-------------------------------------------------
#!/usr/bin/perl
# AGI script that searchs for a match on an extension and password in
# a voicemail.conf file
#
# Parameters: <voicemail config file path> | <extension> | <password>
#
#
# Written by: Andre D. Correa <andre(at)pobox.com> (03/jun/2005)
#
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
# Set variables according to supplied arquments
# Variables sanitation is not an issue as it is being run from extentions.conf
$vmconf = $ARGV[0];
$exten = $ARGV[1];
$pwd = $ARGV[2];
# Open VoiceMail configuration file read only
open VMCONF, "<$vmconf";
@vmconf_lines = <VMCONF>;
close VMCONF;
&error_msg("Cannot open $vmconf file read only.") if $#vmconf_lines eq -1;
foreach (@vmconf_lines){
next if $_ !~ /^\d/;
$_ =~ s/\s//iog;
$_ =~ s/=>/=/iog;
$_ =~ s/=/\,/;
(@line_args) = split(/\,/, $_);
if ($exten eq $line_args[0]){ # We got the right extension
if ($pwd eq $line_args[1]){ # User provided the right pwd
$AGI->set_variable('result','0');
} else { # Wrong password - bye!
$AGI->set_variable('result','1');
}
}
}
exit;
sub error_msg() {
my($err_msg) = @_;
$AGI->verbose($err_msg);
$AGI->hangup();
die $err_msg;
}