Asterisk + рд╕рд┐рд╕реНрдХреЛ рдкрд░ рд░реИрдкрд┐рдб рдлреЛрди рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди

рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдХреБрдЫ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗрдВрджреНрд░ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдПрдирд╛рд▓реЙрдЧ рдлреЛрди рдХреЗ рд╕рд╛рде 70 рд▓реЛрдЧреЛрдВ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрдврд╝ рдЧрдИ рдереА рдХрд┐ рдирдП рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рдорд╛рд▓рд┐рдХ рдХреЗ рдкрд╛рд╕ рдЯреЗрд▓реАрдлреЛрди рдПрдХреНрд╕рдЪреЗрдВрдЬ рдореЗрдВ рдПрдирд╛рд▓реЙрдЧ рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдереЗ, рдФрд░ рдкреБрд░рд╛рдиреЗ рдореЗрдВ рдЯреЗрд▓реАрдлреЛрди рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЯреЗрд▓реАрдлреЛрди рдХрдВрдкрдиреА рдХреЗ рдереЗред рдореБрдЭреЗ рдЖрдИрдкреА рдЯреЗрд▓реАрдлреЛрдиреА рдХреЛ рдПрд╕реНрдЯрд░рд┐рд╕реНрдХ рдХреЗ рд╕рднреА рдПрдирд╛рд▓реЙрдЧ рд╕рд┐рдЯреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рдЬрд▓реНрджреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рджрд┐рди рд╕реЗ рдкрд╣рд▓реЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╡рд┐рддрд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдЯреЗрд▓реАрдлреЛрдиреА рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╕рдордп рд╣реЛрдЧрд╛ред

рдХрдЯ рдХреЗ рддрд╣рдд рдпрд╣ рдХреНрдпрд╛ рдЖрдпрд╛ред
рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рд╛рдордЧреНрд░реА, рдЗрд╕рд▓рд┐рдП рдЪрд┐рдВрддрд┐рдд рди рд╣реЛрдВред

рддреЛ рдореМрдЬреВрджрд╛ рд╡рд┐рдиреНрдпрд╛рд╕:


рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдСрдЯреЛрдкреНрд░реЛрд╡рд┐рдЬрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбрд┐рд╡рд╛рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░рд╛рдВрдХрди рдХреНрд╖рдорддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рддрд╛рд░рд╛рдВрдХрди рдореЗрдВ sql рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдЯреЛ-рдЯреНрдпреВрдирд┐рдВрдЧ рдбреЛрдкрдиреЗрд▓реНрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрд╛рдиреА рд╕рдВрдХреЗрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ (рдХрдо рд╕реЗ рдХрдо рдЕрдЧрд╕реНрдд 2012 рдореЗрдВ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдерд╛)ред рдлреЛрди рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЕрдкрдирд╛ рдСрдЯреЛрдкреНрд░реЛрд╡рд┐рдЬрди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдФрд░ рд╕реНрд╡рд┐рдЪ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╣рдордиреЗ 204 рдФрд░ 214 рдирдВрдмрд░ рдХреЗ рд╕рд╛рде 2 рд╡реАрдПрд▓рдПрдПрди рдмрдирд╛рдПред рд▓реИрди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛, рдЖрдИрдкреА рдЯреЗрд▓реАрдлреЛрдиреА рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ред рдХреНрдпреЛрдВрдХрд┐ рдлреЛрди рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реНрд╡рд┐рдЪ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдерд╛ред
рдЙрди рд╕реНрд╡рд┐рдЪ рдкрд░ рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рдирд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреНрд░рдВрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рджреЗрд╢реА рд╡реАрд▓рди рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред
interface fastethernet1 switchport trunk allowed vlan add 204 switchport trunk native vlan 214 exit 
рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЯреНрд░рдВрдХ рдкреЛрд░реНрдЯ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдФрд░ dhcpd.conf рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛
 # Phones Subnet Vlan 214 subnet 172.16.214.0 netmask 255.255.255.0 { range 172.16.214.10 172.16.214.250; option routers 172.16.214.1; option tftp-server-name "http://172.16.214.1/XMLDefault.cnf.xml"; option domain-name "phones.mydomain.local"; option domain-name-servers 172.16.214.1; option broadcast-address 172.16.214.255; ddns-updates on; ddns-domainname "phones.mydomain.local"; ddns-rev-domainname "in-addr.arpa"; } # Computers Subnet Vlan 204 subnet 172.16.6.0 netmask 255.255.255.0 { range 172.16.6.12 172.16.6.240; option broadcast-address 172.16.6.255; option domain-name-servers 172.16.6.1; option domain-name "mydomain.local"; option routers 172.16.6.1; if option host-name = "" { option host-name = concat ("dev-", binary-to-ascii( 10, 8, "", substring( reverse( 1, leased-address), 0, 1))); ddns-hostname = concat ("dev-", binary-to-ascii( 10, 8, "", substring( reverse( 1, leased-address), 0, 1))); } } 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред рдкрддреЗ рд╕реБрдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдлреЛрди рдмреВрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдзрд╛рд░ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдЧреЗрд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред
Thttpd рдЙрдард╛рдПрдБ рдФрд░ XMLDefault.cnf.xml рдХреА рдЬрдбрд╝ рдореЗрдВ рдбрд╛рд▓реЗрдВ
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <flat-profile xmlns="http://www.sipura.net/xsd/SPA50x-30x-SIP" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sipura.net/xsd/SPA50x-30x-SIP http://www.sipura.net/xsd/SPA50x-30x-SIP/SPA50x-30x-SIP-7-5-2.xsd"> <Admin_Passwd ua="na">7654321</Admin_Passwd> <SPCP_Auto-detect ua="na">No</SPCP_Auto-detect> <Domain ua="rw">phones.mydomain.local</Domain> <Primary_DNS ua="rw">172.16.214.1</Primary_DNS> <Syslog_Server ua="na">172.16.214.1</Syslog_Server> <Debug_Server ua="na">172.16.214.1</Debug_Server> <Debug_Level ua="na">0</Debug_Level> <Primary_NTP_Server ua="na">172.16.214.1</Primary_NTP_Server> <Enable_VLAN ua="rw">Yes</Enable_VLAN> <Enable_PC_Port_VLAN_Tagging ua="na">Yes</Enable_PC_Port_VLAN_Tagging> <Enable_CDP ua="na">No</Enable_CDP> <Enable_LLDP-MED ua="na">No</Enable_LLDP-MED> <PC_Port_VLAN_ID ua="na">204</PC_Port_VLAN_ID> <Profile_Rule ua="na">http://172.16.214.1/XMLDefault.cnf.xml</Profile_Rule> <Profile_Rule_B ua="na">http://172.16.214.1/cfg/cfg.cgi?SN=$SN&MAC=$MA</Profile_Rule_B> <Key_System_Auto_Discovery ua="na">No</Key_System_Auto_Discovery> <G722_Enable_1_ ua="na">Yes</G722_Enable_1_> <L16_Enable_1_ ua="na">No</L16_Enable_1_> <G726-16_Enable_1_ ua="na">No</G726-16_Enable_1_> <G726-24_Enable_1_ ua="na">No</G726-24_Enable_1_> <G726-32_Enable_1_ ua="na">No</G726-32_Enable_1_> <G726-40_Enable_1_ ua="na">No</G726-40_Enable_1_> <Enable_IP_Dialing_1_ ua="na">No</Enable_IP_Dialing_1_> <Use_Remote_Pref_Codec_1_ ua="na">Yes</Use_Remote_Pref_Codec_1_> <Time_Format ua="rw">24hr</Time_Format> <Date_Format ua="rw">day/month</Date_Format> <Text_Logo ua="na">Company</Text_Logo> <Time_Zone ua="na">GMT+04:00</Time_Zone> <Upgrade_Rule ua="na">( $SWVER ne 7.5.2b )? http://172.16.214.1/sw/spa50x-30x-7-5-2b.bin</Upgrade_Rule> </flat-profile> 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдлрд╝реЛрди dhcp рд╕реЗ рдСрдЯреЛрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдмреЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рдж рджреВрд╕рд░рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░реЗрдЧрд╛, рдЬреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдФрд░ рдЙрд╕рдХреЗ рдкреЙрдкреА рдПрдбреНрд░реЗрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдкреВрд░реНрдг рдкреНрд░рд╛рд░рдВрдн рдХреЗ рдмрд╛рдж, рдлреЛрди рдХрдВрдкреНрдпреВрдЯрд░ рдкреЛрд░реНрдЯ рдХреЛ 204 рд╡реАрдПрд▓рдПрдПрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдлреЛрди рдХреЛ рдЙрдирдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИред
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ /usr/local/etc/astprov.conf рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
 sqlite="/usr/local/bin/sqlite3" ast_provisiondb="/var/db/asterisk/asterisk_provision.sqlite3" ast_ext_dialplan="/var/db/asterisk/asterisk_ext_dialplan.conf" ast_ext_accounts="/var/db/asterisk/asterisk_ext_accounts.conf" logger_tag="astprov" include="/etc/rc.conf" 


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ sqlite3 рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВ:
 PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE `provision` ( `macaddress` varchar(12) NOT NULL, `serial` varchar(12) NOT NULL, `secret` varchar(32) NOT NULL, `ext` int(11) NOT NULL, `fullname` varchar(64) NOT NULL, `callerid` varchar(64) NOT NULL, `callgroup` varchar(32) NOT NULL default '1', `pickupgroup` varchar(32) NOT NULL default '1', `context` varchar(32) NOT NULL, `subscribecontext` varchar(32) NOT NULL default '1', `ip` varchar(15) NOT NULL); COMMIT; 


рдХрд╛рд░реНрдпрд╕реНрдерд▓реЛрдВ рдХреЗ рдмрд╛рдж рдХреЗ рддреНрд╡рд░рд┐рдд рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рд╣рдо рдлреЛрди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ
 3027|Buhgalter 3097|Igor 3018|Sergey 3016|Oleg 3091|Vladimir 3014|Ekaterina 3012|Andrey 3015|Maxim 


рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЦрд┐рд▓рд╛рдПрдВ
 #!/bin/sh set -x . /usr/local/etc/astprov.subr context='local_pool' callgroup=1 pickupgroup=1 subscribecontext=1 ip="none" cat $1 | while IFS= read -r line; do randomstr=`< /dev/urandom tr -dc A-Za-z0-9 | head -c10` randompas=`< /dev/urandom tr -dc A-Za-z0-9 | head -c10` ext=$(echo $line | cut -d '|' -f1 ) fullname=$(echo $line | cut -d '|' -f2 ) # fullname <<< $(IFS=";"; echo $line) insertline="insert into provision values ('$randomstr','$randompas','$randompas',$ext,'$fullname','$fullname <$ext>',$callgroup,$pickupgroup,'$context',$subscribecontext,'$ip')" # echo $insertline $sqlitecmd "$insertline" done 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднрд░ рдЬрд╛рдПрдЧреА рдФрд░ рдирдП рдлреЛрди рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреАред

рдЕрдм рдереЛрдбрд╝рд╛ рдЬрд╛рджреВ рдЯреЛрдирд╛ред
рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЪрд▓рддрд╛ рд╣реИ: рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди, www: www рдХреЗ рдЕрдВрддрд░реНрдЧрдд thttpd рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрд╕реНрдЯреНрд░реЛрд╡ рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рддрд╛рд░рд╛рдВрдХрди рдФрд░ www рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
 # chown -R asterisk.astprov /var/db/asterisk # chmod 0775 /var/db/asterisk # chmod 0664 /var/db/asterisk/* 


рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреА рдлреЛрди рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдирд┐рдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ /usr/local/www/data/cfg/cfg.cgi рдмрдирд╛рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдкрд░реНрд▓ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред
 #!/usr/bin/perl use strict; #use Data::Dumper; use DBI; use vars qw/%sv %form %cookie %rq $sth $dbh $config/; use FileHandle; use Sys::Syslog qw(:standard); my $configfilename="/usr/local/etc/astprov.conf"; $config=_read_config_file($configfilename); &systeminit; &printhead; #$form{SN}='CBT1602095Z'; #$form{MAC}='649ef37761c2'; #$sv{ip}="172.16.214.10"; openlog("astprov", 'cons,pid'); exit(1) if (not defined $form{SN} or not defined $form{MAC}); &baseconnect; &get_info; &baseclose; closelog(); exit(1); sub get_info { $form{SN} =~ s/[^0-9A-Za-z]//g; $form{MAC} =~ s/[^0-9A-Za-z]//g; my $dbdata; if($dbdata = &request_phone_info) { &print_xml($dbdata); } else { if(keys %{$dbdata} < 1) { &insert_new_phone; } $dbdata = &request_phone_info; &print_xml($dbdata); } #print Dumper $dbdata; } sub print_xml { my $dbdata=shift; my $additional; if(-f "/usr/local/www/data/cfg/additional".lc($form{MAC}).".xml") { open IN,"</usr/local/www/data/cfg/additional".lc($form{MAC}).".xml"; undef $/; $additional = <IN>; close IN; } my $hostname = "office-".$dbdata->{ext}; print << "[end]"; <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <flat-profile xmlns="http://www.sipura.net/xsd/SPA50x-30x-SIP" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sipura.net/xsd/SPA50x-30x-SIP http://www.sipura.net/xsd/SPA50x-30x-SIP/SPA50x-30x-SIP-7-5-2.xsd"> <HostName ua="rw">$hostname</HostName> <Phone-UI-readonly ua="na">Yes</Phone-UI-readonly> <Phone-UI-user-mode ua="na">Yes</Phone-UI-user-mode> <Proxy_1_ ua="na">172.16.214.1</Proxy_1_> <Display_Name_1_ ua="na">$dbdata->{fullname}</Display_Name_1_> <User_ID_1_ ua="na">$dbdata->{ext}</User_ID_1_> <Password_1_ ua="na">$dbdata->{secret}</Password_1_> <Dial_Plan_1_ ua="na">(7[0-9][0-9]xxxxS0|*8|*xx|xxxx|0xxxxxxxxxxxx.)</Dial_Plan_1_> <Station_Name ua="na">$dbdata->{ext}</Station_Name> <Station_Display_Name ua="na">$dbdata->{fullname}</Station_Display_Name> <Server_Type ua="na">Asterisk</Server_Type> <XML_Directory_Service_Name ua="na">My Company</XML_Directory_Service_Name> <XML_Directory_Service_URL ua="na">http://172.16.213.1/directory.cgi</XML_Directory_Service_URL> $additional </flat-profile> [end] } sub request_phone_info { my $cmd = "select ext,callerid,fullname,secret from provision where macaddress='".lc($form{MAC})."' and serial='".lc($form{SN})."'"; my $dbdata = $dbh->selectrow_hashref($cmd); if($dbh->err) { print "cmd = ",$cmd,"\n"; print "err = ",$dbh->err,"\n"; print "errstr = ",$dbh->errstr,"\n"; print "state = ",$dbh->state,"\n"; return undef; } return $dbdata; } sub insert_new_phone { my $maxnum = $dbh->selectrow_array("SELECT MAX(ext) FROM provision where ext < 2000") || "1000"; $maxnum++; $dbh->do("INSERT INTO provision (ip,macaddress,serial,secret,ext,fullname,callerid,context) VALUES ('".join ("','",$sv{ip},lc($form{MAC}),lc($form{SN}),lc($form{SN}),$maxnum,'Unregistered','Unregistered <'.$maxnum.'>','unreg')."')"); syslog('info|local7',"New host added MAC:$form{MAC} SN:$form{SN}"); if($dbh->err) { print "err = ",$dbh->err,"\n"; print "errstr = ",$dbh->errstr,"\n"; print "state = ",$dbh->state,"\n"; exit(1); } } sub systeminit { $sv{"ip"} = $ENV{"REMOTE_ADDR"}; $sv{"userhost"} = $ENV{"REMOTE_HOST"}; $sv{"url"} = $ENV{"HTTP_HOST"}; $sv{"doc"} = $ENV{"DOCUMENT_ROOT"}; $sv{"ref"} = $ENV{"HTTP_REFERER"}; # ---------------------------------------------------------------------------------------- my $request_url = $ENV{"REQUEST_URI"}; $request_url =~ s/%(..)/pack("c",hex($1))/ge; $request_url =~ s/[^A-Za-z0-9\-\_\+\=\:\.\,\/\@]//g; $request_url =~ s/([\-\_\+\=\.\:\,\/\@\s]){2,}/$1/g; $request_url =~ s/\+/\&/g; $request_url =~ s/^\/+//g; my $count = 0; while ($request_url =~ /^([\w\-\=\_\&\.\,\:\@\s]+)\//) { $rq{$count} = $1; $request_url =~ s/$rq{$count}\///; $count++; } $request_url =~ s/^\s+$//g; chomp $request_url; $rq{$count} = $request_url if (length($request_url) > 0); # ---------------------------------------------------------------------------------------- if ( defined($ENV{"HTTP_COOKIE"}) && length($ENV{"HTTP_COOKIE"}) > 0 ) { my @cookies = split(/;/,$ENV{"HTTP_COOKIE"}); foreach (@cookies) { my ($name,$value) = split(/=/,$_); $cookie{$name} = $value; } } # ---------------------------------------------------------------------------------------- if ((defined($ENV{"QUERY_STRING"}) && length($ENV{"QUERY_STRING"}) != 0) || (defined($ENV{"CONTENT_LENGTH"}) && $ENV{"CONTENT_LENGTH"} != 0)) { my $data = undef; my @data = undef; if ($ENV{"REQUEST_METHOD"} eq "GET") { $data = $ENV{"QUERY_STRING"}; } else { read(STDIN,$data,$ENV{"CONTENT_LENGTH"}); } @data = split(/&/,$data); foreach (@data) { $_ =~ s/\+/ /g; my ($name, $value) = split(/=/,$_,2); $name =~ s/%(..)/pack("c",hex($1))/ge; $name =~ tr/[^A-Za-z0-9\-\_\$\+\=\~\.\,]//; $value =~ s/%(..)/pack("c",hex($1))/ge; $form{$name} .= "\0" if (defined($form{$name})); $form{$name} .= $value; } } } sub baseconnect { my $dbname = eval $config->{ast_provisiondb}; $dbh = DBI->connect("dbi:SQLite:dbname=$dbname","",""); $sth = $dbh->table_info('%', '%', 'provision'); my $result = $sth->fetchall_hashref('TABLE_NAME'); if(!defined($result->{'provision'})) { $dbh->do(" CREATE TABLE `provision` ( `macaddress` varchar(12) NOT NULL, `serial` varchar(12) NOT NULL, `secret` varchar(32) NOT NULL, `ext` int(11) NOT NULL, `fullname` varchar(64) NOT NULL, `callerid` varchar(64) NOT NULL, `callgroup` varchar(32) NOT NULL default '1', `pickupgroup` varchar(32) NOT NULL default '1', `context` varchar(32) NOT NULL, `subscribecontext` varchar(32) NOT NULL default 'internal_phones', `ip` varchar(15) NOT NULL) "); } } sub baseclose { if ($dbh->{Active} && defined($sth)) { $sth->finish }; $dbh->disconnect; } sub printhead { print "Content-Type: text/plain; charset=UTF-8;\r\n\r\n"; } sub _read_config_file { my $file = shift or return; my $conf = {}; my $FH = new FileHandle; $FH->open("$file") or ( warn(loc(q[Could not open config file '%1': %2],$file,$!)), return {} ); while(<$FH>) { next if /\s*#/; next unless /\S/; chomp; s/^\s*//; s/\s*$//; my ($param,$val) = split /\s*=\s*/; ### add these to the config hash ### $conf->{ lc $param } = $val; } close $FH; return $conf; } 


рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдЙрд╕рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЗ рдореИрдХ рдЕрдиреБрд░реЛрдз рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рдпрджрд┐ рд▓рд┐рдВрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реИ, рддреЛ рдлреЛрди рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди / рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдлреЛрди рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ 1000 рдирдВрдмрд░ рд╕реЗ 2000 рддрдХ "рд╕рд░реНрд╡рд┐рд╕ рдирдВрдмрд░" рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлреЛрди рдХреЛ рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо " cfg " рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд <MAC> .xml рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдлреЛрди рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЬрд╛рдПрдЧреАред рд╣рдо рдЖрдкрдХреЗ рдлрд╝реЛрди рдореЗрдВ рдкреИрдирд▓ рд╕реЗрдЯрд┐рдВрдЧ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 <Attendant_Console_Call_Pickup_Code ua="na">*8</Attendant_Console_Call_Pickup_Code> <Unit_1_Key_1 ua="na">fnc=sd+cp+blf;sub=2010@172.16.213.1;nme=2010</Unit_1_Key_1> <Unit_1_Key_2 ua="na">fnc=sd+cp+blf;sub=2012@172.16.213.1;nme=2012</Unit_1_Key_2> <Unit_1_Key_3 ua="na">fnc=sd+cp+blf;sub=2014@172.16.213.1;nme=2014</Unit_1_Key_3> <Unit_1_Key_4 ua="na">fnc=sd+cp+blf;sub=2100@172.16.213.1;nme=2100</Unit_1_Key_4> <Unit_1_Key_5 ua="na">fnc=sd+cp+blf;sub=2110@172.16.213.1;nme=2110</Unit_1_Key_5> <Unit_1_Key_6 ua="na">fnc=sd+cp+blf;sub=2111@172.16.213.1;nme=2111</Unit_1_Key_6> <Unit_1_Key_7 ua="na">fnc=sd+cp+blf;sub=2112@172.16.213.1;nme=2112</Unit_1_Key_7> <Unit_1_Key_8 ua="na">fnc=sd+cp+blf;sub=2120@172.16.213.1;nme=2120</Unit_1_Key_8> <Unit_1_Key_9 ua="na">fnc=sd+cp+blf;sub=2121@172.16.213.1;nme=2121</Unit_1_Key_9> 

рдпрд╛ рдЗрд╕реЗ рджреВрд╕рд░реЗ рд╡реАрдПрд▓рдПрдПрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдирд╛
 <Enable_VLAN ua="rw">Yes</Enable_VLAN> <Enable_PC_Port_VLAN_Tagging ua="na">Yes</Enable_PC_Port_VLAN_Tagging> <Enable_CDP ua="na">No</Enable_CDP> <Enable_LLDP-MED ua="na">No</Enable_LLDP-MED> <PC_Port_VLAN_ID ua="na">300</PC_Port_VLAN_ID> 


рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдлреЛрди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдХреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдк рдЗрд╕реЗ thttpd.log рдХреЛ рджреЗрдЦрдХрд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ рд╣рд╛рде рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рд╕реНрд╡рдЪрд╛рд▓рди рдФрд░ рддрд╛рд░рд╛рдВрдХрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред рд╣рд░ рдХреЛрдИ рдЙрд╕ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ sqlite3 рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╢реЗрд▓ рдкрд░ рдкреНрд░рдмрд▓рд┐рдд рдХрдВрдХреНрд░реАрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдбрд░рд╛рд╡рдирд╛, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдХреЙрдореНрдкреИрдХреНрдЯ рдирд┐рдХрд▓рд╛ред рдореБрдЦреНрдп рднрд╛рдЧ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддрд╛рд░рд╛рдВрдХрди рд╕реЗ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдирд┐рдпрдВрддреНрд░рдг рдореЛрдб рдореЗрдВ рдХреА рдЧрдИ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧ рдореЗрдВ рд▓реЙрдЧ рдХреА рдЧрдИ рд╣реИрдВред рд▓рдЧрднрдЧ рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ, рдЖрдВрддрд░рд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдЯреЙрдк рдореЛрдб рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдиреАрдЪреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдо рдореЗрдВ рдХреЛрдИ рдкрде рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ / usr / рд╕реНрдерд╛рдиреАрдп / etc / рддрд╛рд░рд╛рдВрдХрди / рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред

Extension.conf config рдореЗрдВ, рдЬреЛрдбрд╝реЗрдВ
#include "/var/db/asterisk/asterisk_ext_dialplan.conf"

Sip.conf config рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
#include "/var/db/asterisk/asterisk_ext_accounts.conf"

рддрд╛рд░рд╛рдВрдХрди рд╕реЗ рд╕реАрдзреЗ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдПрдВ:
/usr/local/etc/astprov.subr - рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред
 #!/bin/sh . /usr/local/etc/astprov.conf #set -x getvalue() { result= _request=$1 _ext=$2 selectcmd='select '${_request}' from provision where ext='${_ext}';' result=`$sqlitecmd "$selectcmd"` if [ "$result" ]; then echo $result return 0 else syslog "Error: SQL request cannot be made (request ${_request},extention ${_ext})" return 1 fi } checkvalue() { result= _request=$1 _ext=$2 selectcmd='select '${_request}' from provision where ext='${_ext}';' result=`$sqlitecmd "$selectcmd"` echo $result return 0 } setvalue() { result= _what=$1 _new=$2 _where=$3 _old=$4 updatecmd="update provision set ${_what}='${_new}' where ${_where}='${_old}';" $sqlitecmd "$updatecmd" if [ $? -ne 0 ]; then syslog "Error: SQL update cannot be made (set ${_what}=${_new} where ${_where}=${_old})" return 1 else return 0 fi } get_script_name() { result= result=`echo $0 | rev | cut -d/ -f1 | rev` echo $result } syslog() { result= _message=$@ logger -t $logger_tag `get_script_name`": ${_message}" } sqlitecmdcoln="$sqlite -column $ast_provisiondb" sqlitecmdline="$sqlite -line $ast_provisiondb" sqlitecmd="$sqlite $ast_provisiondb" 


рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП showall.sh рдбрдВрдк рдмреЗрд╕
 #!/bin/sh set -e . /usr/local/etc/astprov.subr $sqlitecmd 'select * from provision' 

рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрджреНрдпрддрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ rebuildlist.sh ред
 #!/bin/sh set -e . /usr/local/etc/astprov.subr if [ -f $ast_ext_accounts -a ! -w $ast_ext_accounts ]; then syslog 'Cannot write to astprov extension database' exit 1 fi if [ -f $ast_ext_accounts ]; then mv $ast_ext_accounts $ast_ext_accounts.backup fi if [ -f $ast_ext_dialplan -a ! -w $ast_ext_dialplan ]; then syslog 'Cannot write to astprov extension dialplan' exit 1 fi if [ -f $ast_ext_dialplan ]; then mv $ast_ext_dialplan $ast_ext_dialplan.backup fi echo '[dynamic_internal_numbers]' >> $ast_ext_dialplan selectcmd='select ext from provision order by ext;' for ext in `$sqlitecmdcoln "$selectcmd"`; do echo 'exten => '$ext',1,dumpchan()' >> $ast_ext_dialplan echo 'same => n,Dial(SIP/'$ext',60,Tt)' >> $ast_ext_dialplan echo 'same => hint,SIP/'$ext >> $ast_ext_dialplan echo 'same => n,Hangup()' >> $ast_ext_dialplan echo ''>> $ast_ext_dialplan selectcmd='select callerid,fullname,macaddress,secret,context,callgroup,pickupgroup,subscribecontext,ip from provision where ext='$ext';' echo '['$ext'](all)' >> $ast_ext_accounts $sqlitecmdline "$selectcmd" | sed -E 's/ = /=/g' | while IFS= read -r line; do echo $line >> $ast_ext_accounts done echo >> $ast_ext_accounts done syslog 'Asterisk dynamic list succesfully updated' 

рдПрдХ рдлреЛрди рдирдВрдмрд░ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП changenumber.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯред
 #!/bin/sh #set -x . /usr/local/etc/astprov.subr oldname=`getvalue 'ext' $1` if [ "$?" -ne "0" ]; then echo -n GETERR exit fi numberexist=`checkvalue 'ext' $2` if [ -z "$numberexist" ]; then setvalue 'ext' $2 'ext' $1 if [ "$?" -ne "0" ]; then echo -n SETERR exit fi setvalue 'callerid' "$oldname <$2>" 'ext' $2 if [ "$?" -ne "0" ]; then echo -n SETERR exit fi syslog "Number $1 renamed to $2" echo -n OK else syslog "Number $1 cannot be renamed to $2. Number $2 already exist" echo -n NUMEXIST exit # return 1 fi 

рдлреЛрди рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП togglenumbers.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ 2035 рд╕реЗ ext 1023 рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд╛рдВрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдлрд╝реЛрди рдЬрдЧрд╣ рдкрд░ рд░рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдирдВрдмрд░ рд╕реНрдерд╛рди рдмрджрд▓рддреЗ рд╣реИрдВред
 #!/bin/sh #set -x . /usr/local/etc/astprov.subr macaddress_from=`getvalue 'macaddress' $1` if [ "$?" -ne "0" ]; then echo -n GETERR ; exit ; fi macaddress_to=`getvalue 'macaddress' $2` if [ "$?" -ne "0" ]; then echo -n GETERR; exit; fi secret_from=`getvalue 'secret' $1` if [ "$?" -ne "0" ]; then echo -n GETERR; exit; fi secret_to=`getvalue 'secret' $2` if [ "$?" -ne "0" ]; then echo -n GETERR; exit; fi serial_from=`getvalue 'serial' $1` if [ "$?" -ne "0" ]; then echo -n GETERR; exit; fi serial_to=`getvalue 'serial' $2` if [ "$?" -ne "0" ]; then echo -n GETERR; exit; fi setvalue macaddress $macaddress_from'_'$macaddress_to macaddress $macaddress_from if [ "$?" -ne "0" ]; then echo -n SETERR; exit; fi setvalue macaddress $macaddress_to'_'$macaddress_from macaddress $macaddress_to if [ "$?" -ne "0" ]; then echo -n SETERR; exit; fi setvalue secret $secret_to macaddress $macaddress_from'_'$macaddress_to if [ "$?" -ne "0" ]; then echo -n SETERR; exit; fi setvalue secret $secret_from macaddress $macaddress_to'_'$macaddress_from if [ "$?" -ne "0" ]; then echo -n SETERR; exit; fi setvalue serial $serial_to macaddress $macaddress_from'_'$macaddress_to if [ "$?" -ne "0" ]; then echo -n SETERR; exit; fi setvalue serial $serial_from macaddress $macaddress_to'_'$macaddress_from if [ "$?" -ne "0" ]; then echo -n SETERR; exit; fi setvalue macaddress $macaddress_to macaddress $macaddress_from'_'$macaddress_to if [ "$?" -ne "0" ]; then echo -n SETERR; exit; fi setvalue macaddress $macaddress_from macaddress $macaddress_to'_'$macaddress_from if [ "$?" -ne "0" ]; then echo -n SETERR; exit; fi syslog "Phones $1($serial_from:$macaddress_from) and $2($serial_to:$macaddress_to) are reversed" echo -n OK 


рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╣рд╛рдереЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
su -m asterisk , рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдЗрд╕ "рдлреАрдЪрд░" рдХреЛ рддрд╛рд░рд╛рдВрдХрди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред
рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╕рднреА рдирдП рдЕрдкрдВрдЬреАрдХреГрдд рдлреЛрди рдЕрддрд┐рдерд┐ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрддреЗ рд╣реИрдВ "[unreg]", рддреЛ рдЖрдкрдХреЛ рддрд╛рд░рд╛рдВрдХрди рдореЗрдВ рдЗрд╕ рд╕рдВрджрд░реНрдн рдХрд╛ рд╡рд┐рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 ;goto service menu exten => 3999,1,Goto(unreg,_X.,1) [unreg] exten => _X.,1,Answer() ;same => n,Authenticate(040478) same => n,NoOp(Entering Service Menu) same => n,Playback(ivr/prov-welcome-to-service-menu) same => n(menu),Background(ivr/change-number&ivr/swap-numbers&ivr/rebuild-list&ivr/reboot-phone&ivr/reload-server) same => n,Read(CHOICE,,1,,1,10) ; 1 - Change Number ; 2 - Swap Numbers ; 3 - Rebuild extensions list ; 4 - Reload phone ; 5 - Reload server ; Rename Number exten => 1,1,Read(RENAMETO,ivr/enter-dest-number,4,,1,5) same => n,GotoIf($["${RENAMETO}" = ""]?menu) same => n,Playback(ivr/entered-number) same => n,SayDigits(${RENAMETO}) same => n,Read(APPROVE,ivr/press-1-for-accept,1,,1,5) same => n,GotoIf($["${APPROVE}" != "1"]?menu) same => n,Set(CHGNM=${SHELL(/usr/local/etc/asterisk/scripts/changenumber.sh ${CALLERID(num)} ${RENAMETO})}) same => n,NoOp(${CHGNM}) same => n,GotoIf($["${CHGNM}" = "GETERR"]?geterr) same => n,GotoIf($["${CHGNM}" = "SETERR"]?seterr) same => n,GotoIf($["${CHGNM}" = "NUMEXIST"]?numexist) same => n,GotoIf($["${CHGNM}" = "OK"]?ok) same => n(ok),Playback(ivr/prov-saved&privacy-thankyou) same => n,System(/usr/local/etc/asterisk/scripts/rebuildlist.sh) same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/rebuild-ok) same => n,System(/usr/local/sbin/asterisk -rx "sip notify cisco-check-cfg ${CALLERID(num)}") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/send-phone-reboot-ok) same => n,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Hangup() same => n(geterr),Playback(ivr/script-get-error) same => n,Hangup() same => n(seterr),Playback(ivr/script-set-error) same => n,Hangup() same => n(numexist),Playback(ivr/prov-exist) same => n,Hangup() same => n(menu),Goto(_X.,menu) same => n,Hangup() same => n(error),Playback(ivr/script-error) same => n,Hangup() ; Reverse numbers exten => 2,1,Read(SWAPTO,ivr/enter-dest-number,4,,1,5) same => n,GotoIf($["${SWAPTO}" = ""]?menu) same => n,Playback(ivr/entered-number) same => n,SayDigits(${SWAPTO}) same => n,Read(APPROVE,ivr/press-1-for-accept,1,,1,5) same => n,GotoIf($["${APPROVE}" != "1"]?menu) same => n,Set(CHGNM=${SHELL(/usr/local/etc/asterisk/scripts/togglenumbers.sh ${CALLERID(num)} ${SWAPTO})}) same => n,NoOp(${CHGNM}) same => n,GotoIf($["${CHGNM}" = "GETERR"]?geterr) same => n,GotoIf($["${CHGNM}" = "SETERR"]?seterr) same => n,GotoIf($["${CHGNM}" = "OK"]?ok) same => n(ok),Playback(ivr/prov-saved&privacy-thankyou) same => n,System(/usr/local/etc/asterisk/scripts/rebuildlist.sh) same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/rebuild-ok) same => n,System(/usr/local/sbin/asterisk -rx "sip notify cisco-check-cfg ${CALLERID(num)} ${SWAPTO}") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/send-phone-reboot-ok) same => n,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Hangup() same => n(geterr),Playback(ivr/script-get-error) same => n,Hangup() same => n(seterr),Playback(ivr/script-set-error) same => n,Hangup() same => n(error),Playback(ivr/script-error) same => n,Hangup() same => n(menu),Goto(_X.,menu) same => n,Hangup() exten => 3,1,System(/usr/local/etc/asterisk/scripts/rebuildlist.sh) same => n,NoOp(${SYSTEMSTATUS}) same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/rebuild-ok) same => n,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Goto(_X.,menu) same => n(error),Playback(ivr/script-error) same => n,Goto(_X.,menu) exten => 4,1,System(/usr/local/sbin/asterisk -rx "sip notify cisco-check-cfg ${CALLERID(num)}") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/send-phone-reboot-ok) same => n,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Hangup() same => n(error),Playback(ivr/script-error) same => n,Goto(_X.,menu) same => n,Hangup() exten => 5,1,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Goto(_X.,menu) same => n(error),Playback(ivr/script-error) same => n,Goto(_X.,menu) same => n,Hangup() 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╕рдореВрд╣ рдмрдирд╛рддрд╛ рд╣реИред
1. рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрдиред
рдЖрдк рдореМрдЬреВрджрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рд╕ рдлрд╝реЛрди рдирдВрдмрд░ рдХреЛ рдЖрдк рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирдВрдмрд░ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реВрдЪреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдкрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлреЛрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░реАрдмреВрдЯ рдХрд░рддрд╛ рд╣реИред
2. рд╕реНрд╡реИрдк рдлреЛрди
рдХреЙрд▓ рдЙрд╕ рдлрд╝реЛрди рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рджреВрд╕рд░реЗ рдлрд╝реЛрди рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдВрджрд░ рдлреЛрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рд▓реЙрдЧрд┐рди рдлреЛрди рдкрд╛рд╕рд╡рд░реНрдб рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХреЙрд▓рд░рд┐рдб рдФрд░ рдПрдХреНрд╕рдЯреНрд░реАрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЧрддрд┐рд╢реАрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реВрдЪреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдкрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлреЛрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рдмреВрдЯ рд╣реЛрддреЗ рд╣реИрдВред
3. рдлрд╝реЛрди рд╕реВрдЪреА рдкреБрди: рдмрдирд╛рдПрдВред
рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреБрди: рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдСрдЯреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдкрдВрдЬреАрдХреГрдд рдлреЛрди рдЦрдбрд╝реЗ рд╣реИрдВ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдореЗрдВ рдЕрдкрдиреА рдмрд╛рд░реА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдлреЛрди рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рдирдЯрд╛рдЗрдо рдкрд░, рдЧрддрд┐рд╢реАрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдкрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
4. рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдирд╛
рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
5. рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред
рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╣реА рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде, рдЯреЗрд▓реАрдлреЛрдиреА рдХреЛ рдЙрдард╛рдирд╛ рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЖрдк рдмрд╕ рдПрдХ рдбрд╛рдпрд▓рдкреИрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИ, рдЬреЛ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рдкреНрд░рд╢рд╛рд╕рди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рд╕рд╡рд╛рд▓ рд╣реЛрдВрдЧреЗ - рд▓рд┐рдЦреЛред рдпрд╣ рдпреЛрдЬрдирд╛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

Aborche 2013

Source: https://habr.com/ru/post/In176019/


All Articles