diff options
-rw-r--r-- | config/blinkled8/blinkled.inc | 78 | ||||
-rw-r--r-- | config/blinkled8/blinkled.xml | 52 | ||||
-rw-r--r-- | config/iperf/iperf.xml | 126 | ||||
-rw-r--r-- | config/iperf/iperfserver.xml | 111 | ||||
-rw-r--r-- | config/nrpe2/nrpe2.inc | 82 | ||||
-rw-r--r-- | config/nrpe2/nrpe2.xml | 56 | ||||
-rw-r--r-- | config/servicewatchdog/services_servicewatchdog.php | 175 | ||||
-rw-r--r-- | config/servicewatchdog/services_servicewatchdog_add.php | 4 | ||||
-rw-r--r-- | config/servicewatchdog/servicewatchdog.inc | 25 | ||||
-rw-r--r-- | config/servicewatchdog/servicewatchdog.xml | 2 | ||||
-rw-r--r-- | config/servicewatchdog/servicewatchdog_cron.php | 3 | ||||
-rw-r--r-- | config/systempatches/patches.inc | 23 | ||||
-rw-r--r-- | config/systempatches/system_patches.php | 247 | ||||
-rw-r--r-- | config/systempatches/system_patches_edit.php | 28 | ||||
-rw-r--r-- | config/systempatches/systempatches.xml | 15 | ||||
-rw-r--r-- | config/widentd/widentd.xml | 189 | ||||
-rw-r--r-- | pkg_config.10.xml | 12 |
17 files changed, 736 insertions, 492 deletions
diff --git a/config/blinkled8/blinkled.inc b/config/blinkled8/blinkled.inc index 6d0da039..6e76c157 100644 --- a/config/blinkled8/blinkled.inc +++ b/config/blinkled8/blinkled.inc @@ -1,4 +1,33 @@ <?php +/* + blinkled.inc + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 Jim Pingle + 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("config.inc"); require_once("functions.inc"); function blinkled_rcfile() { @@ -28,53 +57,42 @@ EOD; conf_mount_ro(); } -function blinkled_running () { - return ((int)exec('pgrep blinkled | wc -l') > 0); -} function sync_package_blinkled() { global $config; + + blinkled_rcfile(); + $blinkled_config = $config['installedpackages']['blinkled']['config'][0]; - /* kill all instances of blinkled */ - if(blinkled_running()) { - blinkled_stop(); + /* If the service (being) disabled, stop it (if running) and do nothing else */ + if (!($blinkled_config['enable'])) { + if (is_process_running("blinkled")) { + stop_service("blinkled"); + } + return; } - /* if blinkled not running start it */ - if(!blinkled_running()) { - blinkled_start(); + /* Kill all instances of blinkled */ + if (is_process_running("blinkled")) { + stop_service("blinkled"); } - blinkled_rcfile(); + start_service("blinkled"); } function blinkled_launch($int, $led, $return = false) { $cmd = "/usr/local/bin/blinkled -i " . escapeshellarg($int) . " -l " . escapeshellarg("/dev/led/led{$led}"); - if ($return) + if ($return) { return $cmd; - else + } else { mwexec($cmd); -} - -function blinkled_start() { - global $config; - $blinkled_config = $config['installedpackages']['blinkled']['config'][0]; - if (!($blinkled_config['enable'])) - return; - - if (($blinkled_config['enable_led2']) && ($blinkled_config['iface_led2'])) - blinkled_launch(convert_friendly_interface_to_real_interface_name($blinkled_config['iface_led2']), 2); - if (($blinkled_config['enable_led3']) && ($blinkled_config['iface_led3'])) - blinkled_launch(convert_friendly_interface_to_real_interface_name($blinkled_config['iface_led3']), 3); -} - -function blinkled_stop() { - mwexec("/usr/bin/killall -9 blinkled"); + } } function validate_form_blinkled($post, &$input_errors) { /* Make sure both aren't using the same interface */ - if (($post['iface_led2']) && ($post['iface_led3']) && + if (($post['iface_led2']) && ($post['iface_led3']) && (($post['enable_led2']) && ($post['enable_led3'])) && - ($post['iface_led2'] == $post['iface_led3'])) + ($post['iface_led2'] == $post['iface_led3'])) { $input_errors[] = 'You cannot set two LEDs for a single interface. Please choose seperate interfaces.'; + } } ?> diff --git a/config/blinkled8/blinkled.xml b/config/blinkled8/blinkled.xml index ec70f392..2502f3ff 100644 --- a/config/blinkled8/blinkled.xml +++ b/config/blinkled8/blinkled.xml @@ -1,8 +1,49 @@ <?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> + <copyright> + <![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ +/* + blinkled.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009-2012 Jim Pingle + 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. +*/ +/* ====================================================================================== */ + ]]> + </copyright> <title>Interfaces: Assign LEDs</title> <name>blinkled</name> - <version>0.4.1</version> + <version>0.4.5</version> <savetext>Save</savetext> <include_file>/usr/local/pkg/blinkled.inc</include_file> <menu> @@ -14,13 +55,12 @@ <additional_files_needed> <item>https://packages.pfsense.org/packages/config/blinkled8/blinkled.inc</item> <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> </additional_files_needed> <service> <name>blinkled</name> <rcfile>blinkled.sh</rcfile> <executable>blinkled</executable> - <description>Blinks LEDs to indicate network activity</description> + <description>Network Activity LED Indicator Daemon</description> </service> <fields> <field> @@ -28,7 +68,7 @@ <fieldname>enable</fieldname> <type>checkbox</type> <enablefields>enable_led2,enable_led3,iface_led2,iface_led3</enablefields> - <description>if this is enabled, it will use LED #2 and #3 to + <description>If this is enabled, it will use LED #2 and #3 to indicate network activity. Be aware, however, that this will possibly consume some system resources in the process.</description> </field> @@ -41,7 +81,7 @@ <fielddescr>Interface For LED #2</fielddescr> <fieldname>iface_led2</fieldname> <type>interfaces_selection</type> - <description>Pick an interface to blink for activity on LED #2</description> + <description>Pick an interface to blink for activity on LED #2.</description> </field> <field> <fielddescr>Enable LED #3</fielddescr> @@ -52,7 +92,7 @@ <fielddescr>Interface For LED #3</fielddescr> <fieldname>iface_led3</fieldname> <type>interfaces_selection</type> - <description>Pick an interface to blink for activity on LED #3</description> + <description>Pick an interface to blink for activity on LED #3.</description> </field> </fields> <custom_php_validation_command> diff --git a/config/iperf/iperf.xml b/config/iperf/iperf.xml index 4312cf25..182d866b 100644 --- a/config/iperf/iperf.xml +++ b/config/iperf/iperf.xml @@ -1,52 +1,48 @@ <?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[ + <copyright> + <![CDATA[ /* $Id$ */ -/* ========================================================================== */ +/* ====================================================================================== */ /* - iperf.xml - part of pfSense (http://www.pfSense.com) - Copyright (C) 2007 to whom it may belong - All rights reserved. - - Based on m0n0wall (http://m0n0.ch/wall) - Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>. - All rights reserved. - */ -/* ========================================================================== */ + iperf.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2015 Renato Botelho + 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. - */ -/* ========================================================================== */ - ]]> - </copyright> - <description>Describe your package here</description> - <requirements>Describe your package requirements here</requirements> - <faq>Currently there are no FAQ items provided.</faq> + + 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>iperf</name> - <version>1.7.0</version> + <version>2.0.5.2</version> <title>iperf: Client</title> <preoutput>yes</preoutput> <donotsave>true</donotsave> @@ -57,10 +53,10 @@ <configfile>iperf.xml</configfile> </menu> <service> - <name>iperf</name> - <executable>iperf</executable> + <name>iperf</name> + <executable>iperf</executable> <description>iperf network performance testing daemon/client</description> - </service> + </service> <tabs> <tab> <text>Client</text> @@ -85,13 +81,13 @@ <field> <fielddescr>Port</fielddescr> <fieldname>port</fieldname> - <description>Enter the port that iperf will connect to. (default 5001)</description> + <description>Enter the port that iperf will connect to. (Default is 5001.)</description> <type>input</type> </field> <field> <fielddescr>Protocol</fielddescr> <fieldname>protocol</fieldname> - <description>Choose whether to use TCP or UDP here. (default is TCP)</description> + <description>Choose whether to use TCP or UDP here. (Default is TCP.)</description> <type>select</type> <options> <option> @@ -107,7 +103,7 @@ <field> <fielddescr>Output format</fielddescr> <fieldname>format</fieldname> - <description>Choose to display output in bits/sec or bytes/sec. (default is bits)</description> + <description>Choose to display output in bits/sec or bytes/sec. (Default is bits.)</description> <type>select</type> <options> <option> @@ -123,13 +119,13 @@ <field> <fielddescr>Interval</fielddescr> <fieldname>interval</fieldname> - <description>Enter the desired interval between bandwidth, jitter and loss reports here. (default is 0 for no periodic reports)</description> + <description>Enter the desired interval between bandwidth, jitter and loss reports here. (Default is 0 for no periodic reports.)</description> <type>input</type> </field> <field> <fielddescr>Buffer length</fielddescr> <fieldname>length</fieldname> - <description>Enter the length of buffers to read or write here. (default 8KB for TCP, 1470B for UDP)</description> + <description>Enter the length of buffers to read or write here. (Default 8KB for TCP, 1470B for UDP.)</description> <type>input</type> </field> <field> @@ -141,21 +137,37 @@ <field> <fielddescr>UDP Bandwidth</fielddescr> <fieldname>udpbandwidth</fieldname> - <description>Enter the UDP bandwidth to send at in bits/sec. (default is 1Mbit/sec)</description> + <description>Enter the UDP bandwidth to send at in bits/sec. (Default is 1Mbit/sec.)</description> <type>input</type> </field> </fields> <custom_add_php_command> - mwexec("killall iperf"); + <![CDATA[ + mwexec("/usr/bin/killall iperf"); $iperf_options = ""; - if($_POST['protocol'] == "udp") $iperf_options .= " -u"; - if($_POST['format'] == "bytes") $iperf_options .= " -f A"; - if($_POST['interval'] != "") $iperf_options .= " -i " . escapeshellarg($_POST['interval']); - if($_POST['length'] != "") $iperf_options .= " -l " . escapeshellarg($_POST['length']); - if($_POST['window'] != "") $iperf_options .= " -w " . escapeshellarg($_POST['window']); - if($_POST['udpbandwidth'] != "") $iperf_options .= " -b " . escapeshellarg($_POST['udpbandwidth']); - if($_POST['port'] != "") $iperf_options .= " -p " . escapeshellarg($_POST['port']); + if ($_POST['protocol'] == "udp") { + $iperf_options .= " -u"; + } + if ($_POST['format'] == "bytes") { + $iperf_options .= " -f A"; + } + if ($_POST['interval'] != "") { + $iperf_options .= " -i " . escapeshellarg($_POST['interval']); + } + if ($_POST['length'] != "") { + $iperf_options .= " -l " . escapeshellarg($_POST['length']); + } + if ($_POST['window'] != "") { + $iperf_options .= " -w " . escapeshellarg($_POST['window']); + } + if ($_POST['udpbandwidth'] != "") { + $iperf_options .= " -b " . escapeshellarg($_POST['udpbandwidth']); + } + if ($_POST['port'] != "") { + $iperf_options .= " -p " . escapeshellarg($_POST['port']); + } $iperf_options .= " -c " . escapeshellarg($_POST['hostname']); system("/usr/local/bin/iperf" . $iperf_options); + ]]> </custom_add_php_command> </packagegui> diff --git a/config/iperf/iperfserver.xml b/config/iperf/iperfserver.xml index f0dc074a..524e8366 100644 --- a/config/iperf/iperfserver.xml +++ b/config/iperf/iperfserver.xml @@ -2,51 +2,47 @@ <!DOCTYPE packagegui SYSTEM "./schema/packages.dtd"> <?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> <packagegui> - <copyright> - <![CDATA[ + <copyright> + <![CDATA[ /* $Id$ */ -/* ========================================================================== */ +/* ====================================================================================== */ /* - iperfserver.xml - part of pfSense (http://www.pfSense.com) - Copyright (C) 2007 to whom it may belong - All rights reserved. - - Based on m0n0wall (http://m0n0.ch/wall) - Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>. - All rights reserved. - */ -/* ========================================================================== */ + iperfserver.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2015 Renato Botelho + 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. - */ -/* ========================================================================== */ - ]]> - </copyright> - <description>Describe your package here</description> - <requirements>Describe your package requirements here</requirements> - <faq>Currently there are no FAQ items provided.</faq> + + 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>iperf</name> - <version>1.7.0</version> + <version>2.0.5.2</version> <title>iperf: Server</title> <preoutput>yes</preoutput> <donotsave>true</donotsave> @@ -71,13 +67,13 @@ <field> <fielddescr>Port</fielddescr> <fieldname>port</fieldname> - <description>Enter the port that iperf will listen for connections on. (default 5001)</description> + <description>Enter the port that iperf will listen for connections on. (Default is 5001.)</description> <type>input</type> </field> <field> <fielddescr>Protocol</fielddescr> <fieldname>protocol</fieldname> - <description>Choose whether to use TCP or UDP here. (default is TCP)</description> + <description>Choose whether to use TCP or UDP here. (Default is TCP.)</description> <type>select</type> <options> <option> @@ -93,7 +89,7 @@ <field> <fielddescr>Output format</fielddescr> <fieldname>format</fieldname> - <description>Choose to display output in bits/sec or bytes/sec. (default is bits)</description> + <description>Choose to display output in bits/sec or bytes/sec. (Default is bits.)</description> <type>select</type> <options> <option> @@ -109,13 +105,13 @@ <field> <fielddescr>Interval</fielddescr> <fieldname>interval</fieldname> - <description>Enter the desired interval between bandwidth, jitter and loss reports here. (default is 0 for no periodic reports)</description> + <description>Enter the desired interval between bandwidth, jitter and loss reports here. (Default is 0 for no periodic reports.)</description> <type>input</type> </field> <field> <fielddescr>Buffer length</fielddescr> <fieldname>length</fieldname> - <description>Enter the length of buffers to read or write here. (default 8KB for TCP, 1470B for UDP)</description> + <description>Enter the length of buffers to read or write here. (Default 8KB for TCP, 1470B for UDP.)</description> <type>input</type> </field> <field> @@ -126,16 +122,29 @@ </field> </fields> <custom_add_php_command> - mwexec("killall iperf"); + <![CDATA[ + mwexec("/usr/bin/killall iperf"); $iperf_options = ""; - if($_POST['protocol'] == "udp") $iperf_options .= " -u"; - if($_POST['format'] == "bytes") $iperf_options .= " -f A"; - if($_POST['interval'] != "") $iperf_options .= " -i " . escapeshellarg($_POST['interval']); - if($_POST['length'] != "") $iperf_options .= " -l " . escapeshellarg($_POST['length']); - if($_POST['window'] != "") $iperf_options .= " -w " . escapeshellarg($_POST['window']); - if($_POST['port'] != "") $iperf_options .= " -p " . escapeshellarg($_POST['port']); + if ($_POST['protocol'] == "udp") { + $iperf_options .= " -u"; + } + if ($_POST['format'] == "bytes") { + $iperf_options .= " -f A"; + } + if ($_POST['interval'] != "") { + $iperf_options .= " -i " . escapeshellarg($_POST['interval']); + } + if ($_POST['length'] != "") { + $iperf_options .= " -l " . escapeshellarg($_POST['length']); + } + if ($_POST['window'] != "") { + $iperf_options .= " -w " . escapeshellarg($_POST['window']); + } + if ($_POST['port'] != "") { + $iperf_options .= " -p " . escapeshellarg($_POST['port']); + } $iperf_options .= " -s"; mwexec_bg("/usr/local/bin/iperf" . $iperf_options); + ]]> </custom_add_php_command> </packagegui> - diff --git a/config/nrpe2/nrpe2.inc b/config/nrpe2/nrpe2.inc index 7d541e6b..b5e6a7d9 100644 --- a/config/nrpe2/nrpe2.inc +++ b/config/nrpe2/nrpe2.inc @@ -1,42 +1,49 @@ <?php - -/** - * Author: Erik Kristensen - * Email: erik@erikkristensen.com - * - * Developed for: pfSense.com - * - * Copyright (c) 2009, pfSense.com - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in thedocumentation and/or other materials provided with the distribution. - * Neither the name of the <ORGANIZATION> nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - */ - +/* + nrpe2.inc + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 Erik Kristensen <erik@erikkristensen.com> + Copyright (C) 2011-2013 Jim Pingle + 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('filter.inc'); -$pfs_version = substr(trim(file_get_contents("/etc/version")),0,3); +global $pfs_version; +$pfs_version = substr(trim(file_get_contents("/etc/version")), 0, 3); -if ($pfs_version == "2.0") { - define('NRPE_BASE', '/usr/local'); -} else { +if ($pfs_version == "2.1" || $pfs_version == "2.2") { define('NRPE_BASE', '/usr/pbi/nrpe-' . php_uname("m")); +} else { + define('NRPE_BASE', '/usr/local'); } -if ($pfs_version == "2.1") +if ($pfs_version == "2.1") { define('NRPE_BINARY', NRPE_BASE . "/sbin/nrpe2"); -else +} else { define('NRPE_BINARY', "/usr/local/sbin/nrpe2"); +} define('NRPE_CONFIG_DIR', NRPE_BASE . '/etc'); define('NRPE_RCFILE', '/usr/local/etc/rc.d/nrpe2.sh'); @@ -202,22 +209,21 @@ connection_timeout=300 {$commands} EOD; if (defined($config['installedpackages']['nrpe2']['config'][0]['server_address'])) { - $server_address = $config['installedpackages']['nrpe2']['config'][0]['server_address']; - $nrpe_cfg .= "server_address={$server_address}"; - } + $server_address = $config['installedpackages']['nrpe2']['config'][0]['server_address']; + $nrpe_cfg .= "server_address={$server_address}"; + } fwrite($fd, $nrpe_cfg); fclose($fd); conf_mount_ro(); } function nrpe2_custom_php_service() { - global $g, $config; + global $config; if ($config['installedpackages']['nrpe2']['config'][0]['enabled'] == "on") { - exec(NRPE_RCFILE . " restart"); - } - else { - exec(NRPE_RCFILE . " stop"); + restart_service("nrpe2"); + } else { + stop_service("nrpe2"); } } diff --git a/config/nrpe2/nrpe2.xml b/config/nrpe2/nrpe2.xml index 8d6f0b09..1204e8ec 100644 --- a/config/nrpe2/nrpe2.xml +++ b/config/nrpe2/nrpe2.xml @@ -1,9 +1,50 @@ <?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> + <copyright> + <![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ +/* + nrpe2.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 Erik Kristensen + Copyright (C) 2011-2013 Jim Pingle + 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. +*/ +/* ====================================================================================== */ + ]]> + </copyright> <description>Nagios NRPEv2</description> - <requirements>Describe your package requirements here</requirements> <name>nrpe2</name> - <version>2.2</version> + <version>2.2.1</version> <title>NRPEv2</title> <aftersaveredirect>/pkg_edit.php?xml=nrpe2.xml&id=0</aftersaveredirect> <include_file>/usr/local/pkg/nrpe2.inc</include_file> @@ -22,7 +63,6 @@ <configpath>installedpackages->package->nrpe2</configpath> <additional_files_needed> <prefix>/usr/local/pkg/</prefix> - <chmod>077</chmod> <item>https://packages.pfsense.org/packages/config/nrpe2/nrpe2.inc</item> </additional_files_needed> <fields> @@ -34,7 +74,7 @@ <field> <fielddescr>Enabled</fielddescr> <fieldname>enabled</fieldname> - <description>Check this to enable NRPE daemon</description> + <description>Check this to enable NRPE daemon.</description> <type>checkbox</type> </field> <field> @@ -52,20 +92,20 @@ <field> <fielddescr>Bind IP Address</fielddescr> <fieldname>server_address</fieldname> - <description>Set this to the IP address of the interface you want the daemon to listen on. (optional)</description> + <description>Set this to the IP address of the interface you want the daemon to listen on. (Optional)</description> <type>input</type> </field> <field> <fielddescr>Nagios Server(s)</fielddescr> <fieldname>allowed_hosts</fieldname> - <description>IP Address of Nagios server, usualy a single IP, but if multiple delimit by comma</description> + <description>IP Address of Nagios server. Usually a single IP; multiple IPs must be delimited by comma.</description> <type>input</type> <required/> </field> <field> <fielddescr>Allow Arguments (dont_blame_nrpe)</fielddescr> <fieldname>dont_blame_nrpe</fieldname> - <description>Check this to enable accept NRPE arguments (Default: 0)</description> + <description>Check this to enable accept NRPE arguments. (Default: 0)</description> <type>checkbox</type> </field> @@ -118,7 +158,7 @@ <rowhelperfield> <fielddescr>Extra Options (Example: -s Z \$ARG1\$ \$ARG2\$)</fielddescr> <fieldname>extra</fieldname> - <description>Warning! Use at your own risk, incorrect settings here may prevent NRPE from starting!</description> + <description><![CDATA[<strong>Warning! Use at your own risk, incorrect settings here may prevent NRPE from starting!</strong>]]></description> <type>input</type> <size>25</size> </rowhelperfield> diff --git a/config/servicewatchdog/services_servicewatchdog.php b/config/servicewatchdog/services_servicewatchdog.php index bd4d4442..6c91b98e 100644 --- a/config/servicewatchdog/services_servicewatchdog.php +++ b/config/servicewatchdog/services_servicewatchdog.php @@ -41,14 +41,16 @@ require_once("functions.inc"); require_once("service-utils.inc"); require_once("servicewatchdog.inc"); -if (!is_array($config['installedpackages']['servicewatchdog']['item'])) +if (!is_array($config['installedpackages']['servicewatchdog']['item'])) { $config['installedpackages']['servicewatchdog']['item'] = array(); +} $a_pwservices = &$config['installedpackages']['servicewatchdog']['item']; /* if a custom message has been passed along, lets process it */ -if ($_GET['savemsg']) +if ($_GET['savemsg']) { $savemsg = $_GET['savemsg']; +} if ($_GET['act'] == "del") { if ($a_pwservices[$_GET['id']]) { @@ -65,13 +67,15 @@ if (isset($_POST['Update'])) { if (is_array($_POST['notifies']) && count($_POST['notifies'])) { /* Check each service and set the notify flag only for those chosen, remove those that are unset. */ foreach ($a_pwservices as $idx => $thisservice) { - if (!is_array($thisservice)) + if (!is_array($thisservice)) { continue; + } if (in_array($idx, $_POST['notifies'])) { $a_pwservices[$idx]['notify'] = true; } else { - if (isset($a_pwservices[$idx]['notify'])) + if (isset($a_pwservices[$idx]['notify'])) { unset($a_pwservices[$idx]['notify']); + } } } } else { /* No notifies selected, remove them all. */ @@ -111,26 +115,31 @@ if (isset($_POST['del_x'])) { /* copy all services < $movebtn and not selected */ for ($i = 0; $i < $movebtn; $i++) { - if (!in_array($i, $_POST['pwservices'])) + if (!in_array($i, $_POST['pwservices'])) { $a_pwservices_new[] = $a_pwservices[$i]; + } } /* copy all selected services */ for ($i = 0; $i < count($a_pwservices); $i++) { - if ($i == $movebtn) + if ($i == $movebtn) { continue; - if (in_array($i, $_POST['pwservices'])) + } + if (in_array($i, $_POST['pwservices'])) { $a_pwservices_new[] = $a_pwservices[$i]; + } } /* copy $movebtn service */ - if ($movebtn < count($a_pwservices)) + if ($movebtn < count($a_pwservices)) { $a_pwservices_new[] = $a_pwservices[$movebtn]; + } /* copy all services > $movebtn and not selected */ for ($i = $movebtn+1; $i < count($a_pwservices); $i++) { - if (!in_array($i, $_POST['pwservices'])) + if (!in_array($i, $_POST['pwservices'])) { $a_pwservices_new[] = $a_pwservices[$i]; + } } $a_pwservices = $a_pwservices_new; servicewatchdog_cron_job(); @@ -141,7 +150,7 @@ if (isset($_POST['del_x'])) { } $closehead = false; -$pgtitle = array(gettext("Services"),gettext("Service Watchdog")); +$pgtitle = array(gettext("Services"), gettext("Service Watchdog")); include("head.inc"); ?> @@ -160,83 +169,99 @@ include("head.inc"); <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services to monitor"> <tr><td><div id="mainarea"> <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area"> -<tr><td colspan="8" align="center"> -<?php echo gettext("This page allows you to select services to be monitored so that they may be automatically restarted if they crash or are stopped."); ?> -<br/><br/> -</td></tr> -<tr id="frheader"> -<td width="5%" class="list"> </td> -<td width="5%" class="listhdrr">Notify</td> -<td width="30%" class="listhdrr"><?=gettext("Service Name");?></td> -<td width="60%" class="listhdrr"><?=gettext("Description");?></td> -<td width="5%" class="list"> -<table border="0" cellspacing="0" cellpadding="1" summary="buttons"> - <tr><td width="17"> - <?php if (count($a_pwservices) == 0): ?> - <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected services");?>" border="0" alt="delete" /> - <?php else: ?> - <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected services"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected services?");?>')" /> - <?php endif; ?> - </td> - <td><a href="services_servicewatchdog_add.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new service"); ?>" alt="add" /></a></td> + <tr> + <td colspan="8" align="center"> + <?php echo gettext("This page allows you to select services to be monitored so that they may be automatically restarted if they crash or are stopped."); ?> + <br/><br/> + </td> + </tr> + <tr id="frheader"> + <td width="5%" class="list"> </td> + <td width="5%" class="listhdrr">Notify</td> + <td width="30%" class="listhdrr"><?=gettext("Service Name");?></td> + <td width="60%" class="listhdrr"><?=gettext("Description");?></td> + <td width="5%" class="list"> + <table border="0" cellspacing="0" cellpadding="1" summary="buttons"> + <tr> + <td width="17"> + <?php if (count($a_pwservices) == 0): ?> + <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected services");?>" border="0" alt="delete" /> + <?php else: ?> + <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected services"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected services?");?>')" /> + <?php endif; ?> + </td> + <td><a href="services_servicewatchdog_add.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new service"); ?>" alt="add" /></a></td> + </tr> + </table> + </td> </tr> -</table> -</td> -</tr> <?php $nservices = $i = 0; foreach ($a_pwservices as $thisservice): ?> <tr valign="top" id="fr<?=$nservices;?>"> - <td class="listt"><input type="checkbox" id="frc<?=$nservices;?>" name="pwservices[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$nservices;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" /></td> - <td class="listlr"><input type="checkbox" id="notify<?=$nservices;?>" name="notifies[]" value="<?=$i;?>" style="margin: 0; padding: 0; width: 15px; height: 15px;" <?PHP if (isset($thisservice['notify'])) echo 'checked="CHECKED"';?>/></td> - <td class="listr" onclick="fr_toggle(<?=$nservices;?>)" id="frd<?=$nservices;?>" ondblclick="document.location='services_servicewatchdog_add.php?id=<?=$nservices;?>';"> - <?=$thisservice['name'];?> - </td> - <td class="listr" onclick="fr_toggle(<?=$nservices;?>)" id="frd<?=$nservices;?>" ondblclick="document.location='services_servicewatchdog_add.php?id=<?=$nservices;?>';"> - <?=$thisservice['description'];?> - </td> - <td valign="middle" class="list" nowrap> - <table border="0" cellspacing="0" cellpadding="1" summary="add"> - <tr> - <td><input onmouseover="fr_insline(<?=$nservices;?>, true)" onmouseout="fr_insline(<?=$nservices;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected services before this service");?>" height="17" type="image" width="17" border="0" /></td> - <td align="center" valign="middle"><a href="services_servicewatchdog.php?act=del&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this service?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete service");?>" alt="delete" /></a></td> - </tr> - </table> - </td></tr> -<?php $i++; $nservices++; endforeach; ?> - <tr> - <td class="list" colspan="4"></td> - <td class="list" valign="middle" nowrap> - <table border="0" cellspacing="0" cellpadding="1" summary="add"> + <td class="listt"><input type="checkbox" id="frc<?=$nservices;?>" name="pwservices[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$nservices;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" /></td> + <td class="listlr"><input type="checkbox" id="notify<?=$nservices;?>" name="notifies[]" value="<?=$i;?>" style="margin: 0; padding: 0; width: 15px; height: 15px;" <?PHP if (isset($thisservice['notify'])) echo 'checked="CHECKED"';?>/></td> + <td class="listr" onclick="fr_toggle(<?=$nservices;?>)" id="frd<?=$nservices;?>" ondblclick="document.location='services_servicewatchdog_add.php?id=<?=$nservices;?>';"> + <?=$thisservice['name'];?> + </td> + <td class="listr" onclick="fr_toggle(<?=$nservices;?>)" id="frd<?=$nservices;?>" ondblclick="document.location='services_servicewatchdog_add.php?id=<?=$nservices;?>';"> + <?=$thisservice['description'];?> + </td> + <td valign="middle" class="list" nowrap> + <table border="0" cellspacing="0" cellpadding="1" summary="add"> + <tr> + <td><input onmouseover="fr_insline(<?=$nservices;?>, true)" onmouseout="fr_insline(<?=$nservices;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected services before this service");?>" height="17" type="image" width="17" border="0" /></td> + <td align="center" valign="middle"><a href="services_servicewatchdog.php?act=del&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this service?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete service");?>" alt="delete" /></a></td> + </tr> + </table> + </td> + </tr> +<?php + $i++; + $nservices++; +endforeach; +?> <tr> - <td><?php if ($nservices == 0): ?><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected services to end"); ?>" border="0" alt="move" /><?php else: ?><input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" width="17" height="17" title="<?=gettext("move selected services to end");?>" border="0" alt="move" /><?php endif; ?></td> + <td class="list" colspan="4"></td> + <td class="list" valign="middle" nowrap> + <table border="0" cellspacing="0" cellpadding="1" summary="add"> + <tr> + <td><?php if ($nservices == 0): ?><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected services to end"); ?>" border="0" alt="move" /><?php else: ?><input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" width="17" height="17" title="<?=gettext("move selected services to end");?>" border="0" alt="move" /><?php endif; ?></td> + </tr> + <tr> + <td width="17"> + <?php if (count($a_pwservices) == 0): ?> + <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected services");?>" border="0" alt="delete" /> + <?php else: ?> + <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected services"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected services?");?>')" /> + <?php endif; ?> + </td> + <td><a href="services_servicewatchdog_add.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new service"); ?>" alt="add" /></a></td> + </tr> + </table> + </td> </tr> <tr> - <td width="17"> - <?php if (count($a_pwservices) == 0): ?> - <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected services");?>" border="0" alt="delete" /> - <?php else: ?> - <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected services"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected services?");?>')" /> - <?php endif; ?> - </td> - <td><a href="services_servicewatchdog_add.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new service"); ?>" alt="add" /></a></td> + <td></td> + <td colspan="4"> + <?php echo gettext("Check Notify next to services to perform an e-mail notification when the service is restarted. Configure e-mail notifications to receive the alerts."); ?> + <br/> + <input name="Update" type="submit" class="formbtn" value="<?=gettext("Update Notification Settings"); ?>" /> + <br/> + <br/> + </td> + <td></td> </tr> - </table> - </td> + <tr> + <td></td> + <td colspan="4"> + <?php echo gettext("Click to select a service and use the arrows to re-order them in the list. Higher services are checked first."); ?> + </td> + <td></td> </tr> - <tr><td></td><td colspan="4"> - <?php echo gettext("Check Notify next to services to perform an e-mail notification when the service is restarted. Configure e-mail notifications to receive the alerts."); ?> - <br/> - <input name="Update" type="submit" class="formbtn" value="<?=gettext("Update Notification Settings"); ?>" /> - <br/> - <br/> - </td><td></td></tr> - <tr><td></td><td colspan="4"> - <?php echo gettext("Click to select a service and use the arrows to re-order them in the list. Higher services are checked first."); ?> - </td><td></td></tr> - </table> +</table> </div></td></tr> </table> </form> diff --git a/config/servicewatchdog/services_servicewatchdog_add.php b/config/servicewatchdog/services_servicewatchdog_add.php index 11e5e284..10f24797 100644 --- a/config/servicewatchdog/services_servicewatchdog_add.php +++ b/config/servicewatchdog/services_servicewatchdog_add.php @@ -55,7 +55,7 @@ unset($input_errors); if ($_POST) { if (!is_numeric($_POST['svcid'])) - + return; if (!isset($system_services[$_POST['svcid']])) { $input_errors[] = gettext("The supplied service appears to be invalid."); @@ -72,7 +72,7 @@ if ($_POST) { } $closehead = false; -$pgtitle = array(gettext("Services"),gettext("servicewatchdog"), gettext("Add")); +$pgtitle = array(gettext("Services"), gettext("servicewatchdog"), gettext("Add")); include("head.inc"); ?> diff --git a/config/servicewatchdog/servicewatchdog.inc b/config/servicewatchdog/servicewatchdog.inc index 5b638836..817b92e0 100644 --- a/config/servicewatchdog/servicewatchdog.inc +++ b/config/servicewatchdog/servicewatchdog.inc @@ -7,23 +7,27 @@ require_once("notices.inc"); function servicewatchdog_service_matches($svc1, $svc2) { /* If the arrays are equal, it must be the same service. */ - if ($svc1 == $svc2) + if ($svc1 == $svc2) { return true; + } /* If the names are different, they must not be the same. */ - if ($svc1['name'] != $svc2['name']) + if ($svc1['name'] != $svc2['name']) { return false; + } switch ($svc1['name']) { case "openvpn": - if (($svc1['mode'] == $svc2['mode']) && ($svc1['vpnid'] == $svc2['vpnid'])) + if (($svc1['mode'] == $svc2['mode']) && ($svc1['vpnid'] == $svc2['vpnid'])) { return true; - else + } else { return false; + } break; case "captiveportal": - if ($svc1['zone'] == $svc2['zone']) + if ($svc1['zone'] == $svc2['zone']) { return true; - else + } else { return false; + } break; default: /* Other services must be the same if the name matches. */ @@ -39,12 +43,14 @@ function servicewatchdog_is_service_watched($svc) { $a_pwservices = &$config['installedpackages']['servicewatchdog']['item']; $blacklisted_services = array("cron"); - if (empty($svc['name']) || in_array($svc['name'], $blacklisted_services)) + if (empty($svc['name']) || in_array($svc['name'], $blacklisted_services)) { return true; + } foreach ($a_pwservices as $a_svc) { - if (servicewatchdog_service_matches($svc, $a_svc)) + if (servicewatchdog_service_matches($svc, $a_svc)) { return true; + } } return false; } @@ -77,8 +83,9 @@ function servicewatchdog_check_services() { $descr = strlen($svc['description']) > 50 ? substr($svc['description'], 0, 50) . "..." : $svc['description']; $error_message = "Service Watchdog detected service {$svc['name']} stopped. Restarting {$svc['name']} ({$descr})"; log_error($error_message); - if (isset($svc['notify'])) + if (isset($svc['notify'])) { notify_via_smtp($error_message); + } service_control_start($svc['name'], $svc); } } diff --git a/config/servicewatchdog/servicewatchdog.xml b/config/servicewatchdog/servicewatchdog.xml index 685ba997..5a1aebbb 100644 --- a/config/servicewatchdog/servicewatchdog.xml +++ b/config/servicewatchdog/servicewatchdog.xml @@ -40,7 +40,7 @@ <requirements>None</requirements> <faq>Monitors for stopped services and restarts them.</faq> <name>Service Watchdog</name> - <version>1.6</version> + <version>1.7</version> <title>Services: Service Watchdog</title> <include_file>/usr/local/pkg/servicewatchdog.inc</include_file> <menu> diff --git a/config/servicewatchdog/servicewatchdog_cron.php b/config/servicewatchdog/servicewatchdog_cron.php index 004afd97..9979917e 100644 --- a/config/servicewatchdog/servicewatchdog_cron.php +++ b/config/servicewatchdog/servicewatchdog_cron.php @@ -6,8 +6,9 @@ require_once("servicewatchdog.inc"); global $g; /* Do nothing at bootup. */ -if ($g['booting'] || file_exists("{$g['varrun_path']}/booting")) +if ($g['booting'] || file_exists("{$g['varrun_path']}/booting")) { return; +} servicewatchdog_check_services(); ?>
\ No newline at end of file diff --git a/config/systempatches/patches.inc b/config/systempatches/patches.inc index 60c9a391..f47324c4 100644 --- a/config/systempatches/patches.inc +++ b/config/systempatches/patches.inc @@ -55,10 +55,11 @@ function patch_commit($patch, $action, $test=false, $fulldetail=false) { $full_patch_command = "{$patch_cmd} --directory={$directory} {$force} {$pathstrip} {$filename} {$check} {$direction} {$whitespace}"; conf_mount_rw(); patch_write($patch); - if (!$fulldetail) + if (!$fulldetail) { $output = (mwexec($full_patch_command, true) == 0); - else + } else { $output = $full_patch_command . "\n\n" . shell_exec($full_patch_command . ' 2>&1'); + } patch_erase($patch); conf_mount_ro(); return $output; @@ -158,8 +159,9 @@ function bootup_apply_patches() { foreach ($a_patches as $patch) { /* Skip the patch if it should not be automatically applied. */ - if (!isset($patch['autoapply'])) + if (!isset($patch['autoapply'])) { continue; + } /* If the patch can be reverted it is already applied, so skip it. */ if (!patch_test_revert($patch)) { /* Only attempt to apply if it can be applied. */ @@ -173,12 +175,15 @@ function bootup_apply_patches() { function patch_add_shellcmd() { global $config; $a_earlyshellcmd = &$config['system']['earlyshellcmd']; - if (!is_array($a_earlyshellcmd)) + if (!is_array($a_earlyshellcmd)) { $a_earlyshellcmd = array(); + } $found = false; - foreach ($a_earlyshellcmd as $idx => $cmd) - if (stristr($cmd, "apply_patches.php")) + foreach ($a_earlyshellcmd as $idx => $cmd) { + if (stristr($cmd, "apply_patches.php")) { $found = true; + } + } if (!$found) { $a_earlyshellcmd[] = "/usr/local/bin/php -f /usr/local/bin/apply_patches.php"; write_config("System Patches package added a shellcmd"); @@ -188,8 +193,9 @@ function patch_add_shellcmd() { function patch_remove_shellcmd() { global $config; $a_earlyshellcmd = &$config['system']['earlyshellcmd']; - if (!is_array($a_earlyshellcmd)) + if (!is_array($a_earlyshellcmd)) { $a_earlyshellcmd = array(); + } $removed = false; foreach ($a_earlyshellcmd as $idx => $cmd) { if (stristr($cmd, "apply_patches.php")) { @@ -197,8 +203,9 @@ function patch_remove_shellcmd() { $removed = true; } } - if ($removed) + if ($removed) { write_config("System Patches package removed a shellcmd"); + } } ?> diff --git a/config/systempatches/system_patches.php b/config/systempatches/system_patches.php index 43c8c22b..feeee07e 100644 --- a/config/systempatches/system_patches.php +++ b/config/systempatches/system_patches.php @@ -41,14 +41,16 @@ require_once("functions.inc"); require_once("itemid.inc"); require_once("patches.inc"); -if (!is_array($config['installedpackages']['patches']['item'])) +if (!is_array($config['installedpackages']['patches']['item'])) { $config['installedpackages']['patches']['item'] = array(); +} $a_patches = &$config['installedpackages']['patches']['item']; /* if a custom message has been passed along, lets process it */ -if ($_GET['savemsg']) +if ($_GET['savemsg']) { $savemsg = $_GET['savemsg']; +} if ($_POST) { $pconfig = $_POST; @@ -116,26 +118,31 @@ if (isset($_POST['del_x'])) { /* copy all patches < $movebtn and not selected */ for ($i = 0; $i < $movebtn; $i++) { - if (!in_array($i, $_POST['patch'])) + if (!in_array($i, $_POST['patch'])) { $a_patches_new[] = $a_patches[$i]; + } } /* copy all selected patches */ for ($i = 0; $i < count($a_patches); $i++) { - if ($i == $movebtn) + if ($i == $movebtn) { continue; - if (in_array($i, $_POST['patch'])) + } + if (in_array($i, $_POST['patch'])) { $a_patches_new[] = $a_patches[$i]; + } } /* copy $movebtn patch */ - if ($movebtn < count($a_patches)) + if ($movebtn < count($a_patches)) { $a_patches_new[] = $a_patches[$movebtn]; + } /* copy all patches > $movebtn and not selected */ for ($i = $movebtn+1; $i < count($a_patches); $i++) { - if (!in_array($i, $_POST['patch'])) + if (!in_array($i, $_POST['patch'])) { $a_patches_new[] = $a_patches[$i]; + } } $a_patches = $a_patches_new; write_config(); @@ -164,41 +171,47 @@ include("head.inc"); <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system patches"> <tr><td><div id="mainarea"> <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area"> -<tr><td colspan="8" align="center"> -<?php echo gettext("This page allows you to add patches, either from the official code repository or ones pasted in from e-mail or other sources."); ?> -<br/><br/> -<strong><?php echo gettext("Use with caution!"); ?></strong> -<br/><br/> + <tr> + <td colspan="8" align="center"> + <?php echo gettext("This page allows you to add patches, either from the official code repository or ones pasted in from e-mail or other sources."); ?> + <br/><br/> + <strong><?php echo gettext("Use with caution!"); ?></strong> + <br/><br/> <?php if (!empty($fulldetail)): ?> -</td></tr> -<tr><td></td><td colspan="7" align="left">Output of full patch <?php echo $_GET['fulltest']; ?> test: -<pre><?php echo $fulldetail; ?></pre> -<a href="system_patches.php">Close</a><br/><br/> + </td> + </tr> + <tr> + <td></td> + <td colspan="7" align="left">Output of full patch <?php echo $_GET['fulltest']; ?> test: + <pre><?php echo $fulldetail; ?></pre> + <a href="system_patches.php">Close</a><br/><br/> <?php endif; ?> -</td></tr> -<tr id="frheader"> -<td width="5%" class="list"> </td> -<td width="5%" class="listhdrr"><?=gettext("Description");?></td> -<td width="60%" class="listhdrr"><?=gettext("URL/ID");?></td> -<td width="5%" class="listhdrr"><?=gettext("Fetch");?></td> -<td width="5%" class="listhdrr"><?=gettext("Test");?></td> -<td width="5%" class="listhdrr"><?=gettext("Apply");?></td> -<td width="5%" class="listhdr"><?=gettext("Revert");?></td> -<td width="5%" class="listhdr"><?=gettext("Auto Apply");?></td> -<td width="5%" class="list"> -<table border="0" cellspacing="0" cellpadding="1" summary="buttons"> - <tr><td width="17"> - <?php if (count($a_patches) == 0): ?> - <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected patches");?>" border="0" alt="delete" /> - <?php else: ?> - <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected patches"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected patches?");?>')" /> - <?php endif; ?> - </td> - <td><a href="system_patches_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new patch"); ?>" alt="add" /></a></td> + </td> + </tr> + <tr id="frheader"> + <td width="5%" class="list"> </td> + <td width="5%" class="listhdrr"><?=gettext("Description");?></td> + <td width="60%" class="listhdrr"><?=gettext("URL/ID");?></td> + <td width="5%" class="listhdrr"><?=gettext("Fetch");?></td> + <td width="5%" class="listhdrr"><?=gettext("Test");?></td> + <td width="5%" class="listhdrr"><?=gettext("Apply");?></td> + <td width="5%" class="listhdr"><?=gettext("Revert");?></td> + <td width="5%" class="listhdr"><?=gettext("Auto Apply");?></td> + <td width="5%" class="list"> + <table border="0" cellspacing="0" cellpadding="1" summary="buttons"> + <tr> + <td width="17"> + <?php if (count($a_patches) == 0): ?> + <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected patches");?>" border="0" alt="delete" /> + <?php else: ?> + <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected patches"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected patches?");?>')" /> + <?php endif; ?> + </td> + <td><a href="system_patches_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new patch"); ?>" alt="add" /></a></td> + </tr> + </table> + </td> </tr> -</table> -</td> -</tr> <?php $npatches = $i = 0; @@ -208,83 +221,93 @@ foreach ($a_patches as $thispatch): ?> <tr valign="top" id="fr<?=$npatches;?>"> - <td class="listt"><input type="checkbox" id="frc<?=$npatches;?>" name="patch[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$npatches;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" /></td> - <td class="listlr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> - <?=$thispatch['descr'];?> - </td> - <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> - - <?php - if (!empty($thispatch['location'])) - echo $thispatch['location']; - elseif (!empty($thispatch['patch'])) - echo gettext("Saved Patch"); - ?> - </td> - <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> - <?php if (empty($thispatch['patch'])): ?> - <a href="system_patches.php?id=<?=$i;?>&act=fetch"><?php echo gettext("Fetch"); ?></a> - <?php elseif (!empty($thispatch['location'])): ?> - <a href="system_patches.php?id=<?=$i;?>&act=fetch"><?php echo gettext("Re-Fetch"); ?></a> - <?php endif; ?> - </td> - <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> - <?php if (!empty($thispatch['patch'])): ?> - <a href="system_patches.php?id=<?=$i;?>&act=test"><?php echo gettext("Test"); ?></a> - <?php endif; ?> - </td> - <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> - <?php if ($can_apply): ?> - <a href="system_patches.php?id=<?=$i;?>&act=apply"><?php echo gettext("Apply"); ?></a> - <?php endif; ?> - </td> - <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> - <?php if ($can_revert): ?> - <a href="system_patches.php?id=<?=$i;?>&act=revert"><?php echo gettext("Revert"); ?></a> - <?php endif; ?> - </td> - <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> - <?= isset($thispatch['autoapply']) ? "Yes" : "No" ?> - </td> - <td valign="middle" class="list" nowrap> - <table border="0" cellspacing="0" cellpadding="1" summary="edit"> - <tr> - <td><input onmouseover="fr_insline(<?=$npatches;?>, true)" onmouseout="fr_insline(<?=$npatches;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected patches before this patch");?>" height="17" type="image" width="17" border="0" /></td> - <td><a href="system_patches_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit patch"); ?>" alt="edit" /></a></td> - </tr> - <tr> - <td align="center" valign="middle"><a href="system_patches.php?act=del&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this patch?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete patch");?>" alt="delete" /></a></td> - <td></td> - </tr> - </table> - </td></tr> -<?php $i++; $npatches++; endforeach; ?> - <tr> - <td class="list" colspan="8"></td> - <td class="list" valign="middle" nowrap> - <table border="0" cellspacing="0" cellpadding="1" summary="edit"> - <tr> - <td><?php if ($npatches == 0): ?><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected patches to end"); ?>" border="0" alt="move" /><?php else: ?><input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" width="17" height="17" title="<?=gettext("move selected patches to end");?>" border="0" alt="move" /><?php endif; ?></td> + <td class="listt"><input type="checkbox" id="frc<?=$npatches;?>" name="patch[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$npatches;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" /></td> + <td class="listlr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> + <?=$thispatch['descr'];?> + </td> + <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> + + <?php + if (!empty($thispatch['location'])) { + echo $thispatch['location']; + } elseif (!empty($thispatch['patch'])) { + echo gettext("Saved Patch"); + } + ?> + </td> + <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> + <?php if (empty($thispatch['patch'])): ?> + <a href="system_patches.php?id=<?=$i;?>&act=fetch"><?php echo gettext("Fetch"); ?></a> + <?php elseif (!empty($thispatch['location'])): ?> + <a href="system_patches.php?id=<?=$i;?>&act=fetch"><?php echo gettext("Re-Fetch"); ?></a> + <?php endif; ?> + </td> + <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> + <?php if (!empty($thispatch['patch'])): ?> + <a href="system_patches.php?id=<?=$i;?>&act=test"><?php echo gettext("Test"); ?></a> + <?php endif; ?> + </td> + <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> + <?php if ($can_apply): ?> + <a href="system_patches.php?id=<?=$i;?>&act=apply"><?php echo gettext("Apply"); ?></a> + <?php endif; ?> + </td> + <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> + <?php if ($can_revert): ?> + <a href="system_patches.php?id=<?=$i;?>&act=revert"><?php echo gettext("Revert"); ?></a> + <?php endif; ?> + </td> + <td class="listr" onclick="fr_toggle(<?=$npatches;?>)" id="frd<?=$npatches;?>" ondblclick="document.location='system_patches_edit.php?id=<?=$npatches;?>';"> + <?= isset($thispatch['autoapply']) ? "Yes" : "No" ?> + </td> + <td valign="middle" class="list" nowrap> + <table border="0" cellspacing="0" cellpadding="1" summary="edit"> + <tr> + <td><input onmouseover="fr_insline(<?=$npatches;?>, true)" onmouseout="fr_insline(<?=$npatches;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected patches before this patch");?>" height="17" type="image" width="17" border="0" /></td> + <td><a href="system_patches_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit patch"); ?>" alt="edit" /></a></td> + </tr> + <tr> + <td align="center" valign="middle"><a href="system_patches.php?act=del&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this patch?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete patch");?>" alt="delete" /></a></td> + <td></td> + </tr> + </table> + </td> </tr> +<?php + $i++; + $npatches++; +endforeach; +?> <tr> - <td width="17"> - <?php if (count($a_patches) == 0): ?> - <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected patches");?>" border="0" alt="delete" /> - <?php else: ?> - <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected patches"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected patches?");?>')" /> - <?php endif; ?> - </td> - <td><a href="system_patches_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new patch"); ?>" alt="add" /></a></td> + <td class="list" colspan="8"></td> + <td class="list" valign="middle" nowrap> + <table border="0" cellspacing="0" cellpadding="1" summary="edit"> + <tr> + <td><?php if ($npatches == 0): ?><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected patches to end"); ?>" border="0" alt="move" /><?php else: ?><input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" width="17" height="17" title="<?=gettext("move selected patches to end");?>" border="0" alt="move" /><?php endif; ?></td> + </tr> + <tr> + <td width="17"> + <?php if (count($a_patches) == 0): ?> + <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected patches");?>" border="0" alt="delete" /> + <?php else: ?> + <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected patches"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected patches?");?>')" /> + <?php endif; ?> + </td> + <td><a href="system_patches_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new patch"); ?>" alt="add" /></a></td> + </tr> + </table> + </td> </tr> - </table> - </td> + <tr> + <td></td> + <td colspan="6"> + <?php echo gettext("NOTE: Each patch is tested, and the appropriate action is shown. If neither 'Apply' or 'Revert' shows up, the patch cannot be used (check the pathstrip and whitespace options)."); ?> + <br/><br/> + <?php echo gettext("Use the 'Test' link to see if a patch can be applied or reverted. You can reorder patches so that higher patches apply later than lower patches."); ?> + </td> + <td></td> </tr> - <tr><td></td><td colspan="6"> - <?php echo gettext("NOTE: Each patch is tested, and the appropriate action is shown. If neither 'Apply' or 'Revert' shows up, the patch cannot be used (check the pathstrip and whitespace options)."); ?> - <br/><br/> - <?php echo gettext("Use the 'Test' link to see if a patch can be applied or reverted. You can reorder patches so that higher patches apply later than lower patches."); ?> - </td><td></td></tr> - </table> +</table> </div></td></tr> </table> </form> diff --git a/config/systempatches/system_patches_edit.php b/config/systempatches/system_patches_edit.php index 3e63038e..9e1f7a49 100644 --- a/config/systempatches/system_patches_edit.php +++ b/config/systempatches/system_patches_edit.php @@ -46,8 +46,9 @@ if (!is_array($config['installedpackages']['patches']['item'])) { $a_patches = &$config['installedpackages']['patches']['item']; $id = $_GET['id']; -if (isset($_POST['id'])) +if (isset($_POST['id'])) { $id = $_POST['id']; +} if (isset($_GET['dup'])) { $id = $_GET['dup']; @@ -69,8 +70,9 @@ if (isset($id) && $a_patches[$id]) { $pconfig['ignorewhitespace'] = true; } -if (isset($_GET['dup'])) +if (isset($_GET['dup'])) { unset($id); +} unset($input_errors); @@ -87,10 +89,11 @@ if ($_POST) { } $pf_version=substr(trim(file_get_contents("/etc/version")),0,3); - if ($pf_version < 2.1) + if ($pf_version < 2.1) { $input_errors = eval('do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors); return $input_errors;'); - else + } else { do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + } if (!empty($_POST['location']) && !is_commit_id($_POST['location']) && !is_URL($_POST['location'])) { $input_errors[] = gettext("The supplied commit ID/URL appears to be invalid."); @@ -111,10 +114,11 @@ if ($_POST) { /* Strip DOS style carriage returns from textarea input */ $thispatch['patch'] = base64_encode(str_replace("\r", "", $_POST['patch'])); } - if (is_github_url($thispatch['location']) && ($_POST['pathstrip'] == 0)) + if (is_github_url($thispatch['location']) && ($_POST['pathstrip'] == 0)) { $thispatch['pathstrip'] = 1; - else + } else { $thispatch['pathstrip'] = $_POST['pathstrip']; + } $thispatch['basedir'] = empty($_POST['basedir']) ? "/" : $_POST['basedir']; $thispatch['ignorewhitespace'] = isset($_POST['ignorewhitespace']); $thispatch['autoapply'] = isset($_POST['autoapply']); @@ -125,18 +129,20 @@ if ($_POST) { } // Update the patch entry now - if (isset($id) && $a_patches[$id]) + if (isset($id) && $a_patches[$id]) { $a_patches[$id] = $thispatch; - else { - if (is_numeric($after)) + } else { + if (is_numeric($after)) { array_splice($a_patches, $after+1, 0, array($thispatch)); - else + } else { $a_patches[] = $thispatch; + } } write_config(); - if ($thispatch['autoapply']) + if ($thispatch['autoapply']) { patch_add_shellcmd(); + } header("Location: system_patches.php"); return; } diff --git a/config/systempatches/systempatches.xml b/config/systempatches/systempatches.xml index 3cc1354a..ad7f5953 100644 --- a/config/systempatches/systempatches.xml +++ b/config/systempatches/systempatches.xml @@ -10,17 +10,18 @@ part of pfSense (http://www.pfSense.com) Copyright (C) 2012 Jim Pingle 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. + 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 @@ -32,7 +33,7 @@ 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> @@ -40,7 +41,7 @@ <requirements>None</requirements> <faq>Applies patches supplied by the user to the firewall.</faq> <name>System Patches</name> - <version>1.0.3</version> + <version>1.0.4</version> <title>System: Patches</title> <include_file>/usr/local/pkg/patches.inc</include_file> <menu> diff --git a/config/widentd/widentd.xml b/config/widentd/widentd.xml index ca73d436..27a8ffe8 100644 --- a/config/widentd/widentd.xml +++ b/config/widentd/widentd.xml @@ -1,58 +1,54 @@ <?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[ + <copyright> + <![CDATA[ /* $Id$ */ -/* ========================================================================== */ +/* ====================================================================================== */ /* - authng.xml - part of pfSense (http://www.pfSense.com) - Copyright (C) 2007 to whom it may belong - All rights reserved. - - Based on m0n0wall (http://m0n0.ch/wall) - Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>. - All rights reserved. - */ -/* ========================================================================== */ + widentd.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 Bill Marquette + 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. - */ -/* ========================================================================== */ - ]]> - </copyright> - <description>Describe your package here</description> - <requirements>Describe your package requirements here</requirements> - <faq>Currently there are no FAQ items provided.</faq> + 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>widentd</name> - <version>1.03_1</version> + <version>1.0.4</version> <title>Services: widentd</title> <menu> <name>widentd</name> <tooltiptext>Modify widentd settings.</tooltiptext> <section>Services</section> - <url>pkg_edit.php?xml=widentd.xml&id=0</url> + <url>pkg_edit.php?xml=widentd.xml&id=0</url> </menu> <service> <name>widentd</name> @@ -62,61 +58,114 @@ <configpath>installedpackages->package->$packagename->configuration->settings</configpath> <fields> <field> - <fielddescr>Listening interface</fielddescr> - <fieldname>interface</fieldname> - <description>Enter the desired listening interface here.</description> - <type>interfaces_selection</type> + <fielddescr>Enable widentd daemon</fielddescr> + <fieldname>enable</fieldname> + <type>checkbox</type> + </field> + <field> + <fielddescr>Listening interface</fielddescr> + <fieldname>interface</fieldname> + <description> + <![CDATA[ + Enter the desired listening interface here.<br /> + (Default: WAN) + ]]> + </description> + <type>interfaces_selection</type> + <default_value>wan</default_value> + <required/> </field> <field> - <fielddescr>Username</fielddescr> - <fieldname>username</fieldname> - <description>Enter the username you'd like displayed via widentd.</description> - <type>input</type> + <fielddescr>Username</fielddescr> + <fieldname>username</fieldname> + <description> + <![CDATA[ + Enter the username you'd like displayed via widentd. Allowed characters: [a-zA-Z] and "." only.<br /> + (Defaults to 'user' if left empty.) + ]]> + </description> + <type>input</type> </field> <field> - <fielddescr>System name</fielddescr> - <fieldname>sysname</fieldname> - <description>Enter the system name you'd like displayed via widentd</description> - <type>input</type> - <value>pfSense</value> + <fielddescr>System name</fielddescr> + <fieldname>sysname</fieldname> + <description> + <![CDATA[ + Enter the system name you'd like displayed via widentd. Allowed characters: [a-zA-Z] only.<br /> + (Defaults to 'UNIX' if left empty.) + ]]> + </description> + <type>input</type> </field> - </fields> + </fields> <custom_php_global_functions> + <![CDATA[ function sync_package_widentd() { conf_mount_rw(); config_lock(); global $config; - if (!isset($config['installedpackages']['widentd']['config'][0]['interface'])) { - $config['installedpackages']['widentd']['config'][0]['interface'] = 'WAN'; - } - if (!isset($config['installedpackages']['widentd']['config'][0]['username'])) { - $config['installedpackages']['widentd']['config'][0]['username'] = 'user'; - } - if (!isset($config['installedpackages']['widentd']['config'][0]['sysname'])) { - $config['installedpackages']['widentd']['config'][0]['sysname'] = 'UNIX'; - } + + /* Write widentd.sh */ $int = convert_friendly_interface_to_real_interface_name($config['installedpackages']['widentd']['config'][0]['interface']); $ip = find_interface_ip($int); - $user = $config['installedpackages']['widentd']['config'][0]['username']; - $system = $config['installedpackages']['widentd']['config'][0]['sysname']; + $user = $config['installedpackages']['widentd']['config'][0]['username'] ?: 'user'; + $system = $config['installedpackages']['widentd']['config'][0]['sysname'] ?: 'UNIX'; $start = "/usr/local/sbin/widentd -u {$user} -o {$system} -i {$ip}"; $stop = "/usr/bin/killall widentd"; write_rcfile(array( "file" => "widentd.sh", "start" => $start, - "stop" => $stop + "stop" => $stop ) ); - restart_service("widentd"); - conf_mount_ro(); + + /* If the service is (being) disabled, stop it (if running) and do nothing else */ + if (!($config['installedpackages']['widentd']['config'][0][enable])) { + if (is_process_running("widentd")) { + stop_service("widentd"); + } + return; + } else { + restart_service("widentd"); + } config_unlock(); + conf_mount_ro(); } + + + function validate_input_widentd($post, &$input_errors) { + /* Only allow ^[a-zA-Z\.]+$ otherwise the daemon will not start; see widentd manpage */ + if (($post['username'] != "") && !preg_match("/^[a-zA-Z\.]+$/", $post['username'])) { + $input_errors[] = 'Username may only contain uppercase and lowercase letters [a-zA-Z] and "." character.'; + } + + /* Technically, ^[A-Z][A-Z0-9\-.\/]+[A-Z0-9]$ should be valid characters here + https://www.iana.org/assignments/operating-system-names/operating-system-names.xhtml + However this is not supported by widentd; the service will not start. + */ + if (($post['sysname'] != "") && !preg_match("/^[a-zA-Z]+$/", $post['sysname'])) { + $input_errors[] .= 'System name may only contain uppercase and lowercase letters [a-zA-Z].'; + } + + /* Check for IPv6-only interfaces */ + $int = convert_friendly_interface_to_real_interface_name($post['interface']); + $ip = find_interface_ip($int); + if (!is_ipaddrv4($ip)) { + $input_errors[] .= 'The selected interface has no IPv4 configured. Widentd does not support IPv6.'; + } + } + ]]> </custom_php_global_functions> <custom_add_php_command> sync_package_widentd(); </custom_add_php_command> + <custom_php_resync_config_command> + sync_package_widentd(); + </custom_php_resync_config_command> <custom_php_install_command> unlink_if_exists("/usr/local/etc/rc.d/widentd.sh"); </custom_php_install_command> + <custom_php_validation_command> + validate_input_widentd($_POST, $input_errors); + </custom_php_validation_command> </packagegui> - diff --git a/pkg_config.10.xml b/pkg_config.10.xml index 80add0c3..6a8e7a4c 100644 --- a/pkg_config.10.xml +++ b/pkg_config.10.xml @@ -865,7 +865,7 @@ <website>http://www.webweaving.org/widentd</website> <category>Services</category> <depends_on_package_pbi>widentd-1.03_2-##ARCH##.pbi</depends_on_package_pbi> - <version>1.03_2</version> + <version>1.0.4</version> <status>Stable</status> <pkginfolink>https://doc.pfsense.org/index.php/Widentd_package</pkginfolink> <required_version>2.2</required_version> @@ -952,7 +952,7 @@ <category>Network Management</category> <config_file>https://packages.pfsense.org/packages/config/iperf/iperf.xml</config_file> <depends_on_package_pbi>iperf-2.0.5-##ARCH##.pbi</depends_on_package_pbi> - <version>2.0.5_1</version> + <version>2.0.5.2</version> <status>Beta</status> <pkginfolink>https://doc.pfsense.org/index.php/Iperf_package</pkginfolink> <required_version>2.2</required_version> @@ -1191,7 +1191,7 @@ <name>blinkled</name> <descr>Allows you to use LEDs for network activity on supported platforms (ALIX, WRAP, Soekris, etc)</descr> <category>System</category> - <version>0.4.4</version> + <version>0.4.5</version> <status>Beta</status> <maintainer>jimp@pfsense.org</maintainer> <required_version>2.2</required_version> @@ -1280,7 +1280,7 @@ <config_file>https://packages.pfsense.org/packages/config/nrpe2/nrpe2.xml</config_file> <version>2.15_5 v2.2_4</version> <status>Beta</status> - <required_version>2.2</required_version> + <required_version>2.2.1</required_version> <maintainer>erik@erikkristensen.com</maintainer> <configurationfile>nrpe2.xml</configurationfile> <maximum_version>2.2.999</maximum_version> @@ -1352,7 +1352,7 @@ <internal_name>System_Patches</internal_name> <descr>A package to apply and maintain custom system patches.</descr> <maintainer>jimp@pfsense.org</maintainer> - <version>1.0.3</version> + <version>1.0.4</version> <category>System</category> <status>RELEASE</status> <config_file>https://packages.pfsense.org/packages/config/systempatches/systempatches.xml</config_file> @@ -1588,7 +1588,7 @@ <internal_name>Service_Watchdog</internal_name> <descr>Monitors for stopped services and restarts them.</descr> <maintainer>jimp@pfsense.org</maintainer> - <version>1.6</version> + <version>1.7</version> <category>Services</category> <status>Release</status> <config_file>https://packages.pfsense.org/packages/config/servicewatchdog/servicewatchdog.xml</config_file> |