* Copyright (C) 2008 Shrew Soft Inc. * 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: * * 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"); require_once("system.inc"); $a_defaults = system_sysctl_defaults(); $a_system = []; /* to be filled from defaults */ $a_tunable = &config_read_array('sysctl', 'item'); $a_sysctl = json_decode(configd_run('system sysctl'), true); if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (isset($_GET['id']) && isset($a_tunable[$_GET['id']])) { $id = $_GET['id']; } if (isset($_GET['act'])) { $act = $_GET['act']; } else { $act = null; } $pconfig = []; if (isset($id)) { $pconfig['tunable'] = $a_tunable[$id]['tunable']; $pconfig['value'] = $a_tunable[$id]['value']; $pconfig['descr'] = $a_tunable[$id]['descr']; } else { $pconfig['tunable'] = isset($_GET['tunable']) ? $_GET['tunable'] : null; $pconfig['value'] = null; $pconfig['descr'] = null; } } elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['id']) && isset($a_tunable[$_POST['id']])) { $id = $_POST['id']; } if (isset($_POST['act'])) { $act = $_POST['act']; } else { $act = null; } $pconfig = $_POST; if (isset($id) && $act == "del") { unset($a_tunable[$id]); write_config(); mark_subsystem_dirty('sysctl'); header(url_safe('Location: /system_advanced_sysctl.php')); exit; } else if ($act == 'reset') { // reset tunables to factory defaults (when available) if (file_exists('/usr/local/etc/config.xml.sample')) { $factory_config = load_config_from_file('/usr/local/etc/config.xml.sample'); if (!empty($factory_config['sysctl']) && !empty($factory_config['sysctl']['item'])){ $a_tunable = $factory_config['sysctl']['item']; mark_subsystem_dirty('sysctl'); write_config(); } } header(url_safe('Location: /system_advanced_sysctl.php')); exit; } else if (!empty($pconfig['apply'])) { system_sysctl_configure(); system_login_configure(); clear_subsystem_dirty('sysctl'); header(url_safe('Location: /system_advanced_sysctl.php')); exit; } elseif (!empty($pconfig['Submit'])) { $tunableent = []; $tunableent['tunable'] = $pconfig['tunable']; $tunableent['value'] = $pconfig['value']; $tunableent['descr'] = $pconfig['descr']; if (isset($id)) { $a_tunable[$id] = $tunableent; } else { $a_tunable[] = $tunableent; } mark_subsystem_dirty('sysctl'); write_config(); header(url_safe('Location: /system_advanced_sysctl.php')); exit; } } foreach ($a_defaults as $name => $info) { if (!empty($info['required'])) { $a_system[] = $name; } } foreach ($a_tunable as $key => &$tunable) { /* translate hidden strings before HTML escape */ if (!empty($tunable['descr'])) { $tunable['descr'] = gettext($tunable['descr']); } elseif (!empty($a_sysctl[$tunable['tunable']]['description'])) { $tunable['descr'] = $a_sysctl[$tunable['tunable']]['description']; } if (!empty($a_defaults[$tunable['tunable']]['type'])) { $tunable['type'] = $a_defaults[$tunable['tunable']]['type']; } elseif (!empty($a_sysctl[$tunable['tunable']]['type'])) { $tunable['type'] = $a_sysctl[$tunable['tunable']]['type']; } /* add the key for config-bound tunables */ $tunable['key'] = $key; /* remove system defaults in config items */ $pos = array_search($tunable['tunable'], $a_system); if ($pos !== false) { unset($a_system[$pos]); } } foreach ($a_system as $default) { /* display system defaults as well */ $next = [ 'tunable' => $default, 'value' => 'default', 'descr' => $a_sysctl[$default]['description'] ]; if (!empty($a_defaults[$default]['type'])) { $next['type'] = $a_defaults[$default]['type']; } elseif (!empty($a_sysctl[$default]['type'])) { $next['type'] = $a_sysctl[$default]['type']; } $a_tunable[] = $next; } uasort($a_tunable, function($a, $b) { return strnatcmp($a['tunable'], $b['tunable']); }); include("head.inc"); legacy_html_escape_form_data($a_tunable); legacy_html_escape_form_data($pconfig); ?>
' .gettext('Tunables are composed of runtime settings for sysctl.conf which take effect ' . 'immediately after apply and boot settings for loader.conf which require a reboot.')); } ?>
  " onclick="window.location.href='/system_advanced_sysctl.php'" />