diff options
41 files changed, 1587 insertions, 1376 deletions
diff --git a/config/asterisk/asterisk.inc b/config/asterisk/asterisk.inc index 9a89d885..22a7b96c 100644 --- a/config/asterisk/asterisk.inc +++ b/config/asterisk/asterisk.inc @@ -1,118 +1,109 @@ <?php -/* ========================================================================== */ /* asterisk.inc - part of pfSense (http://www.pfSense.com) - Copyright (C) 2012-2013 Marcello Coutinho - Copyright (C) 2012-2013 robi <robreg@zsurob.hu> - All rights reserved. - */ -/* ========================================================================== */ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2012-2013 Marcello Coutinho + Copyright (C) 2012-2013 robi <robreg@zsurob.hu> + Copyright (C) 2015 ESF, LLC + All rights reserved. - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ define('ASTERISK_CONF_DIR', '/conf/asterisk'); -//Check pfsense version -$pf_version=substr(trim(file_get_contents("/etc/version")),0,3); -if ($pf_version == "2.1" || $pf_version == "2.2") +$pf_version=substr(trim(file_get_contents("/etc/version")), 0, 3); +if ($pf_version == "2.1" || $pf_version == "2.2") { define('ASTERISK_LOCALBASE', '/usr/pbi/asterisk-' . php_uname("m")); -else +} else { define('ASTERISK_LOCALBASE','/usr/local'); +} function asterisk_install() { + // Remove rc script from previous package versions + unlink_if_exists("/usr/local/etc/rc.d/asterisk"); sync_package_asterisk(); } function asterisk_deinstall() { - $script='/usr/local/etc/rc.d/asterisk'; - if (file_exists($script)){ - mwexec("$script stop"); - chmod ($script,0444); - } + stop_service("asterisk"); + unlink_if_exists("/usr/local/etc/rc.d/asterisk.sh"); } function sync_package_asterisk() { - global $config, $g; - - #mount filesystem writeable conf_mount_rw(); - - //for NanoBSD compatibility, move the /etc/asterisk configuration directory to /conf, and symlink it back - $dist_dir=ASTERISK_CONF_DIR ."/dist"; - if (!is_dir($dist_dir)) - mkdir($dist_dir,0755,TRUE); - if(file_exists (ASTERISK_LOCALBASE."/etc/asterisk") && !is_link(ASTERISK_LOCALBASE."/etc/asterisk")){ - $dist_files= scandir(ASTERISK_LOCALBASE."/etc/asterisk"); - foreach ($dist_files as $dist){ - if (preg_match("/-dist/",$dist)) - rename (ASTERISK_LOCALBASE."/etc/asterisk"."/$dist", "$dist_dir/$dist"); - elseif (preg_match("/\w+/",$dist)) - rename (ASTERISK_LOCALBASE."/etc/asterisk"."/$dist", ASTERISK_CONF_DIR."/$dist"); - } - rmdir(ASTERISK_LOCALBASE. "/etc/asterisk"); - symlink (ASTERISK_CONF_DIR , ASTERISK_LOCALBASE. "/etc/asterisk"); - } - - //fix asterisk options for nanobsd: logging, db and calls log in /tmp - // if ($g['platform'] == "nanobsd"){ - $script='/conf/asterisk/logger.conf'; - if (file_exists($script)){ - $script_file=file_get_contents($script); - $pattern[0]='@;rotatestrategy@'; - $replace[0]='rotatestrategy = rotate ;by pfSense ;'; - $script_file=preg_replace($pattern,$replace,$script_file); - file_put_contents($script, $script_file, LOCK_EX); - } - - $script='/conf/asterisk/asterisk.conf'; - if (file_exists($script)){ - //point to the /var subdirs in the writable area in RAM - $script_file=file_get_contents($script); - $pattern[0]='/(\Wdirectories\W)\S+/'; - $replace[0]='$1'; - $pattern[1]='/astetcdir => \S+/'; - $replace[1]='astetcdir => /conf/asterisk'; - $pattern[2]='/astdbdir => \S+/'; - $replace[2]='astdbdir => /var/db/asterisk'; - $pattern[3]='/astspooldir => \S+/'; - $replace[3]='astspooldir => /var/spool/asterisk'; - $pattern[4]='/astrundir => \S+/'; - $replace[4]='astrundir => /var/run/asterisk'; - $pattern[5]='/astlogdir => \S+/'; - $replace[5]='astlogdir => /var/log/asterisk'; - $script_file=preg_replace($pattern,$replace,$script_file); - file_put_contents($script, $script_file, LOCK_EX); + // For NanoBSD compatibility, move the /etc/asterisk configuration directory to /conf, and symlink it back + $dist_dir = ASTERISK_CONF_DIR . "/dist"; + safe_mkdir($dist_dir, 0755); + + if (file_exists (ASTERISK_LOCALBASE . "/etc/asterisk") && !is_link(ASTERISK_LOCALBASE . "/etc/asterisk")) { + $dist_files = scandir(ASTERISK_LOCALBASE . "/etc/asterisk"); + foreach ($dist_files as $dist) { + if (preg_match("/-dist/", $dist)) { + rename (ASTERISK_LOCALBASE . "/etc/asterisk" . "/$dist", "$dist_dir/$dist"); + } elseif (preg_match("/\w+/", $dist)) { + rename (ASTERISK_LOCALBASE . "/etc/asterisk" . "/$dist", ASTERISK_CONF_DIR . "/$dist"); + } } -// } + rmdir(ASTERISK_LOCALBASE . "/etc/asterisk"); + symlink(ASTERISK_CONF_DIR, ASTERISK_LOCALBASE . "/etc/asterisk"); + } - //add modules settings, for disabling those not required on pfSense - $script='/conf/asterisk/modules.conf'; - if (file_exists($script)){ - $script_file=file_get_contents($script); - if (strpos($script_file,'pfSense') === false) { //first check if already added... - $add_modules_settings=<<<EOF + // Fix asterisk options for NanoBSD: logging, db and calls log in /tmp + $script = '/conf/asterisk/logger.conf'; + if (file_exists($script)) { + $script_file = file_get_contents($script); + $pattern[0] = '@;rotatestrategy@'; + $replace[0] = 'rotatestrategy = rotate ;by pfSense ;'; + $script_file = preg_replace($pattern, $replace, $script_file); + file_put_contents($script, $script_file, LOCK_EX); + } + + $script = '/conf/asterisk/asterisk.conf'; + if (file_exists($script)) { + // Point to the /var subdirs in the writable area in ramfs + $script_file = file_get_contents($script); + $pattern[0] = '/(\Wdirectories\W)\S+/'; + $replace[0] = '$1'; + $pattern[1] = '/astetcdir => \S+/'; + $replace[1] = 'astetcdir => /conf/asterisk'; + $pattern[2] = '/astdbdir => \S+/'; + $replace[2] = 'astdbdir => /var/db/asterisk'; + $pattern[3] = '/astspooldir => \S+/'; + $replace[3] = 'astspooldir => /var/spool/asterisk'; + $pattern[4] = '/astrundir => \S+/'; + $replace[4] = 'astrundir => /var/run/asterisk'; + $pattern[5] = '/astlogdir => \S+/'; + $replace[5] = 'astlogdir => /var/log/asterisk'; + $script_file = preg_replace($pattern, $replace, $script_file); + file_put_contents($script, $script_file, LOCK_EX); + } + + // Add modules settings, for disabling those not required on pfSense + $script = '/conf/asterisk/modules.conf'; + if (file_exists($script)) { + $script_file = file_get_contents($script); + // First check if already added... + if (strpos($script_file, 'pfSense') === false) { + $add_modules_settings = <<<EOF ;The following modules settings work out of the box on pfSense (note: do not remove this comment line). ;Should you need any disabled module, check for its functionality individually in your environment. ;For more information check asterisk's online documentation. @@ -327,32 +318,34 @@ noload => chan_h323.so noload => res_config_odbc.so EOF; - $script_file .= $add_modules_settings; - file_put_contents($script, $script_file, LOCK_EX); - } + $script_file .= $add_modules_settings; + file_put_contents($script, $script_file, LOCK_EX); } + } + + // Replace general SIP settings as a newbie hint to start configuration + $script = '/conf/asterisk/sip.conf'; + if (file_exists($script)) { + $script_file = file_get_contents($script); + // Strenghten a couple of security settings, and predefine codecs in the default SIP configuration + // First check if already added... + if (strpos($script_file, 'pfSense') === false) { + $pattern[0] = '/;allowguest\S+/'; + $replace[0] = 'allowguest=no ;by pfSense ;'; + $pattern[1] = '/;alwaysauthreject/'; + $replace[1] = 'alwaysauthreject=yes ;by pfSense ;'; + $pattern[2] = '/; jbenable/'; + $replace[2] = 'jbenable=yes ;by pfSense ;'; + $pattern[3] = '/(First disallow all codecs)/'; + $replace[3] = "$1\n;The following general settings usually work on pfSense boxes (note: please do not remove this comment line).\ndisallow=all ;by pfSense\nallow=g729\nallow=gsm\nallow=ulaw\nallow=alaw\n\n"; + $script_file = preg_replace($pattern, $replace, $script_file); + file_put_contents($script, $script_file, LOCK_EX); + } + + // First check if already added... + if (strpos($script_file, 'demo extension for pfSense') === false) { + $add_demo_extension = <<<EOF - //replace general SIP settings as a newbie hint to start configuration - $script='/conf/asterisk/sip.conf'; - if (file_exists($script)){ - $script_file=file_get_contents($script); - //strenghten a couple of security settings, and predefine codecs in the default SIP configuration - if (strpos($script_file,'pfSense') === false) { //first check if already added... - $pattern[0]='/;allowguest\S+/'; - $replace[0]='allowguest=no ;by pfSense ;'; - $pattern[1]='/;alwaysauthreject/'; - $replace[1]='alwaysauthreject=yes ;by pfSense ;'; - $pattern[2]='/; jbenable/'; - $replace[2]='jbenable=yes ;by pfSense ;'; - $pattern[3]='/(First disallow all codecs)/'; - $replace[3]="$1\n;The following general settings usually work on pfSense boxes (note: please do not remove this comment line).\ndisallow=all ;by pfSense\nallow=g729\nallow=gsm\nallow=ulaw\nallow=alaw\n\n"; - $script_file=preg_replace($pattern,$replace,$script_file); - file_put_contents($script, $script_file, LOCK_EX); - } - - if (strpos($script_file,'demo extension for pfSense') === false) { //first check if already added... - $add_demo_extension = <<<EOF - [301] ;demo extension for pfSense type=friend @@ -376,51 +369,50 @@ context=default EOF; $script_file .= $add_demo_extension; file_put_contents($script, $script_file, LOCK_EX); - } } + } - $script='/usr/local/etc/rc.d/asterisk'; - if (file_exists($script)){ - $script_file=file_get_contents($script); - if (preg_match('/NO/',$script_file)){ - $script_file=preg_replace("/NO/","YES",$script_file); - $script_file=preg_replace("/core stop now'/","core stop now'\n killall \$name",$script_file); - - //create the /var subdirs for the writable area in RAM - if (strpos($script_file,'pfSense') === false) { //first check if already added... - $writable_area = <<< EOF -# Create paths in pfSense's volatile area if they don't exist (note: please do not remove this comment line) + // Write /usr/local/etc/rc.d/asterisk.sh rc script + $asterisk_user = "asterisk"; + $command = "/usr/local/sbin/asterisk"; + $command_args = "-n -F -U {$asterisk_user}"; + $start = <<<EOF + +# Create the /var subdirs for the writable area in ramfs for a in db spool run log do if [ ! -d /var/\$a/asterisk ]; then - mkdir -p /var/\$a/asterisk - chown -R asterisk:asterisk /var/\$a/asterisk - chmod -R g+w /var/\$a/asterisk + mkdir -p /var/\$a/asterisk + chown -R asterisk:asterisk /var/\$a/asterisk + chmod -R g+w /var/\$a/asterisk fi done if [ ! -d /var/log/asterisk/cdr-csv ]; then - mkdir -p /var/log/asterisk/cdr-csv - chown -R asterisk:asterisk /var/log/asterisk/cdr-csv - chmod -R g+w /var/log/asterisk/cdr-csv + mkdir -p /var/log/asterisk/cdr-csv + chown -R asterisk:asterisk /var/log/asterisk/cdr-csv + chmod -R g+w /var/log/asterisk/cdr-csv fi +{$command} {$command_args} + EOF; - $script_file .= $writable_area; - } - file_put_contents($script, $script_file, LOCK_EX); - } - chmod ($script,0755); - mwexec("$script stop"); - mwexec_bg("$script start"); - } - - //prepare backup for factory defaults restoring feature + + $stop = "{$command} -nqrx 'core stop now'\n\t"; + $stop .= "/usr/bin/killall asterisk"; + + write_rcfile(array( + 'file' => 'asterisk.sh', + 'start' => $start, + 'stop' => $stop )); + + restart_service("asterisk"); + + // Prepare backup for factory defaults restoring feature if (!file_exists("/conf.default/asterisk_factory_defaults_config.tgz")) { - system("cd /conf/asterisk/ && tar czf /conf.default/asterisk_factory_defaults_config.tgz *"); + system("cd /conf/asterisk/ && /usr/bin/tar czf /conf.default/asterisk_factory_defaults_config.tgz *"); } - - //mount filesystem readonly + conf_mount_ro(); } diff --git a/config/asterisk/asterisk.xml b/config/asterisk/asterisk.xml index d5fb3161..2eef359f 100644 --- a/config/asterisk/asterisk.xml +++ b/config/asterisk/asterisk.xml @@ -2,76 +2,71 @@ <!DOCTYPE packagegui SYSTEM "./schema/packages.dtd"> <?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> <packagegui> - <copyright> - <![CDATA[ -/* ========================================================================== */ + <copyright> +<![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ /* - asterisk.xml - part of pfSense (http://www.pfSense.com) - Copyright (C) 2012 Marcello Coutinho - All rights reserved. + asterisk.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2012 Marcello Coutinho + Copyright (C) 2015 ESF, LLC + All rights reserved. */ -/* ========================================================================== */ +/* ====================================================================================== */ /* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ - ]]> - </copyright> - <description>Asterisk status pacakge</description> - <requirements>Asterisk 1.8.x</requirements> - <faq>Currently there are no FAQ items provided.</faq> + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +/* ====================================================================================== */ + ]]> + </copyright> <name>asterisk</name> - <version>0.3.1</version> + <version>0.3.2</version> <title>asterisk</title> <include_file>/usr/local/pkg/asterisk.inc</include_file> <additional_files_needed> <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/asterisk/asterisk.inc</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/asterisk/asterisk_calls.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/asterisk/asterisk_edit_file.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/asterisk/asterisk_log.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/asterisk/asterisk_cmd.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/shortcuts/</prefix> - <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/asterisk/pkg_asterisk.inc</item> </additional_files_needed> <menu> @@ -82,26 +77,16 @@ </menu> <service> <name>asterisk</name> - <rcfile>asterisk</rcfile> + <rcfile>asterisk.sh</rcfile> <executable>asterisk</executable> - <description><![CDATA[Asterisk VoIP telephony]]></description> + <description>Asterisk VoIP Telephony</description> </service> - <tabs> - </tabs> - <fields> - </fields> <custom_php_install_command> asterisk_install(); </custom_php_install_command> <custom_php_deinstall_command> asterisk_deinstall(); </custom_php_deinstall_command> - <custom_php_command_before_form> - </custom_php_command_before_form> - <custom_php_validation_command> - </custom_php_validation_command> - <custom_delete_php_command> - </custom_delete_php_command> <custom_php_resync_config_command> sync_package_asterisk(); </custom_php_resync_config_command> diff --git a/config/asterisk/asterisk_calls.php b/config/asterisk/asterisk_calls.php index 75f24b2f..791b6d85 100644 --- a/config/asterisk/asterisk_calls.php +++ b/config/asterisk/asterisk_calls.php @@ -1,14 +1,10 @@ <?php -/* $Id$ */ /* - status_asterisk_calls.php - part of pfSense - Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>. + asterisk_calls.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com> Copyright (C) 2013 robi <robreg@zsurob.hu> - All rights reserved. - - originally part of m0n0wall (http://m0n0.ch/wall) - Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>. + Copyright (C) 2015 ESF, LLC All rights reserved. Redistribution and use in source and binary forms, with or without @@ -32,7 +28,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* +/* pfSense_MODULE: asterisk */ @@ -53,127 +49,122 @@ include("head.inc"); $callog = "/var/log/asterisk/cdr-csv/Master.csv"; /* Data input processing */ -$cmd = $_GET['cmd']; +$cmd = $_GET['cmd']; $file = $_SERVER["SCRIPT_NAME"]; -$break = Explode('/', $file); -$pfile = $break[count($break) - 1]; +$break = explode('/', $file); +$pfile = $break[count($break) - 1]; -if (file_exists($callog)) - switch ($cmd){ +if (file_exists($callog)) { + switch ($cmd) { case "trim": - $trimres=shell_exec("tail -50 '$callog' > /tmp/trimmed_asterisk.csv && rm '$callog' && mv /tmp/trimmed_asterisk.csv '$callog' && chown asterisk:asterisk '$callog' && chmod g+w '$callog'"); - header( 'Location: asterisk_calls.php?savemsg=Calls+log+trimmed.') ; - break; + $trimres = shell_exec("/usr/bin/tail -n 50 '$callog' > /tmp/trimmed_asterisk.csv && /bin/rm '$callog' && /bin/mv /tmp/trimmed_asterisk.csv '$callog' && /usr/sbin/chown asterisk:asterisk '$callog' && /bin/chmod g+w '$callog'"); + header('Location: asterisk_calls.php?savemsg=Calls+log+trimmed.'); + break; case "clear": - $trimres=shell_exec("rm '$callog' && touch '$callog' && chown asterisk:asterisk '$callog' && chmod g+w '$callog'"); - header( 'Location: asterisk_calls.php?savemsg=Calls+log+cleared.') ; - break; + $trimres=shell_exec("/bin/rm '$callog' && /usr/bin/touch '$callog' && /usr/sbin/chown asterisk:asterisk '$callog' && /bin/chmod g+w '$callog'"); + header('Location: asterisk_calls.php?savemsg=Calls+log+cleared.'); + break; case "download": - // session_cache_limiter('none'); //*Use before session_start() - // session_start(); - header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); - header('Content-Disposition: attachment; filename='.basename($callog)); + header('Content-Disposition: attachment; filename=' . basename($callog)); header('Content-Transfer-Encoding: binary'); - header('Expires: 0'); - header('Cache-Control: must-revalidate'); - header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); + header('Cache-Control: no-cache, must-revalidate'); + header('Pragma: no-cache'); header('Content-Length: ' . filesize($callog)); ob_clean(); flush(); readfile($callog); exit; - break; + break; } +} ?> <body link="#0000CC" vlink="#0000CC" alink="#0000CC"> - <?php include("fbegin.inc"); ?> - <?php +<?php include("fbegin.inc"); ?> +<?php $savemsg = $_GET["savemsg"]; if ($savemsg) { - print_info_box($savemsg); + print_info_box($savemsg); } +?> +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr><td> + <?php + $tab_array = array(); + $tab_array[0] = array(gettext("Commands"), false, "asterisk_cmd.php"); + $tab_array[1] = array(gettext("Calls"), true, "asterisk_calls.php"); + $tab_array[2] = array(gettext("Log"), false, "asterisk_log.php"); + $tab_array[3] = array(gettext("Edit configuration"), false, "asterisk_edit_file.php"); + display_top_tabs($tab_array); ?> - <table width="100%" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td> - <?php - $tab_array = array(); - $tab_array[0] = array(gettext("Commands"), false, "asterisk_cmd.php"); - $tab_array[1] = array(gettext("Calls"), true, "asterisk_calls.php"); - $tab_array[2] = array(gettext("Log"), false, "asterisk_log.php"); - $tab_array[3] = array(gettext("Edit configuration"), false, "asterisk_edit_file.php"); - display_top_tabs($tab_array); - ?> - </td> - </tr> - <tr> - <td> - <div id="mainarea"> - <?php - if (file_exists($callog)) - $file_handle = fopen($callog, "r"); - ?> - <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0"> - <tr> - <td colspan="6" class="listtopic">Last 50 Asterisk calls</td> - </tr> - <tr> - <td nowrap class="listhdrr"><?=gettext("From");?></td> - <td nowrap class="listhdrr"><?=gettext("To");?></a></td> - <td nowrap class="listhdrr"><?=gettext("Start");?></td> - <td nowrap class="listhdrr"><?=gettext("End");?></a></td> - <td nowrap class="listhdrr"><?=gettext("Duration");?></a></td> - <td nowrap class="listhdrr"><?=gettext("Status");?></td> - </tr> - <?php - $out = ''; - if (file_exists($callog)){ - while (!feof($file_handle) ) { - $lin = fgetcsv($file_handle, 102400); - if ($lin[12] != "") { - $out = "<tr>" . $out; - $out = "<td class='listlr'>" . utf8_decode(str_replace('"', '', $lin[4])) . "</td><td class='listlr'>" . $lin[2] . "</td><td class='listlr'>" . $lin[9] . "</td><td class='listlr'>" . $lin[11] . "</td><td class='listlr'>" . gmdate("G:i:s", $lin[12]) . "</td><td class='listlr'>" . $lin[14] . "</td>" . $out; - $out = "</tr>" . $out; - } - } - fclose($file_handle); - } - echo $out; - echo "<tr><td colspan='6'><a href='$pfile?cmd=download'><input type='button' name='command' value='Download' class='formbtn'></a>"; - echo "<a href='$pfile?cmd=trim'><input type='button' name='command' value='Trim log' class='formbtn'></a>"; - echo "<a href='$pfile?cmd=clear'><input type='button' name='command' value='Clear log' class='formbtn'></a></td></tr>"; - ?> - </table> - </div> - </td> - </tr> - </table> - -<p/> +</td></tr> + +<tr><td> + <div id="mainarea"> + <?php + if (file_exists($callog)) { + $file_handle = fopen($callog, "r"); + } + ?> + <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td colspan="6" class="listtopic">Last 50 Asterisk calls</td> + </tr> + <tr> + <td nowrap="nowrap" class="listhdrr"><?=gettext("From");?></td> + <td nowrap="nowrap" class="listhdrr"><?=gettext("To");?></td> + <td nowrap="nowrap" class="listhdrr"><?=gettext("Start");?></td> + <td nowrap="nowrap" class="listhdrr"><?=gettext("End");?></td> + <td nowrap="nowrap" class="listhdrr"><?=gettext("Duration");?></td> + <td nowrap="nowrap" class="listhdrr"><?=gettext("Status");?></td> + </tr> + <?php + $out = ''; + if (file_exists($callog)) { + while (!feof($file_handle)) { + $lin = fgetcsv($file_handle, 102400); + if ($lin[12] != "") { + $out = "<tr>" . $out; + $out = "<td class='listlr'>" . utf8_decode(str_replace('"', '', $lin[4])) . "</td><td class='listlr'>" . $lin[2] . "</td><td class='listlr'>" . $lin[9] . "</td><td class='listlr'>" . $lin[11] . "</td><td class='listlr'>" . gmdate("G:i:s", $lin[12]) . "</td><td class='listlr'>" . $lin[14] . "</td>" . $out; + $out = "</tr>" . $out; + } + } + fclose($file_handle); + } + echo $out; + echo "<tr><td colspan='6'><a href='$pfile?cmd=download'><input type='button' name='command' value='Download' class='formbtn' /></a>"; + echo "<a href='$pfile?cmd=trim'><input type='button' name='command' value='Trim log' class='formbtn' /></a>"; + echo "<a href='$pfile?cmd=clear'><input type='button' name='command' value='Clear log' class='formbtn' /></a></td></tr>"; + ?> + </table> + </div> +</td></tr> +</table> + +<br /> <span class="vexpl"> <span class="red"> <strong><?=gettext("Notes:");?><br /></strong> </span> - <?=gettext("Listed in reverse order (latest on top).");?> <br> - <?=gettext("Duration includes ringing time.");?> <br> + <?=gettext("Listed in reverse order (latest on top).");?> <br /> + <?=gettext("Duration includes ringing time.");?> <br /> <?=gettext("Trim keeps the last 50 entries.");?> <? -if ($g['platform'] == "nanobsd") - echo "<br>This log may be lost when rebooting the system."; +if ($g['platform'] == "nanobsd") { + echo "<br />This log may be lost when rebooting the system."; +} ?> - - </span> - <?php include("fend.inc"); ?> </body> +</html> diff --git a/config/asterisk/asterisk_cmd.php b/config/asterisk/asterisk_cmd.php index da684cde..5ba1b460 100644 --- a/config/asterisk/asterisk_cmd.php +++ b/config/asterisk/asterisk_cmd.php @@ -1,14 +1,10 @@ <?php -/* $Id$ */ /* - status_asterisk.php - part of pfSense - Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>. + asterisk_cmd.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com> Copyright (C) 2013 robi <robreg@zsurob.hu> - All rights reserved. - - originally part of m0n0wall (http://m0n0.ch/wall) - Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>. + Copyright (C) 2015 ESF, LLC All rights reserved. Redistribution and use in source and binary forms, with or without @@ -32,7 +28,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* +/* pfSense_MODULE: asterisk */ @@ -56,73 +52,75 @@ include("head.inc"); <?php /* Data input processing */ -$cmd = $_GET['cmd']; -$cmd = str_replace("+", " ", $cmd); +$cmd = $_GET['cmd']; +$cmd = str_replace("+", " ", $cmd); if ($cmd == "") { $cmd = "core show settings"; } $file = $_SERVER["SCRIPT_NAME"]; -$break = Explode('/', $file); -$pfile = $break[count($break) - 1]; - +$break = explode('/', $file); +$pfile = $break[count($break) - 1]; ?> - <table width="100%" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td> + +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr><td> + <?php + $tab_array = array(); + $tab_array[0] = array(gettext("Commands"), true, "asterisk_cmd.php"); + $tab_array[1] = array(gettext("Calls"), false, "asterisk_calls.php"); + $tab_array[2] = array(gettext("Log"), false, "asterisk_log.php"); + $tab_array[3] = array(gettext("Edit configuration"), false, "asterisk_edit_file.php"); + display_top_tabs($tab_array); + ?> +</td></tr> + +<tr><td> + <div id="mainarea"> + <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr><td class="listtopic"> + <table> + <tr> + <?php + /* Print command buttons */ + echo "<td align='center'><a href='$pfile?cmd=sip+show+registry'><input type='button' name='command' value='SIP Registry' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=sip+show+peers'><input type='button' name='command' value='SIP Peers' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=sip+show+channels'><input type='button' name='command' value='SIP Channels' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=core+show+channels'><input type='button' name='command' value='Channels' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=core+show+codecs+audio'><input type='button' name='command' value='Codecs' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=core+show+translation+recalc+10'><input type='button' name='command' value='Translation' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=sip+show+settings'><input type='button' name='command' value='SIP Settings' class='formbtns' style='width: 100px' /></a></td>"; + ?> + </tr> + <tr> + <?php + echo "<td align='center'><a href='$pfile?cmd=sip+reload'><input type='button' name='command' value='Reload SIP' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=dialplan+reload'><input type='button' name='command' value='Reload Extensions' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=core+reload'><input type='button' name='command' value='Reload Core' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=core+show+uptime'><input type='button' name='command' value='Uptime' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='center'><a href='$pfile?cmd=core+restart+now'><input type='button' name='command' value='Restart Asterisk' class='formbtns' style='width: 100px' /></a></td>"; + echo "<td align='right' colspan='2'><form name='input' action='$pfile' method='get'><input type='text' name='cmd' style='width: 145px' /><input type='submit' value='SEND' class='formbtns' style='width: 50px' /></form></td>"; + ?> + </tr> + </table> + </td></tr> + <tr valign="top"> + <td class="listlr" nowrap="nowrap"> <?php - $tab_array = array(); - $tab_array[0] = array(gettext("Commands"), true, "asterisk_cmd.php"); - $tab_array[1] = array(gettext("Calls"), false, "asterisk_calls.php"); - $tab_array[2] = array(gettext("Log"), false, "asterisk_log.php"); - $tab_array[3] = array(gettext("Edit configuration"), false, "asterisk_edit_file.php"); - display_top_tabs($tab_array); + /* Run commands and print results */ + $asterisk_command = shell_exec("/usr/local/sbin/asterisk -rx '$cmd'"); + echo "<pre style='font-size: 11px; background: white'>"; + echo $asterisk_command; + echo "</pre>"; ?> </td> </tr> - <tr> - <td> - <div id="mainarea"> - <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0"> - <tr> - <td class="listtopic"> - <table><tr> - <?php - /* Print command buttons */ - echo "<td align='center'><a href='$pfile?cmd=sip+show+registry'><input type='button' name='command' value='SIP Registry' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=sip+show+peers'><input type='button' name='command' value='SIP Peers' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=sip+show+channels'><input type='button' name='command' value='SIP Channels' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=core+show+channels'><input type='button' name='command' value='Channels' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=core+show+codecs+audio'><input type='button' name='command' value='Codecs' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=core+show+translation+recalc+10'><input type='button' name='command' value='Translation' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=sip+show+settings'><input type='button' name='command' value='SIP Settings' class='formbtns' style='width: 100px'></a></td>"; - echo "</tr><tr>"; - //echo "<td></td>"; - echo "<td align='center'><a href='$pfile?cmd=sip+reload'><input type='button' name='command' value='Reload SIP' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=dialplan+reload'><input type='button' name='command' value='Reload Extensions' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=core+reload'><input type='button' name='command' value='Reload Core' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=core+show+uptime'><input type='button' name='command' value='Uptime' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='center'><a href='$pfile?cmd=core+restart+now'><input type='button' name='command' value='Restart Asterisk' class='formbtns' style='width: 100px'></a></td>"; - echo "<td align='right' colspan='2'><form name='input' action='$pfile' method='get'><input type='text' name='cmd' style='width: 145px'><input type='submit' value='SEND' class='formbtns' style='width: 50px'></form> </td>"; - ?> - </tr></table> - </td> - </tr> - <tr valign="top"> - <td class="listlr" nowrap> - <?php - /* Run commands and print results */ - $asterisk_command=shell_exec("asterisk -rx '$cmd'"); - echo "<pre style='font-size:11px; background:white'>"; - echo $asterisk_command; - echo "</pre>"; - ?> - </td> - </tr> - </table> - </div> - </td> - </tr> - </table> + </table> + </div> +</td></tr> +</table> + <?php include("fend.inc"); ?> +</body> +</html> diff --git a/config/asterisk/asterisk_edit_file.php b/config/asterisk/asterisk_edit_file.php index 1c992d26..353ecd07 100644 --- a/config/asterisk/asterisk_edit_file.php +++ b/config/asterisk/asterisk_edit_file.php @@ -1,8 +1,10 @@ <?php /* - edit.php - Copyright (C) 2004, 2005 Scott Ullrich + asterisk_edit_file.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com> Copyright (C) 2013 robi <robreg@zsurob.hu> + Copyright (C) 2015 ESF, LLC All rights reserved. Redistribution and use in source and binary forms, with or without @@ -27,7 +29,7 @@ POSSIBILITY OF SUCH DAMAGE. */ /* - pfSense_MODULE: shell + pfSense_MODULE: asterisk */ ##|+PRIV @@ -37,21 +39,19 @@ ##|*MATCH=asterisk_edit_file.php* ##|-PRIV -$pgtitle = array(gettext("Status"),gettext("Asterisk configuration files")); require("guiconfig.inc"); - $backup_dir = "/conf"; $backup_filename = "asterisk_config.bak.tgz"; $backup_path = "{$backup_dir}/{$backup_filename}"; $files_dir = "/conf/asterisk"; $host = "{$config['system']['hostname']}.{$config['system']['domain']}"; -$downname = "asterisk-config-{$host}-".date("YmdHis").".bak.tgz"; //put the date in the filename +// Put the date in the filename +$downname = "asterisk-config-{$host}-" . date("YmdHis") . ".bak.tgz"; if (($_GET['a'] == "download") && $_GET['t'] == "backup") { conf_mount_rw(); -// system("cd {$files_dir} && tar czf {$backup_path} *"); - system("cd {$files_dir} && tar czf {$backup_path} --exclude 'dist/*' --exclude dist *"); + system("cd {$files_dir} && /usr/bin/tar czf {$backup_path} --exclude 'dist/*' --exclude dist *"); conf_mount_ro(); } @@ -63,8 +63,8 @@ if (($_GET['a'] == "download") && file_exists("{$backup_path}")) { header("Content-Type: application/download"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=\"{$downname}\""); - header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 - header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past + header("Cache-Control: no-cache, must-revalidate"); + header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Content-Length: " . filesize("{$backup_path}")); fpassthru($fd); exit; @@ -72,40 +72,38 @@ if (($_GET['a'] == "download") && file_exists("{$backup_path}")) { if ($_GET['a'] == "other") { if ($_GET['t'] == "restore") { - //extract files to $files_dir (/conf/asterisk) + // Extract files to $files_dir (/conf/asterisk) if (file_exists($backup_path)) { - //echo "The file $filename exists"; conf_mount_rw(); - exec("tar -xzC {$files_dir} -f {$backup_path} 2>&1", $sysretval); + exec("/usr/bin/tar -xzC {$files_dir} -f {$backup_path} 2>&1", $sysretval); $savemsg = "Backup has been restored, please restart Asterisk now " . $sysretval[1]; - system("chmod -R 644 {$files_dir}/*"); - header( 'Location: asterisk_edit_file.php?savemsg=' . $savemsg ) ; + system("/bin/chmod -R 644 {$files_dir}/*"); + header('Location: asterisk_edit_file.php?savemsg=' . $savemsg); conf_mount_ro(); } else { - header( 'Location: asterisk_edit_file.php?savemsg=Restore+failed.+Backup+file+not+found.' ) ; + header('Location: asterisk_edit_file.php?savemsg=Restore+failed.+Backup+file+not+found.'); } exit; } if ($_GET['t'] == "factrest") { - //extract files to $files_dir (/conf/asterisk) + // Extract files to $files_dir (/conf/asterisk) if (file_exists('/conf.default/asterisk_factory_defaults_config.tgz')) { - //echo "The file $filename exists"; conf_mount_rw(); - exec("tar -xzC {$files_dir} -f /conf.default/asterisk_factory_defaults_config.tgz 2>&1", $sysretval); + exec("/usr/bin/tar -xzC {$files_dir} -f /conf.default/asterisk_factory_defaults_config.tgz 2>&1", $sysretval); $savemsg = "Factory configuration restored, please restart Asterisk now " . $sysretval[1]; - system("chmod -R 644 {$files_dir}/*"); - header( 'Location: asterisk_edit_file.php?savemsg=' . $savemsg ) ; + system("/bin/chmod -R 644 {$files_dir}/*"); + header('Location: asterisk_edit_file.php?savemsg=' . $savemsg); conf_mount_ro(); } exit; } if ($_GET['t'] == "deldist") { - //delete dist directory from $files_dir/dist (/conf/asterisk/dist) + // Delete dist directory from $files_dir/dist (/conf/asterisk/dist) if (file_exists($files_dir . "/dist")) { conf_mount_rw(); - exec("rm -r {$files_dir}/dist 2>&1", $sysretval); + exec("/bin/rm -r {$files_dir}/dist 2>&1", $sysretval); $savemsg = "Deleted dist files " . $sysretval[1]; - header( 'Location: asterisk_edit_file.php?savemsg=' . $savemsg ) ; + header('Location: asterisk_edit_file.php?savemsg=' . $savemsg); conf_mount_ro(); } exit; @@ -114,53 +112,55 @@ if ($_GET['a'] == "other") { if (($_POST['submit'] == "Upload") && is_uploaded_file($_FILES['ulfile']['tmp_name'])) { $upfilnam = $_FILES['ulfile']['name']; - $upfiltim = strtotime(str_replace(".bak.tgz","",end(explode("-",$upfilnam)))); + $upfiltim = strtotime(str_replace(".bak.tgz", "", end(explode("-", $upfilnam)))); conf_mount_rw(); move_uploaded_file($_FILES['ulfile']['tmp_name'], "{$backup_path}"); - $savemsg = "Uploaded ". htmlentities($_FILES['ulfile']['name']) . " file as " . $backup_path . "." ; - system('chmod -R 644 {$backup_path}'); - if ($upfiltim) { //take the date from the filename and update modified time accordingly + $savemsg = "Uploaded " . htmlentities($_FILES['ulfile']['name']) . " file as " . $backup_path . "."; + system("/bin/chmod -R 644 {$backup_path}"); + // Take the date from the filename and update modified time accordingly + if ($upfiltim) { touch($backup_path, $upfiltim); } unset($_POST['txtCommand']); conf_mount_ro(); - header( 'Location: asterisk_edit_file.php?savemsg=' . $savemsg ) ; + header('Location: asterisk_edit_file.php?savemsg=' . $savemsg); } -if($_REQUEST['action']) { +if ($_REQUEST['action']) { switch($_REQUEST['action']) { case 'load': - if(strlen($_REQUEST['file']) < 1) { + if (strlen($_REQUEST['file']) < 1) { echo "|5|" . gettext("No file name specified") . ".|"; - } elseif(is_dir($_REQUEST['file'])) { + } elseif (is_dir($_REQUEST['file'])) { echo "|4|" . gettext("Loading a directory is not supported") . ".|"; - } elseif(! is_file($_REQUEST['file'])) { + } elseif (! is_file($_REQUEST['file'])) { echo "|3|" . gettext("File does not exist or is not a regular file") . ".|"; } else { $data = file_get_contents(urldecode($_REQUEST['file'])); - if($data === false) { + if ($data === false) { echo "|1|" . gettext("Failed to read file") . ".|"; } else { - echo "|0|{$_REQUEST['file']}|{$data}|"; + echo "|0|{$_REQUEST['file']}|{$data}|"; } } exit; case 'save': - if(strlen($_REQUEST['file']) < 1) { + if (strlen($_REQUEST['file']) < 1) { echo "|" . gettext("No file name specified") . ".|"; } else { conf_mount_rw(); $_REQUEST['data'] = str_replace("\r", "", base64_decode($_REQUEST['data'])); $ret = file_put_contents($_REQUEST['file'], $_REQUEST['data']); conf_mount_ro(); - if($_REQUEST['file'] == "/conf/config.xml" || $_REQUEST['file'] == "/cf/conf/config.xml") { - if(file_exists("/tmp/config.cache")) + if ($_REQUEST['file'] == "/conf/config.xml" || $_REQUEST['file'] == "/cf/conf/config.xml") { + if (file_exists("/tmp/config.cache")) { unlink("/tmp/config.cache"); + } disable_security_checks(); } - if($ret === false) { + if ($ret === false) { echo "|" . gettext("Failed to write file") . ".|"; - } elseif($ret <> strlen($_REQUEST['data'])) { + } elseif ($ret <> strlen($_REQUEST['data'])) { echo "|" . gettext("Error while writing file") . ".|"; } else { echo "|" . gettext("File successfully saved") . ".|"; @@ -170,10 +170,10 @@ if($_REQUEST['action']) { } exit; } + $shortcut_section = "asterisk"; +$pgtitle = array(gettext("Status"), gettext("Asterisk configuration files")); require("head.inc"); -outputJavaScriptFileInline("filebrowser/browser.js"); -outputJavaScriptFileInline("javascript/base64.js"); ?> @@ -181,21 +181,34 @@ outputJavaScriptFileInline("javascript/base64.js"); <?php include("fbegin.inc"); ?> <?php -$savemsg = $_GET["savemsg"]; -if ($savemsg) { - print_info_box($savemsg); -} + $savemsg = $_GET["savemsg"]; + if ($savemsg) { + print_info_box($savemsg); + } ?> -<script type="text/javascript"> +<script type="text/javascript"> +//<![CDATA[ +<?php include("filebrowser/browser.js"); ?> +//]]> +</script> + +<script type="text/javascript"> +//<![CDATA[ +<?php include("javascript/base64.js"); ?> +//]]> +</script> + +<script type="text/javascript"> +//<![CDATA[ function loadFile() { $("fileStatus").innerHTML = "<?=gettext("Loading file"); ?> ..."; Effect.Appear("fileStatusBox", { duration: 0.5 }); new Ajax.Request( "<?=$_SERVER['SCRIPT_NAME'];?>", { - method: "post", - postBody: "action=load&file=" + $("fbTarget").value, + method: "post", + postBody: "action=load&file=" + $("fbTarget").value, onComplete: loadComplete } ); @@ -209,10 +222,10 @@ if ($savemsg) { if(values.shift() == "0") { var file = values.shift(); $("fileStatus").innerHTML = "<?=gettext("File successfully loaded"); ?>."; - $("fileContent").value = values.join("|"); + $("fileContent").value = values.join("|"); var lang = "none"; - if(file.indexOf(".php") > 0) lang = "php"; + if(file.indexOf(".php") > 0) lang = "php"; else if(file.indexOf(".inc") > 0) lang = "php"; else if(file.indexOf(".xml") > 0) lang = "xml"; else if(file.indexOf(".js" ) > 0) lang = "js"; @@ -229,14 +242,14 @@ if ($savemsg) { function saveFile(file) { $("fileStatus").innerHTML = "<?=gettext("Saving file"); ?> ..."; Effect.Appear("fileStatusBox", { duration: 0.5 }); - + var fileContent = Base64.encode($("fileContent").value); fileContent = fileContent.replace(/\+/g,"%2B"); - + new Ajax.Request( "<?=$_SERVER['SCRIPT_NAME'];?>", { - method: "post", - postBody: "action=save&file=" + $("fbTarget").value + + method: "post", + postBody: "action=save&file=" + $("fbTarget").value + "&data=" + fileContent, onComplete: function(req) { var values = req.responseText.split("|"); @@ -246,7 +259,7 @@ if ($savemsg) { ); } - + function ckrest() { if(document.getElementById('ckrest').checked==true) { @@ -263,188 +276,174 @@ if ($savemsg) { document.getElementById('deldistdire').disabled=true; } } - - + +//]]> </script> - <table width="100%" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td> - <?php - $tab_array = array(); - $tab_array[0] = array(gettext("Commands"), false, "asterisk_cmd.php"); - $tab_array[1] = array(gettext("Calls"), false, "asterisk_calls.php"); - $tab_array[2] = array(gettext("Log"), false, "asterisk_log.php"); - $tab_array[3] = array(gettext("Edit configuration"), true, "asterisk_edit_file.php"); - display_top_tabs($tab_array); - ?> - </td> - </tr> - <tr> - <td> - <div id="mainarea"> - - <!-- backup options --> - <div style="background:#eeeeee;"> - <div class="vexpl" style="padding-left:15px;"> - <br /> - <table width='98%' cellpadding='0' cellspacing='0' border='0'> - <tr> - <td width='80%'> - <b>Backup / Restore</b> - The 'Backup' button will tar gzip asterisk configuration files to <? echo $backup_path; ?> it then offers it to download.<br> - The 'Restore' button will be visible only if the <? echo $backup_path; ?> backup file exists.<br> - You can upload a backup file to the system, if one already exists at <? echo $backup_path; ?>, it will be overwritten. - <br /> - </td> - <td width='20%' valign='middle' align='right'> +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr><td> + <?php + $tab_array = array(); + $tab_array[0] = array(gettext("Commands"), false, "asterisk_cmd.php"); + $tab_array[1] = array(gettext("Calls"), false, "asterisk_calls.php"); + $tab_array[2] = array(gettext("Log"), false, "asterisk_log.php"); + $tab_array[3] = array(gettext("Edit configuration"), true, "asterisk_edit_file.php"); + display_top_tabs($tab_array); + ?> +</td></tr> + +<tr><td> + <div id="mainarea"> + <!-- backup options --> + <div style="background:#eeeeee;"> + <div class="vexpl" style="padding-left:15px;"><br /> + <table width='98%' cellpadding='0' cellspacing='0' border='0'> + <tr> + <td width='80%'> + <strong>Backup / Restore</strong> + The 'Backup' button will tar gzip asterisk configuration files to <? echo $backup_path; ?> it then offers it to download.<br /> + The 'Restore' button will be visible only if the <? echo $backup_path; ?> backup file exists.<br /> + You can upload a backup file to the system, if one already exists at <? echo $backup_path; ?>, it will be overwritten.<br /> + </td> + <td width='20%' valign='middle' align='right'> <?php - echo " <input type='button' value='Backup' onclick=\"document.location.href='asterisk_edit_file.php?a=download&t=backup';\" />\n"; - if (file_exists($backup_path)) { - echo " <input type='button' value='Restore' onclick=\"document.location.href='asterisk_edit_file.php?a=other&t=restore';\" />\n"; - } + echo "<input type='button' value='Backup' onclick=\"document.location.href='asterisk_edit_file.php?a=download&t=backup';\" />\n"; + if (file_exists($backup_path)) { + echo "<input type='button' value='Restore' onclick=\"document.location.href='asterisk_edit_file.php?a=other&t=restore';\" />\n"; + } ?> - </td> - </tr></table><br> - <table width='98%' cellpadding='0' cellspacing='0' border='0'> - <tr> - <td width='20%' valign='middle' align='left'> + </td> + </tr> + </table> + <br /> + <table width='98%' cellpadding='0' cellspacing='0' border='0'> + <tr> + <td width='20%' valign='middle' align='left'> <?php if (file_exists($backup_path)) { - echo $backup_filename . " date:<br>" . date ("Y F d H:i:s.", filemtime($backup_path)); + echo $backup_filename . " date:<br />" . date ("Y F d H:i:s.", filemtime($backup_path)); } ?> - </td> - <td width='80%' valign='middle' align='right'> - <form action="asterisk_edit_file.php" method="POST" enctype="multipart/form-data" name="frmUpload" onSubmit=""> + </td> + <td width='80%' valign='middle' align='right'> + <form action="asterisk_edit_file.php" method="post" enctype="multipart/form-data" name="frmUpload" onsubmit=""> Upload backup file: - <input name="ulfile" type="file" class="button" id="ulfile"> - <input name="submit" type="submit" class="button" id="upload" value="Upload"> + <input name="ulfile" type="file" class="button" id="ulfile" /> + <input name="submit" type="submit" class="button" id="upload" value="Upload" /> </form> - </td> - </tr> - </table><br /> - </div> - </div> - - - - <table width="100%" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td class="tabcont" align="center"> - - <!-- controls --> - <table width="100%" cellpadding="9" cellspacing="9"> - <tr> - <td align="center" class="list"> - <?=gettext("Configuration files stored in"); ?>: - <input type="text" class="formfld file" id="fbTarget" value="<?=gettext($files_dir);?>" size="45" /> - <input type="button" class="formbtn" id="fbOpen" value="<?=gettext('Browse');?>" /> - <!-- <input type="button" class="formbtn" onclick="loadFile();" value="<?=gettext('Load');?>" /> --> - <input type="button" class="formbtn" onclick="saveFile();" value="<?=gettext('Save');?>" /> - <br /> - </td> - </tr> - </table> - - - - <!-- file status box --> - <div style="display:none; background:#eeeeee;" id="fileStatusBox"> - <div class="vexpl" style="padding-left:15px;"> - <strong id="fileStatus"></strong> - </div> - </div> - - - <!-- filebrowser --> - <div id="fbBrowser" style="display:none; border:1px dashed gray; width:98%;"></div> - - <!-- file viewer/editor --> - <table width="100%"> - <tr> - <td valign="top" class="label"> - <div style="background:#eeeeee;" id="fileOutput"> - <textarea id="fileContent" name="fileContent" style="width:100%;" rows="30" wrap="off"></textarea> - </div> - </td> - </tr> - </table> - - </td> - </tr> - </table> - - <script type="text/javascript"> - Event.observe( - window, "load", - function() { - $("fbTarget").focus(); - - NiftyCheck(); - Rounded("div#fileStatusBox", "all", "#ffffff", "#eeeeee", "smooth"); - } - ); - - <?php if($_GET['action'] == "load"): ?> - Event.observe( - window, "load", - function() { - $("fbTarget").value = "<?=$_GET['path'];?>"; - loadFile(); - } - ); - <?php endif; ?> - </script> - - - <div style="background:#eeeeee;"> - <div class="vexpl" style="padding-left:15px;"> - <table width='98%' cellpadding='0' cellspacing='0' border='0'> - <tr> - <td width='80%' valign='middle' align='right'><br /> - <?php - if (file_exists($files_dir . "/dist")) { - echo "<input name='ckdist' id='ckdist' type='checkbox' onclick='return ckdist();' style='vertical-align:-3px;'>enable <input type='button' value='Delete dist files' name='deldistdire' id='deldistdire' disabled='disabled' onclick=\"document.location.href='asterisk_edit_file.php?a=other&t=deldist';\" /> \n"; - } - if (file_exists("/conf.default/asterisk_factory_defaults_config.tgz")) { - echo "<input name='ckrest' id='ckrest' type='checkbox' onclick='return ckrest();' style='vertical-align:-3px;'>enable <input type='button' value='Restore to factory defaults' name='restfactdef' id='restfactdef' disabled='disabled' onclick=\"document.location.href='asterisk_edit_file.php?a=other&t=factrest';\" />\n"; - } - ?> - <br /></td> - </tr> - </table><br /> - </div> - </div> - - + </td> + </tr> + </table> + <br /> + </div> + </div> + + <table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr><td class="tabcont" align="center"> + <!-- controls --> + <table width="100%" cellpadding="9" cellspacing="9"> + <tr> + <td align="center" class="list"> + <?=gettext("Configuration files stored in"); ?>: + <input type="text" class="formfld file" id="fbTarget" value="<?=gettext($files_dir);?>" size="45" /> + <input type="button" class="formbtn" id="fbOpen" value="<?=gettext('Browse');?>" /> + <input type="button" class="formbtn" onclick="saveFile();" value="<?=gettext('Save');?>" /> + <br /> + </td> + </tr> + </table> + + <!-- file status box --> + <div style="display:none; background:#eeeeee;" id="fileStatusBox"> + <div class="vexpl" style="padding-left:15px;"> + <strong id="fileStatus"></strong> </div> - </td> - </tr> - </table> + </div> -<p/> + <!-- filebrowser --> + <div id="fbBrowser" style="display:none; border:1px dashed gray; width:98%;"></div> + + <!-- file viewer/editor --> + <table width="100%"> + <tr> + <td valign="top" class="label"> + <div style="background:#eeeeee;" id="fileOutput"> + <textarea id="fileContent" name="fileContent" style="width:100%;" rows="30" cols="65" wrap="off"></textarea> + </div> + </td> + </tr> + </table> + </td></tr> + </table> + +<script type="text/javascript"> +//<![CDATA[ + Event.observe( + window, "load", + function() { + $("fbTarget").focus(); + NiftyCheck(); + Rounded("div#fileStatusBox", "all", "#ffffff", "#eeeeee", "smooth"); + } + ); + + <?php if ($_GET['action'] == "load"): ?> + Event.observe( + window, "load", + function() { + $("fbTarget").value = "<?=$_GET['path'];?>"; + loadFile(); + } + ); + <?php endif; ?> +//]]> +</script> + + <div style="background: #eeeeee;"> + <div class="vexpl" style="padding-left:15px;"> + <table width='98%' cellpadding='0' cellspacing='0' border='0'> + <tr> + <td width='80%' valign='middle' align='right'><br /> + <?php + if (file_exists($files_dir . "/dist")) { + echo "<input name='ckdist' id='ckdist' type='checkbox' onclick='return ckdist();' style='vertical-align:-3px;'>enable <input type='button' value='Delete dist files' name='deldistdire' id='deldistdire' disabled='disabled' onclick=\"document.location.href='asterisk_edit_file.php?a=other&t=deldist';\" /> \n"; + } + if (file_exists("/conf.default/asterisk_factory_defaults_config.tgz")) { + echo "<input name='ckrest' id='ckrest' type='checkbox' onclick='return ckrest();' style='vertical-align:-3px;'>enable <input type='button' value='Restore to factory defaults' name='restfactdef' id='restfactdef' disabled='disabled' onclick=\"document.location.href='asterisk_edit_file.php?a=other&t=factrest';\" />\n"; + } + ?> + <br /> + </td> + </tr> + </table> + <br /> + </div> + </div> + </div> +</td></tr> +</table> + +<br /> <span class="vexpl"> <span class="red"> <strong><?=gettext("Note:");?><br /></strong> </span> - <?=gettext("Please back up your Asterisk configuration regularly.");?><br> + <?=gettext("Please back up your Asterisk configuration regularly.");?><br /> <?=gettext("It's worth to preserve the automatically generated filename of the downloaded backup file. It contains the backup creation date, which is used when uploading it back to the system.");?> <?php - $sipconf=$files_dir . "/sip.conf"; - if (file_exists($sipconf)){ - $sipconf_file=file_get_contents($sipconf); - if (strpos($sipconf_file,"demo extension for pfSense") !== false) { + $sipconf = $files_dir . "/sip.conf"; + if (file_exists($sipconf)) { + $sipconf_file = file_get_contents($sipconf); + if (strpos($sipconf_file, "demo extension for pfSense") !== false) { ?><br /> <?=gettext("This Asterisk configuration on pfSense contains two demo SIP accounts, 301 and 302 with password 1234, for you to test functionality. Check sip.conf for more details. These accounts can be safely removed at any time.");?> <?php } - } + } ?> - </span> - + <?php include("fend.inc"); ?> </body> </html> diff --git a/config/asterisk/asterisk_log.php b/config/asterisk/asterisk_log.php index f4a752d2..44ba8acf 100644 --- a/config/asterisk/asterisk_log.php +++ b/config/asterisk/asterisk_log.php @@ -1,15 +1,11 @@ <?php -/* $Id$ */ /* - status_asterisk_log.php - part of pfSense - Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>. - Copyright (C) 2012 robi <robreg@zsurob.hu> + asterisk_log.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com> + Copyright (C) 2012 robi <robreg@zsurob.hu> Copyright (C) 2012 Marcello Coutinho - All rights reserved. - - originally part of m0n0wall (http://m0n0.ch/wall) - Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>. + Copyright (C) 2015 ESF, LLC All rights reserved. Redistribution and use in source and binary forms, with or without @@ -33,7 +29,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* +/* pfSense_MODULE: asterisk */ @@ -51,94 +47,84 @@ $shortcut_section = "asterisk"; include("head.inc"); /* Path to Asterisk log file */ -//if ($g['platform'] == "nanobsd") -// $log = "/tmp/asterisk.log"; -//else $log = "/var/log/asterisk/messages"; ?> <?php /* Data input processing */ -$cmd = $_GET['cmd']; -//$cmd = str_replace("+", " ", $cmd); +$cmd = $_GET['cmd']; +//$cmd = str_replace("+", " ", $cmd); $file = $_SERVER["SCRIPT_NAME"]; -$break = Explode('/', $file); -$pfile = $break[count($break) - 1]; +$break = explode('/', $file); +$pfile = $break[count($break) - 1]; if (file_exists($log)) { if ($cmd == "trim") { - $trimres=shell_exec("tail -50 '$log' > /tmp/trimmed_asterisk.log && rm '$log' && mv /tmp/trimmed_asterisk.log '$log' && chown asterisk:asterisk '$log' && chmod g+w '$log'"); - header( 'Location: asterisk_log.php?savemsg=Log+trimmed.') ; + $trimres = shell_exec("/usr/bin/tail -n 50 '$log' > /tmp/trimmed_asterisk.log && /bin/rm '$log' && /bin/mv /tmp/trimmed_asterisk.log '$log' && /usr/sbin/chown asterisk:asterisk '$log' && /bin/chmod g+w '$log'"); + header('Location: asterisk_log.php?savemsg=Log+trimmed.'); } if ($cmd == "clear") { - $trimres=shell_exec("rm '$log' && touch '$log' && chown asterisk:asterisk '$log' && chmod g+w '$log'"); - header( 'Location: asterisk_log.php?savemsg=Log+cleared.') ; + $trimres = shell_exec("/bin/rm '$log' && /usr/bin/touch '$log' && /usr/sbin/chown asterisk:asterisk '$log' && /bin/chmod g+w '$log'"); + header('Location: asterisk_log.php?savemsg=Log+cleared.'); } } ?> <body link="#0000CC" vlink="#0000CC" alink="#0000CC"> - <?php include("fbegin.inc"); ?> - <?php +<?php include("fbegin.inc"); ?> +<?php $savemsg = $_GET["savemsg"]; if ($savemsg) { - print_info_box($savemsg); + print_info_box($savemsg); } +?> +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr><td> + <?php + $tab_array = array(); + $tab_array[0] = array(gettext("Commands"), false, "asterisk_cmd.php"); + $tab_array[1] = array(gettext("Calls"), false, "asterisk_calls.php"); + $tab_array[2] = array(gettext("Log"), true, "asterisk_log.php"); + $tab_array[3] = array(gettext("Edit configuration"), false, "asterisk_edit_file.php"); + display_top_tabs($tab_array); ?> - <table width="100%" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td> - <?php - $tab_array = array(); - $tab_array[0] = array(gettext("Commands"), false, "asterisk_cmd.php"); - $tab_array[1] = array(gettext("Calls"), false, "asterisk_calls.php"); - $tab_array[2] = array(gettext("Log"), true, "asterisk_log.php"); - $tab_array[3] = array(gettext("Edit configuration"), false, "asterisk_edit_file.php"); - display_top_tabs($tab_array); - ?> - </td> - </tr> - <tr> - <td> - <div id="mainarea"> - <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0"> - <tr> - <td colspan="2" class="listtopic">Last 50 Asterisk log entries</td> - </tr> - - <tr valign="top"><td class="listlr" nowrap> - +</td></tr> +<tr><td> + <div id="mainarea"> + <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td colspan="2" class="listtopic">Last 50 Asterisk log entries</td> + </tr> + <tr valign="top"><td class="listlr" nowrap="nowrap"> <?php $showlog_command=shell_exec("tail -50 '$log'"); echo nl2br($showlog_command); ?> - </td></tr> + </td></tr> <?php - echo "<tr><td colspan='6'><a href='$pfile?cmd=trim'><input type='button' name='command' value='Trim log' class='formbtn'></a>"; - echo "<a href='$pfile?cmd=clear'><input type='button' name='command' value='Clear log' class='formbtn'></a></td></tr>"; + echo "<tr><td colspan='6'><a href='$pfile?cmd=trim'><input type='button' name='command' value='Trim log' class='formbtn' /></a>"; + echo "<a href='$pfile?cmd=clear'><input type='button' name='command' value='Clear log' class='formbtn' /></a></td></tr>"; ?> - </table> - </div> - </td> - </tr> - </table> + </table> + </div> +</td></tr> +</table> -<p/> +<br /> <span class="vexpl"> <span class="red"> <strong><?=gettext("Note:");?><br /></strong> </span> <?=gettext("Trim keeps the last 50 lines of the log.");?> -<? -if ($g['platform'] == "nanobsd") - echo "<br>This log may be lost when rebooting the system."; -?> - - + <?php + if ($g['platform'] == "nanobsd") { + echo "<br />This log may be lost when rebooting the system."; + } + ?> </span> <?php include("fend.inc"); ?> diff --git a/config/asterisk/pkg_asterisk.inc b/config/asterisk/pkg_asterisk.inc index 129313c4..ad26ee80 100644 --- a/config/asterisk/pkg_asterisk.inc +++ b/config/asterisk/pkg_asterisk.inc @@ -8,4 +8,4 @@ $shortcuts['asterisk']['log'] = "asterisk_log.php"; $shortcuts['asterisk']['status'] = "asterisk_cmd.php"; $shortcuts['asterisk']['service'] = "asterisk"; -?>
\ No newline at end of file +?> diff --git a/config/filemgr/file_manager.php b/config/filemgr/file_manager.php index 5e858591..1c9edb61 100644 --- a/config/filemgr/file_manager.php +++ b/config/filemgr/file_manager.php @@ -193,19 +193,19 @@ if ('ok' == 'ok') { } $container .= <<<EOF -<table border=\"0\" cellspacing=\"1\" cellpadding=\"1\" class=\"list\" width=\"100%\" summary=\"file manager\"> +<table border="0" cellspacing="1" cellpadding="1" class="list" width="100%" summary="file manager"> <tr> - <th style=\"padding:0;width:18px\"> </th> + <th style="padding:0; width:18px"> </th> <th>Name</th> - <th colspan=\"5\"> </th> + <th colspan="5"> </th> <th>Ext.</th> <th>Size</th> <th>Date</th> <th>Attributes</th> </tr> <tr> - <td style=\"padding:0;width:18px\" title=\"UP one level\"><img width=\"16\" height=\"16\" src=\"rbfmimg/folder.png\" alt=\"F\" {$up_one_level} /></td> - <td colspan=\"11\"><b title=\"UP one level\"{$up_one_level}>[..]</b></td> + <td style="padding:0; width:18px" title="UP one level"><img width="16" height="16" src="rbfmimg/folder.png" alt="F" {$up_one_level} /></td> + <td colspan="11"><b title="UP one level"{$up_one_level}>[..]</b></td> </tr> EOF; @@ -231,39 +231,40 @@ EOF; $use_url = "<img src=\"rbfmimg/ico_use_file_inactive.png\" border=\"0\" width=\"16\" height=\"16\" alt=\"U\" title=\"Use URL (Inactive!!!)\" />"; } - + $cfe = urlencode($current_folder); + $vfe = urlencode($v); $container .= <<<EOF <tr> - <td style=\"padding:0;width:18px\"> - <img width=\"16\" height=\"16\" src=\"rbfmimg/folder.png\" alt=\"Folder\" ondblclick=\"document.location='{$_SERVER['PHP_SELF']}?p=".urlencode($current_folder.$vf)."'\" /> + <td style="padding:0; width:18px"> + <img width="16" height="16" src="rbfmimg/folder.png" alt="Folder" ondblclick="document.location='{$_SERVER['PHP_SELF']}?p={$cfe}{$vfe}'" /> </td> <td> - <div style=\"padding-top:2px;\" id=\"f{$id}\" ondblclick=\"document.location='{$_SERVER['PHP_SELF']}?p=".urlencode($current_folder.$vf)."'\"> + <div style="padding-top:2px;" id="f{$id}" ondblclick="document.location='{$_SERVER['PHP_SELF']}?p={$cfe}{$vfe}'"> {$v} </div> - <form class=\"rename_field\" id=\"r{$id}\" name=\"r{$id}\" method=\"post\" action=\"rbfminc/rename.php\" target=\"results\" onsubmit=\"this.n.blur(); return false\"> - <input class=\"input_name rename_input\" name=\"n\" type=\"text\" value=\"{$v}\" id=\"rf{$id}\" onblur=\"document.form{$id}.submit(); document.getElementById('f{$id}').style.display = 'block'; document.getElementById('r{$id}').style.display = 'none'; document.getElementById('f{$id}').innerHTML = this.value; document.form{$id}.o.value = this.value;\" /> - <input name=\"cf\" type=\"hidden\" value=\"{$current_folder}\" /> - <input name=\"o\" type=\"hidden\" value=\"{$v}\" /> - <input name=\"t\" type=\"hidden\" value=\"d\" /> - <input name=\"submitS\" type=\"submit\" value=\"submitS\" style='display: none; width:0;height:0' /> + <form class="rename_field" id="r{$id}" name="r{$id}" method="post" action="rbfminc/rename.php" target="results" onsubmit="this.n.blur(); return false"> + <input class="input_name rename_input" name="n" type="text" value="{$v}" id="rf{$id}" onblur="document.form{$id}.submit(); document.getElementById('f{$id}').style.display = 'block'; document.getElementById('r{$id}').style.display = 'none'; document.getElementById('f{$id}').innerHTML = this.value; document.form{$id}.o.value = this.value;" /> + <input name="cf" type="hidden" value="{$current_folder}" /> + <input name="o" type="hidden" value="{$v}" /> + <input name="t" type="hidden" value="d" /> + <input name="submitS" type="submit" value="submitS" style='display: none; width:0; height:0' /> </form> </td> <!--<td>{$use_url}</td>--> <td>{$browser}</td> <td> </td> <td> - <img width=\"16\" height=\"16\" src=\"rbfmimg/ico_rename.png\" alt=\"Rename\" title=\"Rename\" onclick=\" document.getElementById('r{$id}').style.display = 'block'; document.getElementById('f{$id}').style.display = 'none'; document.getElementById('rf{$id}').focus(); document.getElementById('rf{$id}').select()\" /> + <img width="16" height="16" src="rbfmimg/ico_rename.png" alt="Rename" title="Rename" onclick="document.getElementById('r{$id}').style.display = 'block'; document.getElementById('f{$id}').style.display = 'none'; document.getElementById('rf{$id}').focus(); document.getElementById('rf{$id}').select()" /> </td> <td> </td> <td> - <img width=\"16\" height=\"16\" src=\"rbfmimg/ico_delete.png\" alt=\"D\" title=\"Delete\" onclick=\"if(confirm('Delete folder "{$v}"?') && confirm('You cannot undo this operation!!!') && confirm('To delete this folder "{$v}" press OK\\nTo cancel this operation press CANCEL')){document.location = 'file_manager.php?p=".urlencode($current_folder)."&do=delete&file=".urlencode($v)."&type=directory'}\" /> + <img width="16" height="16" src="rbfmimg/ico_delete.png" alt="D" title="Delete" onclick="if(confirm('Delete folder "{$v}"?') && confirm('You cannot undo this operation!!!') && confirm('To delete this folder "{$v}" press OK\\nTo cancel this operation press CANCEL')){document.location='file_manager.php?p={$cf}&do=delete&file={$vfe}&type=directory'}" /> </td> - <td class=\"srow\"> </td> + <td class="srow"> </td> <td><b><DIR></b></td> - <td class=\"srow\">{$last_updated_time}</td> - <td class=\"fileperms\">{$fileperms}</td> + <td class="srow">{$last_updated_time}</td> + <td class="fileperms">{$fileperms}</td> </tr> EOF; @@ -315,40 +316,42 @@ EOF; $use_url = "<img src=\"rbfmimg/ico_use_file_inactive.png\" border=\"0\" width=\"16\" height=\"16\" alt=\"U\" title=\"Use URL (Inactive!!!)\" />"; } + $cfe = urlencode($current_folder); + $vfe = urlencode($v); $container .= <<<EOF <tr> - <td style=\"padding:0;width:18px\"> - <img width=\"16\" height=\"16\" src=\"rbfmimg/{$file_image}\" alt=\"File\" ondblclick=\"document.location = 'rbfminc/download.php?p=".urlencode($current_folder)."&file_name=".urlencode($v)."'\" /> + <td style="padding:0; width:18px"> + <img width="16" height="16" src="rbfmimg/{$file_image}" alt="File" ondblclick="document.location='rbfminc/download.php?p={$cfe}&file_name={$vfe}'" /> </td> <td> - <div style=\"padding-top:2px;\" id=\"f{$id}\" ondblclick=\"document.location = 'rbfminc/download.php?p=".urlencode($current_folder)."&file_name=".urlencode($v)."'\"> + <div style="padding-top:2px;" id="f{$id}" ondblclick="document.location='rbfminc/download.php?p={$cfe}&file_name={$vfe}'"> {$v} </div> - <form class=\"rename_field\" id=\"r{$id}\" name=\"r{$id}\" method=\"post\" action=\"rbfminc/rename.php\" target=\"results\" onsubmit=\"this.n.blur(); return false\"> - <input name=\"cf\" type=\"hidden\" value=\"{$current_folder}\" /> - <input name=\"o\" type=\"hidden\" value=\"{$v}\" /> - <input name=\"t\" type=\"hidden\" value=\"f\" /> - <input class=\"input_name\" name=\"n\" type=\"text\" value=\"{$v}\" id=\"rf{$id}\" onblur=\"document.form{$id}.submit(); document.getElementById('f{$id}').style.display = 'block'; document.getElementById('r{$id}').style.display = 'none'; document.getElementById('f{$id}').innerHTML = this.value; document.form{$id}.o.value = this.value;\" /> - <input name=\"submitS\" type=\"submit\" value=\"submitS\" style=\"display: none; width:0;height:0\" /> + <form class="rename_field" id="r{$id}" name="r{$id}" method="post" action="rbfminc/rename.php" target="results" onsubmit="this.n.blur(); return false"> + <input name="cf" type="hidden" value="{$current_folder}" /> + <input name="o" type="hidden" value="{$v}" /> + <input name="t" type="hidden" value="f" /> + <input class="input_name" name="n" type="text" value="{$v}" id="rf{$id}" onblur="document.form{$id}.submit(); document.getElementById('f{$id}').style.display = 'block'; document.getElementById('r{$id}').style.display = 'none'; document.getElementById('f{$id}').innerHTML = this.value; document.form{$id}.o.value = this.value;" /> + <input name="submitS" type="submit" value="submitS" style="display: none; width:0;height:0" /> </form> </td> <!--<td>{$use_url}</td>--> <td>{$browser}</td> <td> - <a href=\"rbfminc/download.php?p=".urlencode($current_folder)."&file_name=".urlencode($v)."\"><img width=\"16\" height=\"16\" src=\"rbfmimg/ico_download.png\" alt=\"Download\" title=\"Download\" border=\"0\"/></a> + <a href="rbfminc/download.php?p={$cfe}&file_name={$vfe}"><img width="16" height="16" src="rbfmimg/ico_download.png" alt="Download" title="Download" border="0" /></a> </td> <td> - <img width=\"16\" height=\"16\" src=\"rbfmimg/ico_rename.png\" alt=\"Rename\" title=\"Rename\" onclick=\"document.getElementById('f{$id}').style.display = 'none'; document.getElementById('r{$id}').style.display = 'block'; document.getElementById('rf{$id}').focus(); document.getElementById('rf{$id}').select()\" /> + <img width="16" height="16" src="rbfmimg/ico_rename.png" alt="Rename" title="Rename" onclick="document.getElementById('f{$id}').style.display = 'none'; document.getElementById('r{$id}').style.display = 'block'; document.getElementById('rf{$id}').focus(); document.getElementById('rf{$id}').select()" /> </td> <td>{$edit_file_content}</td> <td> - <img width=\"16\" height=\"16\" src=\"rbfmimg/ico_delete.png\" alt=\"D\" title=\"Delete\" onclick=\"if(confirm('Delete file "{$v}"?') && confirm('You cannot undo this operation!!!') && confirm('To delete this file "{$v}" press OK\\nTo cancel this operation press CANCEL')){document.location = 'file_manager.php?p=".urlencode($current_folder)."&do=delete&file=".urlencode($v)."&type=file'}\" /> + <img width="16" height="16" src="rbfmimg/ico_delete.png" alt="D" title="Delete" onclick="if(confirm('Delete file "{$v}"?') && confirm('You cannot undo this operation!!!') && confirm('To delete this file "{$v}" press OK\\nTo cancel this operation press CANCEL')){document.location='file_manager.php?p={$cfe}&do=delete&file={$vfe}&type=file'}" /> </td> - <td class=\"srow\">{$extension}</td> + <td class="srow">{$extension}</td> <td>{$file_size}</td> - <td class=\"srow\">{$last_updated_time}</td> - <td class=\"fileperms\">{$fileperms}</td> + <td class="srow">{$last_updated_time}</td> + <td class="fileperms">{$fileperms}</td> </tr> EOF; @@ -404,14 +407,16 @@ EOF; if ($_GET['do'] == 'edit') { $file_content = file_get_contents($current_folder.$_GET['f']); + $cfe = urlencode($current_folder); + $fce = htmlentities($file_content); echo <<<EOD -<form id=\"form_edit\" name=\"form_edit\" method=\"post\" action=\"\" style='width: 670px;margin: 10px auto 0;border-top: 1px #999999 solid'> - <a name=\"file_edit\"></a> +<form id="form_edit" name="form_edit" method="post" action="" style='width: 670px;margin: 10px auto 0;border-top: 1px #999999 solid'> + <a name="file_edit"></a> File: <b>{$current_folder}{$_GET['f']}</b><br /> - <textarea name=\"file_content\" id=\"file_content\" cols=\"1\" rows=\"1\" style=\"width: 99%; height: 400px\">".htmlentities ($file_content)."</textarea><br /> - <input name=\"save\" type=\"submit\" value=\"Save\" /> - <input name=\"close\" type=\"button\" value=\"Close file editor\" onclick=\"document.location = 'file_manager.php?f=".urlencode($current_folder)."'\" /> - <input name=\"save_file\" type=\"hidden\" value=\"save_file\" /> + <textarea name="file_content" id="file_content" cols="1" rows="1" style="width: 99%; height: 400px">{$fce}</textarea><br /> + <input name="save" type="submit" value="Save" /> + <input name="close" type="button" value="Close file editor" onclick="document.location='file_manager.php?f={$cfe}'" /> + <input name="save_file" type="hidden" value="save_file" /> </form> EOD; @@ -424,7 +429,7 @@ EOD; <?php if ($alert_info) { echo <<<EOD - <script type=\"text/javascript\"> + <script type="text/javascript"> //<![CDATA[ alert('{$alert_info}'); //]]> @@ -434,7 +439,7 @@ EOD; if ($redirect) { echo <<<EOD - <script type=\"text/javascript\"> + <script type="text/javascript"> //<![CDATA[ document.location = '{$redirect}'; //]]> diff --git a/config/filemgr/filemgr.xml b/config/filemgr/filemgr.xml index fdcf46d0..72ca53d4 100644 --- a/config/filemgr/filemgr.xml +++ b/config/filemgr/filemgr.xml @@ -184,4 +184,11 @@ <prefix>/usr/local/www/packages/filemgr/rbfminc/</prefix> <item>https://packages.pfsense.org/packages/config/filemgr/rbfminc/session.php</item> </additional_files_needed> + <custom_php_deinstall_command> + <![CDATA[ + if (is_dir("/usr/local/www/packages/filemgr")) { + mwexec("/bin/rm -rf /usr/local/www/packages/filemgr/"); + } + ]]> + </custom_php_deinstall_command> </packagegui> diff --git a/config/git/git.xml b/config/git/git.xml index 6c5254ae..6139fd04 100644 --- a/config/git/git.xml +++ b/config/git/git.xml @@ -3,23 +3,28 @@ <?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> <copyright> - <![CDATA[ -/* ========================================================================== */ +<![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ /* - part of pfSense (http://www.pfSense.com) - Copyright (C) 2013 + git.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2013-2015 ESF, LLC All rights reserved. -/* ========================================================================== */ +*/ +/* ====================================================================================== */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY @@ -31,14 +36,12 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ +*/ +/* ====================================================================================== */ ]]> </copyright> <description>git</description> - <requirements>None</requirements> - <faq></faq> <name>git</name> - <version>0.0</version> + <version>2.2.1</version> <title>git</title> -</packagegui>
\ No newline at end of file +</packagegui> diff --git a/config/haproxy-devel/haproxy.xml b/config/haproxy-devel/haproxy.xml index 386e43a7..429b6c9f 100644 --- a/config/haproxy-devel/haproxy.xml +++ b/config/haproxy-devel/haproxy.xml @@ -42,7 +42,7 @@ ]]> </copyright> <name>haproxy</name> - <version>0.28</version> + <version>0.29</version> <title>HAProxy</title> <aftersaveredirect>/pkg_edit.php?xml=haproxy_pools.php</aftersaveredirect> <include_file>/usr/local/pkg/haproxy.inc</include_file> diff --git a/config/haproxy-devel/pkg/haproxy.inc b/config/haproxy-devel/pkg/haproxy.inc index eceef783..de1963b0 100644 --- a/config/haproxy-devel/pkg/haproxy.inc +++ b/config/haproxy-devel/pkg/haproxy.inc @@ -212,7 +212,18 @@ $a_error['500'] = array('descr' => "internal error"); $a_error['502'] = array('descr' => "server response invalid or blocked"); $a_error['503'] = array('descr' => "no server was available to handle the request"); $a_error['504'] = array('descr' => "timeout before the server responds"); - + +global $a_sysloglevel; +$a_sysloglevel = array(); +$a_sysloglevel['emerg'] = array('name' => "Emergency"); +$a_sysloglevel['alert'] = array('name' => "Alert"); +$a_sysloglevel['crit'] = array('name' => "Critical"); +$a_sysloglevel['err'] = array('name' => "Error"); +$a_sysloglevel['warning'] = array('name' => "Warning"); +$a_sysloglevel['notice'] = array('name' => "Notice"); +$a_sysloglevel['info'] = array('name' => "Informational"); +$a_sysloglevel['debug'] = array('name' => "Debugging"); + if(!function_exists('group_ports')){ // function group_ports() is present in pfSense 2.2 in util.inc /* create ranges of sequential port numbers (200:215) and remove duplicates */ @@ -264,6 +275,15 @@ function group_ports($ports) { } } +global $haproxy_version; +function haproxy_verion() { + global $haproxy_version; + if (empty($haproxy_version)) { + $haproxy_version = shell_exec("haproxy -v | head -n 1 | awk '{ print $3 }'"); + } + return $haproxy_version; +} + function haproxy_portoralias_to_list($port_or_alias) { // input: a port or aliasname: 80 https MyPortAlias // returns: a array of ports and portranges 80 443 8000:8010 @@ -592,8 +612,11 @@ function haproxy_find_acl($name) { } function write_backend($configpath, $fd, $name, $pool, $backendsettings) { + global $config; $frontend = $backendsettings['frontend']; $ipversion = $backendsettings['ipversion']; + $a_global = &$config['installedpackages']['haproxy']; + $a_mailers = &$config['installedpackages']['haproxy']['email_mailers']['items']; if(!is_array($pool['ha_servers']['item']) && !$pool['stats_enabled']=='yes') return; @@ -610,6 +633,36 @@ function write_backend($configpath, $fd, $name, $pool, $backendsettings) { $backend_mode = $frontendtype; } fwrite ($fd, "\tmode\t\t\t" . $backend_mode . "\n"); + + if (haproxy_verion() >= '1.6') { + $use_mailers = is_array($a_mailers) && count($a_mailers) > 0; + if ($use_mailers) { + fwrite ($fd, "\t# use mailers\n"); + if (empty($pool['email_level'])) { + $email_level = $a_global['email_level']; + } else { + $email_level = $pool['email_level']; + } + + fwrite ($fd, "\t# level $email_level \n"); + if (!empty($email_level) && $email_level != 'dontlog') { + if (empty($pool['email_to'])) { + $email_to = $a_global['email_to']; + } else { + $email_to = $pool['email_to']; + } + + fwrite ($fd, "\temail-alert mailers\t\t\tglobalmailers\n"); + fwrite ($fd, "\temail-alert level\t\t\t{$email_level}\n"); + fwrite ($fd, "\temail-alert from\t\t\t{$a_global['email_from']}\n"); + fwrite ($fd, "\temail-alert to\t\t\t{$email_to}\n"); + if (!empty($a_global['email_myhostname'])) { + fwrite ($fd, "\temail-alert myhostname\t\t\t{$a_global['email_myhostname']}\n"); + } + } + } + } + if ($pool['log-health-checks'] == 'yes') fwrite ($fd, "\toption\t\t\tlog-health-checks\n"); @@ -732,8 +785,6 @@ function write_backend($configpath, $fd, $name, $pool, $backendsettings) { if ($check_type == "Agent") { $checkport = " port " . $pool['monitor_agentport']; } - } else { - $optioncheck = "httpchk"; } if($pool['balance']) @@ -1049,9 +1100,9 @@ function haproxy_updateocsp($socketupdate = true) { haproxy_updateocsp_one($socketupdate, $filename, $frontend['name']); $subfolder = "$configpath/{$frontend['name']}"; - $certs = $frontend['ha_certificates']['item']; - if (is_array($certs)){ - foreach($certs as $cert){ + if (is_arrayset($frontend, 'ha_certificates', 'item')) { + $certs = $frontend['ha_certificates']['item']; + foreach($certs as $cert) { $filename = "$subfolder/{$cert['ssl_certificate']}.pem"; haproxy_updateocsp_one($socketupdate, $filename, $frontend['name']); } @@ -1075,6 +1126,7 @@ function haproxy_writeconf($configpath) { $a_global = &$config['installedpackages']['haproxy']; $a_frontends = &$config['installedpackages']['haproxy']['ha_backends']['item']; $a_backends = &$config['installedpackages']['haproxy']['ha_pools']['item']; + $a_mailers = &$config['installedpackages']['haproxy']['email_mailers']['items']; $fd = fopen($configfile, "w"); if(is_array($a_global)) { @@ -1130,6 +1182,17 @@ function haproxy_writeconf($configpath) { fwrite ($fd, "\n"); } } + + if (haproxy_verion() >= '1.6') { + $use_mailers = is_array($a_mailers) && count($a_mailers) > 0; + if ($use_mailers) { + fwrite ($fd, "mailers globalmailers\n"); + foreach($a_mailers as $mailer) { + fwrite ($fd, "\tmailer {$mailer['name']} {$mailer['mailserver']}:{$mailer['mailserverport']}\n"); + } + fwrite ($fd, "\n"); + } + } // Try and get a unique array for address:port as frontends can duplicate $a_bind = array(); @@ -1158,7 +1221,8 @@ function haproxy_writeconf($configpath) { haproxy_write_certificate_fullchain($filename, $frontend['ssloffloadcert']); if ($frontend['sslocsp'] == 'yes') { - if (!empty(haproxy_getocspurl($filename))) { + $ocspurl = haproxy_getocspurl($filename); + if (!empty($ocspurl)) { haproxy_write_certificate_issuer($filename . ".issuer", $frontend['ssloffloadcert']); touch($filename . ".ocsp");//create initial empty file. this will trigger updates, and inform haproxy it 'should' be using ocsp } @@ -1173,7 +1237,8 @@ function haproxy_writeconf($configpath) { $filenamefoldercert = "$subfolder/{$cert['ssl_certificate']}.pem"; haproxy_write_certificate_fullchain($filenamefoldercert, $cert['ssl_certificate']); if ($frontend['sslocsp'] == 'yes') { - if (!empty(haproxy_getocspurl($filenamefoldercert))) { + $ocspurl = haproxy_getocspurl($filenamefoldercert); + if (!empty($ocspurl)) { haproxy_write_certificate_issuer($filenamefoldercert . ".issuer", $cert['ssl_certificate']); touch($filenamefoldercert . ".ocsp"); } diff --git a/config/haproxy-devel/pkg/haproxy_htmllist.inc b/config/haproxy-devel/pkg/haproxy_htmllist.inc index f873028e..394f3ff6 100644 --- a/config/haproxy-devel/pkg/haproxy_htmllist.inc +++ b/config/haproxy-devel/pkg/haproxy_htmllist.inc @@ -114,7 +114,9 @@ class HaproxyHtmlList echo $itemvalue=='yes' ? gettext('yes') : gettext('no'); } else if ($itemtype == "textarea"){ - echo htmlspecialchars(base64_decode($itemvalue)); + echo '<div style="overlow:scroll;max-height:120px;overflow-y: scroll;">'; + echo str_replace("\n","<br/>", htmlspecialchars(base64_decode($itemvalue))); + echo '</div>'; } else echo htmlspecialchars($itemvalue); } diff --git a/config/haproxy-devel/www/haproxy_files.php b/config/haproxy-devel/www/haproxy_files.php index 4946a7be..12ab5a88 100644 --- a/config/haproxy-devel/www/haproxy_files.php +++ b/config/haproxy-devel/www/haproxy_files.php @@ -155,7 +155,7 @@ include("head.inc"); </tr> <tr> <td width="78%"> - <input name="Submit" type="submit" class="formbtn" value="Save" onClick="enable_change(true)" /> + <input name="Submit" type="submit" class="formbtn" value="Save" /> </td> </tr> </table> diff --git a/config/haproxy-devel/www/haproxy_global.php b/config/haproxy-devel/www/haproxy_global.php index 978d778d..2ae92256 100644 --- a/config/haproxy-devel/www/haproxy_global.php +++ b/config/haproxy-devel/www/haproxy_global.php @@ -35,13 +35,38 @@ require_once("haproxy.inc"); require_once("haproxy_utils.inc"); require_once("globals.inc"); require_once("pkg_haproxy_tabs.inc"); +require_once("haproxy_htmllist.inc"); -$simplefields = array('localstats_refreshtime','localstats_sticktable_refreshtime','log-send-hostname','ssldefaultdhparam'); +$simplefields = array('localstats_refreshtime', 'localstats_sticktable_refreshtime', 'log-send-hostname', 'ssldefaultdhparam', + 'email_level', 'email_myhostname', 'email_from', 'email_to'); + +$none = array(); +$none['']['name'] = "Dont log"; +$a_sysloglevel = $none + $a_sysloglevel; + +$fields_mailers = array(); +$fields_mailers[0]['name'] = "name"; +$fields_mailers[0]['columnheader'] = "Name"; +$fields_mailers[0]['colwidth'] = "30%"; +$fields_mailers[0]['type'] = "textbox"; +$fields_mailers[0]['size'] = "20"; +$fields_mailers[1]['name'] = "mailserver"; +$fields_mailers[1]['columnheader'] = "Mailserver"; +$fields_mailers[1]['colwidth'] = "60%"; +$fields_mailers[1]['type'] = "textbox"; +$fields_mailers[1]['size'] = "60"; +$fields_mailers[2]['name'] = "mailserverport"; +$fields_mailers[2]['columnheader'] = "Mailserverport"; +$fields_mailers[2]['colwidth'] = "10%"; +$fields_mailers[2]['type'] = "textbox"; +$fields_mailers[2]['size'] = "10"; + +$mailerslist = new HaproxyHtmlList("table_mailers", $fields_mailers); +$mailerslist->keyfield = "name"; if (!is_array($config['installedpackages']['haproxy'])) $config['installedpackages']['haproxy'] = array(); - if ($_POST) { unset($input_errors); $pconfig = $_POST; @@ -56,16 +81,12 @@ if ($_POST) { if ($result) unlink_if_exists($d_haproxyconfdirty_path); } else { - //if ($_POST['enable']) { - // $reqdfields = explode(" ", "maxconn"); - // $reqdfieldsn = explode(",", "Maximum connections"); - //} + $a_mailers = $mailerslist->haproxy_htmllist_get_values(); + $pool['ha_servers']['item'] = $a_servers; if ($_POST['carpdev'] == "disabled") unset($_POST['carpdev']); - //do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors); - if ($_POST['maxconn'] && (!is_numeric($_POST['maxconn']))) $input_errors[] = "The maximum number of connections should be numeric."; @@ -86,6 +107,8 @@ if ($_POST) { $input_errors[] = "Synchost3 needs to be an IPAddress.";*/ if (!$input_errors) { + $config['installedpackages']['haproxy']['email_mailers']['items'] = $a_mailers; + $config['installedpackages']['haproxy']['enable'] = $_POST['enable'] ? true : false; $config['installedpackages']['haproxy']['terminate_on_reload'] = $_POST['terminate_on_reload'] ? true : false; $config['installedpackages']['haproxy']['maxconn'] = $_POST['maxconn'] ? $_POST['maxconn'] : false; @@ -109,6 +132,8 @@ if ($_POST) { } } +$a_mailers = $config['installedpackages']['haproxy']['email_mailers']['items']; + $pconfig['enable'] = isset($config['installedpackages']['haproxy']['enable']); $pconfig['terminate_on_reload'] = isset($config['installedpackages']['haproxy']['terminate_on_reload']); $pconfig['maxconn'] = $config['installedpackages']['haproxy']['maxconn']; @@ -183,6 +208,12 @@ function enable_change(enable_change) { <strong>Enable HAProxy</strong></td> </tr> <tr> + <td width="22%" valign="top" class="vncell">Installed version:</td> + <td width="78%" class="vtable"> + <strong><?=haproxy_verion()?></strong> + </td> + </tr> + <tr> <td valign="top" class="vncell"> Maximum connections </td> @@ -368,6 +399,64 @@ function enable_change(enable_change) { <input name="log-send-hostname" type="text" <?if(isset($pconfig['log-send-hostname'])) echo "value=\"{$pconfig['log-send-hostname']}\"";?> size="18" maxlength="50" /> EXAMPLE: HaproxyMasterNode<br/>Sets the hostname field in the syslog header. If empty defaults to the system hostname. </td> </tr> + <tr><td> </td></tr> + <? if (haproxy_verion() >= '1.6' ) { ?> + <tr> + <td colspan="2" valign="top" class="listtopic">Email notifications</td> + </tr> + <tr> + <td valign="top" class="vncell"> + Mailer servers + </td> + <td class="vtable"> + It is possible to send email alerts when the state of servers changes. If configured email alerts are sent to each mailer that is configured in a mailers section. Email is sent to mailers using SMTP. + <br/> + <? + $counter=0; + $mailerslist->Draw($a_mailers); + ?> + </td> + </tr> + <tr> + <td valign="top" class="vncell"> + Mail level + </td> + <td class="vtable"> + <? + echo_html_select('email_level', $a_sysloglevel, $pconfig['email_level']); + ?> + Define the maximum loglevel to send emails for. + </td> + </tr> + <tr> + <td valign="top" class="vncell"> + Mail myhostname + </td> + <td class="vtable"> + <input name="email_myhostname" type="text" <?if(isset($pconfig['email_myhostname'])) echo "value=\"{$pconfig['email_myhostname']}\"";?> size="50" /><br/> + Define hostname to use as sending the emails. + </td> + </tr> + <tr> + <td valign="top" class="vncell"> + Mail from + </td> + <td class="vtable"> + <input name="email_from" type="text" <?if(isset($pconfig['email_from'])) echo "value=\"{$pconfig['email_from']}\"";?> size="50"/><br/> + Email address to be used as the sender of the emails. + </td> + </tr> + <tr> + <td valign="top" class="vncell"> + Mail to + </td> + <td class="vtable"> + <input name="email_to" type="text" <?if(isset($pconfig['email_to'])) echo "value=\"{$pconfig['email_to']}\"";?> size="50"/><br/> + Email address to send emails to. + </td> + </tr> + <? } ?> + <tr><td> </td></tr> <tr> <td colspan="2" valign="top" class="listtopic">Tuning</td> </tr> @@ -487,7 +576,15 @@ Minimum and default value is: 1024, bigger values might increase CPU usage.<br/> <?php endif; ?> </form> +<? +haproxy_htmllist_js(); +?> <script type="text/javascript"> + totalrows = <?php echo $counter; ?>; +<? + phparray_to_javascriptarray($fields_mailers,"fields_mailers",Array('/*','/*/name','/*/type','/*/size','/*/items','/*/items/*','/*/items/*/*','/*/items/*/*/name')); +?> + function scroll_after_fade() { scrollTo(0,99999999999); } diff --git a/config/haproxy-devel/www/haproxy_pool_edit.php b/config/haproxy-devel/www/haproxy_pool_edit.php index 0824e45c..6cd78741 100644 --- a/config/haproxy-devel/www/haproxy_pool_edit.php +++ b/config/haproxy-devel/www/haproxy_pool_edit.php @@ -65,7 +65,8 @@ $simplefields = array( "stats_enabled","stats_username","stats_password","stats_uri","stats_scope","stats_realm","stats_admin","stats_node","stats_desc","stats_refresh", "persist_stick_expire","persist_stick_tablesize","persist_stick_length","persist_stick_cookiename","persist_sticky_type", "persist_cookie_enabled","persist_cookie_name","persist_cookie_mode","persist_cookie_cachable", -"strict_transport_security","cookie_attribute_secure" +"strict_transport_security", "cookie_attribute_secure", +"email_level", "email_to" ); $primaryfrontends = get_haproxy_frontends(); @@ -73,6 +74,12 @@ $none = array(); $none['']['name']="Address+Port:"; $primaryfrontends = $none + $primaryfrontends; +$default = array(); +$default['']['name'] = "Default level from global"; +$none = array(); +$none['dontlog']['name'] = "Dont log"; +$a_sysloglevel = $default + $none + $a_sysloglevel; + $fields_servers=array(); $fields_servers[0]['name']="status"; $fields_servers[0]['columnheader']="Mode"; @@ -861,6 +868,32 @@ set by the 'retries' parameter.</div> </td> </tr> <tr><td> </td></tr> + <? if (haproxy_verion() >= '1.6' ) { ?> + <tr> + <td colspan="2" valign="top" class="listtopic">Email notifications</td> + </tr> + <tr> + <td valign="top" class="vncell"> + Mail level + </td> + <td class="vtable"> + <? + echo_html_select('email_level', $a_sysloglevel, $pconfig['email_level']); + ?> + Define the maximum loglevel to send emails for. + </td> + </tr> + <tr> + <td valign="top" class="vncell"> + Mail to + </td> + <td class="vtable"> + <input name="email_to" type="text" <?if(isset($pconfig['email_to'])) echo "value=\"{$pconfig['email_to']}\"";?> size="50"/><br/> + Email address to send emails to, defaults to the value set on the global settings tab. + </td> + </tr> + <tr><td> </td></tr> + <? } ?> <tr> <td colspan="2" valign="top" class="listtopic">Statistics</td> </tr> diff --git a/config/iftop/iftop.xml b/config/iftop/iftop.xml index 64afbc79..b9dfbe5b 100644 --- a/config/iftop/iftop.xml +++ b/config/iftop/iftop.xml @@ -3,23 +3,28 @@ <?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> <copyright> - <![CDATA[ -/* ========================================================================== */ +<![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ /* - part of pfSense (http://www.pfSense.com) - Copyright (C) 2013 + iftop.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2013-2015 ESF, LLC All rights reserved. -/* ========================================================================== */ +*/ +/* ====================================================================================== */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY @@ -31,14 +36,12 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ +*/ +/* ====================================================================================== */ ]]> </copyright> <description>iftop</description> - <requirements>None</requirements> - <faq></faq> <name>iftop</name> - <version>0.0</version> + <version>0.17</version> <title>iftop</title> -</packagegui>
\ No newline at end of file +</packagegui> diff --git a/config/ipmitool/ipmitool.xml b/config/ipmitool/ipmitool.xml index a42baa36..cb6bf385 100644 --- a/config/ipmitool/ipmitool.xml +++ b/config/ipmitool/ipmitool.xml @@ -3,23 +3,28 @@ <?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> <copyright> - <![CDATA[ -/* ========================================================================== */ +<![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ /* - part of pfSense (http://www.pfSense.com) - Copyright (C) 2013 + ipmitool.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2013-2015 ESF, LLC All rights reserved. -/* ========================================================================== */ +*/ +/* ====================================================================================== */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY @@ -31,14 +36,12 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ +*/ +/* ====================================================================================== */ ]]> </copyright> <description>ipmitool</description> - <requirements>None</requirements> - <faq></faq> <name>ipmitool</name> - <version>0.0</version> + <version>1.8.12_5.1</version> <title>ipmitool</title> -</packagegui>
\ No newline at end of file +</packagegui> diff --git a/config/nut/nut.inc b/config/nut/nut.inc index e0ca9d30..6467ec13 100644 --- a/config/nut/nut.inc +++ b/config/nut/nut.inc @@ -518,9 +518,6 @@ EOD; log_error("[nut] INFO: Starting service"); start_service("nut"); - if (!is_process_running('upsmon')) { - log_error("[nut] ERROR: Service failed to start: check configuration."); - } } elseif (!$return && file_exists(NUT_RCFILE)) { /* no parameters user does not want nut running */ /* lets stop the service and remove the rc file */ diff --git a/config/olsrd/olsrd.xml b/config/olsrd/olsrd.xml index 464f730d..6623c31f 100644 --- a/config/olsrd/olsrd.xml +++ b/config/olsrd/olsrd.xml @@ -164,13 +164,7 @@ <cols>50</cols> </field> </fields> - <custom_delete_php_command> - </custom_delete_php_command> <custom_php_resync_config_command> setup_wireless_olsr($if); </custom_php_resync_config_command> - <custom_php_install_command> - </custom_php_install_command> - <custom_php_deinstall_command> - </custom_php_deinstall_command> </packagegui> diff --git a/config/pfblockerng/pfblockerng.sh b/config/pfblockerng/pfblockerng.sh index fcfbcae1..13e14760 100644 --- a/config/pfblockerng/pfblockerng.sh +++ b/config/pfblockerng/pfblockerng.sh @@ -81,7 +81,7 @@ DISK_NAME=`/bin/df /var/db/rrd | /usr/bin/tail -1 | /usr/bin/awk '{print $1;}'` DISK_TYPE=`/usr/bin/basename ${DISK_NAME} | /usr/bin/cut -c1-2` if [ "${PLATFORM}" != "pfSense" ] || [ ${USE_MFS_TMPVAR} -gt 0 ] || [ "${DISK_TYPE}" = "md" ]; then - /usr/local/bin/php /etc/rc.conf_mount_rw >/dev/null 2>&1 + /etc/rc.conf_mount_rw >/dev/null 2>&1 if [ ! -d $pfbdbdir ]; then mkdir $pfbdbdir; fi if [ ! -d $pfsense_alias_dir ]; then mkdir $pfsense_alias_dir; fi fi @@ -104,7 +104,7 @@ if [ ! -d $tmpxlsx ]; then mkdir $tmpxlsx; fi # Exit Function to set mount RO if required before Exiting exitnow() { if [ "${PLATFORM}" != "pfSense" ] || [ ${USE_MFS_TMPVAR} -gt 0 ] || [ "${DISK_TYPE}" = "md" ]; then - /usr/local/bin/php /etc/rc.conf_mount_ro >/dev/null 2>&1 + /etc/rc.conf_mount_ro >/dev/null 2>&1 fi exit } @@ -975,4 +975,4 @@ case $1 in exitnow ;; esac -exitnow
\ No newline at end of file +exitnow diff --git a/config/siproxd/siproxd.inc b/config/siproxd/siproxd.inc index 53dc7a2d..50b6e558 100644 --- a/config/siproxd/siproxd.inc +++ b/config/siproxd/siproxd.inc @@ -1,8 +1,10 @@ <?php /* siproxd.inc + part of pfSense (https://www.pfSense.org/) Copyright (C) 2006 Scott Ullrich Copyright (C) 2010 Jim Pingle + Copyright (C) 2015 ESF, LLC All rights reserved. Redistribution and use in source and binary forms, with or without @@ -26,54 +28,51 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -if(!function_exists("filter_configure")) +if (!function_exists("filter_configure")) { require_once("filter.inc"); +} require_once("service-utils.inc"); -// Check to find out on which system the package is running -$pfs_version = substr(trim(file_get_contents("/etc/version")),0,3); +// Check to find out on which pfSense version the package is running +global $pfs_version; +$pfs_version = substr(trim(file_get_contents("/etc/version")), 0, 3); if ($pfs_version == "2.1" || $pfs_version == "2.2") { define('SIPROXD', '/usr/pbi/siproxd-' . php_uname("m")); } else { define('SIPROXD', '/usr/local'); } -// End of system check -function sync_package_sipproxd_users() { +function sync_package_siproxd_users() { + global $g, $config; conf_mount_rw(); - // put the constant to a variable - $varSIPROXD = SIPROXD; - - global $config; - $fout = fopen("$varSIPROXD/etc/siproxd_passwd.cfg","w"); + $siproxd_pwfile = SIPROXD . '/etc/siproxd_passwd.cfg'; + $fout = fopen($siproxd_pwfile, "w"); fwrite($fout, "# This file was automatically generated by the pfSense\n# package management system.\n\n"); - if($config['installedpackages']['siproxdusers']['config'] != "") { - foreach($config['installedpackages']['siproxdusers']['config'] as $rowhelper) { + if ($config['installedpackages']['siproxdusers']['config'] != "") { + foreach ($config['installedpackages']['siproxdusers']['config'] as $rowhelper) { fwrite($fout, $rowhelper['username'] . " " . $rowhelper['password'] . "\n"); } } fclose($fout); + conf_mount_ro(); - system("/usr/bin/killall -HUP siproxd"); + /* Reload settings to sync users */ + sigkillbypid("{$g['varrun_path']}/siproxd.pid", "HUP"); } function siproxd_generate_rules($type) { global $config; - // put the constant to a variable - $varSIPROXD = SIPROXD; - $siproxd_conf = &$config['installedpackages']['siproxdsettings']['config'][0]; if (!is_service_running('siproxd')) { - log_error("Sipproxd is installed but not started. Not installing redirect rules."); + log_error("Siproxd is installed but not started. Not installing redirect rules."); return; } /* proxy is turned off in package settings */ - if($siproxd_conf['sipenable'] == "0") { - log_error("WARNING: siproxd proxy has not been enabled. Not installing rules."); + if ($siproxd_conf['sipenable'] == "0") { + log_error("WARNING: siproxd proxy has not been enabled. Not installing rules."); return "\n"; } @@ -84,25 +83,26 @@ function siproxd_generate_rules($type) { $port = ($siproxd_conf['port'] ? $siproxd_conf['port'] : 5060); switch($type) { - case 'nat': - $rules .= "\n# Setup Sipproxd proxy redirect\n"; - foreach ($ifaces as $iface) { - if($iface <> "") - $rules .= "rdr on {$iface} proto udp from any to !($iface) port {$port} -> 127.0.0.1 port {$port}\n"; - } - break; - case 'filter': - case 'rule': - foreach ($ifaces as $iface) { - if($iface <> "") { - $rules .= "# allow SIP signaling and RTP traffic\n"; - $rules .= "pass in on {$iface} proto udp from any to any port = {$port}\n"; - if($siproxd_conf['rtpenable'] == "1") { - $rules .= "pass in on {$iface} proto udp from any to any port {$rtplower}:{$rtpupper}\n"; + case 'nat': + $rules .= "\n# Setup Siproxd proxy redirect\n"; + foreach ($ifaces as $iface) { + if ($iface <> "") { + $rules .= "rdr on {$iface} proto udp from any to !($iface) port {$port} -> 127.0.0.1 port {$port}\n"; } } - } - break; + break; + case 'filter': + case 'rule': + foreach ($ifaces as $iface) { + if ($iface <> "") { + $rules .= "# allow SIP signaling and RTP traffic\n"; + $rules .= "pass in on {$iface} proto udp from any to any port = {$port}\n"; + if ($siproxd_conf['rtpenable'] == "1") { + $rules .= "pass in on {$iface} proto udp from any to any port {$rtplower}:{$rtpupper}\n"; + } + } + } + break; } return $rules; @@ -111,42 +111,50 @@ function siproxd_generate_rules($type) { function sync_package_siproxd() { global $config, $pfs_version; - // put the constant to a variable - $varSIPROXD = SIPROXD; - conf_mount_rw(); $siproxd_chroot = "/var/siproxd/"; - @mkdir($siproxd_chroot); + safe_mkdir($siproxd_chroot); @chown($siproxd_chroot, "nobody"); @chgrp($siproxd_chroot, "nobody"); + unlink_if_exists(SIPROXD . '/etc/rc.d/siproxd'); - unlink_if_exists("$varSIPROXD/etc/rc.d/siproxd"); $siproxd_conf = &$config['installedpackages']['siproxdsettings']['config'][0]; - $fout = fopen("$varSIPROXD/etc/siproxd.conf","w"); + $siproxd_conffile = SIPROXD . '/etc/siproxd.conf'; + $siproxd_pwfile = SIPROXD . '/etc/siproxd_passwd.cfg'; + + $pfs_version = substr(trim(file_get_contents("/etc/version")), 0, 3); + if ($pfs_version == '2.2') { + $siproxd_bin = SIPROXD . '/bin/siproxd'; + } else { + $siproxd_bin = SIPROXD . '/sbin/siproxd'; + } + $plugindir = SIPROXD . '/lib/siproxd'; + + $fout = fopen($siproxd_conffile, "w"); fwrite($fout, "# This file was automatically generated by the pfSense\n"); fwrite($fout, "# package management system.\n\n"); /* proxy is turned off in package settings */ - if($siproxd_conf['sipenable'] == "0") { + if ($siproxd_conf['sipenable'] == "0") { fclose($fout); return; } - if($siproxd_conf['if_inbound'] != "") { + if ($siproxd_conf['if_inbound'] != "") { fwrite($fout, "if_inbound = " . convert_friendly_interface_to_real_interface_name($siproxd_conf['if_inbound']) . "\n"); } - if($siproxd_conf['if_outbound'] != "") { - if(intval($config['version']) < 6 && $config['interfaces'][$siproxd_conf['if_outbound']]['ipaddr'] == "pppoe") { + if ($siproxd_conf['if_outbound'] != "") { + if (intval($config['version']) < 6 && $config['interfaces'][$siproxd_conf['if_outbound']]['ipaddr'] == "pppoe") { fwrite($fout, "if_outbound = ng0\n"); } else { fwrite($fout, "if_outbound = " . convert_friendly_interface_to_real_interface_name($siproxd_conf['if_outbound']) . "\n"); } } - if($siproxd_conf['port'] != "") { + if ($siproxd_conf['port'] != "") { fwrite($fout, "sip_listen_port = " . $siproxd_conf['port'] . "\n"); } else { fwrite($fout, "sip_listen_port = 5060\n"); @@ -161,13 +169,13 @@ function sync_package_siproxd() { fwrite($fout, "autosave_registrations = 10\n"); fwrite($fout, "pid_file = siproxd.pid\n"); - if($siproxd_conf['rtpenable'] != "") { + if ($siproxd_conf['rtpenable'] != "") { fwrite($fout, "rtp_proxy_enable = " . $siproxd_conf['rtpenable'] . "\n"); } else { fwrite($fout, "rtp_proxy_enable = 1\n"); } - if(($siproxd_conf['rtplower'] != "") && ($siproxd_conf['rtpupper'] != "")) { + if (($siproxd_conf['rtplower'] != "") && ($siproxd_conf['rtpupper'] != "")) { fwrite($fout, "rtp_port_low = " . $siproxd_conf['rtplower'] . "\n"); fwrite($fout, "rtp_port_high = " . $siproxd_conf['rtpupper'] . "\n"); } else { @@ -175,102 +183,113 @@ function sync_package_siproxd() { fwrite($fout, "rtp_port_high = 7079\n"); } - if($siproxd_conf['rtptimeout'] != "") { + if ($siproxd_conf['rtptimeout'] != "") { fwrite($fout, "rtp_timeout = " . $siproxd_conf['rtptimeout'] . "\n"); } else { fwrite($fout, "rtp_timeout = 300\n"); } - if($siproxd_conf['defaulttimeout'] != "") { + if ($siproxd_conf['defaulttimeout'] != "") { fwrite($fout, "default_expires = " . $siproxd_conf['defaulttimeout'] . "\n"); } else { fwrite($fout, "default_expires = 600\n"); } - if($siproxd_conf['authentication']) { + if ($siproxd_conf['authentication']) { fwrite($fout, "proxy_auth_realm = Authentication_Realm\n"); - fwrite($fout, "proxy_auth_pwfile = $varSIPROXD/etc/siproxd_passwd.cfg\n"); + fwrite($fout, "proxy_auth_pwfile = {$siproxd_pwfile}\n"); } - if($siproxd_conf['debug_level'] != "") { + if ($siproxd_conf['debug_level'] != "") { fwrite($fout, "debug_level = " . $siproxd_conf['debug_level'] . "\n"); } else { fwrite($fout, "debug_level = 0x00000000\n"); } - if($siproxd_conf['debug_port'] != "") { + if ($siproxd_conf['debug_port'] != "") { fwrite($fout, "debug_port = " . $siproxd_conf['debug_port'] . "\n"); } - if($siproxd_conf['outboundproxyhost'] != "") { - if($siproxd_conf['outboundproxyport'] != "") { + if ($siproxd_conf['outboundproxyhost'] != "") { + if ($siproxd_conf['outboundproxyport'] != "") { fwrite($fout, "outbound_proxy_host = " . $siproxd_conf['outboundproxyhost'] . "\n"); fwrite($fout, "outbound_proxy_port = " . $siproxd_conf['outboundproxyport'] . "\n"); } } - if($siproxd_conf['expeditedforwarding'] != "") + if ($siproxd_conf['expeditedforwarding'] != "") { fwrite($fout, "rtp_dscp = 46\n"); - if($siproxd_conf['expeditedsipforwarding'] != "") + } + if ($siproxd_conf['expeditedsipforwarding'] != "") { fwrite($fout, "sip_dscp = 26\n"); - - if ($siproxd_conf['rtp_input_dejitter'] != "") + } + if ($siproxd_conf['rtp_input_dejitter'] != "") { fwrite($fout, "rtp_input_dejitter = " . $siproxd_conf['rtp_input_dejitter'] . "\n"); - if ($siproxd_conf['rtp_output_dejitter'] != "") + } + if ($siproxd_conf['rtp_output_dejitter'] != "") { fwrite($fout, "rtp_output_dejitter = " . $siproxd_conf['rtp_output_dejitter'] . "\n"); - if ($siproxd_conf['tcp_timeout'] != "") + } + if ($siproxd_conf['tcp_timeout'] != "") { fwrite($fout, "tcp_timeout = " . $siproxd_conf['tcp_timeout'] . "\n"); - if ($siproxd_conf['tcp_connect_timeout'] != "") + } + if ($siproxd_conf['tcp_connect_timeout'] != "") { fwrite($fout, "tcp_connect_timeout = " . $siproxd_conf['tcp_connect_timeout'] . "\n"); - if ($siproxd_conf['tcp_keepalive'] != "") + } + if ($siproxd_conf['tcp_keepalive'] != "") { fwrite($fout, "tcp_keepalive = " . $siproxd_conf['tcp_keepalive'] . "\n"); + } - fwrite($fout, "plugindir=$varSIPROXD/lib/siproxd/\n"); + fwrite($fout, "plugindir={$plugindir}\n"); fwrite($fout, "load_plugin=plugin_logcall.la\n"); - if ($siproxd_conf['plugin_defaulttarget'] != "") + if ($siproxd_conf['plugin_defaulttarget'] != "") { fwrite($fout, "load_plugin=plugin_defaulttarget.la\n"); - if (($siproxd_conf['plugin_defaulttarget'] != "") && ($siproxd_conf['plugin_defaulttarget_log'] != "")) + } + if (($siproxd_conf['plugin_defaulttarget'] != "") && ($siproxd_conf['plugin_defaulttarget_log'] != "")) { fwrite($fout, "plugin_defaulttarget_log = 1\n"); - if (($siproxd_conf['plugin_defaulttarget'] != "") && ($siproxd_conf['plugin_defaulttarget_target'] != "")) + } + if (($siproxd_conf['plugin_defaulttarget'] != "") && ($siproxd_conf['plugin_defaulttarget_target'] != "")) { fwrite($fout, "plugin_defaulttarget_target = " . $siproxd_conf['plugin_defaulttarget_target'] . "\n"); + } - if ($siproxd_conf['plugin_fix_bogus_via'] != "") + if ($siproxd_conf['plugin_fix_bogus_via'] != "") { fwrite($fout, "load_plugin=plugin_fix_bogus_via.la\n"); - if (($siproxd_conf['plugin_fix_bogus_via'] != "") && ($siproxd_conf['plugin_fix_bogus_via_networks'] != "")) + } + if (($siproxd_conf['plugin_fix_bogus_via'] != "") && ($siproxd_conf['plugin_fix_bogus_via_networks'] != "")) { fwrite($fout, "plugin_fix_bogus_via_networks = " . $siproxd_conf['plugin_fix_bogus_via_networks'] . "\n"); + } - if ($siproxd_conf['plugin_stun'] != "") + if ($siproxd_conf['plugin_stun'] != "") { fwrite($fout, "load_plugin=plugin_stun.la\n"); - if (($siproxd_conf['plugin_stun'] != "") && ($siproxd_conf['plugin_stun_server'] != "")) + } + if (($siproxd_conf['plugin_stun'] != "") && ($siproxd_conf['plugin_stun_server'] != "")) { fwrite($fout, "plugin_stun_server = " . $siproxd_conf['plugin_stun_server'] . "\n"); - if (($siproxd_conf['plugin_stun'] != "") && ($siproxd_conf['plugin_stun_port'] != "")) + } + if (($siproxd_conf['plugin_stun'] != "") && ($siproxd_conf['plugin_stun_port'] != "")) { fwrite($fout, "plugin_stun_port = " . $siproxd_conf['plugin_stun_port'] . "\n"); - if (($siproxd_conf['plugin_stun'] != "") && ($siproxd_conf['plugin_stun_period'] != "")) + } + if (($siproxd_conf['plugin_stun'] != "") && ($siproxd_conf['plugin_stun_period'] != "")) { fwrite($fout, "plugin_stun_period = " . $siproxd_conf['plugin_stun_period'] . "\n"); + } fclose($fout); - if ($pfs_version == '2.2') - $bin_dir='bin'; - else - $bin_dir='sbin'; - write_rcfile(array( "file" => "siproxd.sh", - "start" => "$varSIPROXD/{$bin_dir}/siproxd -c $varSIPROXD/etc/siproxd.conf &", + "start" => "{$siproxd_bin} -c {$siproxd_conffile} &", "stop" => "/usr/bin/killall -9 siproxd" ) ); - exec("killall -9 siproxd"); - - sleep(3); - - start_service("siproxd"); - - sleep(3); - + if (is_service_running('siproxd')) { + stop_service("siproxd"); + sleep(3); + } + /* Only (re)start the service when siproxd is enabled */ + if ($siproxd_conf['sipenable'] != "0") { + start_service("siproxd"); + sleep(3); + } filter_configure(); conf_mount_ro(); @@ -278,38 +297,54 @@ function sync_package_siproxd() { } function validate_form_siproxd($post, &$input_errors) { - if ($post['port'] && !is_port($post['port'])) + if ($post['port'] && !is_port($post['port'])) { $input_errors[] = 'Invalid port entered for "Listening Port"'; - if ($post['rtplower'] && !is_port($post['rtplower'])) + } + if ($post['rtplower'] && !is_port($post['rtplower'])) { $input_errors[] = 'Invalid port entered for "RTP port range (lower)".'; - if ($post['rtpupper'] && !is_port($post['rtpupper'])) + } + if ($post['rtpupper'] && !is_port($post['rtpupper'])) { $input_errors[] = 'Invalid port entered for "RTP port range (upper)".'; - if ($post['rtplower'] && $post['rtpupper'] && ($post['rtplower'] >= $post['rtpupper'])) + } + if ($post['rtplower'] && $post['rtpupper'] && ($post['rtplower'] >= $post['rtpupper'])) { $input_errors[] = 'RTP lower port cannot be equal to or higher than the RTP upper port.'; - if ($post['rtptimeout'] && (!is_numeric($post['rtptimeout']) || ($post['rtptimeout'] < 0))) + } + if ($post['rtptimeout'] && (!is_numeric($post['rtptimeout']) || ($post['rtptimeout'] < 0))) { $input_errors[] = '"RTP stream timeout" must be numeric and greater than 0.'; - if ($post['defaulttimeout'] && (!is_numeric($post['defaulttimeout']) || ($post['defaulttimeout'] < 0))) + } + if ($post['defaulttimeout'] && (!is_numeric($post['defaulttimeout']) || ($post['defaulttimeout'] < 0))) { $input_errors[] = '"Default expiration timeout" must be numeric and greater than 0.'; - if ($post['outboundproxyhost'] && (!is_hostname($post['outboundproxyhost']) && !is_ipaddr($post['outboundproxyhost']))) + } + if ($post['outboundproxyhost'] && (!is_hostname($post['outboundproxyhost']) && !is_ipaddr($post['outboundproxyhost']))) { $input_errors[] = 'Invalid hostname or IP address entered for "Outbound Proxy Host".'; - if ($post['outboundproxyport'] && !is_port($post['outboundproxyport'])) + } + if ($post['outboundproxyport'] && !is_port($post['outboundproxyport'])) { $input_errors[] = 'Invalid port entered for "Outbound Proxy Port".'; - if ($post['rtp_input_dejitter'] && (!is_numeric($post['rtp_input_dejitter']) || ($post['rtp_input_dejitter'] < 0))) + } + if ($post['rtp_input_dejitter'] && (!is_numeric($post['rtp_input_dejitter']) || ($post['rtp_input_dejitter'] < 0))) { $input_errors[] = '"Input Dejitter" must be numeric and greater than 0.'; - if ($post['rtp_output_dejitter'] && (!is_numeric($post['rtp_output_dejitter']) || ($post['rtp_output_dejitter'] < 0))) + } + if ($post['rtp_output_dejitter'] && (!is_numeric($post['rtp_output_dejitter']) || ($post['rtp_output_dejitter'] < 0))) { $input_errors[] = '"Output Dejitter" must be numeric and greater than 0.'; - if ($post['tcp_timeout'] && (!is_numeric($post['tcp_timeout']) || ($post['tcp_timeout'] < 0))) + } + if ($post['tcp_timeout'] && (!is_numeric($post['tcp_timeout']) || ($post['tcp_timeout'] < 0))) { $input_errors[] = '"TCP inactivity timeout" must be numeric and greater than 0.'; - if ($post['tcp_connect_timeout'] && (!is_numeric($post['tcp_connect_timeout']) || ($post['tcp_connect_timeout'] < 0))) + } + if ($post['tcp_connect_timeout'] && (!is_numeric($post['tcp_connect_timeout']) || ($post['tcp_connect_timeout'] < 0))) { $input_errors[] = '"TCP Connect Timeout" must be numeric and greater than 0.'; - if ($post['tcp_keepalive'] && (!is_numeric($post['tcp_keepalive']) || ($post['tcp_keepalive'] < 0))) + } + if ($post['tcp_keepalive'] && (!is_numeric($post['tcp_keepalive']) || ($post['tcp_keepalive'] < 0))) { $input_errors[] = '"TCP Keepalive" must be numeric and greater than 0.'; - if ($post['plugin_stun_server'] && (!is_hostname($post['plugin_stun_server']) && !is_ipaddr($post['plugin_stun_server']))) + } + if ($post['plugin_stun_server'] && (!is_hostname($post['plugin_stun_server']) && !is_ipaddr($post['plugin_stun_server']))) { $input_errors[] = 'Invalid hostname or IP address entered for "STUN Server".'; - if ($post['plugin_stun_port'] && !is_port($post['plugin_stun_port'])) + } + if ($post['plugin_stun_port'] && !is_port($post['plugin_stun_port'])) { $input_errors[] = 'Invalid port entered for "STUN Port".'; - if ($post['plugin_stun_period'] && (!is_numeric($post['plugin_stun_period']) || ($post['plugin_stun_period'] < 0))) + } + if ($post['plugin_stun_period'] && (!is_numeric($post['plugin_stun_period']) || ($post['plugin_stun_period'] < 0))) { $input_errors[] = '"STUN Period" must be numeric and greater than 0.'; + } } diff --git a/config/siproxd/siproxd.xml b/config/siproxd/siproxd.xml index cca84138..e4375d8e 100644 --- a/config/siproxd/siproxd.xml +++ b/config/siproxd/siproxd.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE packagegui SYSTEM "./schema/packages.dtd"> -<?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> +<!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> <copyright> <![CDATA[ @@ -43,7 +43,7 @@ ]]> </copyright> <name>siproxdsettings</name> - <version>1.0.5</version> + <version>1.0.6</version> <title>siproxd: Settings</title> <include_file>/usr/local/pkg/siproxd.inc</include_file> <aftersaveredirect>/pkg_edit.php?xml=siproxd.xml&id=0</aftersaveredirect> @@ -371,15 +371,15 @@ <type>input</type> </field> </fields> - <custom_php_global_functions> - </custom_php_global_functions> <custom_add_php_command> sync_package_siproxd(); </custom_add_php_command> <custom_php_resync_config_command> sync_package_siproxd(); </custom_php_resync_config_command> - <filter_rules_needed>siproxd_generate_rules</filter_rules_needed> + <filter_rules_needed> + siproxd_generate_rules(); + </filter_rules_needed> <custom_php_validation_command> validate_form_siproxd($_POST, $input_errors); </custom_php_validation_command> diff --git a/config/siproxd/siproxd_registered_phones.php b/config/siproxd/siproxd_registered_phones.php index a8789d7f..51eb474a 100644 --- a/config/siproxd/siproxd_registered_phones.php +++ b/config/siproxd/siproxd_registered_phones.php @@ -1,7 +1,9 @@ <?php /* siproxd_registered_phones.php + part of pfSense (https://www.pfSense.org/) Copyright (C) 2010 Jim Pingle + Copyright (C) 2015 ESF, LLC All rights reserved. Redistribution and use in source and binary forms, with or without @@ -36,8 +38,7 @@ ##|*MATCH=siproxd_registered_phones.php* ##|-PRIV -require("guiconfig.inc"); -$pgtitle = array(gettext("Status"), gettext("siproxd Registered Phones")); +require_once("guiconfig.inc"); $phonetext = file_get_contents("/var/siproxd/siproxd_registrations"); $phonedata = explode("\n", $phonetext); @@ -47,27 +48,28 @@ if (!is_array($phonedata)) { } $activephones = array(); -for ($i=0; $i < count($phonedata); $i++) { +for ($i = 0; $i < count($phonedata); $i++) { list($stars, $active, $expires) = explode(":", $phonedata[$i]); if ($active == "1") { $phone = array(); $phone["expires"] = $expires; - $phone["real"]["type"] = $phonedata[++$i]; - $phone["real"]["user"] = $phonedata[++$i]; - $phone["real"]["host"] = $phonedata[++$i]; - $phone["real"]["port"] = $phonedata[++$i]; - $phone["nat"]["type"] = $phonedata[++$i]; - $phone["nat"]["user"] = $phonedata[++$i]; - $phone["nat"]["host"] = $phonedata[++$i]; - $phone["nat"]["port"] = $phonedata[++$i]; - $phone["registered"]["type"] = $phonedata[++$i]; - $phone["registered"]["user"] = $phonedata[++$i]; - $phone["registered"]["host"] = $phonedata[++$i]; - $phone["registered"]["port"] = $phonedata[++$i]; + $phone["real"]["type"] = $phonedata[++$i]; + $phone["real"]["user"] = $phonedata[++$i]; + $phone["real"]["host"] = $phonedata[++$i]; + $phone["real"]["port"] = $phonedata[++$i]; + $phone["nat"]["type"] = $phonedata[++$i]; + $phone["nat"]["user"] = $phonedata[++$i]; + $phone["nat"]["host"] = $phonedata[++$i]; + $phone["nat"]["port"] = $phonedata[++$i]; + $phone["registered"]["type"] = $phonedata[++$i]; + $phone["registered"]["user"] = $phonedata[++$i]; + $phone["registered"]["host"] = $phonedata[++$i]; + $phone["registered"]["port"] = $phonedata[++$i]; $activephones[] = $phone; } } +$pgtitle = array(gettext("Status"), gettext("siproxd Registered Phones")); require("head.inc"); ?> @@ -77,8 +79,7 @@ require("head.inc"); <br /> <table width="100%" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td> +<tr><td> <?php $tab_array = array(); $tab_array[] = array(gettext("Settings"), false, "pkg_edit.php?xml=siproxd.xml&id=0"); @@ -86,76 +87,73 @@ require("head.inc"); $tab_array[] = array(gettext("Registered Phones"), true, "siproxd_registered_phones.php"); display_top_tabs($tab_array); ?> - </td> - </tr> - - <tr> - <td> - <div id="mainarea"> - <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0"> - <thead> - <tr> - <td colspan="16" class="listtopic"><?php echo gettext("Currently Registered Phones") . " (" . count($activephones) . ")"; ?></td> - </tr> - <tr> - <th colspan="5">Real Phone</th> - <th colspan="5">NAT Address</th> - <th colspan="4">Registered With</th> - <th colspan="2"> </th> - </tr> - <tr> - <th>Type</th> - <th>User</th> - <th>Host</th> - <th>Port</th> - <th> </th> - <th>Type</th> - <th>User</th> - <th>Host</th> - <th>Port</th> - <th> </th> - <th>Type</th> - <th>User</th> - <th>Host</th> - <th>Port</th> - <th> </th> - <th>Expires</th> - </tr> - </thead> - <?php if (count($phonedata) == 0): ?> - <tr><td colspan="16" align="center">No Phone Data Found</td></tr> - <? elseif (count($activephones) == 0): ?> - <tr><td colspan="16" align="center">No Active Phones</td></tr> - <? else: ?> - <? foreach ($activephones as $phone): ?> - <tr> - <td align="center" class="listlr"><? echo ($phone['real']['type']) ? $phone['real']['type'] : "sip"; ?></td> - <td align="center" class="listr"><? echo ($phone['real']['user']) ? $phone['real']['user'] : " "; ?></td> - <td align="center" class="listr"><? echo ($phone['real']['host']) ? $phone['real']['host'] : " "; ?></td> - <td align="center" class="listr"><? echo ($phone['real']['port']) ? $phone['real']['port'] : "5060"; ?></td> - - <td align="center" class="list"> </td> - <td align="center" class="listlr"><? echo ($phone['nat']['type']) ? $phone['nat']['type'] : "sip"; ?></td> - <td align="center" class="listr"><? echo ($phone['nat']['user']) ? $phone['nat']['user'] : " "; ?></td> - <td align="center" class="listr"><? echo ($phone['nat']['host']) ? $phone['nat']['host'] : " "; ?></td> - <td align="center" class="listr"><? echo ($phone['nat']['port']) ? $phone['nat']['port'] : "5060"; ?></td> - - <td align="center" class="list"> </td> - <td align="center" class="listlr"><? echo ($phone['registered']['type']) ? $phone['registered']['type'] : "sip"; ?></td> - <td align="center" class="listr"><? echo ($phone['registered']['user']) ? $phone['registered']['user'] : " "; ?></td> - <td align="center" class="listr"><? echo ($phone['registered']['host']) ? $phone['registered']['host'] : " "; ?></td> - <td align="center" class="listr"><? echo ($phone['registered']['port']) ? $phone['registered']['port'] : "5060"; ?></td> - - <td align="center" class="list"> </td> - <td align="center" class="listlr"><? echo date("m/d/Y h:i:sa", $phone['expires']); ?></td> - </tr> - <? endforeach; ?> - <? endif; ?> - </table> - </div> - </td> - </tr> - +</td></tr> + +<tr><td> + <div id="mainarea"> + <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0"> + <thead> + <tr> + <td colspan="16" class="listtopic"><?php echo gettext("Currently Registered Phones") . " (" . count($activephones) . ")"; ?></td> + </tr> + <tr> + <th colspan="5">Real Phone</th> + <th colspan="5">NAT Address</th> + <th colspan="4">Registered With</th> + <th colspan="2"> </th> + </tr> + <tr> + <th>Type</th> + <th>User</th> + <th>Host</th> + <th>Port</th> + <th> </th> + <th>Type</th> + <th>User</th> + <th>Host</th> + <th>Port</th> + <th> </th> + <th>Type</th> + <th>User</th> + <th>Host</th> + <th>Port</th> + <th> </th> + <th>Expires</th> + </tr> + </thead> + + <?php if (count($phonedata) == 0): ?> + <tr><td colspan="16" align="center">No Phone Data Found</td></tr> + <? elseif (count($activephones) == 0): ?> + <tr><td colspan="16" align="center">No Active Phones</td></tr> + <? else: ?> + <? foreach ($activephones as $phone): ?> + <tr> + <td align="center" class="listlr"><? echo ($phone['real']['type']) ? $phone['real']['type'] : "sip"; ?></td> + <td align="center" class="listr"><? echo ($phone['real']['user']) ? $phone['real']['user'] : " "; ?></td> + <td align="center" class="listr"><? echo ($phone['real']['host']) ? $phone['real']['host'] : " "; ?></td> + <td align="center" class="listr"><? echo ($phone['real']['port']) ? $phone['real']['port'] : "5060"; ?></td> + + <td align="center" class="list"> </td> + <td align="center" class="listlr"><? echo ($phone['nat']['type']) ? $phone['nat']['type'] : "sip"; ?></td> + <td align="center" class="listr"><? echo ($phone['nat']['user']) ? $phone['nat']['user'] : " "; ?></td> + <td align="center" class="listr"><? echo ($phone['nat']['host']) ? $phone['nat']['host'] : " "; ?></td> + <td align="center" class="listr"><? echo ($phone['nat']['port']) ? $phone['nat']['port'] : "5060"; ?></td> + + <td align="center" class="list"> </td> + <td align="center" class="listlr"><? echo ($phone['registered']['type']) ? $phone['registered']['type'] : "sip"; ?></td> + <td align="center" class="listr"><? echo ($phone['registered']['user']) ? $phone['registered']['user'] : " "; ?></td> + <td align="center" class="listr"><? echo ($phone['registered']['host']) ? $phone['registered']['host'] : " "; ?></td> + <td align="center" class="listr"><? echo ($phone['registered']['port']) ? $phone['registered']['port'] : "5060"; ?></td> + + <td align="center" class="list"> </td> + <td align="center" class="listlr"><? echo date("m/d/Y h:i:sa", $phone['expires']); ?></td> + </tr> + <? endforeach; ?> + <? endif; ?> + </table> + </div> +</td></tr> </table> <?php include("fend.inc"); ?> diff --git a/config/siproxd/siproxdusers.xml b/config/siproxd/siproxdusers.xml index 7a636a3b..6dd53efe 100644 --- a/config/siproxd/siproxdusers.xml +++ b/config/siproxd/siproxdusers.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE packagegui SYSTEM "./schema/packages.dtd"> -<?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> +<!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> <copyright> <![CDATA[ @@ -43,9 +43,9 @@ ]]> </copyright> <name>siproxdusers</name> - <version>1.0.5</version> + <version>1.0.6</version> <title>siproxd: Users</title> - <include_file>/usr/local/pkg/siproxd.inc</include_file> + <include_file>/usr/local/pkg/siproxd.inc</include_file> <tabs> <tab> <text>Settings</text> @@ -93,9 +93,9 @@ </field> </fields> <custom_add_php_command> - sync_package_sipproxd_users(); + sync_package_siproxd_users(); </custom_add_php_command> <custom_php_resync_config_command> - sync_package_sipproxd_users(); + sync_package_siproxd_users(); </custom_php_resync_config_command> </packagegui> diff --git a/config/snort/snort.inc b/config/snort/snort.inc index 027207b1..fb8cd9d8 100755 --- a/config/snort/snort.inc +++ b/config/snort/snort.inc @@ -45,11 +45,6 @@ ini_set("memory_limit", "384M"); // Explicitly declare this as global so it works through function call includes global $g, $config, $rebuild_rules; -// Grab the Snort binary version programmatically, but if that fails use a safe default -$snortver = array(); -$snortbindir = SNORT_PBI_BINDIR; -exec("{$snortbindir}snort -V 2>&1 |/usr/bin/grep Version | /usr/bin/cut -c20-26", $snortver); - /* Rebuild Rules Flag -- if "true", rebuild enforcing rules and flowbit-rules files */ $rebuild_rules = false; @@ -292,7 +287,8 @@ function snort_build_list($snortcfg, $listname = "", $whitelist = false, $extern if (empty($list)) return $list; $localnet = $list['localnets']; - $wanip = $list['wanips']; +// $wanip = $list['wanips']; + $wanip = 'yes'; $wangw = $list['wangateips']; $wandns = $list['wandnsips']; $vips = $list['vips']; @@ -471,7 +467,7 @@ function snort_build_list($snortcfg, $listname = "", $whitelist = false, $extern /* iterate all vips and add to whitelist */ if (is_array($config['virtualip']) && is_array($config['virtualip']['vip'])) { foreach($config['virtualip']['vip'] as $vip) { - if ($vip['subnet'] && $vip['mode'] != 'proxyarp') { + if ($vip['subnet']) { if (!in_array("{$vip['subnet']}/{$vip['subnet_bits']}", $home_net)) $home_net[] = "{$vip['subnet']}/{$vip['subnet_bits']}"; } @@ -3454,7 +3450,7 @@ function snort_prepare_rule_files($snortcfg, $snortcfgdir) { /* Build a new sid-msg.map file from the enabled */ /* rules and copy it to the interface directory. */ - log_error(gettext("[Snort] Building new sig-msg.map file for " . convert_friendly_interface_to_friendly_descr($snortcfg['interface']) . "...")); + log_error(gettext("[Snort] Building new sid-msg.map file for " . convert_friendly_interface_to_friendly_descr($snortcfg['interface']) . "...")); snort_build_sid_msg_map("{$snortcfgdir}/rules/", "{$snortcfgdir}/sid-msg.map"); } diff --git a/config/snort/snort.xml b/config/snort/snort.xml index e3e1cdad..b8444009 100755 --- a/config/snort/snort.xml +++ b/config/snort/snort.xml @@ -45,7 +45,7 @@ </copyright> <description>Snort IDS/IPS Package</description> <name>Snort</name> - <version>3.2.6</version> + <version>3.2.7</version> <title>Services: Snort IDS</title> <include_file>/usr/local/pkg/snort/snort.inc</include_file> <menu> diff --git a/config/snort/snort_check_for_rule_updates.php b/config/snort/snort_check_for_rule_updates.php index 0c4543cd..123661e4 100755 --- a/config/snort/snort_check_for_rule_updates.php +++ b/config/snort/snort_check_for_rule_updates.php @@ -64,19 +64,14 @@ $openappid_detectors = $config['installedpackages']['snortglobal']['openappid_de /* Working directory for downloaded rules tarballs and extraction */ $tmpfname = "{$g['tmp_path']}/snort_rules_up"; -/* Grab the Snort binary version programmatically and use it to construct */ -/* the proper Snort VRT rules tarball and md5 filenames. Fallback to a */ -/* default in the event we fail. */ -$snortver = array(); -exec("{$snortbindir}snort -V 2>&1 |/usr/bin/grep Version | /usr/bin/cut -c20-26", $snortver); -// Save the version with decimal delimiters for use in extracting the rules -$snort_version = $snortver[0]; -if (empty($snort_version)) - $snort_version = SNORT_BIN_VERSION; +/* Use the Snort binary version to construct the proper Snort VRT */ +/* rules tarball and md5 filenames. Save the version with decimal */ +/* delimiters for use in extracting the rules. */ +$snort_version = SNORT_BIN_VERSION; // Create a collapsed version string for use in the tarball filename -$snortver[0] = str_replace(".", "", $snortver[0]); -$snort_filename = "snortrules-snapshot-{$snortver[0]}.tar.gz"; +$snortver = str_replace(".", "", SNORT_BIN_VERSION); +$snort_filename = "snortrules-snapshot-{$snortver}.tar.gz"; $snort_filename_md5 = "{$snort_filename}.md5"; $snort_rule_url = VRT_DNLD_URL; diff --git a/config/snort/snort_defs.inc b/config/snort/snort_defs.inc index 3f5c82e5..ac09db44 100644 --- a/config/snort/snort_defs.inc +++ b/config/snort/snort_defs.inc @@ -49,13 +49,12 @@ if (!defined("SNORTLOGDIR")) define("SNORTLOGDIR", "{$g['varlog_path']}/snort"); if (!defined("SNORT_BIN_VERSION")) { // Grab the Snort binary version programmatically - $snortver = array(); $snortbindir = SNORT_PBI_BINDIR; - mwexec("{$snortbindir}/snort -V 2>&1 |/usr/bin/grep Version | /usr/bin/cut -c20-26", $snortver); - if (!empty($snortver[0])) - define("SNORT_BIN_VERSION", $snortver[0]); + $snortver = exec_command("{$snortbindir}/snort -V 2>&1 |/usr/bin/grep Version | /usr/bin/cut -c20-26"); + if (!empty($snortver)) + define("SNORT_BIN_VERSION", $snortver); else - define("SNORT_BIN_VERSION", "2.9.7.3"); + define("SNORT_BIN_VERSION", "2.9.7.5"); } if (!defined("SNORT_SID_MODS_PATH")) define('SNORT_SID_MODS_PATH', "{$g['vardb_path']}/snort/sidmods/"); diff --git a/config/snort/snort_migrate_config.php b/config/snort/snort_migrate_config.php index ae1daf6a..edcbb2d5 100644 --- a/config/snort/snort_migrate_config.php +++ b/config/snort/snort_migrate_config.php @@ -541,10 +541,10 @@ unset($r); // Log a message if we changed anything if ($updated_cfg) { - $config['installedpackages']['snortglobal']['snort_config_ver'] = "3.2.6"; log_error("[Snort] Settings successfully migrated to new configuration format..."); } -else +else { log_error("[Snort] Configuration version is current..."); +} ?> diff --git a/config/snort/snort_passlist.php b/config/snort/snort_passlist.php index 965f22d7..1b377a1f 100644 --- a/config/snort/snort_passlist.php +++ b/config/snort/snort_passlist.php @@ -197,7 +197,8 @@ if ($savemsg) { <p><?php echo gettext("1. Here you can create Pass List files for your Snort package rules. Hosts on a Pass List are never blocked by Snort."); ?><br/> <?php echo gettext("2. Add all the IP addresses or networks (in CIDR notation) you want to protect against Snort block decisions."); ?><br/> <?php echo gettext("3. The default Pass List includes the WAN IP and gateway, defined DNS servers, VPNs and locally-attached networks."); ?><br/> - <?php echo gettext("4. Be careful, it is very easy to get locked out of your system by altering the default settings."); ?></p></span></td> + <?php echo gettext("4. Be careful, it is very easy to get locked out of your system by altering the default settings."); ?><br/> + <?php echo gettext("5. To use a custom Pass List on an interface, you must manually assign the list using the drop-down control on the Interface Settings tab."); ?></p></span></td> </tr> <tr> <td width="100%"><span class="vexpl"><?php echo gettext("Remember you must restart Snort on the interface for changes to take effect!"); ?></span></td> diff --git a/config/snort/snort_passlist_edit.php b/config/snort/snort_passlist_edit.php index 75724344..25ebcc82 100644 --- a/config/snort/snort_passlist_edit.php +++ b/config/snort/snort_passlist_edit.php @@ -3,7 +3,7 @@ * snort_passlist_edit.php * Copyright (C) 2004 Scott Ullrich * Copyright (C) 2011-2012 Ermal Luci - * Copyright (C) 2014 Bill Meeks + * Copyright (C) 2015 Bill Meeks * All rights reserved. * * originially part of m0n0wall (http://m0n0.ch/wall) @@ -71,7 +71,7 @@ if (isset($id) && isset($a_passlist[$id])) { $pconfig['address'] = $a_passlist[$id]['address']; $pconfig['descr'] = html_entity_decode($a_passlist[$id]['descr']); $pconfig['localnets'] = $a_passlist[$id]['localnets']; - $pconfig['wanips'] = $a_passlist[$id]['wanips']; +// $pconfig['wanips'] = $a_passlist[$id]['wanips']; $pconfig['wangateips'] = $a_passlist[$id]['wangateips']; $pconfig['wandnsips'] = $a_passlist[$id]['wandnsips']; $pconfig['vips'] = $a_passlist[$id]['vips']; @@ -87,7 +87,7 @@ if ($_GET['act'] == "import") { $pconfig['address'] = htmlspecialchars($_GET['address']); $pconfig['descr'] = htmlspecialchars($_GET['descr']); $pconfig['localnets'] = htmlspecialchars($_GET['localnets'])? 'yes' : 'no'; - $pconfig['wanips'] = htmlspecialchars($_GET['wanips'])? 'yes' : 'no'; +// $pconfig['wanips'] = htmlspecialchars($_GET['wanips'])? 'yes' : 'no'; $pconfig['wangateips'] = htmlspecialchars($_GET['wangateips'])? 'yes' : 'no'; $pconfig['wandnsips'] = htmlspecialchars($_GET['wandnsips'])? 'yes' : 'no'; $pconfig['vips'] = htmlspecialchars($_GET['vips'])? 'yes' : 'no'; @@ -168,7 +168,7 @@ if ($_POST['save']) { $p_list['name'] = $_POST['name']; $p_list['uuid'] = $passlist_uuid; $p_list['localnets'] = $_POST['localnets']? 'yes' : 'no'; - $p_list['wanips'] = $_POST['wanips']? 'yes' : 'no'; +// $p_list['wanips'] = $_POST['wanips']? 'yes' : 'no'; $p_list['wangateips'] = $_POST['wangateips']? 'yes' : 'no'; $p_list['wandnsips'] = $_POST['wandnsips']? 'yes' : 'no'; $p_list['vips'] = $_POST['vips']? 'yes' : 'no'; @@ -255,7 +255,6 @@ if ($savemsg) <tr> <td colspan="2" valign="top" class="listtopic"><?php echo gettext("Add auto-generated IP Addresses."); ?></td> </tr> - <tr> <td width="22%" valign="top" class="vncell"><?php echo gettext("Local Networks"); ?></td> <td width="78%" class="vtable"><input name="localnets" type="checkbox" @@ -263,14 +262,6 @@ if ($savemsg) <?php if($pconfig['localnets'] == 'yes'){ echo "checked";} if($pconfig['localnets'] == ''){ echo "checked";} ?> /> <span class="vexpl"> <?php echo gettext("Add firewall Local Networks to the list (excluding WAN)."); ?> </span></td> </tr> - - <tr> - <td width="22%" valign="top" class="vncell"><?php echo gettext("WAN IPs"); ?></td> - <td width="78%" class="vtable"><input name="wanips" type="checkbox" - id="wanips" size="40" value="yes" - <?php if($pconfig['wanips'] == 'yes'){ echo "checked";} if($pconfig['wanips'] == ''){ echo "checked";} ?> /> - <span class="vexpl"> <?php echo gettext("Add WAN interface IPs to the list."); ?> </span></td> - </tr> <tr> <td width="22%" valign="top" class="vncell"><?php echo gettext("WAN Gateways"); ?></td> <td width="78%" class="vtable"><input name="wangateips" diff --git a/config/snort/snort_post_install.php b/config/snort/snort_post_install.php index 280f0efe..bbb2642c 100644 --- a/config/snort/snort_post_install.php +++ b/config/snort/snort_post_install.php @@ -265,8 +265,8 @@ if (stristr($config['widgets']['sequence'], "snort_alerts-container") === FALSE) $config['widgets']['sequence'] .= ",{$snort_widget_container}"; /* Update Snort package version in configuration */ -$config['installedpackages']['snortglobal']['snort_config_ver'] = "3.2.6"; -write_config("Snort pkg v3.2.6: post-install configuration saved."); +$config['installedpackages']['snortglobal']['snort_config_ver'] = $config['installedpackages']['package'][get_pkg_id("snort")]['version']; +write_config("Snort pkg v{$config['installedpackages']['package'][get_pkg_id("snort")]['version']}: post-install configuration saved."); /* Done with post-install, so clear flag */ unset($g['snort_postinstall']); diff --git a/config/urlsnarf/urlsnarf.xml b/config/urlsnarf/urlsnarf.xml index c65d1a14..97b3d6bd 100644 --- a/config/urlsnarf/urlsnarf.xml +++ b/config/urlsnarf/urlsnarf.xml @@ -3,23 +3,28 @@ <?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> <copyright> - <![CDATA[ -/* ========================================================================== */ +<![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ /* - part of pfSense (http://www.pfSense.com) - Copyright (C) 2013 + urlsnarf.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2013-2015 ESF, LLC All rights reserved. -/* ========================================================================== */ +*/ +/* ====================================================================================== */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY @@ -31,14 +36,12 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ +*/ +/* ====================================================================================== */ ]]> </copyright> <description>urlsnarf</description> - <requirements>None</requirements> - <faq></faq> <name>urlsnarf</name> - <version>0.0</version> + <version>2.4b1</version> <title>urlsnarf</title> -</packagegui>
\ No newline at end of file +</packagegui> diff --git a/config/zabbix-agent-lts/zabbix-agent-lts.inc b/config/zabbix-agent-lts/zabbix-agent-lts.inc index e3e5570c..7eb7c564 100644 --- a/config/zabbix-agent-lts/zabbix-agent-lts.inc +++ b/config/zabbix-agent-lts/zabbix-agent-lts.inc @@ -1,159 +1,149 @@ <?php -/* $Id$ */ -/* ========================================================================== */ /* - zabbix-agent-lts.inc - part of the Zabbix package for pfSense - Copyright (C) 2013 Danilo G. Baio - Copyright (C) 2013 Marcello Coutinho - - All rights reserved. - */ -/* ========================================================================== */ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ + zabbix-agent-lts.inc + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2013 Danilo G. Baio + Copyright (C) 2013 Marcello Coutinho + Copyright (C) 2015 ESF, LLC + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ require_once("util.inc"); require_once("functions.inc"); require_once("pkg-utils.inc"); require_once("globals.inc"); -$pf_version=substr(trim(file_get_contents("/etc/version")),0,3); +$pf_version = substr(trim(file_get_contents("/etc/version")), 0, 3); if ($pf_version == "2.1" || $pf_version == "2.2") { define('ZABBIX_AGENT_BASE', '/usr/pbi/zabbix22-agent-' . php_uname("m")); } else { define('ZABBIX_AGENT_BASE', '/usr/local'); } -function php_install_zabbix_agent_lts(){ - sync_package_zabbix_agent_lts(); -} - -function php_deinstall_zabbix_agent_lts(){ - global $config, $g; - - conf_mount_rw(); +function php_deinstall_zabbix_agent_lts() { + conf_mount_rw(); - exec("/usr/bin/killall zabbix_agentd"); - unlink_if_exists(ZABBIX_AGENT_BASE . "/etc/rc.d/zabbix_agentd_lts.sh"); - unlink_if_exists(ZABBIX_AGENT_BASE . "/etc/zabbix22/zabbix_agentd.conf"); - unlink_if_exists("/var/log/zabbix-agent-lts/zabbix_agentd_lts.log"); - unlink_if_exists("/var/run/zabbix-agent-lts/zabbix_agentd_lts.pid"); + stop_service("zabbix_agentd_lts"); + unlink_if_exists(ZABBIX_AGENT_BASE . "/etc/rc.d/zabbix_agentd_lts.sh"); + unlink_if_exists(ZABBIX_AGENT_BASE . "/etc/zabbix22/zabbix_agentd.conf"); + unlink_if_exists("/var/log/zabbix-agent-lts/zabbix_agentd_lts.log"); + unlink_if_exists("/var/run/zabbix-agent-lts/zabbix_agentd_lts.pid"); if (is_dir("/var/log/zabbix-agent-lts")) { - exec("/bin/rm -r /var/log/zabbix-agent-lts/"); + mwexec("/bin/rm -rf /var/log/zabbix-agent-lts/"); } - if (is_dir("/var/run/zabbix-agent-lts")) { - exec("/bin/rm -r /var/run/zabbix-agent-lts/"); + mwexec("/bin/rm -rf /var/run/zabbix-agent-lts/"); } - conf_mount_ro(); + conf_mount_ro(); } -function validate_input_zabbix_agent_lts($post, &$input_errors){ +function validate_input_zabbix_agent_lts($post, &$input_errors) { if (isset($post['agentenabled'])) { if (!preg_match("/\w+/", $post['server'])) { - $input_errors[]='Server field is required.'; + $input_errors[] = "Server field is required."; } - + if (!preg_match("/\w+/", $post['hostname'])) { - $input_errors[]='Hostname field is required.'; + $input_errors[] = "Hostname field is required."; } - + if ($post['listenip'] != '') { - if (!is_ipaddr_configured($post['listenip']) && !preg_match("/(127.0.0.1|0.0.0.0)/",$post['listenip'])) { - $input_errors[]='Listen IP is not a configured IP address.'; + if (!is_ipaddr_configured($post['listenip']) && !preg_match("/(127.0.0.1|0.0.0.0)/", $post['listenip'])) { + $input_errors[] = "'Listen IP' is not a configured IP address."; } } if ($post['listenport'] != '') { - if (!preg_match("/^\d+$/", $post['listenport'])) { - $input_errors[]='Listen Port is not numeric.'; - } + if (!is_numericint($post['listenport'])) { + $input_errors[] = "'Listen Port' value is not numeric."; + } elseif ($post['listenport'] < 1 || $post['listenport'] > 65535) { + $input_errors[] = "You must enter a valid value for 'Listen Port'."; + } } if ($post['refreshactchecks'] != '') { - if (!preg_match("/^\d+$/", $post['refreshactchecks'])) { - $input_errors[]='Refresh Active Checks is not numeric.'; - } elseif ( $post['refreshactchecks'] < 60 || $post['refreshactchecks'] > 3600 ) { - $input_errors[]='You must enter a valid value for \'Refresh Active Checks\''; + if (!is_numericint($post['refreshactchecks'])) { + $input_errors[] = "'Refresh Active Checks' value is not numeric."; + } elseif ($post['refreshactchecks'] < 60 || $post['refreshactchecks'] > 3600) { + $input_errors[] = "You must enter a valid value for 'Refresh Active Checks'."; } } if ($post['timeout'] != '') { if (!is_numericint($post['timeout'])) { - $input_errors[]='Timeout is not numeric.'; - } elseif ( $post['timeout'] < 1 || $post['timeout'] > 30 ) { - $input_errors[]='You must enter a valid value for \'Timeout\''; + $input_errors[] = "Timeout value is not numeric."; + } elseif ($post['timeout'] < 1 || $post['timeout'] > 30) { + $input_errors[] = "You must enter a valid value for 'Timeout'."; } } - + if ($post['buffersend'] != '') { if (!is_numericint($post['buffersend'])) { - $input_errors[]='Buffer Send is not numeric.'; - } elseif ( $post['buffersend'] < 1 || $post['buffersend'] > 3600 ) { - $input_errors[]='You must enter a valid value for \'Buffer Send\''; + $input_errors[] = "'Buffer Send' value is not numeric."; + } elseif ($post['buffersend'] < 1 || $post['buffersend'] > 3600) { + $input_errors[] = "You must enter a valid value for 'Buffer Send'."; } } - + if ($post['buffersize'] != '') { if (!is_numericint($post['buffersize'])) { - $input_errors[]='Bufer Size is not numeric.'; - } elseif ( $post['buffersize'] < 2 || $post['buffersize'] > 65535 ) { - $input_errors[]='You must enter a valid value for \'Buffer Size\''; + $input_errors[] = "'Buffer Size' value is not numeric."; + } elseif ($post['buffersize'] < 2 || $post['buffersize'] > 65535) { + $input_errors[] = "You must enter a valid value for 'Buffer Size'."; } } - + if ($post['startagents'] != '') { if (!is_numericint($post['startagents'])) { - $input_errors[]='Start Agents is not numeric.'; - } elseif ( $post['startagents'] < 0 || $post['startagents'] > 100 ) { - $input_errors[]='You must enter a valid value for \'Start Agents\''; + $input_errors[] = "'Start Agents' value is not numeric."; + } elseif ($post['startagents'] < 0 || $post['startagents'] > 100) { + $input_errors[] = "You must enter a valid value for 'Start Agents'."; } } - } + } } -function sync_package_zabbix_agent_lts(){ +function sync_package_zabbix_agent_lts() { global $config, $g; conf_mount_rw(); - /* check zabbix agent settings*/ - if (is_array($config['installedpackages']['zabbixagentlts'])){ + // Check Zabbix Agent settings + if (is_array($config['installedpackages']['zabbixagentlts'])) { $zbagent_config = $config['installedpackages']['zabbixagentlts']['config'][0]; - if ($zbagent_config['agentenabled']=="on"){ - $RefreshActChecks=(preg_match("/(\d+)/",$zbagent_config['refreshactchecks'],$matches)? $matches[1] : "120"); - $BufferSend=(preg_match("/(\d+)/",$zbagent_config['buffersend'],$matches)? $matches[1] : "5" ); - $BufferSize=(preg_match("/(\d+)/",$zbagent_config['buffersize'],$matches)? $matches[1] : "100"); - $StartAgents=(preg_match("/(\d+)/",$zbagent_config['startagents'],$matches)? $matches[1] :"3" ); - $UserParams=base64_decode($zbagent_config['userparams']); - $ListenIp=($zbagent_config['listenip'] != ''? $zbagent_config['listenip'] : "0.0.0.0"); - $ListenPort=($zbagent_config['listenport'] != ''? $zbagent_config['listenport'] : "10050"); - $TimeOut=($zbagent_config['timeout'] != ''? $zbagent_config['timeout'] : "3"); - + if ($zbagent_config['agentenabled'] == "on") { + $RefreshActChecks = (preg_match("/(\d+)/", $zbagent_config['refreshactchecks'], $matches)? $matches[1] : "120"); + $BufferSend = (preg_match("/(\d+)/", $zbagent_config['buffersend'], $matches) ? $matches[1] : "5"); + $BufferSize = (preg_match("/(\d+)/", $zbagent_config['buffersize'], $matches) ? $matches[1] : "100"); + $StartAgents = (preg_match("/(\d+)/", $zbagent_config['startagents'], $matches) ? $matches[1] : "3"); + $UserParams = base64_decode($zbagent_config['userparams']); + $ListenIp = $zbagent_config['listenip'] ?: "0.0.0.0"; + $ListenPort = $zbagent_config['listenport'] ?: "10050"; + $TimeOut = $zbagent_config['timeout'] ?: "3"; + $zbagent_conf_file = <<< EOF Server={$zbagent_config['server']} ServerActive={$zbagent_config['serveractive']} @@ -172,33 +162,35 @@ StartAgents={$StartAgents} {$UserParams} EOF; - file_put_contents(ZABBIX_AGENT_BASE . "/etc/zabbix22/zabbix_agentd.conf", strtr($zbagent_conf_file, array("\r" => ""))); + file_put_contents(ZABBIX_AGENT_BASE . "/etc/zabbix22/zabbix_agentd.conf", strtr($zbagent_conf_file, array("\r" => ""))); } } + $want_sysctls = array( 'kern.ipc.shmall' => '2097152', 'kern.ipc.shmmax' => '2147483648', 'kern.ipc.semmsl' => '250' ); $sysctls = array(); - #check sysctl file values + // Check sysctl file values $sc_file=""; if (file_exists("/etc/sysctl.conf")) { $sc = file("/etc/sysctl.conf"); foreach ($sc as $line) { list($sysk, $sysv) = explode("=", $line, 2); - if (preg_match("/\w/",$line) && !array_key_exists($sysk, $want_sysctls)) - $sc_file.=$line; + if (preg_match("/\w/", $line) && !array_key_exists($sysk, $want_sysctls)) { + $sc_file .= $line; } + } } - foreach ($want_sysctls as $ws=> $wv) { + foreach ($want_sysctls as $ws => $wv) { $sc_file .= "{$ws}={$wv}\n"; - exec("/sbin/sysctl {$ws}={$wv}"); + mwexec("/sbin/sysctl {$ws}={$wv}"); } file_put_contents("/etc/sysctl.conf", $sc_file); - #check bootloader values - $lt_file=""; + // Check bootloader values + $lt_file = ""; $want_tunables = array( 'kern.ipc.semopm' => '100', 'kern.ipc.semmni' => '128', @@ -210,61 +202,62 @@ EOF; $lt = file("/boot/loader.conf"); foreach ($lt as $line) { list($tunable, $val) = explode("=", $line, 2); - if (preg_match("/\w/",$line) && !array_key_exists($tunable, $want_tunables)) - $lt_file.=$line; + if (preg_match("/\w/", $line) && !array_key_exists($tunable, $want_tunables)) { + $lt_file .= $line; + } } } foreach ($want_tunables as $wt => $wv) { - $lt_file.= "{$wt}={$wv}\n"; + $lt_file .= "{$wt}={$wv}\n"; } file_put_contents("/boot/loader.conf", $lt_file); - /*check startup script files*/ - /* create a few directories and ensure the sample files are in place */ - if (!is_dir(ZABBIX_AGENT_BASE . "/etc/zabbix22")) - exec("/bin/mkdir -p " . ZABBIX_AGENT_BASE . "/etc/zabbix22"); - - $dir_checks = <<< EOF -if [ ! -d /var/log/zabbix-agent-lts ] - then - /bin/mkdir -p /var/log/zabbix-agent-lts - /usr/sbin/chmod 755 /var/log/zabbix-agent-lts - fi -/usr/sbin/chown -R zabbix:zabbix /var/log/zabbix-agent-lts - -if [ ! -d /var/run/zabbix-agent-lts ] - then - /bin/mkdir -p /var/run/zabbix-agent-lts - /usr/sbin/chmod 755 /var/run/zabbix-agent-lts - fi -/usr/sbin/chown -R zabbix:zabbix /var/run/zabbix-agent-lts + // Check startup script files + // Create a few directories and ensure the sample files are in place + if (!is_dir(ZABBIX_AGENT_BASE . "/etc/zabbix22")) { + mwexec("/bin/mkdir -p " . ZABBIX_AGENT_BASE . "/etc/zabbix22"); + } + + $dir_checks = <<< EOF + + if [ ! -d /var/log/zabbix-agent-lts ]; then + /bin/mkdir -p /var/log/zabbix-agent-lts + /usr/sbin/chmod 755 /var/log/zabbix-agent-lts + fi + /usr/sbin/chown -R zabbix:zabbix /var/log/zabbix-agent-lts + + if [ ! -d /var/run/zabbix-agent-lts ]; then + /bin/mkdir -p /var/run/zabbix-agent-lts + /usr/sbin/chmod 755 /var/run/zabbix-agent-lts + fi + /usr/sbin/chown -R zabbix:zabbix /var/run/zabbix-agent-lts EOF; - - $zagent_rcfile="/usr/local/etc/rc.d/zabbix_agentd_lts.sh"; - if (is_array($zbagent_config) && $zbagent_config['agentenabled']=="on"){ + + $zagent_rcfile = "/usr/local/etc/rc.d/zabbix_agentd_lts.sh"; + if (is_array($zbagent_config) && $zbagent_config['agentenabled'] == "on") { $zagent_start .= strtr($dir_checks, array("\r" => "")). "\necho \"Starting Zabbix Agent LTS...\"\n"; $zagent_start .= ZABBIX_AGENT_BASE . "/sbin/zabbix_agentd\n"; - - $zagent_stop = "echo \"Stopping Zabbix Agent LTS...\"\n"; + + $zagent_stop = "echo \"Stopping Zabbix Agent LTS...\"\n"; $zagent_stop .= "/usr/bin/killall zabbix_agentd\n"; $zagent_stop .= "/bin/sleep 5\n"; - - /* write out rc.d start/stop file */ + + // write out rc.d start/stop file write_rcfile(array( - "file" => "zabbix_agentd_lts.sh", - "start" => "$zagent_start", - "stop" => "$zagent_stop" - ) + "file" => "zabbix_agentd_lts.sh", + "start" => "$zagent_start", + "stop" => "$zagent_stop" + ) ); - mwexec("{$zagent_rcfile} restart"); - }else{ - if (file_exists($zagent_rcfile)){ - mwexec("{$zagent_rcfile} stop"); - unlink($zagent_rcfile); + restart_service("zabbix_agentd_lts"); + } else { + if (is_service_running("zabbix_agentd_lts")) { + stop_service("zabbix_agentd_lts"); } + unlink_if_exists($zagent_rcfile); } - + conf_mount_ro(); } diff --git a/config/zabbix-agent-lts/zabbix-agent-lts.xml b/config/zabbix-agent-lts/zabbix-agent-lts.xml index c58ac04c..8883ff22 100644 --- a/config/zabbix-agent-lts/zabbix-agent-lts.xml +++ b/config/zabbix-agent-lts/zabbix-agent-lts.xml @@ -1,54 +1,57 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> -<copyright> + <copyright> <![CDATA[ /* $Id$ */ -/* ========================================================================== */ +/* ====================================================================================== */ /* - zabbix-agent-lts.xml - part of the Zabbix package for pfSense - Copyright (C) 2013 Danilo G. Baio - Copyright (C) 2013 Marcello Coutinho - - All rights reserved. - */ -/* ========================================================================== */ + zabbix-agent-lts.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2013 Danilo G. Baio + Copyright (C) 2013 Marcello Coutinho + Copyright (C) 2015 ESF, LLC + All rights reserved. +*/ +/* ====================================================================================== */ /* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +/* ====================================================================================== */ ]]> </copyright> <name>zabbixagentlts</name> <title>Services: Zabbix Agent LTS</title> <category>Monitoring</category> - <version>0.8.5</version> + <version>0.8.6</version> <include_file>/usr/local/pkg/zabbix-agent-lts.inc</include_file> <addedit_string>Zabbix Agent LTS has been created/modified.</addedit_string> <delete_string>Zabbix Agent LTS has been deleted.</delete_string> <additional_files_needed> <item>https://packages.pfsense.org/packages/config/zabbix-agent-lts/zabbix-agent-lts.inc</item> <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> </additional_files_needed> <menu> <name>Zabbix Agent LTS</name> @@ -60,7 +63,7 @@ <name>zabbix_agentd_lts</name> <rcfile>zabbix_agentd_lts.sh</rcfile> <executable>zabbix_agentd</executable> - <description>Zabbix Agent LTS host monitor daemon</description> + <description>Zabbix Agent LTS Host Monitor Daemon</description> </service> <tabs> <tab> @@ -69,6 +72,7 @@ <active /> </tab> </tabs> + <advanced_options>enabled</advanced_options> <fields> <field> <name>Zabbix Agent LTS Settings</name> @@ -77,27 +81,27 @@ <field> <fielddescr>Enable</fielddescr> <fieldname>agentenabled</fieldname> - <description>Enable Zabbix Agent LTS service</description> + <description>Enable Zabbix Agent LTS service.</description> <type>checkbox</type> </field> <field> <fielddescr>Server</fielddescr> <fieldname>server</fieldname> - <description>List of comma delimited IP addresses (or hostnames) of ZABBIX servers</description> + <description>List of comma delimited IP addresses (or hostnames) of ZABBIX servers.</description> <type>input</type> <size>60</size> </field> <field> <fielddescr>Server Active</fielddescr> <fieldname>serveractive</fieldname> - <description>List of comma delimited IP:port (or hostname:port) pairs of Zabbix servers for active checks</description> + <description>List of comma delimited IP:port (or hostname:port) pairs of Zabbix servers for active checks.</description> <type>input</type> <size>60</size> </field> <field> <fielddescr>Hostname</fielddescr> <fieldname>hostname</fieldname> - <description>Unique hostname. Required for active checks and must match hostname as configured on the Zabbix server (case sensitive).</description> + <description>Unique, case sensitive hostname. Required for active checks and must match hostname as configured on the Zabbix server.</description> <type>input</type> <size>60</size> </field> @@ -107,7 +111,7 @@ <default_value>0.0.0.0</default_value> <type>input</type> <size>60</size> - <description>Listen IP for connections from the server (default 0.0.0.0 for all interfaces)</description> + <description>Listen IP for connections from the server. (Default: 0.0.0.0 - all interfaces)</description> </field> <field> <fielddescr>Listen Port</fielddescr> @@ -115,7 +119,7 @@ <default_value>10050</default_value> <type>input</type> <size>5</size> - <description>Listen port for connections from the server (default 10050)</description> + <description>Listen port for connections from the server. (Default: 10050)</description> </field> <field> <fielddescr>Refresh Active Checks</fielddescr> @@ -123,7 +127,7 @@ <default_value>120</default_value> <type>input</type> <size>5</size> - <description>The agent will refresh list of active checks once per 120 (default) seconds.</description> + <description>The agent will refresh list of active checks once per this number of seconds. (Default: 120)</description> </field> <field> <fielddescr>Timeout</fielddescr> @@ -131,7 +135,13 @@ <default_value>3</default_value> <type>input</type> <size>5</size> - <description>Timeout (default 3). Do not spend more that Timeout seconds on getting requested value (1-30). The agent does not kill timeouted User Parameters processes!</description> + <description> + <![CDATA[ + Do not spend more that N seconds on getting requested value.<br /> + Note: The agent does not kill timeouted User Parameters processes!<br /> + (Default: 3. Valid range: 1-30) + ]]> + </description> </field> <field> <fielddescr>Buffer Send</fielddescr> @@ -139,7 +149,12 @@ <default_value>5</default_value> <type>input</type> <size>5</size> - <description>Buffer Send (default 5). Do not keep data longer than N seconds in buffer (1-3600).</description> + <description> + <![CDATA[ + Do not keep data longer than N seconds in buffer.<br /> + (Default: 5. Valid range: 1-3600) + ]]> + </description> </field> <field> <fielddescr>Buffer Size</fielddescr> @@ -147,7 +162,12 @@ <default_value>100</default_value> <type>input</type> <size>5</size> - <description>Buffer Size (default 100). Maximum number of values in a memory buffer (2-65535). The agent will send all collected data to Zabbix server or proxy if the buffer is full.</description> + <description> + <![CDATA[ + Maximum number of values in the memory buffer. The agent will send all collected data to Zabbix server or proxy if the buffer is full.<br /> + (Default: 100. Valid range: 2-65535) + ]]> + </description> </field> <field> <fielddescr>Start Agents</fielddescr> @@ -155,7 +175,13 @@ <default_value>3</default_value> <type>input</type> <size>5</size> - <description>Start Agents (default 3). Number of pre-forked instances of zabbix_agentd that process passive checks (0-100).If set to 0, disables passive checks and the agent will not listen on any TCP port.</description> + <description> + <![CDATA[ + Number of pre-forked instances of zabbix_agentd that process passive checks.<br /> + Note: Setting to 0 disables passive checks and the agent will not listen on any TCP port.<br /> + (Default: 3. Valid range: 0-100) + ]]> + </description> </field> <field> <fielddescr>User Parameters</fielddescr> @@ -164,15 +190,25 @@ <type>textarea</type> <rows>5</rows> <cols>50</cols> - <description>User-defined parameter to monitor. There can be several user-defined parameters. Value has form, example: UserParameter=users,who|wc -l</description> + <description> + <![CDATA[ + User-defined parameter(s) to monitor. There can be multiple user-defined parameters.<br /> + Example: <em>UserParameter=users,who|wc -l</em> + ]]> + </description> + <advancedfield/> </field> </fields> - <custom_php_install_command>sync_package_zabbix_agent_lts();</custom_php_install_command> - <custom_php_command_before_form></custom_php_command_before_form> - <custom_php_after_head_command></custom_php_after_head_command> - <custom_php_after_form_command></custom_php_after_form_command> - <custom_php_validation_command>validate_input_zabbix_agent_lts($_POST, $input_errors);</custom_php_validation_command> - <custom_add_php_command></custom_add_php_command> - <custom_php_resync_config_command>sync_package_zabbix_agent_lts();</custom_php_resync_config_command> - <custom_php_deinstall_command>php_deinstall_zabbix_agent_lts();</custom_php_deinstall_command> + <custom_php_install_command> + sync_package_zabbix_agent_lts(); + </custom_php_install_command> + <custom_php_validation_command> + validate_input_zabbix_agent_lts($_POST, $input_errors); + </custom_php_validation_command> + <custom_php_resync_config_command> + sync_package_zabbix_agent_lts(); + </custom_php_resync_config_command> + <custom_php_deinstall_command> + php_deinstall_zabbix_agent_lts(); + </custom_php_deinstall_command> </packagegui> diff --git a/config/zabbix-proxy-lts/zabbix-proxy-lts.inc b/config/zabbix-proxy-lts/zabbix-proxy-lts.inc index bc9864f4..f1b877b5 100644 --- a/config/zabbix-proxy-lts/zabbix-proxy-lts.inc +++ b/config/zabbix-proxy-lts/zabbix-proxy-lts.inc @@ -1,110 +1,101 @@ <?php -/* $Id$ */ -/* ========================================================================== */ /* - zabbix-proxy-lts.inc - part of the Zabbix package for pfSense - Copyright (C) 2013 Danilo G. Baio - Copyright (C) 2013 Marcello Coutinho - - All rights reserved. - */ -/* ========================================================================== */ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ + zabbix-proxy-lts.inc + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2013 Danilo G. Baio + Copyright (C) 2013 Marcello Coutinho + Copyright (C) 2015 ESF, LLC + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ require_once("util.inc"); require_once("functions.inc"); require_once("pkg-utils.inc"); require_once("globals.inc"); -$pf_version=substr(trim(file_get_contents("/etc/version")),0,3); +$pf_version = substr(trim(file_get_contents("/etc/version")), 0, 3); if ($pf_version == "2.1" || $pf_version == "2.2") { define('ZABBIX_PROXY_BASE', '/usr/pbi/zabbix22-proxy-' . php_uname("m")); } else { define('ZABBIX_PROXY_BASE', '/usr/local'); } -function php_install_zabbix_proxy_lts(){ - sync_package_zabbix_proxy_lts(); -} - -function php_deinstall_zabbix_proxy_lts(){ - global $config, $g; - - conf_mount_rw(); +function php_deinstall_zabbix_proxy_lts() { + conf_mount_rw(); - exec("/usr/bin/killall zabbix_proxy"); - unlink_if_exists(ZABBIX_PROXY_BASE . "/etc/rc.d/zabbix_proxy_lts.sh"); - unlink_if_exists(ZABBIX_PROXY_BASE . "/etc/zabbix22/zabbix_proxy_lts.conf"); - unlink_if_exists("/var/log/zabbix-proxy-lts/zabbix_proxy_lts.log"); - unlink_if_exists("/var/run/zabbix-proxy-lts/zabbix_proxy_lts.pid"); + stop_service("zabbix_proxy_lts"); + unlink_if_exists(ZABBIX_PROXY_BASE . "/etc/rc.d/zabbix_proxy_lts.sh"); + unlink_if_exists(ZABBIX_PROXY_BASE . "/etc/zabbix22/zabbix_proxy_lts.conf"); + unlink_if_exists("/var/log/zabbix-proxy-lts/zabbix_proxy_lts.log"); + unlink_if_exists("/var/run/zabbix-proxy-lts/zabbix_proxy_lts.pid"); if (is_dir("/var/log/zabbix-proxy-lts")) { - exec("/bin/rm -r /var/log/zabbix-proxy-lts/"); + mwexec("/bin/rm -rf /var/log/zabbix-proxy-lts/"); } if (is_dir("/var/run/zabbix-proxy-lts")) { - exec("/bin/rm -r /var/run/zabbix-proxy-lts/"); + mwexec("/bin/rm -rf /var/run/zabbix-proxy-lts/"); } - if (is_dir("/var/db/zabbix-proxy-lts")) { - exec("/bin/rm -r /var/db/zabbix-proxy-lts/"); + if (is_dir("/var/db/zabbix-proxy-lts")) { + mwexec("/bin/rm -rf /var/db/zabbix-proxy-lts/"); } - conf_mount_ro(); + conf_mount_ro(); } -function validate_input_zabbix_proxy_lts($post, &$input_errors){ - if (isset($post['proxyenabled'])) { +function validate_input_zabbix_proxy_lts($post, &$input_errors) { + if (isset($post['proxyenabled'])) { if (!preg_match("/\w+/", $post['server'])) { - $input_errors[]='Server field is required.'; + $input_errors[] = "Server field is required."; } if (!is_numericint($post['serverport'])) { - $input_errors[]='Server Port is not numeric.'.$ServerPort; + $input_errors[] = "'Server Port' value is not numeric."; + } elseif ($post['serverport'] < 1 || $post['serverport'] > 65535) { + $input_errors[] = "You must enter a valid value for 'Server Port'."; } if (!preg_match("/\w+/", $post['hostname'])) { - $input_errors[]='Hostname field is required.'; + $input_errors[] = "Hostname field is required."; } if (!is_numericint($post['configfrequency'])) { - $input_errors[]='Config Frequency is not numeric.'; + $input_errors[] = "'Config Frequency' value is not numeric."; } } } -function sync_package_zabbix_proxy_lts(){ +function sync_package_zabbix_proxy_lts() { global $config, $g; conf_mount_rw(); - #check zabbix proxy config - if (is_array($config['installedpackages']['zabbixproxylts'])){ + // Check zabbix proxy config + if (is_array($config['installedpackages']['zabbixproxylts'])) { $zbproxy_config = $config['installedpackages']['zabbixproxylts']['config'][0]; - if ($zbproxy_config['proxyenabled']=="on"){ - $Mode=(is_numericint($zbproxy_config['proxymode'])?$zbproxy_config['proxymode'] : 0); - $AdvancedParams=base64_decode($zbproxy_config['advancedparams']); - + if ($zbproxy_config['proxyenabled'] == "on") { + $Mode = (is_numericint($zbproxy_config['proxymode']) ? $zbproxy_config['proxymode'] : 0); + $AdvancedParams = base64_decode($zbproxy_config['advancedparams']); + $zbproxy_conf_file = <<< EOF Server={$zbproxy_config['server']} ServerPort={$zbproxy_config['serverport']} @@ -114,7 +105,8 @@ DBName=/var/db/zabbix-proxy-lts/proxy.db LogFile=/var/log/zabbix-proxy-lts/zabbix_proxy_lts.log ConfigFrequency={$zbproxy_config['configfrequency']} FpingLocation=/usr/local/sbin/fping -#there's currently no fping6 (IPv6) dependency in the package, but if there was, the binary would likely also be in /usr/local/sbin +# There's currently no fping6 (IPv6) dependency in the package, +# but if there was, the binary would likely also be in /usr/local/sbin. Fping6Location=/usr/local/sbin/fping6 ProxyMode={$Mode} {$AdvancedParams} @@ -130,24 +122,25 @@ EOF; 'kern.ipc.semmsl' => '250' ); $sysctls = array(); - #check sysctl file values + // Check sysctl file values $sc_file=""; if (file_exists("/etc/sysctl.conf")) { $sc = file("/etc/sysctl.conf"); foreach ($sc as $line) { list($sysk, $sysv) = explode("=", $line, 2); - if (preg_match("/\w/",$line) && !array_key_exists($sysk, $want_sysctls)) - $sc_file.=$line; + if (preg_match("/\w/", $line) && !array_key_exists($sysk, $want_sysctls)) { + $sc_file .= $line; } + } } - foreach ($want_sysctls as $ws=> $wv) { + foreach ($want_sysctls as $ws => $wv) { $sc_file .= "{$ws}={$wv}\n"; - exec("/sbin/sysctl {$ws}={$wv}"); + mwexec("/sbin/sysctl {$ws}={$wv}"); } file_put_contents("/etc/sysctl.conf", $sc_file); - #check bootloader values - $lt_file=""; + // Check bootloader values + $lt_file = ""; $want_tunables = array( 'kern.ipc.semopm' => '100', 'kern.ipc.semmni' => '128', @@ -159,21 +152,23 @@ EOF; $lt = file("/boot/loader.conf"); foreach ($lt as $line) { list($tunable, $val) = explode("=", $line, 2); - if (preg_match("/\w/",$line) && !array_key_exists($tunable, $want_tunables)) - $lt_file.=$line; + if (preg_match("/\w/", $line) && !array_key_exists($tunable, $want_tunables)) { + $lt_file .= $line; + } } } foreach ($want_tunables as $wt => $wv) { - $lt_file.= "{$wt}={$wv}\n"; + $lt_file .= "{$wt}={$wv}\n"; } file_put_contents("/boot/loader.conf", $lt_file); - /*check startup script files*/ - /* create a few directories and ensure the sample files are in place */ - if (!is_dir(ZABBIX_PROXY_BASE . "/etc/zabbix22")) - exec("/bin/mkdir -p " . ZABBIX_PROXY_BASE . "/etc/zabbix22"); + // Check startup script files + // Create a few directories and ensure the sample files are in place + if (!is_dir(ZABBIX_PROXY_BASE . "/etc/zabbix22")) { + mwexec("/bin/mkdir -p " . ZABBIX_PROXY_BASE . "/etc/zabbix22"); + } - $dir_checks = <<< EOF + $dir_checks = <<< EOF if [ ! -d /var/log/zabbix-proxy-lts ]; then /bin/mkdir -p /var/log/zabbix-proxy-lts @@ -195,7 +190,7 @@ EOF; EOF; - $pid_check = <<< EOF + $pid_check = <<< EOF /bin/pgrep -anx zabbix_proxy 2>/dev/null if [ "\$?" -eq "0" ]; then @@ -204,33 +199,33 @@ EOF; fi EOF; - - $zproxy_rcfile="/usr/local/etc/rc.d/zabbix_proxy_lts.sh"; - if (is_array($zbproxy_config) && $zbproxy_config['proxyenabled']=="on"){ - $zproxy_start = strtr($dir_checks, array("\r" => "")); + + $zproxy_rcfile = "/usr/local/etc/rc.d/zabbix_proxy_lts.sh"; + if (is_array($zbproxy_config) && $zbproxy_config['proxyenabled'] == "on") { + $zproxy_start = strtr($dir_checks, array("\r" => "")); $zproxy_start .= "\techo \"Starting Zabbix Proxy LTS\"...\n"; $zproxy_start .= "\t" . ZABBIX_PROXY_BASE . "/sbin/zabbix_proxy\n"; - - $zproxy_stop = "echo \"Stopping Zabbix Proxy LTS\"\n"; + + $zproxy_stop = "echo \"Stopping Zabbix Proxy LTS\"\n"; $zproxy_stop .= "\t/usr/bin/killall zabbix_proxy\n"; $zproxy_stop .= "\t/bin/sleep 5\n"; $zproxy_stop .= strtr($pid_check, array("\r" => "")); - /* write out rc.d start/stop file */ + // write out rc.d start/stop file write_rcfile(array( "file" => "zabbix_proxy_lts.sh", "start" => $zproxy_start, "stop" => $zproxy_stop ) ); - mwexec("{$zproxy_rcfile} restart"); - }else{ - if (file_exists($zproxy_rcfile)){ - mwexec("{$zproxy_rcfile} stop"); - unlink($zproxy_rcfile); + restart_service("zabbix_proxy_lts"); + } else { + if (is_service_running("zabbix_proxy_lts")) { + stop_service("zabbix_proxy_lts"); } + unlink_if_exists($zproxy_rcfile); } - + conf_mount_ro(); } diff --git a/config/zabbix-proxy-lts/zabbix-proxy-lts.xml b/config/zabbix-proxy-lts/zabbix-proxy-lts.xml index 15111aa5..27092e59 100644 --- a/config/zabbix-proxy-lts/zabbix-proxy-lts.xml +++ b/config/zabbix-proxy-lts/zabbix-proxy-lts.xml @@ -1,54 +1,57 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> -<copyright> + <copyright> <![CDATA[ /* $Id$ */ -/* ========================================================================== */ +/* ====================================================================================== */ /* - zabbix-proxy-lts.xml - part of the Zabbix package for pfSense - Copyright (C) 2013 Danilo G. Baio - Copyright (C) 2013 Marcello Coutinho - - All rights reserved. - */ -/* ========================================================================== */ + zabbix-proxy-lts.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2013 Danilo G. Baio + Copyright (C) 2013 Marcello Coutinho + Copyright (C) 2015 ESF, LLC + All rights reserved. +*/ +/* ====================================================================================== */ /* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +/* ====================================================================================== */ ]]> </copyright> <name>zabbixproxylts</name> <title>Services: Zabbix Proxy LTS</title> <category>Monitoring</category> - <version>0.8.5</version> + <version>0.8.6</version> <include_file>/usr/local/pkg/zabbix-proxy-lts.inc</include_file> <addedit_string>Zabbix Proxy has been created/modified.</addedit_string> <delete_string>Zabbix Proxy has been deleted.</delete_string> <additional_files_needed> <item>https://packages.pfsense.org/packages/config/zabbix-proxy-lts/zabbix-proxy-lts.inc</item> <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> </additional_files_needed> <menu> <name>Zabbix Proxy LTS</name> @@ -60,7 +63,7 @@ <name>zabbix_proxy_lts</name> <rcfile>zabbix_proxy_lts.sh</rcfile> <executable>zabbix_proxy</executable> - <description>Zabbix Proxy LTS collection daemon</description> + <description>Zabbix Proxy LTS Collection Daemon</description> </service> <tabs> <tab> @@ -69,6 +72,7 @@ <active /> </tab> </tabs> + <advanced_options>enabled</advanced_options> <fields> <field> <name>Zabbix Proxy LTS Settings</name> @@ -77,31 +81,31 @@ <field> <fielddescr>Enable</fielddescr> <fieldname>proxyenabled</fieldname> - <description>Enable Zabbix Proxy LTS service</description> + <description>Enable Zabbix Proxy LTS service.</description> <type>checkbox</type> </field> <field> <fielddescr>Server</fielddescr> <fieldname>server</fieldname> - <description>List of comma delimited IP addresses (or hostnames) of ZABBIX servers</description> + <description>List of comma delimited IP addresses (or hostnames) of ZABBIX servers.</description> <default_value>127.0.0.1</default_value> <type>input</type> <size>60</size> <required>true</required> </field> <field> - <fielddescr>Server Port</fielddescr> - <fieldname>serverport</fieldname> - <description>Port of Zabbix trapper on Zabbix server. default value 10051</description> - <default_value>10051</default_value> - <type>input</type> - <size>6</size> - <required>true</required> + <fielddescr>Server Port</fielddescr> + <fieldname>serverport</fieldname> + <description>Port of Zabbix trapper on Zabbix server. (Default: 10051)</description> + <default_value>10051</default_value> + <type>input</type> + <size>6</size> + <required>true</required> </field> <field> <fielddescr>Hostname</fielddescr> <fieldname>hostname</fieldname> - <description>Unique, case-sensitive proxy name. Make sure the proxy name is known to the server</description> + <description>Unique, case-sensitive proxy name. Make sure the proxy name is known to the server.</description> <default_value>localhost</default_value> <type>input</type> <size>50</size> @@ -110,7 +114,7 @@ <field> <fielddescr>Proxy Mode</fielddescr> <fieldname>proxymode</fieldname> - <description>Select Zabbix proxy mode (Active is default)</description> + <description>Select Zabbix proxy mode (Default: Active)</description> <type>select</type> <default_value>0</default_value> <options> @@ -135,15 +139,20 @@ <type>textarea</type> <rows>5</rows> <cols>50</cols> - <description>Advanced parameters. There are some rarely used parameters that sometimes need to be defined. Value has form, example: StartDiscoverers=10</description> + <description>Advanced parameters. There are some rarely used parameters that sometimes need to be defined. Example: StartDiscoverers=10</description> + <advancedfield/> </field> </fields> - <custom_php_install_command>sync_package_zabbix_proxy_lts();</custom_php_install_command> - <custom_php_command_before_form></custom_php_command_before_form> - <custom_php_after_head_command></custom_php_after_head_command> - <custom_php_after_form_command></custom_php_after_form_command> - <custom_php_validation_command>validate_input_zabbix_proxy_lts($_POST, $input_errors);</custom_php_validation_command> - <custom_add_php_command></custom_add_php_command> - <custom_php_resync_config_command>sync_package_zabbix_proxy_lts();</custom_php_resync_config_command> - <custom_php_deinstall_command>php_deinstall_zabbix_proxy_lts();</custom_php_deinstall_command> + <custom_php_install_command> + sync_package_zabbix_proxy_lts(); + </custom_php_install_command> + <custom_php_validation_command> + validate_input_zabbix_proxy_lts($_POST, $input_errors); + </custom_php_validation_command> + <custom_php_resync_config_command> + sync_package_zabbix_proxy_lts(); + </custom_php_resync_config_command> + <custom_php_deinstall_command> + php_deinstall_zabbix_proxy_lts(); + </custom_php_deinstall_command> </packagegui> diff --git a/pkg_config.10.xml b/pkg_config.10.xml index 32145bff..b2a42a58 100644 --- a/pkg_config.10.xml +++ b/pkg_config.10.xml @@ -39,7 +39,7 @@ </descr> <website>http://www.asterisk.org/</website> <category>Services</category> - <version>0.3.1</version> + <version>0.3.2</version> <status>Beta</status> <required_version>2.2</required_version> <config_file>https://packages.pfsense.org/packages/config/asterisk/asterisk.xml</config_file> @@ -96,7 +96,7 @@ <category>Diagnostics</category> <pkginfolink>https://forum.pfsense.org/index.php/topic,26974.0.html</pkginfolink> <config_file>https://packages.pfsense.org/packages/config/filemgr/filemgr.xml</config_file> - <version>0.2.0</version> + <version>0.2.1</version> <status>Beta</status> <required_version>2.2</required_version> <maintainer>tom@tomschaefer.org</maintainer> @@ -143,7 +143,7 @@ </descr> <website>http://haproxy.1wt.eu/</website> <category>Services</category> - <version>0.28</version> + <version>0.29</version> <status>Release</status> <required_version>2.2</required_version> <config_file>https://packages.pfsense.org/packages/config/haproxy1_5/haproxy.xml</config_file> @@ -388,14 +388,14 @@ <category>Security</category> <run_depends>bin/snort:security/snort</run_depends> <port_category>security</port_category> - <depends_on_package_pbi>snort-2.9.7.3-##ARCH##.pbi</depends_on_package_pbi> + <depends_on_package_pbi>snort-2.9.7.5-##ARCH##.pbi</depends_on_package_pbi> <build_pbi> <port>security/snort</port> <ports_after>security/barnyard2</ports_after> </build_pbi> <build_options>barnyard2_UNSET_FORCE=ODBC PGSQL PRELUDE;barnyard2_SET_FORCE=GRE IPV6 MPLS MYSQL PORT_PCAP BRO;snort_SET_FORCE=BARNYARD PERFPROFILE SOURCEFIRE GRE IPV6 NORMALIZER APPID;snort_UNSET_FORCE=PULLEDPORK FILEINSPECT HA</build_options> <config_file>https://packages.pfsense.org/packages/config/snort/snort.xml</config_file> - <version>3.2.6</version> + <version>3.2.7</version> <required_version>2.2</required_version> <status>Stable</status> <configurationfile>/snort.xml</configurationfile> @@ -546,7 +546,7 @@ <build_pbi> <port>net/siproxd</port> </build_pbi> - <version>1.0.5</version> + <version>1.0.6</version> <status>Beta</status> <required_version>2.2</required_version> <configurationfile>siproxd.xml</configurationfile> @@ -814,7 +814,7 @@ <descr>Network UPS Tools.</descr> <website>http://www.networkupstools.org/</website> <category>Network Management</category> - <version>2.0.7</version> + <version>2.0.8</version> <status>BETA</status> <required_version>2.2</required_version> <maintainer>rswagoner@gmail.com</maintainer> @@ -1523,7 +1523,7 @@ <website>http://www.zabbix.com/product.php</website> <category>Services</category> <config_file>https://packages.pfsense.org/packages/config/zabbix-agent-lts/zabbix-agent-lts.xml</config_file> - <version>0.8.5</version> + <version>0.8.6</version> <status>BETA</status> <required_version>2.2</required_version> <configurationfile>zabbix-agent-lts.xml</configurationfile> @@ -1550,7 +1550,7 @@ <website>http://www.zabbix.com/product.php</website> <category>Services</category> <config_file>https://packages.pfsense.org/packages/config/zabbix-proxy-lts/zabbix-proxy-lts.xml</config_file> - <version>0.8.5</version> + <version>0.8.6</version> <status>BETA</status> <required_version>2.2</required_version> <configurationfile>zabbix-proxy-lts.xml</configurationfile> diff --git a/pkg_config.8.xml b/pkg_config.8.xml index ce02021b..1b5d6d58 100644 --- a/pkg_config.8.xml +++ b/pkg_config.8.xml @@ -166,7 +166,7 @@ Supports ACLs for smart backend switching.]]></descr> <website>http://haproxy.1wt.eu/</website> <category>Services</category> - <version>1.5.3 pkg v 0.27</version> + <version>1.5.3 pkg v 0.29</version> <status>Release</status> <required_version>2.1</required_version> <config_file>https://packages.pfsense.org/packages/config/haproxy1_5/haproxy.xml</config_file> diff --git a/pkg_config.8.xml.amd64 b/pkg_config.8.xml.amd64 index 9751fe3e..026b18fe 100644 --- a/pkg_config.8.xml.amd64 +++ b/pkg_config.8.xml.amd64 @@ -153,7 +153,7 @@ Supports ACLs for smart backend switching.]]></descr> <website>http://haproxy.1wt.eu/</website> <category>Services</category> - <version>1.5.3 pkg v 0.27</version> + <version>1.5.3 pkg v 0.29</version> <status>Release</status> <required_version>2.1</required_version> <config_file>https://packages.pfsense.org/packages/config/haproxy1_5/haproxy.xml</config_file> |