diff options
Diffstat (limited to 'config')
49 files changed, 2014 insertions, 1527 deletions
diff --git a/config/backup/backup.inc b/config/backup/backup.inc index 748b7fc6..e395756a 100644 --- a/config/backup/backup.inc +++ b/config/backup/backup.inc @@ -3,10 +3,10 @@ /* /* ========================================================================== */ /* - backup.inc - Copyright (C) 2008 Mark J Crane - All rights reserved. - */ + backup.inc + Copyright (C) 2008 Mark J Crane + All rights reserved. +*/ /* ========================================================================== */ /* Redistribution and use in source and binary forms, with or without @@ -34,28 +34,28 @@ if (!function_exists("byte_convert")) { function byte_convert( $bytes ) { - if ($bytes<=0) + if ($bytes <= 0) { return '0 Byte'; + } - $convention=1000; //[1000->10^x|1024->2^x] - $s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB'); - $e=floor(log($bytes,$convention)); - return round($bytes/pow($convention,$e),2).' '.$s[$e]; + $convention = 1000; //[1000->10^x|1024->2^x] + $s = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB'); + $e = floor(log($bytes, $convention)); + return round($bytes/pow($convention, $e), 2) . ' ' . $s[$e]; } } - -function backup_sync_package_php() -{ - global $config; - if($config['installedpackages']['backup']['config'] != "") { +function backup_sync_package_php() { + + global $config; + if ($config['installedpackages']['backup']['config'] != "") { conf_mount_rw(); - foreach($config['installedpackages']['backup']['config'] as $rowhelper) { + foreach ($config['installedpackages']['backup']['config'] as $rowhelper) { if ($rowhelper['enabled'] != "false") { //$tmp_php = base64_decode($rowhelper['php']); if (strlen($tmp_php) > 0) { - $tmp .= "// name: ".$rowhelper['name']." \n"; - $tmp .= "// description: ".$rowhelper['description']." \n\n"; + $tmp .= "// name: " . $rowhelper['name'] . " \n"; + $tmp .= "// description: " . $rowhelper['description'] . " \n\n"; $tmp .= base64_decode($rowhelper['php']); $tmp .= "\n"; } @@ -65,16 +65,13 @@ function backup_sync_package_php() } } - -function backup_sync_package() -{ - global $config; +function backup_sync_package() { + global $config; backup_sync_package_php(); } -function backup_install_command() -{ +function backup_install_command() { global $config; conf_mount_rw(); @@ -87,7 +84,7 @@ function backup_install_command() backup_sync_package(); conf_mount_ro(); - + } ?> diff --git a/config/backup/backup.php b/config/backup/backup.php index 3cada9b3..d4debcd3 100644 --- a/config/backup/backup.php +++ b/config/backup/backup.php @@ -32,7 +32,6 @@ require("/usr/local/pkg/backup.inc"); $a_backup = &$config['installedpackages']['backup']['config']; - if ($_GET['act'] == "del") { if ($_GET['type'] == 'backup') { if ($a_backup[$_GET['id']]) { @@ -58,13 +57,13 @@ if ($_GET['a'] == "download") { if (count($a_backup) > 0) { $backup_cmd = 'tar --create --verbose --gzip --file '.$tmp.$filename.' --directory / '; foreach ($a_backup as $ent) { - if ($ent['enabled'] =="true"){ + if ($ent['enabled'] == "true") { //htmlspecialchars($ent['name']); //htmlspecialchars($ent['path']); //htmlspecialchars($ent['description']); $backup_cmd .= htmlspecialchars($ent['path']).' '; } - $i++; + $i++; } //echo $backup_cmd; //exit; system($backup_cmd); @@ -74,7 +73,7 @@ if ($_GET['a'] == "download") { $fd = fopen($tmp.$filename, "rb"); header("Content-Type: binary/octet-stream"); header("Content-Length: " . filesize($tmp.$filename)); - header('Content-Disposition: attachment; filename="'.$filename.'"'); + header('Content-Disposition: attachment; filename="' . $filename . '"'); fpassthru($fd); conf_mount_ro(); @@ -90,13 +89,12 @@ if ($_GET['a'] == "other") { //extract the tgz file if (file_exists('/root/backup/'.$filename)) { - //echo "The file $filename exists"; - system('cd /; tar xvpfz /root/backup/'.$filename.' '); - header( 'Location: backup.php?savemsg=Backup+has+been+restored.' ) ; - } - else { + //echo "The file $filename exists"; + system('cd /; tar xvpfz /root/backup/'.$filename.' '); + header( 'Location: backup.php?savemsg=Backup+has+been+restored.' ) ; + } else { header( 'Location: backup.php?savemsg=Restore+failed.+Backup+file+not+found.' ) ; - } + } conf_mount_ro(); exit; } @@ -111,7 +109,6 @@ if (($_POST['submit'] == "Upload") && is_uploaded_file($_FILES['ulfile']['tmp_na conf_mount_ro(); } - include("head.inc"); ?> @@ -210,91 +207,85 @@ echo " <form action='backup.php' method='post' name='iform' id='iform'>\n"; if ($config_change == 1) { write_config(); - $config_change = 0; + $config_change = 0; } -//if ($savemsg) print_info_box($savemsg); +//if ($savemsg) print_info_box($savemsg); //if (file_exists($d_hostsdirty_path)): echo"<p>"; //print_info_box_np("This is an info box."); //echo"<br />"; -//endif; +//endif; ?> - <table width="100%" border="0" cellpadding="0" cellspacing="0"> +<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="30%" class="listhdrr">Name</td> <td width="20%" class="listhdrr">Enabled</td> <td width="40%" class="listhdr">Description</td> <td width="10%" class="list"> - - <table border="0" cellspacing="0" cellpadding="1"> - <tr> - <td width="17"></td> - <td valign="middle"><a href="backup_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td> - </tr> - </table> - + <table border="0" cellspacing="0" cellpadding="1"> + <tr> + <td width="17"></td> + <td valign="middle"><a href="backup_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td> + </tr> + </table> </td> </tr> + <?php - <?php - $i = 0; if (count($a_backup) > 0) { foreach ($a_backup as $ent) { ?> - <tr> - <td class="listr" ondblclick="document.location='backup_edit.php?id=<?=$i;?>';"> - <?=$ent['name'];?> - </td> - <td class="listr" ondblclick="document.location='backup_edit.php?id=<?=$i;?>';"> - <?=$ent['enabled'];?> - </td> - <td class="listbg" ondblclick="document.location='backup_edit.php?id=<?=$i;?>';"> - <font color="#FFFFFF"><?=htmlspecialchars($ent['description']);?> - </td> - <td valign="middle" nowrap class="list"> - <table border="0" cellspacing="0" cellpadding="1"> + <tr> + <td class="listr" ondblclick="document.location='backup_edit.php?id=<?=$i;?>';"> + <?=$ent['name'];?> + </td> + <td class="listr" ondblclick="document.location='backup_edit.php?id=<?=$i;?>';"> + <?=$ent['enabled'];?> + </td> + <td class="listbg" ondblclick="document.location='backup_edit.php?id=<?=$i;?>';"> + <font color="#FFFFFF"><?=htmlspecialchars($ent['description']);?> + </td> + <td valign="middle" nowrap class="list"> + <table border="0" cellspacing="0" cellpadding="1"> <tr> - <td valign="middle"><a href="backup_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td> - <td><a href="backup_edit.php?type=backup&act=del&id=<?=$i;?>" onclick="return confirm('Do you really want to delete this?')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td> + <td valign="middle"><a href="backup_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td> + <td><a href="backup_edit.php?type=backup&act=del&id=<?=$i;?>" onclick="return confirm('Do you really want to delete this?')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td> </tr> - </table> - </td> - </tr> - <?php - - $i++; + </table> + </td> + </tr> + <?php + $i++; } } ?> <tr> - <td class="list" colspan="3"></td> - <td class="list"> - <table border="0" cellspacing="0" cellpadding="1"> - <tr> - <td width="17"></td> - <td valign="middle"><a href="backup_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td> - </tr> - </table> - </td> + <td class="list" colspan="3"></td> + <td class="list"> + <table border="0" cellspacing="0" cellpadding="1"> + <tr> + <td width="17"></td> + <td valign="middle"><a href="backup_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td> + </tr> + </table> + </td> </tr> - <tr> - <td class="list" colspan="3"></td> - <td class="list"></td> + <td class="list" colspan="3"></td> + <td class="list"></td> </tr> - </table> +</table> </form> - <br> <br> <br> @@ -310,7 +301,6 @@ if ($config_change == 1) { </div> - <?php include("fend.inc"); ?> </body> </html> diff --git a/config/backup/backup.xml b/config/backup/backup.xml index ae1adf52..f9cf36b9 100644 --- a/config/backup/backup.xml +++ b/config/backup/backup.xml @@ -2,46 +2,46 @@ <!DOCTYPE packagegui SYSTEM "./schema/packages.dtd"> <?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> <packagegui> - <copyright> - <![CDATA[ + <copyright> + <![CDATA[ /* $Id$ */ /* ========================================================================== */ /* - backup.xml - Copyright (C) 2008 Mark J Crane - All rights reserved. - */ + backup.xml + Copyright (C) 2008 Mark J Crane + 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> - <description>Backup</description> - <requirements>Describe your package requirements here</requirements> - <faq>Currently there are no FAQ items provided.</faq> + ]]> + </copyright> + <description>Backup</description> + <requirements>Describe your package requirements here</requirements> + <faq>Currently there are no FAQ items provided.</faq> <name>Backup Settings</name> - <version>0.1.6</version> + <version>0.1.8</version> <title>Settings</title> <include_file>/usr/local/pkg/backup.inc</include_file> <menu> diff --git a/config/backup/backup_edit.php b/config/backup/backup_edit.php index c7dbc38a..fbaa9096 100755 --- a/config/backup/backup_edit.php +++ b/config/backup/backup_edit.php @@ -1,4 +1,4 @@ -<?php +<?php /* $Id$ */ /* @@ -66,7 +66,7 @@ if ($_POST) { unset($input_errors); $pconfig = $_POST; - + if (!$input_errors) { $ent = array(); @@ -76,11 +76,10 @@ if ($_POST) { $ent['description'] = $_POST['description']; if (isset($id) && $a_backup[$id]) { - //update - $a_backup[$id] = $ent; - } - else { - //add + //update + $a_backup[$id] = $ent; + } else { + //add $a_backup[] = $ent; } @@ -99,7 +98,7 @@ include("head.inc"); <script type="text/javascript" language="JavaScript"> function show_advanced_config() { - document.getElementById("showadvancedbox").innerHTML=''; + document.getElementById("showadvancedbox").innerHTML = ''; aodiv = document.getElementById('showadvanced'); aodiv.style.display = "block"; </script> @@ -124,87 +123,87 @@ function show_advanced_config() { </table> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> - <td class="tabcont" > - - <!-- - <table width="100%" border="0" cellpadding="6" cellspacing="0"> - <tr> - <td><p><span class="vexpl"><span class="red"><strong>PHP<br> - </strong></span> - </p></td> - </tr> - </table> - --> - <br /> - - <form action="backup_edit.php" method="post" name="iform" id="iform"> - <table width="100%" border="0" cellpadding="6" cellspacing="0"> + <td class="tabcont" > - <tr> - <td width="25%" valign="top" class="vncellreq">Name</td> - <td width="75%" class="vtable"> - <input name="name" type="text" class="formfld" id="name" size="40" value="<?=htmlspecialchars($pconfig['name']);?>"> - </td> - </tr> - - <tr> - <td width="22%" valign="top" class="vncellreq">Path</td> - <td width="78%" class="vtable"> - <input name="path" type="text" class="formfld" id="path" size="40" value="<?=htmlspecialchars($pconfig['path']);?>"> - </td> - </tr> - <tr> - <td width="22%" valign="top" class="vncellreq">Enabled</td> - <td width="78%" class="vtable"> - <?php - echo " <select name='enabled' class='formfld'>\n"; - echo " <option></option>\n"; - switch (htmlspecialchars($pconfig['enabled'])) { - case "true": - echo " <option value='true' selected='yes'>true</option>\n"; - echo " <option value='false'>false</option>\n"; - break; - case "false": - echo " <option value='true'>true</option>\n"; - echo " <option value='false' selected='yes'>false</option>\n"; - - break; - default: - echo " <option value='true' selected='yes'>true</option>\n"; - echo " <option value='false'>false</option>\n"; - } - echo " </select>\n"; - ?> - </td> - </tr> - <tr> - <td width="25%" valign="top" class="vncellreq">Description</td> - <td width="75%" class="vtable"> - <input name="description" type="text" class="formfld" id="description" size="40" value="<?=htmlspecialchars($pconfig['description']);?>"> - <br><span class="vexpl">Enter the description here.<br></span> - </td> - </tr> - - <tr> - <td valign="top"> </td> - <td> - <input name="Submit" type="submit" class="formbtn" value="Save"> <input class="formbtn" type="button" value="Cancel" onclick="history.back()"> - <?php if (isset($id) && $a_backup[$id]): ?> - <input name="id" type="hidden" value="<?=$id;?>"> - <?php endif; ?> - </td> - </tr> + <!-- + <table width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td><p><span class="vexpl"><span class="red"><strong>PHP<br> + </strong></span> + </p></td> + </tr> </table> - </form> - - <br> - <br> - <br> - <br> - <br> - <br> - - </td> + --> + <br /> + + <form action="backup_edit.php" method="post" name="iform" id="iform"> + <table width="100%" border="0" cellpadding="6" cellspacing="0"> + + <tr> + <td width="25%" valign="top" class="vncellreq">Name</td> + <td width="75%" class="vtable"> + <input name="name" type="text" class="formfld" id="name" size="40" value="<?=htmlspecialchars($pconfig['name']);?>"> + </td> + </tr> + + <tr> + <td width="22%" valign="top" class="vncellreq">Path</td> + <td width="78%" class="vtable"> + <input name="path" type="text" class="formfld" id="path" size="40" value="<?=htmlspecialchars($pconfig['path']);?>"> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncellreq">Enabled</td> + <td width="78%" class="vtable"> + <?php + echo " <select name='enabled' class='formfld'>\n"; + echo " <option></option>\n"; + switch (htmlspecialchars($pconfig['enabled'])) { + case "true": + echo " <option value='true' selected='yes'>true</option>\n"; + echo " <option value='false'>false</option>\n"; + break; + case "false": + echo " <option value='true'>true</option>\n"; + echo " <option value='false' selected='yes'>false</option>\n"; + + break; + default: + echo " <option value='true' selected='yes'>true</option>\n"; + echo " <option value='false'>false</option>\n"; + } + echo " </select>\n"; + ?> + </td> + </tr> + <tr> + <td width="25%" valign="top" class="vncellreq">Description</td> + <td width="75%" class="vtable"> + <input name="description" type="text" class="formfld" id="description" size="40" value="<?=htmlspecialchars($pconfig['description']);?>"> + <br><span class="vexpl">Enter the description here.<br></span> + </td> + </tr> + + <tr> + <td valign="top"> </td> + <td> + <input name="Submit" type="submit" class="formbtn" value="Save"> <input class="formbtn" type="button" value="Cancel" onclick="history.back()"> + <?php if (isset($id) && $a_backup[$id]): ?> + <input name="id" type="hidden" value="<?=$id;?>"> + <?php endif; ?> + </td> + </tr> + </table> + </form> + + <br> + <br> + <br> + <br> + <br> + <br> + + </td> </tr> </table> diff --git a/config/blinkled/binaries/blinkled b/config/blinkled/binaries/blinkled Binary files differdeleted file mode 100644 index 2a8681a5..00000000 --- a/config/blinkled/binaries/blinkled +++ /dev/null diff --git a/config/blinkled/blinkled.inc b/config/blinkled/blinkled.inc deleted file mode 100644 index ef2b6db8..00000000 --- a/config/blinkled/blinkled.inc +++ /dev/null @@ -1,75 +0,0 @@ -<?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 sync_package_blinkled() { - global $config; - $blinkled_config = $config['installedpackages']['blinkled']['config'][0]; - /* Kill all instances of blinkled */ - if (is_process_running("blinkled")) { - mwexec("/usr/bin/killall -9 blinkled"); - } - /* If blinkled is not running, start it */ - if (!is_process_running("blinkled")) { - blinkled_start(); - } -} - -function blinkled_launch($int, $led) { - mwexec("/usr/local/bin/blinkled -i " . escapeshellarg($int) . " -l /dev/led/led" . escapeshellarg($led)); -} - -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 validate_form_blinkled($post, &$input_errors) { - /* Make sure both aren't using the same interface */ - if (($post['iface_led2']) && ($post['iface_led3']) && - (($post['enable_led2']) && ($post['enable_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/blinkled/blinkled.xml b/config/blinkled/blinkled.xml deleted file mode 100644 index 65a574af..00000000 --- a/config/blinkled/blinkled.xml +++ /dev/null @@ -1,105 +0,0 @@ -<?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.4</version> - <savetext>Save</savetext> - <include_file>/usr/local/pkg/blinkled.inc</include_file> - <menu> - <name>Assign LEDs</name> - <tooltiptext>Assign LEDs to indicate network activity.</tooltiptext> - <section>Interfaces</section> - <url>/pkg_edit.php?xml=blinkled.xml</url> - </menu> - <additional_files_needed> - <item>https://packages.pfsense.org/packages/config/blinkled/blinkled.inc</item> - <prefix>/usr/local/pkg/</prefix> - </additional_files_needed> - <!-- TODO: Make the blinkled.sh script really usable for start/stop/restart --> - <service> - <name>blinkled</name> - <rcfile>blinkled.sh</rcfile> - <executable>blinkled</executable> - <description>Network Activity LED Indicator Daemon</description> - </service> - <fields> - <field> - <fielddescr>Enable blinkled</fielddescr> - <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 - indicate network activity. Be aware, however, that this will - possibly consume some system resources in the process.</description> - </field> - <field> - <fielddescr>Enable LED #2</fielddescr> - <fieldname>enable_led2</fieldname> - <type>checkbox</type> - </field> - <field> - <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> - </field> - <field> - <fielddescr>Enable LED #3</fielddescr> - <fieldname>enable_led3</fieldname> - <type>checkbox</type> - </field> - <field> - <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> - </field> - </fields> - <custom_php_validation_command> - validate_form_blinkled($_POST, $input_errors); - </custom_php_validation_command> - <custom_php_resync_config_command> - sync_package_blinkled(); - </custom_php_resync_config_command> -</packagegui> 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/darkstat/darkstat.sh b/config/darkstat/darkstat.sh deleted file mode 100644 index a7706142..00000000 --- a/config/darkstat/darkstat.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -rc_start() { - /usr/local/sbin/darkstat --detach -} - -rc_stop() { - killall darkstat -} - -case $1 in - start) - rc_start - ;; - stop) - rc_stop - ;; - restart) - rc_stop - rc_start - ;; -esac diff --git a/config/darkstat/darkstat.xml b/config/darkstat/darkstat.xml index 3263012b..d0b71cac 100644 --- a/config/darkstat/darkstat.xml +++ b/config/darkstat/darkstat.xml @@ -2,55 +2,50 @@ <!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. - */ -/* ========================================================================== */ + darkstat.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009-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>Darkstat</name> - <version>3.0</version> + <version>3.1</version> <title>Diagnostics: Darkstat</title> <menu> <name>Darkstat Settings</name> - <tooltiptext>Setup darkstat specific settings</tooltiptext> + <tooltiptext>Setup darkstat specific settings.</tooltiptext> <section>Diagnostics</section> <url>/pkg_edit.php?xml=darkstat.xml&id=0</url> </menu> @@ -60,6 +55,7 @@ <executable>darkstat</executable> <description>Darkstat bandwidth monitoring daemon</description> </service> + <configpath>installedpackages->package->$packagename->configuration->settings</configpath> <tabs> <tab> <text>Darkstat Settings</text> @@ -71,47 +67,348 @@ <url>http://$myurl:666</url> </tab> </tabs> + <advanced_options>enabled</advanced_options> <fields> <field> - <fielddescr>Interface</fielddescr> - <fieldname>interface_array</fieldname> + <fielddescr>Enable darkstat</fielddescr> + <fieldname>enable</fieldname> + <type>checkbox</type> + </field> + <field> + <fielddescr>Interface(s) to capture traffic on</fielddescr> + <fieldname>capture_interfaces</fieldname> + <description><![CDATA[ + Capture traffic on the specified network interface(s).<br /> + (Default is LAN.) + ]]> + </description> <type>interfaces_selection</type> + <hideinterfaceregex>loopback</hideinterfaceregex> <size>3</size> + <multiple>true</multiple> <value>lan</value> + <required>true</required> + </field> + <field> + <fielddescr>Darkstat web interface should listen on</fielddescr> + <fieldname>bind_interfaces</fieldname> + <description> + <![CDATA[ + Bind the web interface to IP address(es) of the specified interface(s).<br /> + (The default is to listen on all interfaces.) + ]]> + </description> + <type>interfaces_selection</type> + <size>3</size> <multiple>true</multiple> </field> - </fields> + <!-- Disabled until there is some way to handle the $myurl thing in the tabs/url tag above --> + <!-- + <field> + <fielddescr>Port</fielddescr> + <fieldname>port</fieldname> + <description> + <![CDATA[ + Bind the darkstat web interface to the specified port.<br /> + <strong>WARNING: Do NOT set this to the same port where pfSense WebGUI is running (usually 80/443)!</strong><br /> + (Default is 666.) + ]]> + </description> + <type>input</type> + <size>5</size> + </field> + --> + <field> + <fielddescr>Enable the "local network" feature</fielddescr> + <fieldname>localnetworkenable</fieldname> + <description> + <![CDATA[ + All traffic entering or leaving this network will be graphed.<br /> + (The default behaviour is to only graph traffic to and from the local host.) + ]]> + </description> + <type>checkbox</type> + <enablefields>localnetworkonly</enablefields> + <disablefields>localnetworkonly</disablefields> + </field> + <field> + <fielddescr>Make the web interface ONLY display hosts on the "local network"</fielddescr> + <fieldname>localnetworkonly</fieldname> + <description> + <![CDATA[ + If the "local network" feature is enabled above, the web interface<br /> + will only display hosts on the "local network" defined below. + ]]> + </description> + <type>checkbox</type> + </field> + <field> + <fielddescr>Define a "local network"</fielddescr> + <fieldname>localnetwork</fieldname> + <description>Traffic from/to the network/netmask of the selected interface will be considered as "local network".</description> + <type>interfaces_selection</type> + <hideinterfaceregex>(wan|loopback)</hideinterfaceregex> + </field> + <field> + <fielddescr>Do not use promiscuous mode to capture</fielddescr> + <fieldname>nopromisc</fieldname> + <description> + <![CDATA[ + Note that an interface may already be in promiscuous mode,<br /> + or may later enter promiscuous mode, due to circumstances beyond darkstat's control.<br /> + <strong>This cannot be used when the "local network" feature is enabled above.</strong> + ]]> + </description> + <type>checkbox</type> + </field> + <field> + <fielddescr>Do not resolve IPs to host names</fielddescr> + <fieldname>nodns</fieldname> + <description> + <![CDATA[ + This can significantly reduce memory footprint on small systems,<br /> + as an extra process is created for DNS resolution. + ]]> + </description> + <type>checkbox</type> + </field> + <field> + <fielddescr>Do not display MAC addresses in the hosts table</fielddescr> + <fieldname>nomacs</fieldname> + <type>checkbox</type> + </field> + <field> + <fielddescr>Do not display the last seen time in the hosts table</fielddescr> + <fieldname>nolastseen</fieldname> + <type>checkbox</type> + </field> + <field> + <fielddescr>Maximum hosts count</fielddescr> + <fieldname>hostsmax</fieldname> + <description> + <![CDATA[ + The maximum number of hosts that will be kept in the hosts table.<br /> + This is used to limit how much accounting data will be kept in memory.<br /> + (If filled in, the number must be greater than 'Maximum number of hosts to keep' below.) + ]]> + </description> + <type>input</type> + <size>5</size> + </field> + <field> + <fielddescr>Maximum number of hosts to keep</fielddescr> + <fieldname>hostskeep</fieldname> + <description> + <![CDATA[ + When the hosts table hits 'Maximum hosts count' and traffic is seen from a new host,<br /> + we clean out the hosts table, keeping only the top number of hosts, sorted by total traffic.<br /> + (If filled in, the number must be lower than 'Maximum hosts count' above.) + ]]> + </description> + <type>input</type> + <size>5</size> + </field> + <field> + <fielddescr>Maximum ports count</fielddescr> + <fieldname>portsmax</fieldname> + <description> + <![CDATA[ + The maximum number of ports that will be tracked for each host.<br /> + This is used to limit how much accounting data will be kept in memory.<br /> + (If filled in, the number must be greater than 'Maximum number of ports to keep' below.) + ]]> + </description> + <type>input</type> + <size>5</size> + </field> + <field> + <fielddescr>Maximum number of ports to keep</fielddescr> + <fieldname>portskeep</fieldname> + <description> + <![CDATA[ + When a ports table fills up, this many ports are kept and the rest are discarded.<br /> + (If filled in, the number must be lower than 'Maximum ports count' above.) + ]]> + </description> + <type>input</type> + <size>5</size> + </field> + <field> + <fielddescr>Advanced traffic filtering options</fielddescr> + <fieldname>advfilter</fieldname> + <description> + <![CDATA[ + Use the specified filter expression when capturing traffic.<br /><br /> + Example 1: We only want to account for SSH traffic.<br /> + Filter expression: <em>port 22</em><br /><br /> + Example 2: We don't want to account for traffic between internal IPs.<br /> + Filter expression: <em>not (src net 192.168.0 and dst net 192.168.0)</em><br /><br /> + NOTE: Filter syntax is beyond the scope of this description; please refer to + <a href="https://www.freebsd.org/cgi/man.cgi?query=tcpdump&sektion=1&apropos=0&manpath=FreeBSD+10.1-RELEASE+and+Ports">tcpdump(1)</a>, + <a href="https://www.freebsd.org/cgi/man.cgi?query=pcap-filter&sektion=7&apropos=0&manpath=FreeBSD+10.1-RELEASE+and+Ports">pcap-filter(7)</a> + and <a href="https://www.freebsd.org/cgi/man.cgi?query=darkstat&apropos=0&sektion=0&manpath=FreeBSD+10.1-RELEASE+and+Ports&arch=default&format=html">darkstat(8)</a> + documentation.<br /> + <strong>WARNING: You are completely on your own with this! If misconfigured, darkstat will malfunction or even not start at all.</strong> + ]]> + </description> + <type>textarea</type> + <encoding>base64</encoding> + <cols>65</cols> + <rows>5</rows> + <advancedfield/> + </field> + </fields> <custom_php_global_functions> + <![CDATA[ function sync_package_darkstat() { - if (!is_array($_POST['interface_array'])) - return; conf_mount_rw(); - $first = 0; - foreach($_POST['interface_array'] as $iface) { + config_lock(); + global $config, $darkstat_config; + $darkstat_config =& $config['installedpackages']['darkstat']['config'][0]; + + /* Configure capture interface(s) */ + $capture_interfaces = $darkstat_config['capture_interfaces'] ?: 'lan'; + foreach (explode(",", $capture_interfaces) as $iface) { + $if = convert_friendly_interface_to_real_interface_name($iface); + if ($if) { + $ifaces_final .= " -i {$if}"; + } + } + $start = "/usr/local/sbin/darkstat {$ifaces_final}"; + + /* Configure bind interface(s) */ + foreach (explode(",", $darkstat_config['bind_interfaces']) as $iface) { $if = convert_friendly_interface_to_real_interface_name($iface); - if($if) { - $ifaces_final .= " -i " . $if; - $first = 1; + $if = get_interface_ip("$iface"); + if ($if) { + $bind_ifaces_final .= " -b {$if}"; + } + } + $start .= "{$bind_ifaces_final}"; + + /* Configure darkstat webgui port + NOTE: This will be always be 666 for now, until the 'Port' field is re-enabled in darkstat.xml + */ + $port = $darkstat_config['port'] ?: '666'; + $start .= " -p {$port}"; + + /* Deal with the rest of configured options here */ + $localnetworkenable = $darkstat_config['localnetworkenable']; + $lif = $darkstat_config['localnetwork']; + if ($localnetworkenable != "") { + if (is_ipaddrv4(get_interface_ip($lif))) { + $start .= " -l " . escapeshellarg(gen_subnet(get_interface_ip($lif), get_interface_subnet($lif)) . '/' . gen_subnet_mask(get_interface_subnet($lif))); + } + if ($darkstat_config['localnetworkonly'] != "") { + $start .= " --local-only"; } } - $start = "/usr/local/sbin/darkstat" . $ifaces_final . " -p 666 "; + if (($localnetworkenable == "") && ($darkstat_config['nopromisc'] != "")) { + $start .= " --no-promisc"; + } + if ($darkstat_config['nodns'] != "") { + $start .= " --no-dns"; + } + if ($darkstat_config['nomacs'] != "") { + $start .= " --no-macs"; + } + if ($darkstat_config['nolastseen'] != "") { + $start .= " --no-lastseen"; + } + $hostsmax = $darkstat_config['hostsmax']; + $hostskeep = $darkstat_config['hostskeep']; + if (($hostsmax > 0) && ($hostsmax > $hostskeep)) { + $start .= " --hosts-max {$hostsmax}"; + } + if (($hostskeep > 0) && ($hostskeep < $hostsmax)) { + $start .= " --hosts-keep {$hostskeep}"; + } + $portsmax = $darkstat_config['portsmax']; + $portskeep = $darkstat_config['portskeep']; + if (($portsmax > 0) && ($portsmax > $portskeep)) { + $start .= " --ports-max {$portsmax}"; + } + if (($portskeep > 0) && ($portskeep < $portsmax)) { + $start .= " --ports-keep {$portskeep}"; + } + $advfilter = $darkstat_config['advfilter']; + if ($advfilter != "") { + $start .= " -f " . escapeshellarg(base64_decode($advfilter)); + } + write_rcfile(array( "file" => "darkstat.sh", "start" => $start, "stop" => "/usr/bin/killall darkstat" ) ); - start_service("darkstat"); + + /* If the service is (being) disabled, stop it (if running) and do nothing else */ + if (!($darkstat_config['enable'])) { + if (is_process_running("darkstat")) { + stop_service("darkstat"); + } + return; + } else { + restart_service("darkstat"); + } + + config_unlock(); conf_mount_ro(); } + + function validate_input_darkstat($post, &$input_errors) { + if (($_POST['port']) && ($_POST['port'] < 1 || $_POST['port'] < 65535 || !is_numericint($_POST['port']))) { + $input_errors[] .= gettext("The value for 'Maximum number of ports' to keep' must be a positive integer between 1 and 65535."); + } + if (($_POST['hostsmax']) && ($_POST['hostsmax'] < 1 || !is_numericint($_POST['hostsmax']))) { + $input_errors[] = gettext("The value for 'Maximum hosts count' must be a positive integer."); + } + if (($_POST['hostskeep']) && ($_POST['hostskeep'] < 1 || !is_numericint($_POST['hostskeep']))) { + $input_errors[] .= gettext("The value for 'Maximum number of hosts to keep' must be a positive integer."); + } + if ($_POST['hostsmax'] || $_POST['hostskeep']) { + if ($_POST['hostsmax'] <= $_POST['hostskeep']) { + $input_errors[] .= gettext("'Maximum hosts count' must be greater than 'Maximum number of hosts to keep'."); + } + } + if (($_POST['portsmax']) && ($_POST['portsmax'] < 1 || !is_numericint($_POST['portsmax']))) { + $input_errors[] .= gettext("The value for 'Maximum ports count' must be a positive integer."); + } + if (($_POST['portskeep']) && ($_POST['portskeep'] < 1 || !is_numericint($_POST['portskeep']))) { + $input_errors[] .= gettext("The value for 'Maximum number of ports' to keep' must be a positive integer."); + } + if ($_POST['portsmax'] || $_POST['portskeep']) { + if ($_POST['portsmax'] <= $_POST['portskeep']) { + $input_errors[] .= gettext("'Maximum ports count' must be greater than 'Maximum number of ports to keep'."); + } + } + if ($_POST['localnetworkenable'] && $_POST['nopromisc'] != "") { + $input_errors[] .= gettext("'Do not use promiscuous mode to capture' cannot be used when the 'local network' feature is enabled."); + } + if ($_POST['localnetwork']) { + $int = convert_friendly_interface_to_real_interface_name($post['localnetwork']); + $ip = find_interface_ip($int); + if (!is_ipaddrv4($ip)) { + $input_errors[] .= gettext("The selected 'local network' interface has no IPv4 configured. Configured IPv4 is required."); + } + } + if (($post['advfilter']) && !preg_match("/^[a-zA-Z0-9\+\-\=\(\):. ]*$/", $post['advfilter'])) { + $input_errors[] .= gettext('Advanced traffic filtering options may only contain characters matching ^[a-zA-Z0-9\+\-\=\(\):. ]*$ regexp.'); + } + } + ]]> </custom_php_global_functions> - <custom_add_php_command> - sync_package_darkstat(); + <custom_add_php_command> + sync_package_darkstat(); </custom_add_php_command> <custom_php_resync_config_command> sync_package_darkstat(); </custom_php_resync_config_command> <custom_php_deinstall_command> - exec("rm -f /usr/local/etc/rc.d/darkstat.sh"); + unlink_if_exists("/usr/local/etc/rc.d/darkstat.sh"); </custom_php_deinstall_command> + <custom_php_validation_command> + validate_input_darkstat($_POST, $input_errors); + </custom_php_validation_command> </packagegui> diff --git a/config/filer/filer.inc b/config/filer/filer.inc index 3a012dd2..7b795acb 100644 --- a/config/filer/filer.inc +++ b/config/filer/filer.inc @@ -44,7 +44,7 @@ function sync_package_filer() { if ($config['installedpackages']['filer']['config'] != "") { $count = 0; foreach ($config['installedpackages']['filer']['config'] as $file) { - if ($file['filedata']=="" && file_exists($file['fullfile'])) { + if ($file['filedata'] == "" && file_exists($file['fullfile'])) { $config['installedpackages']['filer']['config'][$count]['filedata'] = base64_encode(file_get_contents($file['fullfile'])); $file['filedata'] = base64_encode(file_get_contents($file['fullfile'])); $update_conf++; @@ -65,10 +65,10 @@ function sync_package_filer() { switch ($file['background']) { case "background": mwexec_bg($file['cmd']); - break; + break; case "foreground": mwexec($file['cmd']); - break; + break; } } } @@ -90,13 +90,13 @@ function filer_validate_input($post, &$input_errors) { continue; } if (substr($key, 0, 3) == "mod" && !preg_match("/^0?[0-7]{3}$/", $value)) { - $input_errors[] = "{$value} is not valid permissions mode number."; + $input_errors[] = "{$value} is not valid permissions mode number."; } if (substr($key, 0, 11) == "description" && !preg_match("@^[a-zA-Z0-9 _/.-]+$@", $value)) { - $input_errors[] = "Do not use special characters in description."; + $input_errors[] = "Do not use special characters in description."; } if (substr($key, 0, 8) == "fullfile" && !preg_match("@^[a-zA-Z0-9_/.-]+$@", $value)) { - $input_errors[] = "Do not use special characters in filename."; + $input_errors[] = "Do not use special characters in filename."; } } } diff --git a/config/filer/filer.xml b/config/filer/filer.xml index ab49bb21..57125927 100644 --- a/config/filer/filer.xml +++ b/config/filer/filer.xml @@ -44,7 +44,7 @@ ]]> </copyright> <name>filer</name> - <version>0.60.2</version> + <version>0.60.4</version> <title>Filer</title> <include_file>/usr/local/pkg/filer.inc</include_file> <additional_files_needed> @@ -84,14 +84,14 @@ <columnitem> <fielddescr>Description</fielddescr> <fieldname>description</fieldname> - </columnitem> + </columnitem> </adddeleteeditpagefields> <fields> <field> <type>listtopic</type> <fieldname>temp</fieldname> <name>File configuration</name> - </field> + </field> <field> <fielddescr>File</fielddescr> <fieldname>fullfile</fieldname> @@ -129,7 +129,7 @@ <type>listtopic</type> <fieldname>temp</fieldname> <name>Command to run after file save/sync.</name> - </field> + </field> <field> <fielddescr>Script/Command</fielddescr> <fieldname>cmd</fieldname> @@ -142,7 +142,7 @@ <fielddescr>Execute mode</fielddescr> <fieldname>background</fieldname> <type>select</type> - <options> + <options> <option> <name>Background (default)</name> <value>background</value> @@ -164,7 +164,7 @@ </custom_php_validation_command> <custom_delete_php_command> sync_package_filer(); - </custom_delete_php_command> + </custom_delete_php_command> <custom_php_resync_config_command> sync_package_filer(); </custom_php_resync_config_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/lcdproc/lcdproc.inc b/config/lcdproc/lcdproc.inc index d4b4856a..2251618c 100644 --- a/config/lcdproc/lcdproc.inc +++ b/config/lcdproc/lcdproc.inc @@ -39,7 +39,7 @@ } else { define('LCDPROC_CONFIG','/usr/local/etc/LCDd.conf'); } - define('LCDPROC_HOST','localhost'); + define('LCDPROC_HOST','127.0.0.1'); define('LCDPROC_PORT','13666'); function lcdproc_notice ($msg) { syslog(LOG_NOTICE, "lcdproc: {$msg}"); } diff --git a/config/notes/notes.inc b/config/notes/notes.inc index f4bfe2cc..29b51396 100644 --- a/config/notes/notes.inc +++ b/config/notes/notes.inc @@ -3,10 +3,10 @@ /* /* ========================================================================== */ /* - notes.inc - Copyright (C) 2008 Mark J Crane - All rights reserved. - */ + notes.inc + Copyright (C) 2008 Mark J Crane + All rights reserved. +*/ /* ========================================================================== */ /* Redistribution and use in source and binary forms, with or without @@ -31,61 +31,53 @@ POSSIBILITY OF SUCH DAMAGE. */ -function notes_sync_package() -{ - - //global $config; +function notes_sync_package() { + + //global $config; } - -function notes_install_command() -{ + +function notes_install_command() { global $config; conf_mount_rw(); config_lock(); if (!is_dir('/usr/local/www/packages/')) { - exec("mkdir /usr/local/www/packages/"); + exec("mkdir /usr/local/www/packages/"); } - + //if (!is_dir('/usr/local/www/packages/notes/')) { // exec("mkdir /usr/local/www/packages/notes/"); //} - //rename PHP files from .tmp to .php //exec("cp /tmp/notes.tmp /usr/local/www/packages/phpservice/notes.php"); //unlink_if_exists("/tmp/notes.tmp"); - - //write_config(); + //write_config(); - //write_rcfile(array( // "file" => "notes.sh", // "start" => "/usr/local/bin/php /usr/local/pkg/notes.php", // "stop" => "rm /tmp/phpmonitor.pid" // ) //); - - + notes_sync_package(); - - //if (pkg_is_service_running('notes')) { + //if (pkg_is_service_running('notes')) { //documentation purposes //} conf_mount_ro(); config_unlock(); - + } -function notes_deinstall_command() -{ +function notes_deinstall_command() { conf_mount_rw(); config_lock(); @@ -93,7 +85,7 @@ function notes_deinstall_command() unlink_if_exists("/usr/local/pkg/notes.inc"); conf_mount_ro(); config_unlock(); - + } ?>
\ No newline at end of file diff --git a/config/notes/notes.xml b/config/notes/notes.xml index 513bf922..34d2f676 100644 --- a/config/notes/notes.xml +++ b/config/notes/notes.xml @@ -2,46 +2,46 @@ <!DOCTYPE packagegui SYSTEM "./schema/packages.dtd"> <?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> <packagegui> - <copyright> - <![CDATA[ + <copyright> + <![CDATA[ /* $Id$ */ /* ========================================================================== */ /* - notes.xml - Copyright (C) 2008 Mark J Crane - All rights reserved. - */ + notes.xml + Copyright (C) 2008 Mark J Crane + 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> - <description>Notes</description> - <requirements>Describe your package requirements here</requirements> - <faq>Currently there are no FAQ items provided.</faq> + ]]> + </copyright> + <description>Notes</description> + <requirements>Describe your package requirements here</requirements> + <faq>Currently there are no FAQ items provided.</faq> <name>Notes</name> - <version>0.2.3</version> + <version>0.2.5</version> <title>Settings</title> <include_file>/usr/local/pkg/notes.inc</include_file> <menu> @@ -56,24 +56,24 @@ <text>Settings</text> <url>/pkg_edit.php?xml=notes.xml</url> <active/> - </tab> + </tab> </tabs> - <configpath>installedpackages->package->$packagename->configuration->notes</configpath> + <configpath>installedpackages->package->$packagename->configuration->notes</configpath> <additional_files_needed> <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> + <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/notes/notes.inc</item> </additional_files_needed> <adddeleteeditpagefields> <columnitem> <fielddescr>Title</fielddescr> <fieldname>title</fieldname> - </columnitem> + </columnitem> <columnitem> <fielddescr>Category</fielddescr> <fieldname>category</fieldname> </columnitem> - </adddeleteeditpagefields> + </adddeleteeditpagefields> <fields> <field> <fielddescr>Title</fielddescr> @@ -86,7 +86,7 @@ <fieldname>category</fieldname> <description>Enter a category.</description> <type>input</type> - </field> + </field> <field> <fielddescr><b>Notes</b> <br /> <br /></fielddescr> <fieldname>notes</fieldname> @@ -94,16 +94,16 @@ <type>textarea</type> <encoding>base64</encoding> <size>30</size> - <cols>70</cols> + <cols>70</cols> <rows>20</rows> </field> - </fields> + </fields> <custom_add_php_command> </custom_add_php_command> <custom_php_resync_config_command> notes_sync_package(); </custom_php_resync_config_command> - <custom_delete_php_command> + <custom_delete_php_command> notes_sync_package(); </custom_delete_php_command> <custom_php_install_command> 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/nut/nut.inc b/config/nut/nut.inc index dae2269e..578bb82f 100644 --- a/config/nut/nut.inc +++ b/config/nut/nut.inc @@ -126,7 +126,7 @@ if (!$post['remotename']) { $input_errors[] = 'You must specify a name in the \'Remote UPS Name\' field'; } - if ($post['remotename'] && !preg_match("/^[a-zA-Z0-9-_]+$/", $post['name'])) { + if ($post['remotename'] && !preg_match("/^[a-zA-Z0-9-_]+$/", $post['remotename'])) { $input_errors[] = 'Only [Aa-Zz], [0-9], and [-_] accepted in the \'Remote UPS Name\' field'; } if (!$post['remoteaddr'] || !is_ipaddr($post['remoteaddr'])) { diff --git a/config/openvpn-client-export/openvpn-client-export.inc b/config/openvpn-client-export/openvpn-client-export.inc index 979c5f1b..963a2604 100755 --- a/config/openvpn-client-export/openvpn-client-export.inc +++ b/config/openvpn-client-export/openvpn-client-export.inc @@ -40,8 +40,8 @@ require_once("util.inc"); require_once("pfsense-utils.inc"); global $current_openvpn_version, $current_openvpn_version_rev; -$current_openvpn_version = "2.3.6"; -$current_openvpn_version_rev = "03"; +$current_openvpn_version = "2.3.8"; +$current_openvpn_version_rev = "01"; function openvpn_client_export_install() { global $current_openvpn_version; @@ -90,10 +90,10 @@ function openvpn_client_export_prefix($srvid, $usrid = null, $crtid = null) { $host = empty($config['system']['hostname']) ? "openvpn" : $config['system']['hostname']; $prot = ($settings['protocol'] == 'UDP' ? 'udp' : $settings['protocol']); $port = $settings['local_port']; - + $filename_addition = ""; if ($usrid && is_numeric($usrid)) { - $filename_addition = "-".$config['system']['user'][$usrid]['name']; + $filename_addition = "-" . $config['system']['user'][$usrid]['name']; } elseif ($crtid && is_numeric($crtid) && function_exists("cert_get_cn")) { $filename_addition = "-" . str_replace(' ', '_', cert_get_cn($config['cert'][$crtid]['crt'])); } @@ -185,9 +185,9 @@ function openvpn_client_export_validate_config($srvid, $usrid, $crtid) { return array($settings, $server_cert, $server_ca, $servercn, $user, $cert, $nokeys); } -function openvpn_client_export_config($srvid, $usrid, $crtid, $useaddr, $verifyservercn, $randomlocalport, $usetoken, $nokeys = false, $proxy, $expformat = "baseconf", $outpass = "", $skiptls=false, $doslines=false, $openvpnmanager, $advancedoptions = "") { +function openvpn_client_export_config($srvid, $usrid, $crtid, $useaddr, $verifyservercn, $randomlocalport, $usetoken, $nokeys = false, $proxy, $expformat = "baseconf", $outpass = "", $skiptls = false, $doslines = false, $openvpnmanager, $advancedoptions = "") { global $config, $input_errors, $g; - $pfs_version = substr(trim(file_get_contents("/etc/version")),0,3); + $pfs_version = substr(trim(file_get_contents("/etc/version")), 0, 3); $nl = ($doslines) ? "\r\n" : "\n"; $conf = ""; @@ -374,7 +374,7 @@ function openvpn_client_export_config($srvid, $usrid, $crtid, $useaddr, $verifys $conf .= "management-forget-disconnect{$nl}"; $conf .= $nl; }; - + // add advanced options $advancedoptions = str_replace("\r\n", "\n", $advancedoptions); $advancedoptions = str_replace("\n", $nl, $advancedoptions); @@ -668,12 +668,13 @@ function viscosity_openvpn_client_config_exporter($srvid, $usrid, $crtid, $usead } $conf = openvpn_client_export_config($srvid, $usrid, $crtid, $useaddr, $verifyservercn, $randomlocalport, $usetoken, true, $proxy, "baseconf", $outpass, true, true, $openvpnmanager, $advancedoptions); - if (!$conf) + if (!$conf) { return false; + } // We need to nuke the ca line from the above config if it exists. $conf = explode("\n", $conf); - for ($i=0; $i < count($conf); $i++) { + for ($i = 0; $i < count($conf); $i++) { if ((substr($conf[$i], 0, 3) == "ca ") || (substr($conf[$i], 0, 7) == "pkcs12 ")) { unset($conf[$i]); } @@ -866,10 +867,11 @@ function openvpn_client_export_sharedkey_config($srvid, $useaddr, $proxy, $zipco $shkeyfile = "{$tempdir}/{$shkeyfile}"; file_put_contents("{$shkeyfile}", base64_decode($settings['shared_key'])); - if(file_exists("/usr/pbi/zip-{$uname_p}/bin/zip")) + if (file_exists("/usr/pbi/zip-{$uname_p}/bin/zip")) { exec("cd {$tempdir}/.. && /usr/pbi/zip-{$uname_p}/bin/zip -r {$g['tmp_path']}/{$prefix}-config.zip {$prefix}"); - else + } else { exec("cd {$tempdir}/.. && /usr/local/bin/zip -r {$g['tmp_path']}/{$prefix}-config.zip {$prefix}"); + } // Remove temporary directory exec("rm -rf {$tempdir}"); @@ -952,7 +954,7 @@ function openvpn_client_export_find_port_forwards($targetip, $targetport, $targe } $dstaddr = trim(filter_generate_address($natent, 'destination', true)); - if(!$dstaddr) { + if (!$dstaddr) { $dstaddr = $FilterIflist[$natif]['ip']; } diff --git a/config/openvpn-client-export/openvpn-client-export.xml b/config/openvpn-client-export/openvpn-client-export.xml index a9630730..1a150dc5 100755 --- a/config/openvpn-client-export/openvpn-client-export.xml +++ b/config/openvpn-client-export/openvpn-client-export.xml @@ -44,7 +44,7 @@ ]]> </copyright> <name>OpenVPN Client Export</name> - <version>1.2.17</version> + <version>1.2.19</version> <title>OpenVPN Client Export</title> <include_file>/usr/local/pkg/openvpn-client-export.inc</include_file> <tabs> @@ -65,7 +65,7 @@ </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/</prefix> - <item>https://files.pfsense.org/packages/openvpn-client-export/openvpn-client-export-2.3.6.tgz</item> + <item>https://files.pfsense.org/packages/openvpn-client-export/openvpn-client-export-2.3.8.tgz</item> <do_not_add_to_port/> </additional_files_needed> <additional_files_needed> diff --git a/config/openvpn-client-export/vpn_openvpn_export.php b/config/openvpn-client-export/vpn_openvpn_export.php index a445e986..246e7421 100755 --- a/config/openvpn-client-export/vpn_openvpn_export.php +++ b/config/openvpn-client-export/vpn_openvpn_export.php @@ -40,40 +40,48 @@ global $current_openvpn_version, $current_openvpn_version_rev; $pgtitle = array("OpenVPN", "Client Export Utility"); -if (!is_array($config['openvpn']['openvpn-server'])) +if (!is_array($config['openvpn']['openvpn-server'])) { $config['openvpn']['openvpn-server'] = array(); +} $a_server = $config['openvpn']['openvpn-server']; -if (!is_array($config['system']['user'])) +if (!is_array($config['system']['user'])) { $config['system']['user'] = array(); +} $a_user = $config['system']['user']; -if (!is_array($config['cert'])) +if (!is_array($config['cert'])) { $config['cert'] = array(); +} $a_cert = $config['cert']; $ras_server = array(); -foreach($a_server as $sindex => $server) { - if (isset($server['disable'])) +foreach ($a_server as $sindex => $server) { + if (isset($server['disable'])) { continue; + } $ras_user = array(); $ras_certs = array(); - if (stripos($server['mode'], "server") === false) + if (stripos($server['mode'], "server") === false) { continue; + } if (($server['mode'] == "server_tls_user") && ($server['authmode'] == "Local Database")) { - foreach($a_user as $uindex => $user) { - if (!is_array($user['cert'])) + foreach ($a_user as $uindex => $user) { + if (!is_array($user['cert'])) { continue; - foreach($user['cert'] as $cindex => $cert) { + } + foreach ($user['cert'] as $cindex => $cert) { // If $cert is not an array, it's a certref not a cert. - if (!is_array($cert)) + if (!is_array($cert)) { $cert = lookup_cert($cert); + } - if ($cert['caref'] != $server['caref']) + if ($cert['caref'] != $server['caref']) { continue; + } $ras_userent = array(); $ras_userent['uindex'] = $uindex; $ras_userent['cindex'] = $cindex; @@ -83,9 +91,10 @@ foreach($a_server as $sindex => $server) { } } } elseif (($server['mode'] == "server_tls") || (($server['mode'] == "server_tls_user") && ($server['authmode'] != "Local Database"))) { - foreach($a_cert as $cindex => $cert) { - if (($cert['caref'] != $server['caref']) || ($cert['refid'] == $server['certref'])) + foreach ($a_cert as $cindex => $cert) { + if (($cert['caref'] != $server['caref']) || ($cert['refid'] == $server['certref'])) { continue; + } $ras_cert_entry['cindex'] = $cindex; $ras_cert_entry['certname'] = $cert['descr']; $ras_cert_entry['certref'] = $cert['refid']; @@ -96,10 +105,11 @@ foreach($a_server as $sindex => $server) { $ras_serverent = array(); $prot = $server['protocol']; $port = $server['local_port']; - if ($server['description']) + if ($server['description']) { $name = "{$server['description']} {$prot}:{$port}"; - else + } else { $name = "Server {$prot}:{$port}"; + } $ras_serverent['index'] = $sindex; $ras_serverent['name'] = $name; $ras_serverent['users'] = $ras_user; @@ -109,12 +119,14 @@ foreach($a_server as $sindex => $server) { } $id = $_GET['id']; -if (isset($_POST['id'])) +if (isset($_POST['id'])) { $id = $_POST['id']; +} $act = $_GET['act']; -if (isset($_POST['act'])) +if (isset($_POST['act'])) { $act = $_POST['act']; +} if (!empty($act)) { @@ -125,19 +137,21 @@ if (!empty($act)) { pfSenseHeader("vpn_openvpn_export.php"); exit; } else if (($config['openvpn']['openvpn-server'][$srvid]['mode'] != "server_user") && - (($usrid === false) || ($crtid === false))) { + (($usrid === false) || ($crtid === false))) { pfSenseHeader("vpn_openvpn_export.php"); exit; } - if ($config['openvpn']['openvpn-server'][$srvid]['mode'] == "server_user") + if ($config['openvpn']['openvpn-server'][$srvid]['mode'] == "server_user") { $nokeys = true; - else + } else { $nokeys = false; + } $useaddr = ''; - if (isset($_GET['useaddr']) && !empty($_GET['useaddr'])) + if (isset($_GET['useaddr']) && !empty($_GET['useaddr'])) { $useaddr = trim($_GET['useaddr']); + } if (!(is_ipaddr($useaddr) || is_hostname($useaddr) || in_array($useaddr, array("serveraddr", "servermagic", "servermagichost", "serverhostname")))) { @@ -192,10 +206,10 @@ if (!empty($act)) { $exp_name = openvpn_client_export_prefix($srvid, $usrid, $crtid); - if(substr($act, 0, 4) == "conf") { + if (substr($act, 0, 4) == "conf") { switch ($act) { case "confzip": - $exp_name = urlencode($exp_name."-config.zip"); + $exp_name = urlencode($exp_name . "-config.zip"); $expformat = "zip"; break; case "conf_yealink_t28": @@ -215,30 +229,30 @@ if (!empty($act)) { $expformat = "snom"; break; case "confinline": - $exp_name = urlencode($exp_name."-config.ovpn"); + $exp_name = urlencode($exp_name . "-config.ovpn"); $expformat = "inline"; break; case "confinlinedroid": - $exp_name = urlencode($exp_name."-android-config.ovpn"); + $exp_name = urlencode($exp_name . "-android-config.ovpn"); $expformat = "inlinedroid"; break; case "confinlineios": - $exp_name = urlencode($exp_name."-ios-config.ovpn"); + $exp_name = urlencode($exp_name . "-ios-config.ovpn"); $expformat = "inlineios"; break; default: - $exp_name = urlencode($exp_name."-config.ovpn"); + $exp_name = urlencode($exp_name . "-config.ovpn"); $expformat = "baseconf"; } $exp_path = openvpn_client_export_config($srvid, $usrid, $crtid, $useaddr, $verifyservercn, $randomlocalport, $usetoken, $nokeys, $proxy, $expformat, $password, false, false, $openvpnmanager, $advancedoptions); } - if($act == "visc") { - $exp_name = urlencode($exp_name."-Viscosity.visc.zip"); + if ($act == "visc") { + $exp_name = urlencode($exp_name . "-Viscosity.visc.zip"); $exp_path = viscosity_openvpn_client_config_exporter($srvid, $usrid, $crtid, $useaddr, $verifyservercn, $randomlocalport, $usetoken, $password, $proxy, $openvpnmanager, $advancedoptions); } - if(substr($act, 0, 4) == "inst") { + if (substr($act, 0, 4) == "inst") { $exp_name = urlencode($exp_name."-install.exe"); $exp_path = openvpn_client_export_installer($srvid, $usrid, $crtid, $useaddr, $verifyservercn, $randomlocalport, $usetoken, $password, $proxy, $openvpnmanager, $advancedoptions, substr($act, 5)); } @@ -316,8 +330,9 @@ function download_begin(act, i, j) { return; } useaddr = document.getElementById("useaddr_hostname").value; - } else + } else { useaddr = document.getElementById("useaddr").value; + } advancedoptions = document.getElementById("advancedoptions").value; @@ -325,21 +340,25 @@ function download_begin(act, i, j) { verifyservercn = document.getElementById("verifyservercn").value; var randomlocalport = 0; - if (document.getElementById("randomlocalport").checked) + if (document.getElementById("randomlocalport").checked) { randomlocalport = 1; + } var usetoken = 0; - if (document.getElementById("usetoken").checked) + if (document.getElementById("usetoken").checked) { usetoken = 1; + } var usepass = 0; - if (document.getElementById("usepass").checked) + if (document.getElementById("usepass").checked) { usepass = 1; + } var openvpnmanager = 0; - if (document.getElementById("openvpnmanager").checked) + if (document.getElementById("openvpnmanager").checked) { openvpnmanager = 1; + } var pass = document.getElementById("pass").value; var conf = document.getElementById("conf").value; - if (usepass && (act.substring(0,4) == "inst")) { + if (usepass && (act.substring(0, 4) == "inst")) { if (!pass || !conf) { alert("The password or confirm field is empty"); return; @@ -352,8 +371,9 @@ function download_begin(act, i, j) { var useproxy = 0; var useproxypass = 0; - if (document.getElementById("useproxy").checked) + if (document.getElementById("useproxy").checked) { useproxy = 1; + } var proxyaddr = document.getElementById("proxyaddr").value; var proxyport = document.getElementById("proxyport").value; @@ -363,8 +383,9 @@ function download_begin(act, i, j) { return; } - if (document.getElementById("useproxypass").value != 'none') + if (document.getElementById("useproxypass").value != 'none') { useproxypass = 1; + } var proxytype = document.getElementById("useproxytype").value; @@ -404,8 +425,9 @@ function download_begin(act, i, j) { dlurl += "&randomlocalport=" + escape(randomlocalport); dlurl += "&openvpnmanager=" + escape(openvpnmanager); dlurl += "&usetoken=" + escape(usetoken); - if (usepass) + if (usepass) { dlurl += "&password=" + escape(pass); + } if (useproxy) { dlurl += "&proxy_type=" + escape(proxytype); dlurl += "&proxy_addr=" + escape(proxyaddr); @@ -419,19 +441,20 @@ function download_begin(act, i, j) { dlurl += "&advancedoptions=" + escape(advancedoptions); - window.open(dlurl,"_self"); + window.open(dlurl, "_self"); } function server_changed() { var table = document.getElementById("users"); - while (table.rows.length > 1 ) + while (table.rows.length > 1 ) { table.deleteRow(1); + } var index = document.getElementById("server").selectedIndex; var users = servers[index][1]; var certs = servers[index][3]; - for (i=0; i < users.length; i++) { + for (i = 0; i < users.length; i++) { var row = table.insertRow(table.rows.length); var cell0 = row.insertCell(0); var cell1 = row.insertCell(1); @@ -462,11 +485,11 @@ function server_changed() { cell2.innerHTML += "<a href='javascript:download_begin(\"inst-x86-win6\"," + i + ", -1)'>x86-win6<\/a>"; cell2.innerHTML += " "; cell2.innerHTML += "<a href='javascript:download_begin(\"inst-x64-win6\"," + i + ", -1)'>x64-win6<\/a>"; - cell2.innerHTML += "<br\/>- Mac OSX:<br\/>"; + cell2.innerHTML += "<br\/>- Mac OS X:<br\/>"; cell2.innerHTML += " "; cell2.innerHTML += "<a href='javascript:download_begin(\"visc\"," + i + ", -1)'>Viscosity Bundle<\/a>"; } - for (j=0; j < certs.length; j++) { + for (j = 0; j < certs.length; j++) { var row = table.insertRow(table.rows.length); var cell0 = row.insertCell(0); var cell1 = row.insertCell(1); @@ -501,7 +524,7 @@ function server_changed() { cell2.innerHTML += "<a href='javascript:download_begin(\"inst-x86-win6\", -1," + j + ")'>x86-win6<\/a>"; cell2.innerHTML += " "; cell2.innerHTML += "<a href='javascript:download_begin(\"inst-x64-win6\", -1," + j + ")'>x64-win6<\/a>"; - cell2.innerHTML += "<br\/>- Mac OSX:<br\/>"; + cell2.innerHTML += "<br\/>- Mac OS X:<br\/>"; cell2.innerHTML += " "; cell2.innerHTML += "<a href='javascript:download_begin(\"visc\", -1," + j + ")'>Viscosity Bundle<\/a>"; if (servers[index][2] == "server_tls") { @@ -547,7 +570,7 @@ function server_changed() { cell2.innerHTML += "<a href='javascript:download_begin(\"inst-x86-win6\"," + i + ")'>x86-win6<\/a>"; cell2.innerHTML += " "; cell2.innerHTML += "<a href='javascript:download_begin(\"inst-x64-win6\"," + i + ")'>x64-win6<\/a>"; - cell2.innerHTML += "<br\/>- Mac OSX:<br\/>"; + cell2.innerHTML += "<br\/>- Mac OS X:<br\/>"; cell2.innerHTML += " "; cell2.innerHTML += "<a href='javascript:download_begin(\"visc\"," + i + ")'>Viscosity Bundle<\/a>"; } @@ -555,25 +578,27 @@ function server_changed() { function useaddr_changed(obj) { - if (obj.value == "other") + if (obj.value == "other") { $('HostName').show(); - else + } else { $('HostName').hide(); + } } function usepass_changed() { - if (document.getElementById("usepass").checked) + if (document.getElementById("usepass").checked) { document.getElementById("usepass_opts").style.display = ""; - else + } else { document.getElementById("usepass_opts").style.display = "none"; + } } function useproxy_changed(obj) { if ((obj.id == "useproxy" && obj.checked) || - (obj.id == "useproxypass" && (obj.value != 'none'))) { + (obj.id == "useproxypass" && (obj.value != 'none'))) { $(obj.id + '_opts').show(); } else { $(obj.id + '_opts').hide(); @@ -590,7 +615,7 @@ function useproxy_changed(obj) { } ?> <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="openvpn export"> - <tr> + <tr> <td> <?php $tab_array = array(); @@ -612,7 +637,7 @@ function useproxy_changed(obj) { <td width="22%" valign="top" class="vncellreq">Remote Access Server</td> <td width="78%" class="vtable"> <select name="server" id="server" class="formselect" onchange="server_changed()"> - <?php foreach($ras_server as & $server): ?> + <?php foreach ($ras_server as & $server): ?> <option value="<?=$server['index'];?>"><?=$server['name'];?></option> <?php endforeach; ?> </select> @@ -914,8 +939,8 @@ function useproxy_changed(obj) { <br/><a href="https://play.google.com/store/apps/details?id=de.blinkt.openvpn"><?= gettext("OpenVPN For Android") ?></a> - <?=gettext("Recommended client for Android")?> <br/><a href="http://www.featvpn.com/"><?= gettext("FEAT VPN For Android") ?></a> - <?=gettext("For older versions of Android")?> <br/><?= gettext("OpenVPN Connect") ?>: <a href="https://play.google.com/store/apps/details?id=net.openvpn.openvpn"><?=gettext("Android (Google Play)")?></a> or <a href="https://itunes.apple.com/us/app/openvpn-connect/id590379981"><?=gettext("iOS (App Store)")?></a> - <?= gettext("Recommended client for iOS") ?> - <br/><a href="http://www.sparklabs.com/viscosity/"><?= gettext("Viscosity") ?></a> - <?= gettext("Recommended client for Mac OSX") ?> - <br/><a href="http://code.google.com/p/tunnelblick/"><?= gettext("Tunnelblick") ?></a> - <?= gettext("Free client for OSX") ?> + <br/><a href="https://www.sparklabs.com/viscosity/"><?= gettext("Viscosity") ?></a> - <?= gettext("Recommended client for Mac OS X") ?> + <br/><a href="https://tunnelblick.net"><?= gettext("Tunnelblick") ?></a> - <?= gettext("Free client for OS X") ?> </td> </tr> </table> diff --git a/config/openvpn-client-export/vpn_openvpn_export_shared.php b/config/openvpn-client-export/vpn_openvpn_export_shared.php index 630bb253..5810e97b 100644 --- a/config/openvpn-client-export/vpn_openvpn_export_shared.php +++ b/config/openvpn-client-export/vpn_openvpn_export_shared.php @@ -1,22 +1,22 @@ -<?php +<?php /* vpn_openvpn_export_shared.php part of pfSense (http://www.pfSense.org) Copyright (C) 2008 Shrew Soft Inc. Copyright (C) 2010 Ermal Luçi Copyright (C) 2011-2015 ESF, LLC - All rights reserved. + 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 @@ -44,7 +44,7 @@ if (!is_array($config['openvpn']['openvpn-server'])) { $a_server = $config['openvpn']['openvpn-server']; $ras_server = array(); -foreach($a_server as $sindex => $server) { +foreach ($a_server as $sindex => $server) { if (isset($server['disable'])) { continue; } @@ -57,8 +57,7 @@ foreach($a_server as $sindex => $server) { $port = $server['local_port']; if ($server['description']) { $name = "{$server['description']} {$prot}:{$port}"; - } - else { + } else { $name = "Shared Key Server {$prot}:{$port}"; } $ras_serverent['index'] = $sindex; @@ -79,7 +78,7 @@ if (isset($_POST['act'])) { $error = false; -if(($act == "skconf") || ($act == "skzipconf")) { +if (($act == "skconf") || ($act == "skzipconf")) { $srvid = $_GET['srvid']; if (($srvid === false) || ($config['openvpn']['openvpn-server'][$srvid]['mode'] != "p2p_shared_key")) { pfSenseHeader("vpn_openvpn_export.php"); @@ -189,13 +188,15 @@ function download_begin(act) { return; } useaddr = document.getElementById("useaddr_hostname").value; - } else + } else { useaddr = document.getElementById("useaddr").value; + } var useproxy = 0; var useproxypass = 0; - if (document.getElementById("useproxy").checked) + if (document.getElementById("useproxy").checked) { useproxy = 1; + } var proxyaddr = document.getElementById("proxyaddr").value; var proxyport = document.getElementById("proxyport").value; @@ -205,8 +206,9 @@ function download_begin(act) { return; } - if (document.getElementById("useproxypass").value != 'none') + if (document.getElementById("useproxypass").value != 'none') { useproxypass = 1; + } var proxytype = document.getElementById("useproxytype").value; @@ -245,14 +247,15 @@ function download_begin(act) { } } - window.open(dlurl,"_self"); + window.open(dlurl, "_self"); } function server_changed() { var table = document.getElementById("clients"); - while (table.rows.length > 1 ) + while (table.rows.length > 1 ) { table.deleteRow(1); + } var index = document.getElementById("server").selectedIndex; @@ -271,17 +274,18 @@ function server_changed() { function useaddr_changed(obj) { - if (obj.value == "other") + if (obj.value == "other") { $('HostName').show(); - else + } else { $('HostName').hide(); - + } + } function useproxy_changed(obj) { if ((obj.id == "useproxy" && obj.checked) || - (obj.id == "useproxypass" && (obj.value != 'none'))) { + (obj.id == "useproxypass" && (obj.value != 'none'))) { $(obj.id + '_opts').show(); } else { $(obj.id + '_opts').hide(); @@ -298,9 +302,9 @@ function useproxy_changed(obj) { } ?> <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="openvpn export shared"> - <tr> + <tr> <td> - <?php + <?php $tab_array = array(); $tab_array[] = array(gettext("Server"), false, "vpn_openvpn_server.php"); $tab_array[] = array(gettext("Client"), false, "vpn_openvpn_client.php"); @@ -320,7 +324,7 @@ function useproxy_changed(obj) { <td width="22%" valign="top" class="vncellreq">Shared Key Server</td> <td width="78%" class="vtable"> <select name="server" id="server" class="formselect" onchange="server_changed()"> - <?php foreach($ras_server as & $server): ?> + <?php foreach ($ras_server as & $server): ?> <option value="<?=$server['sindex'];?>"><?=$server['name'];?></option> <?php endforeach; ?> </select> @@ -406,7 +410,7 @@ function useproxy_changed(obj) { </tr> <tr> <td width="25%"> - <br /> + <br /> </td> <td> <select name="useproxypass" id="useproxypass" class="formselect" onchange="useproxy_changed(this)"> @@ -417,39 +421,39 @@ function useproxy_changed(obj) { <span class="vexpl"> Choose proxy authentication if any. </span> - <br /> - <table border="0" cellpadding="2" cellspacing="0" id="useproxypass_opts" style="display:none" summary="name and password"> - <tr> - <td align="right" width="25%"> - <span class="vexpl"> - Username : - </span> - </td> - <td> - <input name="proxyuser" id="proxyuser" class="formfld unknown" size="20" value="" /> - </td> - </tr> - <tr> - <td align="right" width="25%"> - <span class="vexpl"> - Password : - </span> - </td> - <td> - <input name="proxypass" id="proxypass" type="password" class="formfld pwd" size="20" value="" /> - </td> - </tr> - <tr> - <td align="right" width="25%"> - <span class="vexpl"> - Confirm : - </span> - </td> - <td> - <input name="proxyconf" id="proxyconf" type="password" class="formfld pwd" size="20" value="" /> - </td> - </tr> - </table> + <br /> + <table border="0" cellpadding="2" cellspacing="0" id="useproxypass_opts" style="display:none" summary="name and password"> + <tr> + <td align="right" width="25%"> + <span class="vexpl"> + Username : + </span> + </td> + <td> + <input name="proxyuser" id="proxyuser" class="formfld unknown" size="20" value="" /> + </td> + </tr> + <tr> + <td align="right" width="25%"> + <span class="vexpl"> + Password : + </span> + </td> + <td> + <input name="proxypass" id="proxypass" type="password" class="formfld pwd" size="20" value="" /> + </td> + </tr> + <tr> + <td align="right" width="25%"> + <span class="vexpl"> + Confirm : + </span> + </td> + <td> + <input name="proxyconf" id="proxyconf" type="password" class="formfld pwd" size="20" value="" /> + </td> + </tr> + </table> </td> </tr> </table> diff --git a/config/pfflowd/pfflowd.xml b/config/pfflowd/pfflowd.xml index 0a683bba..ea32c858 100644 --- a/config/pfflowd/pfflowd.xml +++ b/config/pfflowd/pfflowd.xml @@ -1,4 +1,46 @@ +<?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$ */ +/* ========================================================================== */ +/* + pfflowd.xml + Copyright (C) 2008 Bill Marquette + Copyright (C) 2011 Ermal Luçi + Copyright (C) 2011 Jim Pingle + Copyright (C) 2015 ESF, LLC + part of pfSense (http://www.pfSense.org/) + 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> <name>pfflowd</name> <version>1.0.3</version> <title>pfflowd: Settings</title> @@ -82,19 +124,23 @@ conf_mount_rw(); config_lock(); global $config; - foreach($config['installedpackages']['pfflowd']['config'] as $cf) { - if($cf['host'] != "") { + foreach ($config['installedpackages']['pfflowd']['config'] as $cf) { + if ($cf['host'] != "") { $start = "\n/sbin/ifconfig pfsync0 up\n"; $start .= "/usr/local/sbin/pfflowd "; $start .= " -n {$cf['host']}"; - if($cf['port'] != "") + if ($cf['port'] != "") { $start .= ":{$cf['port']}"; - if(!empty($cf['sourcehost'])) + } + if (!empty($cf['sourcehost'])) { $start .= " -s {$cf['sourcehost']} "; - if($cf['direction'] != "") + } + if ($cf['direction'] != "") { $start .= " -S {$cf['direction']}"; - if($cf['version'] != "") + } + if ($cf['version'] != "") { $start .= " -v {$cf['version']}"; + } write_rcfile(array( "file" => "pfflowd.sh", "start" => $start, @@ -110,18 +156,20 @@ } function validate_form_pfflowd($post, &$input_errors) { - if(($post['host'] == "") || !is_ipaddr($post['host'])) + if (($post['host'] == "") || !is_ipaddr($post['host'])) { $input_errors[] = 'You must specify a valid ip address in the \'Host\' field'; - if(($post['port'] == "") || !is_port($post['port'])) + } + if (($post['port'] == "") || !is_port($post['port'])) { $input_errors[] = 'You must specify a valid port number in the \'Port\' field'; + } } - + function cleanup_config_pfflowd() { global $a_pkg; $pffconf = array(); if (is_array($a_pkg)) { foreach($a_pkg as $cf) { - if($cf['host'] != "") { + if ($cf['host'] != "") { $pffconf = $cf; } } 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/sudo/sudo.inc b/config/sudo/sudo.inc index ed0feb9c..ccbda309 100644 --- a/config/sudo/sudo.inc +++ b/config/sudo/sudo.inc @@ -30,7 +30,7 @@ require_once("config.inc"); global $pfs_version; -$pfs_version = substr(trim(file_get_contents("/etc/version")),0,3); +$pfs_version = substr(trim(file_get_contents("/etc/version")), 0, 3); switch ($pfs_version) { case "2.1": /* Hackish way to detect if someone manually did pkg_add rather than use pbi. */ @@ -38,7 +38,7 @@ switch ($pfs_version) { define('SUDO_BASE', '/usr/pbi/sudo-' . php_uname("m")); define('SUDO_LIBEXEC_DIR', '/usr/local/libexec/'); } else { - define('SUDO_BASE','/usr/local'); + define('SUDO_BASE', '/usr/local'); define('SUDO_LIBEXEC_DIR', '/usr/local/libexec/sudo'); } break; @@ -66,17 +66,17 @@ function sudo_install() { if (!is_array($config['installedpackages']['sudo']['config'][0]['row'])) { $config['installedpackages']['sudo']['config'][0]['row'] = array( 0 => array( - "username" => "user:root", + "username" => "user:root", "runas" => "user:root", "cmdlist" => "ALL" ), 1 => array( - "username" => "user:admin", + "username" => "user:admin", "runas" => "user:root", "cmdlist" => "ALL" ), 2 => array( - "username" => "group:admins", + "username" => "group:admins", "runas" => "user:root", "cmdlist" => "ALL" ) @@ -196,7 +196,7 @@ This also forces the user to give full paths to executables, which they should b */ function sudo_validate_commands(&$input_errors) { $idx = 0; - while(isset($_POST["cmdlist{$idx}"])) { + while (isset($_POST["cmdlist{$idx}"])) { $commands = $_POST["cmdlist" . $idx++]; if (strtoupper($commands) == "ALL") { continue; diff --git a/config/sudo/sudo.xml b/config/sudo/sudo.xml index e9b4dcbb..6124a641 100644 --- a/config/sudo/sudo.xml +++ b/config/sudo/sudo.xml @@ -42,7 +42,7 @@ <description>Sudo Command Control</description> <requirements>None</requirements> <name>sudo</name> - <version>0.2.6</version> + <version>0.2.7</version> <title>Sudo - Shell Command Privilege Delegation Utility</title> <include_file>/usr/local/pkg/sudo.inc</include_file> <menu> 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/tftp2/tftp.inc b/config/tftp2/tftp.inc index ea75e0d2..a2b7d1e3 100644 --- a/config/tftp2/tftp.inc +++ b/config/tftp2/tftp.inc @@ -1,23 +1,21 @@ <?php -/* $Id$ */ /* -/* ========================================================================== */ -/* - tftp_inc.php + tftp.inc + part of pfSense (https://www.pfSense.org/) Copyright (C) 2008 Mark J Crane + Copyright (C) 2011 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. + 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. + 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 @@ -30,98 +28,60 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -function tftp_guid() { - if (function_exists('com_create_guid')){ - return com_create_guid(); - }else{ - mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up. - $charid = strtoupper(md5(uniqid(rand(), true))); - $hyphen = chr(45);// "-" - $uuid = chr(123)// "{" - .substr($charid, 0, 8).$hyphen - .substr($charid, 8, 4).$hyphen - .substr($charid,12, 4).$hyphen - .substr($charid,16, 4).$hyphen - .substr($charid,20,12) - .chr(125);// "}" - return $uuid; - } -} - -function tftp_pkg_is_service_running($servicename) { - exec("/bin/ps ax | awk '{ print $5 }'", $psout); - array_shift($psout); - foreach($psout as $line) { - $ps[] = trim(array_pop(explode(' ', array_pop(explode('/', $line))))); - } - if(is_service_running($servicename, $ps) or is_process_running($servicename) ) { - return true; - } - else { - return false; - } -} - -function tftp_byte_convert( $bytes ) { - - if ($bytes<=0) +function tftp_byte_convert($bytes) { + if ($bytes <= 0) { return '0 Byte'; - - $convention=1000; //[1000->10^x|1024->2^x] - $s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB'); - $e=floor(log($bytes,$convention)); - return round($bytes/pow($convention,$e),2).' '.$s[$e]; + } + $convention = 1000; + $s = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB'); + $e = floor(log($bytes, $convention)); + return round($bytes/pow($convention, $e), 2) . ' ' . $s[$e]; } function tftp_install_command() { global $config; - conf_mount_rw(); - - if (!is_dir('/tftpboot')) { - // Create the directory - exec("mkdir /tftpboot"); - - //Set the directory permissions - exec("chmod -R 777 /tftpboot"); - } - - if (!is_dir('/root/backup/')) { - // Create the backup directory - exec("mkdir /root/backup/"); - } - // if backup file exists restore it - $filename = 'tftp.bak.tgz'; + $tftpdir = "/tftpboot"; + $tftpbackup = "/root/backup/tftp.bak.tgz"; - //extract a specific directory to /usr/local/freeswitch - if (file_exists('/root/backup/'.$filename)) { - system('cd /; tar xvpfz /root/backup/tftp.bak.tgz'); - system('chmod -R 744 /tftpboot/*'); - unset($filename); + // Create the directories if required + conf_mount_rw(); + safe_mkdir("{$tftpdir}", 0777); + safe_mkdir("/root/backup/"); + + // Restore backup if it exists + if (file_exists($tftpbackup)) { + system("/usr/bin/tar xvpfz {$tftpbackup} -C /"); + system("/bin/chmod -R 0744 {$tftpdir}/*"); + unset($tftpbackup); } + conf_mount_ro(); } function tftp_deinstall_command() { - - //exec("rm -R /tftpboot"); + conf_mount_rw(); unlink_if_exists("/usr/local/etc/rc.d/tftp.sh"); unlink_if_exists("/tmp/pkg_mgr_tftp.log"); + conf_mount_ro(); } function tftp_generate_rules($type) { global $config, $FilterIflist; - if ($type != "nat") + + if ($type != "nat") { return; + } + // Open inetd.conf write handle - $inetd_fd = fopen("/var/etc/inetd.conf","a+"); - /* add tftp daemon */ + $inetd_fd = fopen("/var/etc/inetd.conf", "a+"); + // Add tftp daemon fwrite($inetd_fd, "tftp\t\tdgram\tudp\twait\t\troot\t/usr/libexec/tftpd\ttftpd /tftpboot\n"); - fclose($inetd_fd); // Close file handle + // Close file handle + fclose($inetd_fd); if (!empty($config['installedpackages']['tftpd']['config'][0]['tftpdinterface'])) { $tftpifs = explode(",", $config['installedpackages']['tftpd']['config'][0]['tftpdinterface']); - foreach($tftpifs as $tftpif) { + foreach ($tftpifs as $tftpif) { if ($FilterIflist[$tftpif]) { log_error("Adding TFTP nat rules"); $natrules .= "rdr pass on {$FilterIflist[$tftpif]['if']} proto udp from any to {$FilterIflist[$tftpif]['ip']} port 69 -> 127.0.0.1 port 69\n"; diff --git a/config/tftp2/tftp.xml b/config/tftp2/tftp.xml index 0a13548c..2a526a4c 100644 --- a/config/tftp2/tftp.xml +++ b/config/tftp2/tftp.xml @@ -2,44 +2,46 @@ <!DOCTYPE packagegui SYSTEM "./schema/packages.dtd"> <?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> <packagegui> - <copyright> - <![CDATA[ + <copyright> + <![CDATA[ /* $Id$ */ -/* ========================================================================== */ +/* ====================================================================================== */ /* - tftp.xml - Copyright (C) 2008 Mark J Crane - All rights reserved. - */ -/* ========================================================================== */ + tftp.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2008 Mark J Crane + Copyright (C) 2011 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: + 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></description> - <requirements>Describe your package requirements here</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>tftp Settings</name> <version>2.0</version> <title>TFTP: Settings</title> @@ -65,12 +67,10 @@ <configpath>installedpackages->$packagename</configpath> <additional_files_needed> <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/tftp2/tftp.inc</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> <item>https://packages.pfsense.org/packages/config/tftp2/tftp_files.php</item> </additional_files_needed> <custom_php_install_command> @@ -79,5 +79,7 @@ <custom_php_deinstall_command> tftp_deinstall_command(); </custom_php_deinstall_command> - <filter_rules_needed>tftp_generate_rules</filter_rules_needed> -</packagegui>
\ No newline at end of file + <filter_rules_needed> + tftp_generate_rules + </filter_rules_needed> +</packagegui> diff --git a/config/tftp2/tftp_files.php b/config/tftp2/tftp_files.php index 3562cd9f..eebe4c5e 100644 --- a/config/tftp2/tftp_files.php +++ b/config/tftp2/tftp_files.php @@ -1,10 +1,11 @@ <?php -/* $Id$ */ /* - tftp_files.php - Copyright (C) 2008 Mark J Crane - All rights reserved. - + tftp_files.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2008 Mark J Crane + Copyright (C) 2011 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: @@ -27,7 +28,6 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - require_once("guiconfig.inc"); require_once("/usr/local/pkg/tftp.inc"); @@ -36,9 +36,9 @@ $backup_dir = "/root/backup"; $backup_filename = "tftp.bak.tgz"; $backup_path = "{$backup_dir}/{$backup_filename}"; $files_dir = "/tftpboot"; - $filename = $_GET['filename']; $download_dir = $files_dir; + if (($_GET['a'] == "download") && $_GET['t'] == "backup") { conf_mount_rw(); $filename = $backup_filename; @@ -46,6 +46,7 @@ if (($_GET['a'] == "download") && $_GET['t'] == "backup") { system("tar -czC / -f {$backup_path} tftpboot"); conf_mount_ro(); } + if (($_GET['a'] == "download") && file_exists("{$download_dir}/{$filename}")) { session_cache_limiter('public'); @@ -55,8 +56,10 @@ if (($_GET['a'] == "download") && file_exists("{$download_dir}/{$filename}")) { header("Content-Type: application/download"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=\"{$filename}\""); - header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 - header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past + /* HTTP/1.1 */ + header("Cache-Control: no-cache, must-revalidate"); + /* Date in the past */ + header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Content-Length: " . filesize("{$download_dir}/{$filename}")); fpassthru($fd); exit; @@ -81,13 +84,15 @@ if ($_GET['a'] == "other") { } } if ($_POST['submit'] == "Save") { - if ($_POST['tftpdinterface']) { + if (($_POST['tftpdinterface']) != "") { $config['installedpackages']['tftpd']['config'][0]['tftpdinterface'] = implode(",", $_POST['tftpdinterface']); $pconfig['tftpdinterface'] = $_POST['tftpdinterface']; write_config(); send_event("filter reload"); } else { unset($config['installedpackages']['tftpd']['config'][0]['tftpdinterface']); + write_config(); + send_event("filter reload"); } } @@ -122,7 +127,7 @@ include("head.inc"); <?php $savemsg = $_GET["savemsg"]; if ($savemsg) { - print_info_box($savemsg); + print_info_box($savemsg); } ?> @@ -141,78 +146,81 @@ if ($savemsg) { <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> - <td class="tabcont" > + <td class="tabcont"> <table width="100%" border="0" cellpadding="6" cellspacing="0"> - <tr> <td width="78%" class="vtable"> - <form action="tftp_files.php" method="POST" enctype="multipart/form-data" name="frmInterfaces" onSubmit=""> - <p><span class="vexpl"><strong>TFTP Daemon Interfaces<br/></strong> + <form action="tftp_files.php" method="post" enctype="multipart/form-data" name="frmInterfaces" onsubmit=""> + <p><span class="vexpl"><strong>TFTP Daemon Interfaces</strong></span></p> <?=gettext("Choose the interfaces where you want the TFTP daemon to accept connections.");?><br/><br/> - <select name="tftpdinterface[]" multiple="true" class="formselect" size="3"> -<?php + <select name="tftpdinterface[]" multiple="multiple" class="formselect" size="3"> + <?php $ifdescs = get_configured_interface_with_descr(); - foreach ($ifdescs as $ifent => $ifdesc): -?> - <option value="<?=$ifent;?>" <?php if (in_array($ifent, $pconfig['tftpdinterface'])) echo "selected"; ?>><?=gettext($ifdesc);?></option> -<?php endforeach; ?> - </select> - <br/><input name="submit" type="submit" class="button" id="save" value="Save"> + foreach ($ifdescs as $ifent => $ifdesc) { + $selected = ""; + if (in_array($ifent, $pconfig['tftpdinterface'])) { + $selected = " selected=\"selected\""; + } + echo "\t\t\t<option value=\"{$ifent}\"{$selected}>" . $ifdesc . "</option>\n"; + } + ?> + </select><br /> + <input name="submit" type="submit" class="button" id="save" value="Save" /> </form> </td> </tr> <tr> - <td><p><span class="vexpl"><span class="red"><strong>TFTP files<br /> - </strong></span> - Trivial File Transport Protocol is a very simple file transfer - protocol. Use the file upload to add files to the /tftpboot directory. - Click on the file from the file list below to download it. - </span></p></td> + <td> + <p><span class="vexpl"><span class="red"><strong>TFTP files</strong></span><br /> + Trivial File Transport Protocol is a very simple file transfer protocol.<br /> + Use the file upload to add files to the /tftpboot directory.<br /> + Click on the file from the file list below to download it.<br /> + </span></p> + </td> </tr> </table> <br /> <div id="niftyOutter"> - <form action="tftp_files.php" method="POST" enctype="multipart/form-data" name="frmUpload" onSubmit=""> + <form action="tftp_files.php" method="post" enctype="multipart/form-data" name="frmUpload" onsubmit=""> <table> <tr> <td align="right">File to upload:</td> <td valign="top" class="label"> - <input name="ulfile" type="file" class="button" id="ulfile"></td> + <input name="ulfile" type="file" class="button" id="ulfile" /> + </td> </tr> <tr> <td valign="top"> </td> <td valign="top" class="label"> - <input name="submit" type="submit" class="button" id="upload" value="Upload"></td> + <input name="submit" type="submit" class="button" id="upload" value="Upload" /> + </td> </tr> </table> - </div> </form> - - <br /> - <br /> - - <?php - echo "<table width='690' cellpadding='0' cellspacing='0' border='0'>\n"; - echo "<tr>\n"; - echo "<td width='80%'>\n"; - echo "<b>Backup / Restore</b><br />\n"; - echo "The 'backup' button will tar gzip /tftpboot/ to /root/backup/tftp.bak.tgz it then presents a file to download. \n"; - echo "If the backup file does not exist in /root/backup/tftp.bak.tgz then the 'restore' button will be hidden. \n"; - echo "Use Diagnostics->Command->File to upload: to browse to the file and then click on upload it now ready to be restored. \n"; - echo "<br /><br />\n"; - echo "</td>\n"; - echo "<td width='20%' valign='middle' align='right'>\n"; - echo " <input type='button' value='backup' onclick=\"document.location.href='tftp_files.php?a=download&t=backup';\" />\n"; - if (file_exists('/root/backup/tftp.bak.tgz')) { - echo " <input type='button' value='restore' onclick=\"document.location.href='tftp_files.php?a=other&t=restore';\" />\n"; - } - echo "</td>\n"; - echo "</tr>\n"; - echo "</table>\n"; - echo "<br /><br />\n\n"; - ?> - + </div> + <br /><br /> + + <table width='690' cellpadding='0' cellspacing='0' border='0'> + <tr> + <td width='80%'> + <strong>Backup / Restore</strong><br /> + The 'Backup' button compresses /tftpboot/ to /root/backup/tftp.bak.tgz; after that it presents the backup for download.<br /> + If the backup file does not exist in /root/backup/tftp.bak.tgz then the 'Restore' button will be hidden.<br /> + Use Diagnostics -> Command -> File to upload: to browse to the file and then click on upload.<br /> + After that, backup will be ready to be restored.<br /><br /> + </td> + <td width='20%' valign='middle' align='right'> + <input type="button" value="Backup" onclick="document.location.href='tftp_files.php?a=download&t=backup'" /> + <?php + if (file_exists('/root/backup/tftp.bak.tgz')) { + echo "<input type='button' value='Restore' onclick=\"document.location.href='tftp_files.php?a=other&t=restore';\" />\n"; + } + ?> + </td> + </tr> + </table> + <br /><br /> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> @@ -225,28 +233,33 @@ if ($savemsg) { if ($handle = opendir('/tftpboot')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { - $tftp_filesize = filesize('/tftpboot/'.$file); + $tftp_filesize = filesize("/tftpboot/{$file}"); $tftp_filesize = tftp_byte_convert($tftp_filesize); echo "<tr>\n"; - echo " <td class=\"listlr\" ondblclick=\"\">\n"; - echo " <a href=\"tftp_files.php?a=download&filename=".$file."\">\n"; - echo " $file"; - echo " </a>"; - echo " </td>\n"; - echo " <td class=\"listlr\" ondblclick=\"\">\n"; - echo date ("F d Y H:i:s", filemtime('/tftpboot/'.$file)); - echo " </td>\n"; - echo " <td class=\"listlr\" ondblclick=\"\">\n"; - echo " ".$tftp_filesize; - echo " </td>\n"; - echo " <td valign=\"middle\" nowrap class=\"list\">\n"; - echo " <table border=\"0\" cellspacing=\"0\" cellpadding=\"1\">\n"; - echo " <tr>\n"; - echo " <td valign=\"middle\"><form method='POST' action='/edit.php' target='_blank'><input type='hidden' name='savetopath' value='/tftpboot/".$file."'><input type='hidden' name='submit' value='Load'><input type='image' src=\"/themes/".$g['theme']."/images/icons/icon_e.gif\" width=\"17\" height=\"17\" border=\"0\"></form></td>\n"; - echo " <td><a href=\"tftp_files.php?type=tftp&act=del&filename=".$file."\" onclick=\"return confirm('Do you really want to delete this file?')\"><img src=\"/themes/". $g['theme']."/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\"></a></td>\n"; - echo " </tr>\n"; - echo " </table>\n"; - echo " </td>\n"; + echo "<td class=\"listlr\" ondblclick=\"\">"; + echo "<a href=\"tftp_files.php?a=download&filename={$file}\">{$file}</a>"; + echo "</td>\n"; + echo "<td class=\"listlr\" ondblclick=\"\">"; + echo "\t\t" . date("F d Y H:i:s", filemtime('/tftpboot/'. $file)); + echo "</td>\n"; + echo "<td class=\"listlr\" ondblclick=\"\">"; + echo "\t\t{$tftp_filesize}"; + echo "</td>\n"; + echo "<td valign=\"middle\" nowrap=\"nowrap\" class=\"list\">\n"; + echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"1\">\n"; + echo "<tr>\n"; + echo "<td valign=\"middle\">\n"; + echo "\t<form method=\"post\" action=\"/edit.php\" target=\"_blank\"><input type=\"hidden\" name=\"savetopath\" value=\"/tftpboot/{$file}\" />\n"; + echo "\t\t<input type=\"hidden\" name=\"submit\" value=\"Load\" />\n"; + echo "\t\t<input type='image' src=\"/themes/" . $g['theme'] . "/images/icons/icon_e.gif\" />\n"; + echo "\t</form>\n"; + echo "</td>\n"; + echo "<td><a href=\"tftp_files.php?type=tftp&act=del&filename={$file}\" onclick=\"return confirm('Do you really want to delete this file?')\">"; + echo "<img src=\"/themes/" . $g['theme'] . "/images/icons/icon_x.gif\" alt=\"\" width=\"17\" height=\"17\" border=\"0\" /></a>"; + echo "</td>\n"; + echo "</tr>\n"; + echo "</table>\n"; + echo "</td>\n"; echo "</tr>\n"; } } diff --git a/config/vnstat2/vnstat2.inc b/config/vnstat2/vnstat2.inc index ca8d869d..89a8b7c2 100644 --- a/config/vnstat2/vnstat2.inc +++ b/config/vnstat2/vnstat2.inc @@ -1,15 +1,42 @@ <?php +/* + vnstat2.inc + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2010 PerryMason + 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"); function vnstat_install_deinstall() { conf_mount_rw(); global $config; // Remove Vnstat package and files - exec("rm -d -R /usr/local/www/vnstat2"); - exec("rm -d -R /usr/local/www/vnstati"); - exec("rm -d -R /usr/local/pkg/vnstat2"); - exec("rm /usr/local/etc/vnstat.conf"); + exec("/bin/rm -d -R /usr/local/www/vnstat2"); + exec("/bin/rm -d -R /usr/local/www/vnstati"); + exec("/bin/rm -d -R /usr/local/pkg/vnstat2"); + exec("/bin/rm /usr/local/etc/vnstat.conf"); // Remove vnstat cron entry from config.xml vnstat2_install_cron(false); conf_mount_ro(); @@ -22,29 +49,29 @@ function vnstat2_install_cron($vnstat_cron_value) { return; } $x=0; - foreach($config['cron']['item'] as $item) { + foreach ($config['cron']['item'] as $item) { if (strstr($item['command'], "/usr/local/pkg/vnstat2/vnstat2.sh")) { $is_installed = true; break; } $x++; } - switch($vnstat_cron_value) { + switch ($vnstat_cron_value) { case true: if (!$is_installed) { $cron_item = array(); - $cron_item['minute'] = "*/1"; - $cron_item['hour'] = "*"; - $cron_item['mday'] = "*"; - $cron_item['month'] = "*"; - $cron_item['wday'] = "*"; - $cron_item['who'] = "root"; - $cron_item['command'] = "/usr/local/pkg/vnstat2/vnstat2.sh"; + $cron_item['minute'] = "*/1"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/local/pkg/vnstat2/vnstat2.sh"; $config['cron']['item'][] = $cron_item; write_config(); configure_cron(); } - break; + break; case false: if ($is_installed == true) { if ($x > 0) { @@ -53,7 +80,7 @@ function vnstat2_install_cron($vnstat_cron_value) { } configure_cron(); } - break; + break; } } @@ -61,14 +88,14 @@ function change_vnstat_conf() { conf_mount_rw(); global $config; $config['installedpackages']['vnstat2']['config'][0]['monthrotate'] = $_POST['monthrotate']; - $config['installedpackages']['vnstat2']['config'][0]['vnstat_phpfrontend'] = $_POST['vnstat_phpfrontend']; + $config['installedpackages']['vnstat2']['config'][0]['vnstat_phpfrontend'] = $_POST['vnstat_phpfrontend']; write_conf_f(); write_config(); if ($config['installedpackages']['vnstat2']['config'][0]['vnstat_phpfrontend'] == "on") { vnstat_php_frontend(); } else { - exec("[ -d /usr/local/www/vnstat2 ] && rm -d -R /usr/local/www/vnstat2"); + exec("[ -d /usr/local/www/vnstat2 ] && /bin/rm -d -R /usr/local/www/vnstat2"); } conf_mount_ro(); } @@ -77,9 +104,9 @@ function write_conf_f() { global $config; $monthrotate = $config['installedpackages']['vnstat2']['config'][0]['monthrotate']; - // ************ Write new vnstat.conf ***************** + // Write new vnstat.conf $vnstat_conf_file = <<<EOF -# vnStat 1.10 config file +# vnStat 1.12 config file ## # location of the database directory @@ -106,7 +133,7 @@ CRxD "-" CTxD "-" EOF; - $hf2 = fopen("/usr/local/etc/vnstat.conf","w"); + $hf2 = fopen("/usr/local/etc/vnstat.conf", "w"); if (!$hf2) { log_error("could not open /usr/local/etc/vnstat.conf for writing"); exit; @@ -124,11 +151,11 @@ function create_vnstati_image() { $iface = $_POST['vnstat_interface']; $ifaces_final = convert_friendly_interface_to_real_interface_name($iface); $config['installedpackages']['vnstat2']['config'][0]['vnstat_interface'] = $ifaces_final; - @mkdir($vnstat_tmp); - exec("/usr/local/bin/vnstati -i ". escapeshellarg($ifaces_final) ." -vs -o {$vnstat_tmp}/newpicture1.png"); - exec("/usr/local/bin/vnstati -i ". escapeshellarg($ifaces_final) ." -m -o {$vnstat_tmp}/newpicture2.png"); - exec("/usr/local/bin/vnstati -i ". escapeshellarg($ifaces_final) ." -d -o {$vnstat_tmp}/newpicture3.png"); - exec("/usr/local/bin/vnstati -i ". escapeshellarg($ifaces_final) ." -t -o {$vnstat_tmp}/newpicture4.png"); + safe_mkdir($vnstat_tmp); + exec("/usr/local/bin/vnstati -i " . escapeshellarg($ifaces_final) . " -vs -o {$vnstat_tmp}/newpicture1.png"); + exec("/usr/local/bin/vnstati -i " . escapeshellarg($ifaces_final) . " -m -o {$vnstat_tmp}/newpicture2.png"); + exec("/usr/local/bin/vnstati -i " . escapeshellarg($ifaces_final) . " -d -o {$vnstat_tmp}/newpicture3.png"); + exec("/usr/local/bin/vnstati -i " . escapeshellarg($ifaces_final) . " -t -o {$vnstat_tmp}/newpicture4.png"); write_config(); conf_mount_ro(); } @@ -136,7 +163,7 @@ function create_vnstati_image() { function create_vnstat_output() { conf_mount_rw(); global $config; - $iface2 = $_POST['vnstat_interface2']; + $iface2 = $_POST['vnstat_interface2']; $ifaces_final2 = convert_friendly_interface_to_real_interface_name($iface2); $config['installedpackages']['vnstat2']['config'][0]['vnstat_interface2'] = $ifaces_final2; write_config(); @@ -144,7 +171,7 @@ function create_vnstat_output() { } function vnstat_link_config() { - // Check for pbi install and arch type then create symlinks + // Check for PBI install and arch type, then create symlinks if (file_exists('/usr/pbi/vnstat-' . php_uname("m"))) { $conf_path = "/usr/local/etc/vnstat.conf"; $pbi_conf_path = "/usr/pbi/vnstat-" . php_uname("m") . "/etc/vnstat.conf"; @@ -157,7 +184,7 @@ function vnstat_create_nic_dbs() { global $config; conf_mount_rw(); $vnstat_db_prefix = "/conf/vnstat"; - @mkdir($vnstat_db_prefix); + safe_mkdir($vnstat_db_prefix); // Locate NICs and create associated databases $array_of_real_nic_names = array(); @@ -189,9 +216,8 @@ function vnstat_install_config() { if (is_dir("/usr/local/pkg/vnstat2/vnstat")) { @rename("/usr/local/pkg/vnstat2/vnstat", $vnstat_db_prefix); } - if (!is_dir($vnstat_db_prefix)) { - @mkdir($vnstat_db_prefix); - } + safe_mkdir($vnstat_db_prefix); + vnstat_link_config(); // Add MonthRotate value to config.xml and write /usr/local/etc/vnstat.conf if ($config['installedpackages']['vnstat2']['config'][0]['monthrotate'] == "") { @@ -212,9 +238,9 @@ function vnstat_php_frontend() { global $config; // Copy vnstat_php_frontend to www exec("/bin/cp -a /usr/local/pkg/vnstat2/vnstat_php_frontend/. /usr/local/www/vnstat2/"); - // Find information to be writing in config.php + // Find information to be written in config.php // $iface_list_array_items - exec("ls /conf/vnstat/ | grep -v '\.'", $vnstat_nic_in); + exec("/bin/ls /conf/vnstat/ | /usr/bin/grep -v '\.'", $vnstat_nic_in); $iface_list_array_items = implode("', '", $vnstat_nic_in); $iface_list_array = "\$iface_list = array('$iface_list_array_items');"; // $iface_title_array_items @@ -235,8 +261,8 @@ function vnstat_php_frontend() { } } $iface_title_array = implode($iface_title_array_items2); - // php in php static items - // added to new items for the front end version 1.5.1 + // PHP in static items + // Added to new items for the front end version 1.5.1 $locale = "\$locale = 'en_US.UTF-8';"; $language = "\$language = 'en';"; $vnstat_bin2 = "\$vnstat_bin = '/usr/local/bin/vnstat';"; @@ -245,7 +271,7 @@ function vnstat_php_frontend() { $colorscheme2 = "\$colorscheme['light'] = array("; $colorscheme3 = "\$colorscheme['red'] = array("; $colorscheme4 = "\$colorscheme['pfSense'] = array("; - // ************ Write new config.php ****************** + // Write new config.php $config_file = <<<EOF <?php // @@ -320,7 +346,7 @@ function vnstat_php_frontend() { ?> EOF; - $hf = fopen("/usr/local/www/vnstat2/config.php","w"); + $hf = fopen("/usr/local/www/vnstat2/config.php", "w"); if (!$hf) { log_error("could not open /usr/local/www/vnstat2/config.php for writing"); exit; diff --git a/config/vnstat2/vnstat2.xml b/config/vnstat2/vnstat2.xml index f696850a..7e65d465 100644 --- a/config/vnstat2/vnstat2.xml +++ b/config/vnstat2/vnstat2.xml @@ -1,19 +1,53 @@ <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> -<?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> - <copyright></copyright> - <description>Describe your package here</description> - <requirements>Describe your package requirements here</requirements> - <faq>Currently there are no FAQ items provided.</faq> + <copyright> + <![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ +/* + vnstat2.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 PerryMason + 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> <name>vnstat2</name> - <version>11.2,3</version> + <version>1.12.5</version> <title>Vnstat2</title> <aftersaveredirect>/pkg_edit.php?xml=vnstat2.xml&id=0</aftersaveredirect> <include_file>/usr/local/pkg/vnstat2/vnstat2.inc</include_file> <menu> <name>Vnstat2</name> - <tooltiptext></tooltiptext> <section>Status</section> <url>/pkg_edit.php?xml=vnstat2.xml&id=0</url> </menu> @@ -42,17 +76,14 @@ </tabs> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat2.inc</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstati.xml</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstatoutput.xml</item> </additional_files_needed> <additional_files_needed> @@ -62,137 +93,110 @@ </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/www/diag_vnstat.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/www/diag_vnstat2.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/www/vnstat2_img.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/www/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/www/vnstati.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/lang/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/lang/cs.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/lang/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/lang/en.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/lang/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/lang/nl.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/dark/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/dark/style.css</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/dark/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/dark/theme.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/espresso/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/espresso/style.css</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/espresso/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/espresso/theme.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/light/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/light/style.css</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/light/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/light/theme.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/pfSense/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/pfSense/style.css</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/pfSense/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/pfSense/theme.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/red/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/red/style.css</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/themes/red/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/themes/red/theme.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/config.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/COPYING</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/graph.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/graph_svg.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/index.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/localize.php</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/README</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/vera_copyright.txt</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/VeraBd.ttf</item> </additional_files_needed> <additional_files_needed> <prefix>/usr/local/pkg/vnstat2/vnstat_php_frontend/</prefix> - <chmod>0644</chmod> <item>https://packages.pfsense.org/packages/config/vnstat2/vnstat_php_frontend/vnstat.php</item> </additional_files_needed> <fields> @@ -235,14 +239,13 @@ </options> </field> <field> - <description>Enable vnstat php frontend (Note that no login will be needed)</description> - <fielddescr>Enable php frontend for vnstat</fielddescr> + <description>Enable vnstat PHP frontend</description> + <fielddescr>Enable PHP frontend for vnstat. (Note that no login will be needed.)</fielddescr> <fieldname>vnstat_phpfrontend</fieldname> <type>checkbox</type> </field> </fields> <custom_add_php_command>change_vnstat_conf();</custom_add_php_command> - <custom_php_resync_config_command></custom_php_resync_config_command> <custom_php_install_command>vnstat_install_config();</custom_php_install_command> <custom_php_deinstall_command>vnstat_install_deinstall();</custom_php_deinstall_command> </packagegui> diff --git a/config/vnstat2/vnstati.xml b/config/vnstat2/vnstati.xml index 84a104dd..b395e65f 100644 --- a/config/vnstat2/vnstati.xml +++ b/config/vnstat2/vnstati.xml @@ -1,19 +1,53 @@ <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> -<?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> - <copyright></copyright> - <description>Describe your package here</description> - <requirements>Describe your package requirements here</requirements> - <faq>Currently there are no FAQ items provided.</faq> + <copyright> + <![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ +/* + vnstati.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2010 PerryMason + 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> <name>vnstat2</name> - <version>1.0</version> + <version>1.12.5</version> <title>Vnstat2</title> <aftersaveredirect>/vnstati.php</aftersaveredirect> <include_file>/usr/local/pkg/vnstat2/vnstat2.inc</include_file> <menu> <name>vnstat2</name> - <tooltiptext></tooltiptext> <section>Status</section> <url>/pkg_edit.php?xml=vnstat2.xml&id=0</url> </menu> @@ -48,9 +82,7 @@ <type>interfaces_selection</type> </field> </fields> - <custom_php_global_functions></custom_php_global_functions> <custom_add_php_command>create_vnstati_image();</custom_add_php_command> - <custom_php_resync_config_command></custom_php_resync_config_command> <custom_php_install_command>vnstat_install_config();</custom_php_install_command> <custom_php_deinstall_command>vnstat_install_deinstall();</custom_php_deinstall_command> </packagegui> diff --git a/config/vnstat2/vnstatoutput.xml b/config/vnstat2/vnstatoutput.xml index 5062be1f..297c171a 100644 --- a/config/vnstat2/vnstatoutput.xml +++ b/config/vnstat2/vnstatoutput.xml @@ -1,19 +1,53 @@ <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE packagegui SYSTEM "../schema/packages.dtd"> -<?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> +<?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?> <packagegui> - <copyright></copyright> - <description>Describe your package here</description> - <requirements>Describe your package requirements here</requirements> - <faq>Currently there are no FAQ items provided.</faq> + <copyright> + <![CDATA[ +/* $Id$ */ +/* ====================================================================================== */ +/* + vnstatoutput.xml + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 PerryMason + 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> <name>vnstat2</name> - <version>1.0</version> + <version>1.12.5</version> <title>Vnstat2</title> <aftersaveredirect>/diag_vnstat2.php</aftersaveredirect> <include_file>/usr/local/pkg/vnstat2/vnstat2.inc</include_file> <menu> <name>vnstat2</name> - <tooltiptext></tooltiptext> <section>Status</section> <url>/pkg_edit.php?xml=vnstat2.xml&id=0</url> </menu> @@ -48,9 +82,7 @@ <type>interfaces_selection</type> </field> </fields> - <custom_php_global_functions></custom_php_global_functions> <custom_add_php_command>create_vnstat_output();</custom_add_php_command> - <custom_php_resync_config_command></custom_php_resync_config_command> <custom_php_install_command>vnstat_install_config();</custom_php_install_command> <custom_php_deinstall_command>vnstat_install_deinstall();</custom_php_deinstall_command> </packagegui> diff --git a/config/vnstat2/www/diag_vnstat.php b/config/vnstat2/www/diag_vnstat.php index 5e6524c7..e5014120 100644 --- a/config/vnstat2/www/diag_vnstat.php +++ b/config/vnstat2/www/diag_vnstat.php @@ -1,8 +1,9 @@ <?php -/* $Id$ */ /* - diag_pf_info.php - Copyright (C) 2010 Scott Ullrich + diag_vnstat.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 PerryMason + Copyright (C) 2015 ESF, LLC All rights reserved. Redistribution and use in source and binary forms, with or without @@ -26,26 +27,10 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -/* - pfSense_BUILDER_BINARIES: /usr/bin/top - pfSense_MODULE: system -*/ - -##|+PRIV -##|*IDENT=page-diag-system-activity -##|*NAME=Diagnostics: System Activity -##|*DESCR=Allows access to the 'Diagnostics: System Activity' page -##|*MATCH=diag_system_activity* -##|-PRIV - -require("guiconfig.inc"); - -$pf_version=substr(trim(file_get_contents("/etc/version")),0,3); - -$pgtitle = gettext("Vnstat2 summary "); +require_once("guiconfig.inc"); +$pgtitle = gettext("Vnstat2 summary"); if ($_REQUEST['getactivity']) { - $text = `vnstat`; + $text = shell_exec("/usr/local/bin/vnstat"); $text .= "<p/>"; echo $text; exit; @@ -55,8 +40,8 @@ include("head.inc"); ?> <body link="#0000CC" vlink="#0000CC" alink="#0000CC"> - <script type="text/javascript"> +//<![CDATA[ function getcpuactivity() { var url = "/diag_vnstat.php"; var pars = 'getactivity=yes'; @@ -69,37 +54,36 @@ include("head.inc"); }); } function activitycallback(transport) { - $('cpuactivitydiv').innerHTML = '<font face="Courier"><font size="2"><b><pre>' + transport.responseText + '</pre></font>'; - setTimeout('getcpuactivity()', 2000); + $('cpuactivitydiv').innerHTML = '<font face="Courier"><font size="2"><b><pre>' + transport.responseText + '</pre></font>'; + setTimeout('getcpuactivity()', 2000); } - setTimeout('getcpuactivity()', 5000); + setTimeout('getcpuactivity()', 5000); +//]]> </script> <div id='maincontent'> <?php - include("fbegin.inc"); - if ($pf_version < 2.0) - echo "<p class=\"pgtitle\">{$pgtitle}</p>"; - echo "<a href=$myurl/pkg_edit.php?xml=vnstatoutput.xml&id=0>Go Back</a><br />"; + include("fbegin.inc"); + if ($savemsg) { echo "<div id='savemsg'>"; print_info_box($savemsg); - echo "</div>"; + echo "</div>"; } - if ($input_errors) + if ($input_errors) { print_input_errors($input_errors); + } ?> -<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td> <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0"> <tr> <td> - <center> <table> <tr> <td> <div name='cpuactivitydiv' id='cpuactivitydiv'> - <b><?=gettext("Gathering vnstat information, please wait...");?> + <strong><?=gettext("Gathering vnstat information, please wait...");?></strong> </div> </td> </tr> @@ -107,7 +91,6 @@ include("head.inc"); </td> </tr> </table> - </div> </td> </tr> </table> diff --git a/config/vnstat2/www/diag_vnstat2.php b/config/vnstat2/www/diag_vnstat2.php index 504fd534..2153cc18 100644 --- a/config/vnstat2/www/diag_vnstat2.php +++ b/config/vnstat2/www/diag_vnstat2.php @@ -1,8 +1,9 @@ <?php -/* $Id$ */ /* - diag_system_pftop.php - Copyright (C) 2008-2009 Scott Ullrich + diag_vnstat2.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 PerryMason + Copyright (C) 2015 ESF, LLC All rights reserved. Redistribution and use in source and binary forms, with or without @@ -26,24 +27,10 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -/* - pfSense_MODULE: filter -*/ - -##|+PRIV -##|*IDENT=page-diag-system-activity -##|*NAME=Diagnostics: System Activity -##|*DESCR=Allows access to the 'Diagnostics: System Activity' page -##|*MATCH=diag_system_pftop* -##|-PRIV - -require("guiconfig.inc"); +require_once("guiconfig.inc"); global $config; $aaaa = $config['installedpackages']['vnstat2']['config'][0]['vnstat_interface2']; $bbbb = convert_real_interface_to_friendly_descr($aaaa); - -$pf_version=substr(trim(file_get_contents("/etc/version")),0,3); $pgtitle = gettext("Vnstat2 info for $bbbb ($aaaa)"); if ($_REQUEST['getactivity']) { @@ -51,9 +38,9 @@ if ($_REQUEST['getactivity']) { $sorttype = escapeshellarg($_REQUEST['sorttype']); } else { $sorttype = gettext("-h"); + $text = shell_exec("/usr/local/bin/vnstat -i {$aaaa} {$sorttype}"); + echo $text; } - $text = `vnstat -i $aaaa {$sorttype}`; - echo $text; exit; } @@ -69,6 +56,7 @@ if ($_REQUEST['sorttype']) { <body link="#0000CC" vlink="#0000CC" alink="#0000CC"> <form method="post" action="diag_vnstat2.php"> <script type="text/javascript"> +//<![CDATA[ function getcpuactivity() { var url = "/diag_vnstat2.php"; var pars = 'getactivity=yes&sorttype=' + $('sorttype').value; @@ -81,22 +69,19 @@ if ($_REQUEST['sorttype']) { }); } function activitycallback(transport) { - $('cpuactivitydiv').innerHTML = '<font face="Courier"><font size="2"><b><pre>' + transport.responseText + '</pre></font>'; - setTimeout('getcpuactivity()', 2500); + $('cpuactivitydiv').innerHTML = '<font face="Courier"><font size="2"><b><pre>' + transport.responseText + '</pre></font>'; + setTimeout('getcpuactivity()', 2500); } - setTimeout('getcpuactivity()', 1000); + setTimeout('getcpuactivity()', 1000); +//]]> </script> <div id='maincontent'> <?php - include("fbegin.inc"); - if ($pf_version < 2.0) { - echo "<p class=\"pgtitle\">{$pgtitle}</p>"; - } - echo "<a href=$myurl/pkg_edit.php?xml=vnstatoutput.xml&id=0>Go Back</a><br />"; + include("fbegin.inc"); if ($savemsg) { echo "<div id='savemsg'>"; print_info_box($savemsg); - echo "</div>"; + echo "</div>"; } if ($input_errors) { print_input_errors($input_errors); @@ -104,7 +89,7 @@ if ($_REQUEST['sorttype']) { ?> <form method="post"> <?=gettext("Sort type:"); ?> - <select name='sorttype' id='sorttype' onChange='this.form.submit();'> + <select name='sorttype' id='sorttype' onchange='this.form.submit();'> <option value='<?=$sorttype?>'><?=$sorttype?></option> <option value='-h'><?=gettext("Show traffic for the last 24 hours.");?></option> <option value='-d'><?=gettext("Show traffic for days.");?></option> @@ -113,19 +98,18 @@ if ($_REQUEST['sorttype']) { <option value='-tr'><?=gettext("Calculate 5sec. of traffic.");?></option> <option value='-w'><?=gettext("Show traffic for 7 days, current and previous week.");?></option> </select> - <p/> -<table width="100%" border="0" cellpadding="0" cellspacing="0"> + <p /> +<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td> <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0"> <tr> <td> - <center> <table> <tr> <td> <div name='cpuactivitydiv' id='cpuactivitydiv'> - <b><?=gettext("Gathering vnstat activity, please wait...");?> + <strong><?=gettext("Gathering vnstat activity, please wait...");?></strong> </div> </td> </tr> @@ -133,7 +117,6 @@ if ($_REQUEST['sorttype']) { </td> </tr> </table> - </div> </td> </tr> </table> diff --git a/config/vnstat2/www/vnstat2_img.php b/config/vnstat2/www/vnstat2_img.php index a83c3b06..fce29a4c 100644 --- a/config/vnstat2/www/vnstat2_img.php +++ b/config/vnstat2/www/vnstat2_img.php @@ -1,4 +1,32 @@ <?php +/* + vnstat2_img.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 PerryMason + 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("guiconfig.inc"); $image = basename($_GET['image']); header("Content-type: image/png"); diff --git a/config/vnstat2/www/vnstati.php b/config/vnstat2/www/vnstati.php index 01eca208..d5f8d9bf 100644 --- a/config/vnstat2/www/vnstati.php +++ b/config/vnstat2/www/vnstati.php @@ -1,16 +1,45 @@ <?php +/* + vnstati.php + part of pfSense (https://www.pfSense.org/) + Copyright (C) 2009 PerryMason + 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("guiconfig.inc"); global $config; include("head.inc"); +echo '<body link="#0000CC" vlink="#0000CC" alink="#0000CC">'; include("fbegin.inc"); $aaaa = $config['installedpackages']['vnstat2']['config'][0]['vnstat_interface']; $cccc = convert_real_interface_to_friendly_descr($aaaa); $pgtitle = gettext("Vnstati info for $cccc ($aaaa)"); -echo "<a href=$myurl/pkg_edit.php?xml=vnstati.xml&id=0>Go Back</a><br />"; -echo "<center><p class=\"pgtitle\">{$pgtitle}</p>"; ?> -<center><img src="vnstat2_img.php?image=newpicture1.png" style="border:1px solid black; center;"><br /> -<center><img src="vnstat2_img.php?image=newpicture2.png" style="border:1px solid black; center;"><br /> -<center><img src="vnstat2_img.php?image=newpicture3.png" style="border:1px solid black; center;"><br /> -<center><img src="vnstat2_img.php?image=newpicture4.png" style="border:1px solid black; center;"><br /> +<p style="text-align: center"><img src="vnstat2_img.php?image=newpicture1.png" alt="" style="border:1px solid black; center;" /></p> +<p style="text-align: center"><img src="vnstat2_img.php?image=newpicture2.png" alt="" style="border:1px solid black; center;" /></p> +<p style="text-align: center"><img src="vnstat2_img.php?image=newpicture3.png" alt="" style="border:1px solid black; center;" /></p> +<p style="text-align: center"><img src="vnstat2_img.php?image=newpicture4.png" alt="" style="border:1px solid black; center;" /></p> <?php include("fend.inc"); ?> +</body> +</html> 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> - |