From 4a973535c9a7cc030ff11318f852afc2ec0ae207 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Thu, 10 Mar 2016 16:48:23 +0100 Subject: [PATCH] (legacy) refactor services_wol.php --- src/www/services_wol.php | 449 +++++++++++++++++++++------------------ 1 file changed, 248 insertions(+), 201 deletions(-) diff --git a/src/www/services_wol.php b/src/www/services_wol.php index 3f7cf6764..1ee0d7aba 100644 --- a/src/www/services_wol.php +++ b/src/www/services_wol.php @@ -1,226 +1,273 @@ . - All rights reserved. + Copyright (C) 2014-2015 Deciso B.V. + Copyright (C) 2003-2004 Manuel Kasper . + 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. */ require_once("guiconfig.inc"); require_once("interfaces.inc"); +require_once("util.inc"); -if (!is_array($config['wol'])) { - $config['wol'] = array(); -} - -if (!is_array($config['wol']['wolentry'])) { - $config['wol']['wolentry'] = array(); +if (empty($config['wol']['wolentry']) || !is_array($config['wol']['wolentry'])) { + $config['wol'] = array(); + $config['wol']['wolentry'] = array(); } $a_wol = &$config['wol']['wolentry']; -if($_GET['wakeall'] <> "") { - $i = 0; - $savemsg = ""; - foreach ($a_wol as $wolent) { - $mac = $wolent['mac']; - $if = $wolent['interface']; - $description = $wolent['descr']; - $ipaddr = get_interface_ip($if); - if (!is_ipaddr($ipaddr)) - continue; - $bcip = gen_subnet_max($ipaddr, get_interface_subnet($if)); - /* Execute wol command and check return code. */ - if (!mwexec("/usr/local/bin/wol -i {$bcip} {$mac}")) { - $savemsg = sprintf(gettext('Sent magic packet to %s (%s).'), $mac, $description); - } else { - $savemsg = sprintf(gettext('Please check the %ssystem log%s, the wol command for %s (%s) did not complete successfully.'), '', '', $description, $mac); - } - } -} -if ($_POST || $_GET['mac']) { - unset($input_errors); +if ($_SERVER['REQUEST_METHOD'] === 'GET') { +} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { + // delete entry + if (isset($_POST['act']) && $_POST['act'] == "del" && isset($_POST['id'])) { + if (!empty($a_wol[$_POST['id']])) { + unset($a_wol[$_POST['id']]); + write_config(); + } + exit; + } elseif (isset($_POST['act']) && $_POST['act'] == "wakeall") { + $savemsg = ""; + $result = array(); + foreach ($a_wol as $wolent) { + $if = $wolent['interface']; + $ipaddr = get_interface_ip($if); + if (!is_ipaddr($ipaddr)) { + continue; + } + $bcip = escapeshellarg(gen_subnet_max($ipaddr, get_interface_subnet($if))); + /* Execute wol command and check return code. */ + if (!mwexec("/usr/local/bin/wol -i {$bcip} ". escapeshellarg($wolent['mac']))) { + $result[] = sprintf(gettext('Sent magic packet to %s (%s).'), htmlspecialchars($wolent['mac']), $wolent['descr']); + } else { + $result[] = sprintf(gettext('Please check the %ssystem log%s, the wol command for %s (%s) did not complete successfully.'), '', '', $wolent['descr'], htmlspecialchars($wolent['mac'])); + } + } + echo json_encode($result); + exit; + } elseif (isset($_POST['mac'])) { + /* input validation */ + if (empty($_POST['mac']) || !is_macaddr($_POST['mac'])) { + $input_errors[] = gettext("A valid MAC address must be specified."); + } + if (empty($_POST['if'])) { + $input_errors[] = gettext("A valid interface must be specified."); + } else { + $ipaddr = get_interface_ip($_POST['if']); + if (!is_ipaddr($ipaddr)) { + $input_errors[] = gettext("A valid ip could not be found!"); + } + } - if ($_GET['mac']) { - /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */ - $_GET['mac'] = strtolower(str_replace("-", ":", $_GET['mac'])); - $mac = $_GET['mac']; - $if = $_GET['if']; - } else { - /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */ - $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac'])); - $mac = $_POST['mac']; - $if = $_POST['interface']; - } - - /* input validation */ - if (!$mac || !is_macaddr($mac)) - $input_errors[] = gettext("A valid MAC address must be specified."); - if (!$if) - $input_errors[] = gettext("A valid interface must be specified."); - - if (!$input_errors) { - /* determine broadcast address */ - $ipaddr = get_interface_ip($if); - if (!is_ipaddr($ipaddr)) - $input_errors[] = gettext("A valid ip could not be found!"); - else { - $bcip = gen_subnet_max($ipaddr, get_interface_subnet($if)); - /* Execute wol command and check return code. */ - if(!mwexec("/usr/local/bin/wol -i {$bcip} " . escapeshellarg($mac))) { - $savemsg = sprintf(gettext('Sent magic packet to %s.'), $mac); - } else { - $savemsg = sprintf(gettext('Please check the %ssystem log%s, the wol command for %s did not complete successfully.'), '', '', $mac); - } - } - } -} - -if ($_GET['act'] == "del") { - if ($a_wol[$_GET['id']]) { - unset($a_wol[$_GET['id']]); - write_config(); - header("Location: services_wol.php"); - exit; - } + if (count($input_errors) == 0) { + /* determine broadcast address */ + $bcip = escapeshellarg(gen_subnet_max($ipaddr, get_interface_subnet($_POST['if']))); + /* Execute wol command and check return code. */ + if(!mwexec("/usr/local/bin/wol -i {$bcip} " . escapeshellarg($_POST['mac']))) { + $savemsg = sprintf(gettext('Sent magic packet to %s.'), $_POST['mac']); + } else { + $savemsg = sprintf(gettext('Please check the %ssystem log%s, the wol command for %s did not complete successfully.'), '', '', $_POST['mac']); + } + } + } } include("head.inc"); - ?> + - -
- -
- -
- 0) print_input_errors($input_errors); ?> - - -
- -
- -
-

-
- -
- -
- -
- - - - - - - - - - - - -
-
-
- -
- ','');?>
  - " /> -
-
- -
-

-
- -
- - - - - - - - - - - - - - - - -
- - - - - -
-
- - - - - - - - - - - -
')" class="btn btn-default btn-xs">
-
-
-
-

- - -
-
-
-

-
-
-
-
-
-
-
-
+
+
+
+ 0) print_input_errors($input_errors); ?> + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +    +
+ + +
+ " /> + +
  + " /> +
+ + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+ +
+
+
+
+
+
+
+