diff --git a/src/www/load_balancer_monitor_edit.php b/src/www/load_balancer_monitor_edit.php index 337acf106..024104491 100644 --- a/src/www/load_balancer_monitor_edit.php +++ b/src/www/load_balancer_monitor_edit.php @@ -1,30 +1,30 @@ . - All rights reserved. + Copyright (C) 2014-2016 Deciso B.V. + Copyright (C) 2008 Bill Marquette . + 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"); @@ -32,405 +32,308 @@ require_once("services.inc"); require_once("interfaces.inc"); $rfc2616 = array( - 100 => "100 Continue", - 101 => "101 Switching Protocols", - 200 => "200 OK", - 201 => "201 Created", - 202 => "202 Accepted", - 203 => "203 Non-Authoritative Information", - 204 => "204 No Content", - 205 => "205 Reset Content", - 206 => "206 Partial Content", - 300 => "300 Multiple Choices", - 301 => "301 Moved Permanently", - 302 => "302 Found", - 303 => "303 See Other", - 304 => "304 Not Modified", - 305 => "305 Use Proxy", - 306 => "306 (Unused)", - 307 => "307 Temporary Redirect", - 400 => "400 Bad Request", - 401 => "401 Unauthorized", - 402 => "402 Payment Required", - 403 => "403 Forbidden", - 404 => "404 Not Found", - 405 => "405 Method Not Allowed", - 406 => "406 Not Acceptable", - 407 => "407 Proxy Authentication Required", - 408 => "408 Request Timeout", - 409 => "409 Conflict", - 410 => "410 Gone", - 411 => "411 Length Required", - 412 => "412 Precondition Failed", - 413 => "413 Request Entity Too Large", - 414 => "414 Request-URI Too Long", - 415 => "415 Unsupported Media Type", - 416 => "416 Requested Range Not Satisfiable", - 417 => "417 Expectation Failed", - 500 => "500 Internal Server Error", - 501 => "501 Not Implemented", - 502 => "502 Bad Gateway", - 503 => "503 Service Unavailable", - 504 => "504 Gateway Timeout", - 505 => "505 HTTP Version Not Supported" + 100 => "100 Continue", + 101 => "101 Switching Protocols", + 200 => "200 OK", + 201 => "201 Created", + 202 => "202 Accepted", + 203 => "203 Non-Authoritative Information", + 204 => "204 No Content", + 205 => "205 Reset Content", + 206 => "206 Partial Content", + 300 => "300 Multiple Choices", + 301 => "301 Moved Permanently", + 302 => "302 Found", + 303 => "303 See Other", + 304 => "304 Not Modified", + 305 => "305 Use Proxy", + 306 => "306 (Unused)", + 307 => "307 Temporary Redirect", + 400 => "400 Bad Request", + 401 => "401 Unauthorized", + 402 => "402 Payment Required", + 403 => "403 Forbidden", + 404 => "404 Not Found", + 405 => "405 Method Not Allowed", + 406 => "406 Not Acceptable", + 407 => "407 Proxy Authentication Required", + 408 => "408 Request Timeout", + 409 => "409 Conflict", + 410 => "410 Gone", + 411 => "411 Length Required", + 412 => "412 Precondition Failed", + 413 => "413 Request Entity Too Large", + 414 => "414 Request-URI Too Long", + 415 => "415 Unsupported Media Type", + 416 => "416 Requested Range Not Satisfiable", + 417 => "417 Expectation Failed", + 500 => "500 Internal Server Error", + 501 => "501 Not Implemented", + 502 => "502 Bad Gateway", + 503 => "503 Service Unavailable", + 504 => "504 Gateway Timeout", + 505 => "505 HTTP Version Not Supported" ); -function is_rfc2616_code($code) { - global $rfc2616; - if (isset($rfc2616[$code])) - return true; - else - return false; -} - -function print_rfc2616_select($tag, $current){ - global $rfc2616; - - /* Default to 200 OK if not set */ - if ($current == "") - $current = 200; - - echo "\n"; -} - - -$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_monitor.php'); - -if (!is_array($config['load_balancer']['monitor_type'])) { - $config['load_balancer']['monitor_type'] = array(); +if (empty($config['load_balancer']['monitor_type']) || !is_array($config['load_balancer']['monitor_type'])) { + $config['load_balancer']['monitor_type'] = array(); } $a_monitor = &$config['load_balancer']['monitor_type']; -if (is_numericint($_GET['id'])) - $id = $_GET['id']; -if (isset($_POST['id']) && is_numericint($_POST['id'])) - $id = $_POST['id']; -if (isset($id) && $a_monitor[$id]) { - $pconfig['name'] = $a_monitor[$id]['name']; - $pconfig['type'] = $a_monitor[$id]['type']; - $pconfig['descr'] = $a_monitor[$id]['descr']; - $pconfig['options'] = array(); - $pconfig['options'] = $a_monitor[$id]['options']; -} else { - /* Some sane page defaults */ - $pconfig['options']['path'] = '/'; - $pconfig['options']['code'] = 200; -} +if ($_SERVER['REQUEST_METHOD'] === 'GET') { + if (isset($_GET['id']) && !empty($a_monitor[$_GET['id']])) { + $id = $_GET['id']; + } + $pconfig = array(); + foreach (array('name', 'type', 'descr') as $fieldname) { + if (isset($id) && isset($a_monitor[$id][$fieldname])) { + $pconfig[$fieldname] = $a_monitor[$id][$fieldname]; + } else { + $pconfig[$fieldname] = null; + } + } + if (isset($id)) { + $pconfig['options_send'] = isset($a_monitor[$id]['options']['send']) ? $a_monitor[$id]['options']['send'] : null; + $pconfig['options_expect'] = isset($a_monitor[$id]['options']['expect']) ? $a_monitor[$id]['options']['expect'] : null; + $pconfig['options_path'] = isset($a_monitor[$id]['options']['path']) ? $a_monitor[$id]['options']['path'] : null; + $pconfig['options_host'] = isset($a_monitor[$id]['options']['host']) ? $a_monitor[$id]['options']['host'] : null; + $pconfig['options_code'] = isset($a_monitor[$id]['options']['code']) ? $a_monitor[$id]['options']['code'] : null; + } else { + /* option defaults */ + $pconfig['options_send'] = null; + $pconfig['options_expect'] = null; + $pconfig['options_path'] = '/'; + $pconfig['options_code'] = 200; + $pconfig['options_host'] = null; + } +} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { + if (isset($_POST['id']) && !empty($a_monitor[$_POST['id']])) { + $id = $_POST['id']; + } + $pconfig = $_POST; + $input_errors = array(); -if ($_POST) { - unset($input_errors); - $pconfig = $_POST; + /* input validation */ + $reqdfields = explode(" ", "name type descr"); + $reqdfieldsn = array(gettext("Name"),gettext("Type"),gettext("Description")); - /* turn $_POST['http_options_*'] into $pconfig['options'][*] */ - foreach($_POST as $key => $val) { - if (stristr($key, 'options') !== false) { - if (stristr($key, $pconfig['type'].'_') !== false) { - $opt = explode('_',$key); - $pconfig['options'][$opt[2]] = $val; - } - unset($pconfig[$key]); - } - } + do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors); + /* Ensure that our monitor names are unique */ + for ($i=0; isset($config['load_balancer']['monitor_type'][$i]); $i++) { + if ($pconfig['name'] == $config['load_balancer']['monitor_type'][$i]['name'] && $i != $id) { + $input_errors[] = gettext("This monitor name has already been used. Monitor names must be unique."); + } + } - /* input validation */ - $reqdfields = explode(" ", "name type descr"); - $reqdfieldsn = array(gettext("Name"),gettext("Type"),gettext("Description")); + if (strpos($pconfig['name'], " ") !== false) { + $input_errors[] = gettext("You cannot use spaces in the 'name' field."); + } + switch($pconfig['type']) { + case 'icmp': + case 'tcp': + break; + case 'http': + case 'https': + if (!empty($pconfig['options_host']) && !is_hostname($pconfig['options_host'])) { + $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'."); + } + if (!empty($pconfig['options_code']) && !isset($rfc2616[$pconfig['options_code']])) { + $input_errors[] = gettext("HTTP(s) codes must be from RFC2616."); + } + if (empty($pconfig['options_path'])) { + $input_errors[] = gettext("The path to monitor must be set."); + } + break; + case 'send': + break; + } - do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + if (count($input_errors) == 0) { + $monent = array(); + $monent['name'] = $pconfig['name']; + $monent['type'] = $pconfig['type']; + $monent['descr'] = $pconfig['descr']; + $monent['options'] = array(); + if($pconfig['type'] == "http" || $pconfig['type'] == "https") { + $monent['options']['path'] = $pconfig['options_path']; + $monent['options']['host'] = $pconfig['options_host']; + $monent['options']['code'] = $pconfig['options_code']; + } elseif ($pconfig['type'] == "send") { + $monent['options']['send'] = $pconfig['options_send']; + $monent['options']['expect'] = $pconfig['options_expect']; + } - /* Ensure that our monitor names are unique */ - for ($i=0; isset($config['load_balancer']['monitor_type'][$i]); $i++) - if (($_POST['name'] == $config['load_balancer']['monitor_type'][$i]['name']) && ($i != $id)) - $input_errors[] = gettext("This monitor name has already been used. Monitor names must be unique."); + if (isset($id)) { + /* modify all pools with this name */ + for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) { + if ($config['load_balancer']['lbpool'][$i]['monitor'] == $a_monitor[$id]['name']) { + $config['load_balancer']['lbpool'][$i]['monitor'] = $monent['name']; + } + } + $a_monitor[$id] = $monent; + } else { + $a_monitor[] = $monent; + } - if (strpos($_POST['name'], " ") !== false) - $input_errors[] = gettext("You cannot use spaces in the 'name' field."); - - switch($_POST['type']) { - case 'icmp': { - break; - } - case 'tcp': { - break; - } - case 'http': - case 'https': { - if (is_array($pconfig['options'])) { - if (isset($pconfig['options']['host']) && $pconfig['options']['host'] != "") { - if (!is_hostname($pconfig['options']['host'])) { - $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'."); - } - } - if (isset($pconfig['options']['code']) && $pconfig['options']['code'] != "") { - // Check code - if(!is_rfc2616_code($pconfig['options']['code'])) { - $input_errors[] = gettext("HTTP(s) codes must be from RFC2616."); - } - } - if (!isset($pconfig['options']['path']) || $pconfig['options']['path'] == "") { - $input_errors[] = gettext("The path to monitor must be set."); - } - } - break; - } - case 'send': { - if (is_array($pconfig['options'])) { - if (isset($pconfig['options']['send']) && $pconfig['options']['send'] != "") { - // Check send - } - if (isset($pconfig['options']['expect']) && $pconfig['options']['expect'] != "") { - // Check expect - } - } - break; - } - } - - if (!$input_errors) { - $monent = array(); - - if (isset($id) && $a_monitor[$id]) { - $monent = $a_monitor[$id]; - } - - $monent['name'] = $pconfig['name']; - $monent['type'] = $pconfig['type']; - $monent['descr'] = $pconfig['descr']; - if($pconfig['type'] == "http" || $pconfig['type'] == "https" ) { - /* log updates, then clear array and reassign - dumb, but easiest way to have a clear array */ - $monent['options'] = array(); - $monent['options']['path'] = $pconfig['options']['path']; - $monent['options']['host'] = $pconfig['options']['host']; - $monent['options']['code'] = $pconfig['options']['code']; - } - if($pconfig['type'] == "send" ) { - /* log updates, then clear array and reassign - dumb, but easiest way to have a clear array */ - $monent['options'] = array(); - $monent['options']['send'] = $pconfig['options']['send']; - $monent['options']['expect'] = $pconfig['options']['expect']; - } - if($pconfig['type'] == "tcp" || $pconfig['type'] == "icmp") { - $monent['options'] = array(); - } - - if (isset($id) && $a_monitor[$id]) { - /* modify all pools with this name */ - for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) { - if ($config['load_balancer']['lbpool'][$i]['monitor'] == $a_monitor[$id]['name']) - $config['load_balancer']['lbpool'][$i]['monitor'] = $monent['name']; - } - $a_monitor[$id] = $monent; - } else { - $a_monitor[] = $monent; - } - - mark_subsystem_dirty('loadbalancer'); - write_config(); - header("Location: load_balancer_monitor.php"); - exit; - } + mark_subsystem_dirty('loadbalancer'); + write_config(); + header("Location: load_balancer_monitor.php"); + exit; + } } $service_hook = 'relayd'; include("head.inc"); - +legacy_html_escape_form_data($pconfig); $types = array("icmp" => gettext("ICMP"), "tcp" => gettext("TCP"), "http" => gettext("HTTP"), "https" => gettext("HTTPS"), "send" => gettext("Send/Expect")); - ?> - + - - -
- -
- -
- - 0) print_input_errors($input_errors); ?> - -
- -
- -
- -
- - - - - - - - - - - - - - - - - > - - > - - > - - - - > - - - - > - - - - - - - -
- size="16" maxlength="16" /> -
- size="64" /> -
- -
- - - - - - - - - - - - - - -
- size="64" /> -
- size="64" />
-
- -
-
- - - - - - - - - - - - - - -
- size="64" /> -
- size="64" />
-
- -
-
- - - - - - - - - -
- size="64" /> -
- size="64" /> -
-
  - " /> - " onclick="window.location.href=''" /> - - - -
-
-
-
-
-
-
-
- +
+
+
+ 0) print_input_errors($input_errors); ?> +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ +
  + " /> + " onclick="window.location.href=''" /> + + + +
+
+
+
+
+
+
+