From 6bd7a6149036e86e7e6c4b155a6c46719ab39c24 Mon Sep 17 00:00:00 2001 From: Scott Ullrich Date: Sat, 29 May 2010 14:41:58 -0400 Subject: [PATCH 01/54] Only allow installer.php on non pfSense and nanobsd platforms --- usr/local/www/installer.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/usr/local/www/installer.php b/usr/local/www/installer.php index 534ff63ca9..e3663bdc35 100644 --- a/usr/local/www/installer.php +++ b/usr/local/www/installer.php @@ -29,6 +29,11 @@ require("guiconfig.inc"); +if($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") { + Header("Location: /index.php"); + exit; +} + function write_out_pc_sysinstaller_config($disk) { $fd = fopen("/PCBSD/pc-sysinstall/examples/pfSense-install.cfg", "w"); if(!$fd) { From 5d4f96c68949c2b26c95c474ddf69f773a50d945 Mon Sep 17 00:00:00 2001 From: Scott Ullrich Date: Sat, 29 May 2010 15:17:05 -0400 Subject: [PATCH 02/54] Refactor code --- usr/local/www/installer.php | 279 +++++++++++++++++------------------- 1 file changed, 135 insertions(+), 144 deletions(-) diff --git a/usr/local/www/installer.php b/usr/local/www/installer.php index e3663bdc35..9c2ddf5af1 100644 --- a/usr/local/www/installer.php +++ b/usr/local/www/installer.php @@ -34,6 +34,20 @@ if($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") { exit; } +// Main switch dispatcher +switch ($_REQUEST['state']) { + case "quickeasyinstall": + quickeasyinstall_gui(); + break; + case "update_installer_status": + update_installer_status(); + exit; + case "quickeasyinstall": + begin_quick_easy_install(); + default: + installer_main(); +} + function write_out_pc_sysinstaller_config($disk) { $fd = fopen("/PCBSD/pc-sysinstall/examples/pfSense-install.cfg", "w"); if(!$fd) { @@ -78,6 +92,10 @@ EOF; function start_installation() { $fd = fopen("/tmp/installer.sh", "w"); + if(!$fd) { + die("Could not open /tmp/installer.sh for writing"); + exit; + } fwrite($fd, "/PCBSD/pc-sysinstall/pc-sysinstall -c /PCBSD/pc-sysinstall/examples/pfSense-install.cfg && touch /tmp/install_complete"); fclose($fd); exec("chmod a+rx /tmp/installer.sh"); @@ -120,166 +138,139 @@ function begin_quick_easy_install() { start_installation(); } -if($_REQUEST['state'] == "update_installer_status") { - update_installer_status(); - exit; +function body_html() { + $pfSversion = str_replace("\n", "", file_get_contents("/etc/version")); + if(strstr($pfSversion, "1.2")) + $one_two = true; + $pgtitle = "pfSense: Installer"; + include("head.inc"); + echo << + + +EOF; + include("fbegin.inc"); + + if($one_two): + echo "

{$pgtitle}

"; + + if ($savemsg) print_info_box($savemsg); } -if($_REQUEST['step1_post']) { - -} - -if($_REQUEST['step2_post']) { - -} - -if($_REQUEST['step3_post']) { - -} - -if($_REQUEST['step4_post']) { - -} - -$pfSversion = str_replace("\n", "", file_get_contents("/etc/version")); -if(strstr($pfSversion, "1.2")) - $one_two = true; - -$pgtitle = "pfSense: Installer"; -include("head.inc"); - -?> - - - - - - -

- - - - -"; + include("fend.inc"); + echo ""; + echo ""; } function template() { -echo << - - - + +
-
- - - + +
-
-
+ body_html(); + echo << + + + - -
+
+ + + - -
+ +
-
-
-
-
-
+ +
+
+
+ EOF; - + end_html(); } function quickeasyinstall_gui() { + body_html(); echo << - - - - -
-
- - - - -
- -
- Starting Installer... Please wait...

- {{ Insert progressbar here }}

- -

-
-
-
- - +
+ + + + +
+
+ + + + +
+ +
+ Starting Installer... Please wait...

+ {{ Insert progressbar here }}

+ +

+
+
+
+
+ EOF; - + end_html(); } - function installer_main() { -echo << - - - - -
-
- - - - -
- - -
-
-
- + body_html(); + $disk = installer_find_first_disk(); + if(!$disk) + echo "WARNING: Could not find any suitable disks for installation."; + echo << + + + + +
+ +
+ EOF; - + end_html(); } -?> - - - - - - - +?> \ No newline at end of file From 309b3a20a0b9c22e1c48523d39bd63673b944fd0 Mon Sep 17 00:00:00 2001 From: Scott Ullrich Date: Sat, 29 May 2010 15:17:45 -0400 Subject: [PATCH 03/54] Remove typo --- usr/local/www/installer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/local/www/installer.php b/usr/local/www/installer.php index 9c2ddf5af1..f988d02ef1 100644 --- a/usr/local/www/installer.php +++ b/usr/local/www/installer.php @@ -170,7 +170,7 @@ function body_html() { EOF; include("fbegin.inc"); - if($one_two): + if($one_two) echo "

{$pgtitle}

"; if ($savemsg) print_info_box($savemsg); From 1fb059612c78c034fc77ff98085576625c1d3324 Mon Sep 17 00:00:00 2001 From: Ermal Date: Mon, 31 May 2010 18:21:42 +0000 Subject: [PATCH 04/54] Use full path and use variables to be consistent. --- sbin/dhclient-script | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sbin/dhclient-script b/sbin/dhclient-script index 5ef88eae15..d7cd3a6361 100755 --- a/sbin/dhclient-script +++ b/sbin/dhclient-script @@ -107,7 +107,7 @@ delete_old_routes() { $LOGGER "Deleting old routes" $ROUTE delete "$old_ip_address" $LOCALHOST >/dev/null 2>&1 # Only allow the default route to be overridden if it's on our own interface - DEFAULTROUTE_IFACE=`route get default | grep interface | awk '{print $2};'` + DEFAULTROUTE_IFACE=`/sbin/route get default | grep interface | awk '{print $2};'` if [ -z "${DEFAULTROUTE_IFACE}" -o "{$interface}" = "${DEFAULTROUTE_IFACE}" ]; then for router in $old_routers; do if [ $if_defaultroute = x -o $if_defaultroute = $interface ]; then @@ -134,7 +134,7 @@ add_new_routes() { # $ROUTE add $new_ip_address $LOCALHOST >/dev/null 2>&1 # Only allow the default route to be overridden if it's on our own interface - DEFAULTROUTE_IFACE=`route get default | grep interface | awk '{print $2};'` + DEFAULTROUTE_IFACE=`/sbin/route get default | grep interface | awk '{print $2};'` if [ -z "${DEFAULTROUTE_IFACE}" -o "{$interface}" = "${DEFAULTROUTE_IFACE}" ]; then for router in $new_routers; do if [ "$new_ip_address" = "$router" ]; then @@ -181,7 +181,7 @@ add_new_resolv_conf() { if [ -n "$new_domain_name_servers" ]; then # Remove old entries for nameserver in `cat /var/etc/nameserver_$interface`; do - route delete $nameserver + $ROUTE delete $nameserver done rm -f /var/etc/nameserver_$interface for nameserver in $new_domain_name_servers; do @@ -189,7 +189,7 @@ add_new_resolv_conf() { # so that mulitple wans work correctly with multiple dns # also backup the nameserver for later route removal echo $nameserver >>/var/etc/nameserver_$interface - route add $nameserver -iface $interface + $ROUTE add $nameserver -iface $interface done echo $new_domain_name >/var/etc/defaultdomain.conf fi From 924f202ee818c72b10855d3a1c06b34a9e7aa595 Mon Sep 17 00:00:00 2001 From: Ermal Date: Mon, 31 May 2010 19:14:29 +0000 Subject: [PATCH 05/54] Fixes #622. Add a new file status for signaling default gateway under /tmp. dhclient script will check for this file to define if the interface needs a default gateway or not from its given routes. --- etc/inc/system.inc | 16 +++++++++++++++- sbin/dhclient-script | 26 +++++++++----------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/etc/inc/system.inc b/etc/inc/system.inc index 6281a1475d..75e3f6d9d2 100644 --- a/etc/inc/system.inc +++ b/etc/inc/system.inc @@ -263,15 +263,29 @@ function system_routing_configure() { $interfacegw = ""; /* tack on all the hard defined gateways as well */ if (is_array($config['gateways']['gateway_item'])) { + mwexec("/bin/rm {$g['tmp_path']}/*_defaultgw"); + $foundgw = false; foreach ($config['gateways']['gateway_item'] as $gateway) { if (isset($gateway['defaultgw'])) { if ($gateway['gateway'] == "dynamic") $gateway['gateway'] = get_interface_gateway($gateway['interface']); $gatewayip = $gateway['gateway']; $interfacegw = $gateway['interface']; + if (!empty($interfacegw)) { + $defaultif = get_real_interface($gateway['interface']); + if ($defaultif) + @file_put_contents("{$g['tmp_path']}/{$defaultif}_defaultgw", $gatewayip); + } + $foundgw = true; break; } } + if ($foundgw == false) { + $defaultif = get_real_interface("wan"); + $interfacegw = "wan"; + $gatewayip = get_interface_gateway("wan"); + @touch("{$g['tmp_path']}/{$defaultif}_defaultgw"); + } } $dont_add_route = false; /* if OLSRD is enabled, allow WAN to house DHCP. */ @@ -1418,4 +1432,4 @@ function system_get_dmesg_boot() { return file_get_contents("{$g['varlog_path']}/dmesg.boot"); } -?> \ No newline at end of file +?> diff --git a/sbin/dhclient-script b/sbin/dhclient-script index d7cd3a6361..35ce76f511 100755 --- a/sbin/dhclient-script +++ b/sbin/dhclient-script @@ -130,23 +130,22 @@ delete_old_routes() { } add_new_routes() { - $LOGGER "Adding new routes" - # $ROUTE add $new_ip_address $LOCALHOST >/dev/null 2>&1 + $LOGGER "Adding new routes to interface: $interface" # Only allow the default route to be overridden if it's on our own interface - DEFAULTROUTE_IFACE=`/sbin/route get default | grep interface | awk '{print $2};'` - if [ -z "${DEFAULTROUTE_IFACE}" -o "{$interface}" = "${DEFAULTROUTE_IFACE}" ]; then + if [ -f "/tmp/${interface}_defaultgw" ]; then + $ROUTE delete default for router in $new_routers; do if [ "$new_ip_address" = "$router" ]; then - $ROUTE add default -iface $router - #>/dev/null 2>&1 - echo $ROUTE add default -iface $router | $LOGGER - echo $new_routers > /tmp/${interface}_router + $ROUTE add default -iface $interface + echo $ROUTE add default -iface $interface | $LOGGER + echo $router > /tmp/${interface}_router + echo $router > /tmp/${interface}_defaultgw else $ROUTE add default $router echo $ROUTE add default $router | $LOGGER - #>/dev/null 2>&1 - echo $new_routers > /tmp/${interface}_router + echo $router > /tmp/${interface}_router + echo $router > /tmp/${interface}_defaultgw fi # 2nd and subsequent default routers error out, so explicitly # stop processing the list after the first one. @@ -163,13 +162,6 @@ add_new_routes() { echo $new_routers > /tmp/${interface}_router done fi - - # last ditch effort if no route exists. - DEFAULTROUTE=`$NETSTAT -rn | $GREP default` - if [ -z "${DEFAULTROUTE}" ]; then - $ROUTE add default -iface $interface - fi - } add_new_resolv_conf() { From 59cfe65d3cd4fd3b7208d0503f571759956b9021 Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 17:35:27 +0000 Subject: [PATCH 06/54] Do not set max_execution time here. --- etc/inc/config.lib.inc | 2 +- etc/inc/upgrade_config.inc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/inc/config.lib.inc b/etc/inc/config.lib.inc index 435949fb82..90968adefc 100644 --- a/etc/inc/config.lib.inc +++ b/etc/inc/config.lib.inc @@ -359,7 +359,7 @@ function convert_config() { global $config, $g; $now = date("H:i:s"); log_error("Start Configuration upgrade at $now, set execution timeout to 15 minutes"); - ini_set("max_execution_time", "900"); + //ini_set("max_execution_time", "900"); /* special case upgrades */ /* fix every minute crontab bogons entry */ diff --git a/etc/inc/upgrade_config.inc b/etc/inc/upgrade_config.inc index cb690d6a9e..a6486e3037 100644 --- a/etc/inc/upgrade_config.inc +++ b/etc/inc/upgrade_config.inc @@ -1669,7 +1669,7 @@ function upgrade_054_to_055() { global $g; /* RRD files changed for quality, traffic and packets graphs */ - ini_set("max_execution_time", "1800"); + //ini_set("max_execution_time", "1800"); /* convert traffic RRD file */ global $parsedcfg, $listtags; $listtags = array("ds", "v", "rra", "row"); From 651e77c6f7c5d2250c69aeb1a3b3355439fcfec9 Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 12:38:36 -0400 Subject: [PATCH 07/54] Don't kill login here. When this happens from ssh is also resets the console menu. Kill $PPID instead which should have the same intended effect. --- etc/rc.initial | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/rc.initial b/etc/rc.initial index 7485e0dec8..7f7ad23589 100755 --- a/etc/rc.initial +++ b/etc/rc.initial @@ -155,7 +155,7 @@ case ${opmode} in fi ;; "") - killall login ; exit + kill $PPID ; exit ;; esac From 99f4210976a05e0450ab6d5df2b7c8cf87c29099 Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 12:49:06 -0400 Subject: [PATCH 08/54] Send TERM to sshd during shutdown/reboot to ensure that client sessions are kicked properly. Fixes #626. --- etc/rc.halt | 2 ++ etc/rc.reboot | 2 ++ 2 files changed, 4 insertions(+) diff --git a/etc/rc.halt b/etc/rc.halt index 4f3d1ef017..d208ccd39d 100755 --- a/etc/rc.halt +++ b/etc/rc.halt @@ -9,5 +9,7 @@ fi sleep 1 +killall -TERM sshd 2>&1 /dev/null + /sbin/shutdown -p now diff --git a/etc/rc.reboot b/etc/rc.reboot index af5d874045..b3ed50ace9 100755 --- a/etc/rc.reboot +++ b/etc/rc.reboot @@ -21,6 +21,8 @@ else /etc/rc.conf_mount_ro fi +killall -TERM sshd 2>&1 /dev/null + sleep 1 echo -n "Downing interfaces: " From 1e68a58b7e6e69c3d4c71c9243252269dce8fa39 Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 13:06:17 -0400 Subject: [PATCH 09/54] Fix upgrade code for disable bit on OpenVPN CSC entries. --- etc/inc/upgrade_config.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/etc/inc/upgrade_config.inc b/etc/inc/upgrade_config.inc index a6486e3037..81ee8f6cd3 100644 --- a/etc/inc/upgrade_config.inc +++ b/etc/inc/upgrade_config.inc @@ -1539,6 +1539,11 @@ function upgrade_051_to_052() { $csc['wins_server1'] = $csc['dhcp_wins']; unset($csc['dhcp_wins']); + if (!empty($csc['disable'])) + $csc['disable'] = true; + else + unset($csc['disable']); + $config['openvpn']['openvpn-csc'][] = $csc; } From 0c88fc1ee2ffb3589ac41b514e2183306564b6ab Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 13:06:56 -0400 Subject: [PATCH 10/54] Fix disabled setting for OpenVPN CSC entries, which was causing them to disapper. (Disable was handled inconsistently, as with normal OpenVPN entries.) Fixes #633. --- usr/local/www/vpn_openvpn_csc.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/usr/local/www/vpn_openvpn_csc.php b/usr/local/www/vpn_openvpn_csc.php index b70404ff23..884a3e4b5e 100644 --- a/usr/local/www/vpn_openvpn_csc.php +++ b/usr/local/www/vpn_openvpn_csc.php @@ -69,7 +69,7 @@ if($_GET['act']=="edit"){ if (isset($id) && $a_csc[$id]) { $pconfig['custom_options'] = $a_csc[$id]['custom_options']; - $pconfig['disable'] = $a_csc[$id]['disable']; + $pconfig['disable'] = isset($a_csc[$id]['disable']); $pconfig['common_name'] = $a_csc[$id]['common_name']; $pconfig['block'] = $a_csc[$id]['block']; $pconfig['description'] = $a_csc[$id]['description']; @@ -168,7 +168,8 @@ if ($_POST) { $csc = array(); $csc['custom_options'] = $pconfig['custom_options']; - $csc['disable'] = $pconfig['disable']; + if ($_POST['disable'] == "yes") + $csc['disable'] = true; $csc['common_name'] = $pconfig['common_name']; $csc['block'] = $pconfig['block']; $csc['description'] = $pconfig['description']; @@ -314,7 +315,7 @@ function netbios_change() { From dcc9beef957a8ef84d4da5ba359a44076a068f9b Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 14:55:53 -0400 Subject: [PATCH 11/54] Add some simple Log and Status icons. Part of ticket #623 --- usr/local/www/themes/_corporate/images/log.png | Bin 0 -> 3200 bytes .../www/themes/_corporate/images/status.png | Bin 0 -> 3067 bytes usr/local/www/themes/code-red/images/help.png | Bin 0 -> 3157 bytes usr/local/www/themes/code-red/images/log.png | Bin 0 -> 3200 bytes usr/local/www/themes/code-red/images/status.png | Bin 0 -> 3067 bytes usr/local/www/themes/metallic/images/log.png | Bin 0 -> 3200 bytes usr/local/www/themes/metallic/images/status.png | Bin 0 -> 3067 bytes usr/local/www/themes/nervecenter/images/log.png | Bin 0 -> 3200 bytes .../www/themes/nervecenter/images/status.png | Bin 0 -> 3067 bytes .../www/themes/pfsense-dropdown/images/log.png | Bin 0 -> 3200 bytes .../themes/pfsense-dropdown/images/status.png | Bin 0 -> 3067 bytes usr/local/www/themes/pfsense/images/log.png | Bin 0 -> 3200 bytes usr/local/www/themes/pfsense/images/status.png | Bin 0 -> 3067 bytes usr/local/www/themes/pfsense_ng/images/log.png | Bin 0 -> 3200 bytes .../www/themes/pfsense_ng/images/status.png | Bin 0 -> 3067 bytes usr/local/www/themes/the_wall/images/log.png | Bin 0 -> 3200 bytes usr/local/www/themes/the_wall/images/status.png | Bin 0 -> 3067 bytes 17 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 usr/local/www/themes/_corporate/images/log.png create mode 100644 usr/local/www/themes/_corporate/images/status.png create mode 100644 usr/local/www/themes/code-red/images/help.png create mode 100644 usr/local/www/themes/code-red/images/log.png create mode 100644 usr/local/www/themes/code-red/images/status.png create mode 100644 usr/local/www/themes/metallic/images/log.png create mode 100644 usr/local/www/themes/metallic/images/status.png create mode 100644 usr/local/www/themes/nervecenter/images/log.png create mode 100644 usr/local/www/themes/nervecenter/images/status.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/log.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/status.png create mode 100644 usr/local/www/themes/pfsense/images/log.png create mode 100644 usr/local/www/themes/pfsense/images/status.png create mode 100644 usr/local/www/themes/pfsense_ng/images/log.png create mode 100644 usr/local/www/themes/pfsense_ng/images/status.png create mode 100644 usr/local/www/themes/the_wall/images/log.png create mode 100644 usr/local/www/themes/the_wall/images/status.png diff --git a/usr/local/www/themes/_corporate/images/log.png b/usr/local/www/themes/_corporate/images/log.png new file mode 100644 index 0000000000000000000000000000000000000000..257851812fad19b0ea20cc5a17a645a5bab7a7d6 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/status.png b/usr/local/www/themes/_corporate/images/status.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0b39760b37f93e086b8563f4180dd327f2b5e5 GIT binary patch literal 3067 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 JPDHLkV1lu&u$2G+ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/code-red/images/help.png b/usr/local/www/themes/code-red/images/help.png new file mode 100644 index 0000000000000000000000000000000000000000..3c71cabbbf13a0d6c0fe3da319827619434cbf2b GIT binary patch literal 3157 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/code-red/images/log.png b/usr/local/www/themes/code-red/images/log.png new file mode 100644 index 0000000000000000000000000000000000000000..257851812fad19b0ea20cc5a17a645a5bab7a7d6 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/code-red/images/status.png b/usr/local/www/themes/code-red/images/status.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0b39760b37f93e086b8563f4180dd327f2b5e5 GIT binary patch literal 3067 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 JPDHLkV1lu&u$2G+ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/log.png b/usr/local/www/themes/metallic/images/log.png new file mode 100644 index 0000000000000000000000000000000000000000..257851812fad19b0ea20cc5a17a645a5bab7a7d6 GIT binary patch literal 3200 zcmV-`41e>9P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00052NklRVGuGM;zjWKBOF~Oi9-xQ7cp!giM3PsBX)`nqz(@2 zq~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o#?ocn!;d#E#^SsZW z_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?gKjP36_%k#uv^Xt?SakZJi1m4lQobxkg zp78NQ!+!cbOh(W&0IdqWd9D(IQ>2Pg#>OR>&$2Klbq)CTm2^_tW8=8o1V-@n@az#r zNOhH*=de=CS$)U(nRK|^-jktr#IvMP9t6qf>dSks9D=vs{*5A{xfm!^8uC;8W$QMry#d z>k3U3xp_M-{8f?+WzDJ{2l-e literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/status.png b/usr/local/www/themes/metallic/images/status.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0b39760b37f93e086b8563f4180dd327f2b5e5 GIT binary patch literal 3067 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 JPDHLkV1lu&u$2G+ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/nervecenter/images/log.png b/usr/local/www/themes/nervecenter/images/log.png new file mode 100644 index 0000000000000000000000000000000000000000..257851812fad19b0ea20cc5a17a645a5bab7a7d6 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/nervecenter/images/status.png b/usr/local/www/themes/nervecenter/images/status.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0b39760b37f93e086b8563f4180dd327f2b5e5 GIT binary patch literal 3067 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 JPDHLkV1lu&u$2G+ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/log.png b/usr/local/www/themes/pfsense-dropdown/images/log.png new file mode 100644 index 0000000000000000000000000000000000000000..257851812fad19b0ea20cc5a17a645a5bab7a7d6 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/status.png b/usr/local/www/themes/pfsense-dropdown/images/status.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0b39760b37f93e086b8563f4180dd327f2b5e5 GIT binary patch literal 3067 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 JPDHLkV1lu&u$2G+ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense/images/log.png b/usr/local/www/themes/pfsense/images/log.png new file mode 100644 index 0000000000000000000000000000000000000000..257851812fad19b0ea20cc5a17a645a5bab7a7d6 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense/images/status.png b/usr/local/www/themes/pfsense/images/status.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0b39760b37f93e086b8563f4180dd327f2b5e5 GIT binary patch literal 3067 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 JPDHLkV1lu&u$2G+ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng/images/log.png b/usr/local/www/themes/pfsense_ng/images/log.png new file mode 100644 index 0000000000000000000000000000000000000000..257851812fad19b0ea20cc5a17a645a5bab7a7d6 GIT binary patch literal 3200 zcmV-`41e>9P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00052NklRVGuGM;zjWKBOF~Oi9-xQ7cp!giM3PsBX)`nqz(@2 zq~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o#?ocn!;d#E#^SsZW z_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?gKjP36_%k#uv^Xt?SakZJi1m4lQobxkg zp78NQ!+!cbOh(W&0IdqWd9D(IQ>2Pg#>OR>&$2Klbq)CTm2^_tW8=8o1V-@n@az#r zNOhH*=de=CS$)U(nRK|^-jktr#IvMP9t6qf>dSks9D=vs{*5A{xfm!^8uC;8W$QMry#d z>k3U3xp_M-{8f?+WzDJ{2l-e literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng/images/status.png b/usr/local/www/themes/pfsense_ng/images/status.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0b39760b37f93e086b8563f4180dd327f2b5e5 GIT binary patch literal 3067 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 JPDHLkV1lu&u$2G+ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/log.png b/usr/local/www/themes/the_wall/images/log.png new file mode 100644 index 0000000000000000000000000000000000000000..257851812fad19b0ea20cc5a17a645a5bab7a7d6 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/status.png b/usr/local/www/themes/the_wall/images/status.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0b39760b37f93e086b8563f4180dd327f2b5e5 GIT binary patch literal 3067 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0003dNklCME_31_maG(42mRhL&jz zIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm(zqTbQ1GTN(cRCamYjH-@8oVR~*{CN`9B zT!QKO{*72Y5S2^}3=I5&#Oi^lWMW`oP}3$>kBTNtkDVI>3oBs_99#_6&M-aVQVhYd zDAFE53|r1X(VUG?!N?S-+o0*--#>=-a)#skaa!W!#Zc6Qk>39OV^}_$VeKL;=`B2o zAv6I;8f9Q$c>k8+=w5~gcNji@WZ>mzP|;wpbVLtWMl$jbU;w8FWg5z?WS9T|002ov JPDHLkV1lu&u$2G+ literal 0 HcmV?d00001 From 67252466b83d24e512c3abeb7cc7c266dd2619f0 Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 15:19:09 -0400 Subject: [PATCH 12/54] Fix images. --- .../www/themes/_corporate/images/log.png | Bin 3200 -> 3067 bytes .../www/themes/_corporate/images/status.png | Bin 3067 -> 3200 bytes usr/local/www/themes/code-red/images/log.png | Bin 3200 -> 3067 bytes .../www/themes/code-red/images/status.png | Bin 3067 -> 3200 bytes usr/local/www/themes/metallic/images/log.png | Bin 3200 -> 3067 bytes .../www/themes/metallic/images/status.png | Bin 3067 -> 3200 bytes .../www/themes/nervecenter/images/log.png | Bin 3200 -> 3067 bytes .../www/themes/nervecenter/images/status.png | Bin 3067 -> 3200 bytes .../themes/pfsense-dropdown/images/log.png | Bin 3200 -> 3067 bytes .../themes/pfsense-dropdown/images/status.png | Bin 3067 -> 3200 bytes usr/local/www/themes/pfsense/images/log.png | Bin 3200 -> 3067 bytes .../www/themes/pfsense/images/status.png | Bin 3067 -> 3200 bytes .../www/themes/pfsense_ng/images/log.png | Bin 3200 -> 3067 bytes .../www/themes/pfsense_ng/images/status.png | Bin 3067 -> 3200 bytes usr/local/www/themes/the_wall/images/log.png | Bin 3200 -> 3067 bytes .../www/themes/the_wall/images/status.png | Bin 3067 -> 3200 bytes 16 files changed, 0 insertions(+), 0 deletions(-) diff --git a/usr/local/www/themes/_corporate/images/log.png b/usr/local/www/themes/_corporate/images/log.png index 257851812fad19b0ea20cc5a17a645a5bab7a7d6..ba0b39760b37f93e086b8563f4180dd327f2b5e5 100644 GIT binary patch delta 325 zcmV-L0lNNx8T%KozzTmRNklCME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!NklRVGuGM;zjWKBOF~Oi9-xQ7cp!g ziM3PsBX)`nqz(@2q~La|Lv^vs7UE?(4~qtFdT>i73r8Ik8PdhDU`Pn2DZjVF-u3o# z?ocn!;d#E#^SsZW_xsv}5d7n5x?oqnvsIwH&E77$6WvL-o3?*;ON{OBI?MCKU-RqK z5^=Sezy#jWx}5VfW}fizL&JXhJxoT>Gyts%y?L$@f>Wf5QpUz5n9s5>Cv^?@_LX!} z+GFFm+yqAO_3-QwMo4v)oaeAo%UONL`I&UM+~hJG>;sfG$z^c$O4rFT`D|@(JD*kG zr2<9>dkY8qBw~L=!CME_3 z1_maG(42mRhL&jzIaTO-j_zexJ{!trVqjo+`HW%5dcs~`zm$LB{acuxeOnp+{3fjD z$2W$fdtrKRTqZV@Z(M@u`TmVqJrI>l3=9nXg2d{9sAOVbU{KR0R*#A%Opl!#0}Cr* z4IEqy*3K|J;!+I3u_)3WK@3~YK+&9yP{GI)sN10F;NL%n_Hu^f`*B+0 Date: Tue, 1 Jun 2010 15:24:27 -0400 Subject: [PATCH 13/54] Add a way to show status/log icons by the help icon. Define $statusurl and/or $logurl in the same manner as $pgtitle and if the variables are defined and not empty, the shortcut icons will appear. Ticket #623. --- usr/local/www/fbegin.inc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/usr/local/www/fbegin.inc b/usr/local/www/fbegin.inc index 5f02b6921c..acdd9b8d39 100755 --- a/usr/local/www/fbegin.inc +++ b/usr/local/www/fbegin.inc @@ -408,9 +408,17 @@ function add_to_menu($url, $name) {
- - + + + + + + + + + +

From efe2be8159ede1e2defbee05d3c3d5af01303733 Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 15:27:08 -0400 Subject: [PATCH 14/54] Add status and log urls to OpenVPN pages. --- usr/local/www/vpn_openvpn_client.php | 2 ++ usr/local/www/vpn_openvpn_csc.php | 2 ++ usr/local/www/vpn_openvpn_server.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/usr/local/www/vpn_openvpn_client.php b/usr/local/www/vpn_openvpn_client.php index 70f5cd1873..0288ce7d7c 100644 --- a/usr/local/www/vpn_openvpn_client.php +++ b/usr/local/www/vpn_openvpn_client.php @@ -38,6 +38,8 @@ require("guiconfig.inc"); require_once("openvpn.inc"); $pgtitle = array("OpenVPN", "Client"); +$statusurl = "status_openvpn.php"; +$logurl = "diag_logs_openvpn.php"; if (!is_array($config['openvpn']['openvpn-client'])) $config['openvpn']['openvpn-client'] = array(); diff --git a/usr/local/www/vpn_openvpn_csc.php b/usr/local/www/vpn_openvpn_csc.php index 884a3e4b5e..35b9758d4d 100644 --- a/usr/local/www/vpn_openvpn_csc.php +++ b/usr/local/www/vpn_openvpn_csc.php @@ -38,6 +38,8 @@ require("guiconfig.inc"); require_once("openvpn.inc"); $pgtitle = array("OpenVPN", "Client Specific Override"); +$statusurl = "status_openvpn.php"; +$logurl = "diag_logs_openvpn.php"; if (!is_array($config['openvpn']['openvpn-csc'])) $config['openvpn']['openvpn-csc'] = array(); diff --git a/usr/local/www/vpn_openvpn_server.php b/usr/local/www/vpn_openvpn_server.php index f221b6bc55..734df2d350 100644 --- a/usr/local/www/vpn_openvpn_server.php +++ b/usr/local/www/vpn_openvpn_server.php @@ -38,6 +38,8 @@ require("guiconfig.inc"); require_once("openvpn.inc"); $pgtitle = array("OpenVPN", "Server"); +$statusurl = "status_openvpn.php"; +$logurl = "diag_logs_openvpn.php"; if (!is_array($config['openvpn']['openvpn-server'])) $config['openvpn']['openvpn-server'] = array(); From e70869840cb6ce4439a4a4c3efe1ec609b785b7d Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 15:28:43 -0400 Subject: [PATCH 15/54] Remove logs tab from OpenVPN, since it is now replaced by the Log icon. --- usr/local/www/vpn_openvpn_client.php | 1 - usr/local/www/vpn_openvpn_csc.php | 1 - usr/local/www/vpn_openvpn_server.php | 1 - 3 files changed, 3 deletions(-) diff --git a/usr/local/www/vpn_openvpn_client.php b/usr/local/www/vpn_openvpn_client.php index 0288ce7d7c..a52a73977c 100644 --- a/usr/local/www/vpn_openvpn_client.php +++ b/usr/local/www/vpn_openvpn_client.php @@ -346,7 +346,6 @@ function autotls_change() { $tab_array[] = array(gettext("Client"), true, "vpn_openvpn_client.php"); $tab_array[] = array(gettext("Client Specific Overrides"), false, "vpn_openvpn_csc.php"); $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml"); - $tab_array[] = array(gettext("Logs"), false, "diag_logs_openvpn.php"); add_package_tabs("OpenVPN", $tab_array); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/vpn_openvpn_csc.php b/usr/local/www/vpn_openvpn_csc.php index 35b9758d4d..5a71121521 100644 --- a/usr/local/www/vpn_openvpn_csc.php +++ b/usr/local/www/vpn_openvpn_csc.php @@ -294,7 +294,6 @@ function netbios_change() { $tab_array[] = array(gettext("Client"), false, "vpn_openvpn_client.php"); $tab_array[] = array(gettext("Client Specific Overrides"), true, "vpn_openvpn_csc.php"); $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml"); - $tab_array[] = array(gettext("Logs"), false, "diag_logs_openvpn.php"); add_package_tabs("OpenVPN", $tab_array); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/vpn_openvpn_server.php b/usr/local/www/vpn_openvpn_server.php index 734df2d350..b213c6fe99 100644 --- a/usr/local/www/vpn_openvpn_server.php +++ b/usr/local/www/vpn_openvpn_server.php @@ -516,7 +516,6 @@ function netbios_change() { $tab_array[] = array(gettext("Client"), false, "vpn_openvpn_client.php"); $tab_array[] = array(gettext("Client Specific Overrides"), false, "vpn_openvpn_csc.php"); $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml"); - $tab_array[] = array(gettext("Logs"), false, "diag_logs_openvpn.php"); add_package_tabs("OpenVPN", $tab_array); display_top_tabs($tab_array); ?> From 6deedfde64da77eb44f21ebe6da631ac0a0c4f0d Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 15:33:17 -0400 Subject: [PATCH 16/54] Add status/log icons to IPsec pages. --- usr/local/www/vpn_ipsec.php | 3 +++ usr/local/www/vpn_ipsec_keys.php | 3 +++ usr/local/www/vpn_ipsec_keys_edit.php | 3 +++ usr/local/www/vpn_ipsec_mobile.php | 3 +++ usr/local/www/vpn_ipsec_phase1.php | 3 +++ usr/local/www/vpn_ipsec_phase2.php | 3 +++ 6 files changed, 18 insertions(+) diff --git a/usr/local/www/vpn_ipsec.php b/usr/local/www/vpn_ipsec.php index 7d6e0dbe5b..d864a30c23 100755 --- a/usr/local/www/vpn_ipsec.php +++ b/usr/local/www/vpn_ipsec.php @@ -124,6 +124,9 @@ if ($_GET['act'] == "delph2") } $pgtitle = array("VPN","IPsec"); +$statusurl = "diag_ipsec.php"; +$logurl = "diag_logs_ipsec.php"; + include("head.inc"); ?> diff --git a/usr/local/www/vpn_ipsec_keys.php b/usr/local/www/vpn_ipsec_keys.php index 2a232f31fe..933560f1b9 100644 --- a/usr/local/www/vpn_ipsec_keys.php +++ b/usr/local/www/vpn_ipsec_keys.php @@ -69,6 +69,9 @@ if ($_GET['act'] == "del") { } $pgtitle = "VPN: IPsec: Keys"; +$statusurl = "diag_ipsec.php"; +$logurl = "diag_logs_ipsec.php"; + include("head.inc"); ?> diff --git a/usr/local/www/vpn_ipsec_keys_edit.php b/usr/local/www/vpn_ipsec_keys_edit.php index 20ac6c08bf..ff1ef9afb0 100644 --- a/usr/local/www/vpn_ipsec_keys_edit.php +++ b/usr/local/www/vpn_ipsec_keys_edit.php @@ -112,6 +112,9 @@ if ($_POST) { } $pgtitle = "VPN: IPsec: Edit pre-shared key"; +$statusurl = "diag_ipsec.php"; +$logurl = "diag_logs_ipsec.php"; + include("head.inc"); ?> diff --git a/usr/local/www/vpn_ipsec_mobile.php b/usr/local/www/vpn_ipsec_mobile.php index 4bf8d6175d..4df829dea3 100755 --- a/usr/local/www/vpn_ipsec_mobile.php +++ b/usr/local/www/vpn_ipsec_mobile.php @@ -211,6 +211,9 @@ if ($_POST['submit']) { } $pgtitle = array("VPN","IPsec","Mobile"); +$statusurl = "diag_ipsec.php"; +$logurl = "diag_logs_ipsec.php"; + include("head.inc"); ?> diff --git a/usr/local/www/vpn_ipsec_phase1.php b/usr/local/www/vpn_ipsec_phase1.php index be3414c5b2..130ab28ce1 100644 --- a/usr/local/www/vpn_ipsec_phase1.php +++ b/usr/local/www/vpn_ipsec_phase1.php @@ -333,6 +333,9 @@ if ($pconfig['mobile']) $pgtitle = array("VPN","IPsec","Edit Phase 1", "Mobile Client"); else $pgtitle = array("VPN","IPsec","Edit Phase 1"); +$statusurl = "diag_ipsec.php"; +$logurl = "diag_logs_ipsec.php"; + include("head.inc"); diff --git a/usr/local/www/vpn_ipsec_phase2.php b/usr/local/www/vpn_ipsec_phase2.php index 5be729cade..779c06c108 100644 --- a/usr/local/www/vpn_ipsec_phase2.php +++ b/usr/local/www/vpn_ipsec_phase2.php @@ -199,6 +199,9 @@ if ($pconfig['mobile']) $pgtitle = array("VPN","IPsec","Edit Phase 2", "Mobile Client"); else $pgtitle = array("VPN","IPsec","Edit Phase 2"); +$statusurl = "diag_ipsec.php"; +$logurl = "diag_logs_ipsec.php"; + include("head.inc"); From e85858df666a5464f151630e2ea4f1bbb5f7ba67 Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 15:35:35 -0400 Subject: [PATCH 17/54] Remove Logs tab from OpenVPN, as it is no longer needed. --- usr/local/www/vpn_ipsec.php | 1 - usr/local/www/vpn_ipsec_keys.php | 1 - usr/local/www/vpn_ipsec_mobile.php | 1 - usr/local/www/vpn_ipsec_phase1.php | 1 - usr/local/www/vpn_ipsec_phase2.php | 1 - 5 files changed, 5 deletions(-) diff --git a/usr/local/www/vpn_ipsec.php b/usr/local/www/vpn_ipsec.php index d864a30c23..0fdecc8f1f 100755 --- a/usr/local/www/vpn_ipsec.php +++ b/usr/local/www/vpn_ipsec.php @@ -148,7 +148,6 @@ include("head.inc"); $tab_array[0] = array("Tunnels", true, "vpn_ipsec.php"); $tab_array[1] = array("Mobile clients", false, "vpn_ipsec_mobile.php"); $tab_array[2] = array("Pre-shared keys", false, "vpn_ipsec_keys.php"); - $tab_array[3] = array("Logs", false, "diag_logs_ipsec.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/vpn_ipsec_keys.php b/usr/local/www/vpn_ipsec_keys.php index 933560f1b9..c446e0563a 100644 --- a/usr/local/www/vpn_ipsec_keys.php +++ b/usr/local/www/vpn_ipsec_keys.php @@ -93,7 +93,6 @@ if (is_subsystem_dirty('ipsec')) $tab_array[0] = array("Tunnels", false, "vpn_ipsec.php"); $tab_array[1] = array("Mobile clients", false, "vpn_ipsec_mobile.php"); $tab_array[2] = array("Pre-shared keys", true, "vpn_ipsec_keys.php"); - $tab_array[3] = array("Logs", false, "diag_logs_ipsec.php"); display_top_tabs($tab_array); ?>
diff --git a/usr/local/www/vpn_ipsec_mobile.php b/usr/local/www/vpn_ipsec_mobile.php index 4df829dea3..379cf15a33 100755 --- a/usr/local/www/vpn_ipsec_mobile.php +++ b/usr/local/www/vpn_ipsec_mobile.php @@ -311,7 +311,6 @@ function login_banner_change() { $tab_array[0] = array("Tunnels", false, "vpn_ipsec.php"); $tab_array[1] = array("Mobile clients", true, "vpn_ipsec_mobile.php"); $tab_array[2] = array("Pre-shared keys", false, "vpn_ipsec_keys.php"); - $tab_array[3] = array("Logs", false, "diag_logs_ipsec.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/vpn_ipsec_phase1.php b/usr/local/www/vpn_ipsec_phase1.php index 130ab28ce1..71ea6d8d78 100644 --- a/usr/local/www/vpn_ipsec_phase1.php +++ b/usr/local/www/vpn_ipsec_phase1.php @@ -460,7 +460,6 @@ function dpdchkbox_change() { $tab_array[0] = array("Tunnels", true, "vpn_ipsec.php"); $tab_array[1] = array("Mobile clients", false, "vpn_ipsec_mobile.php"); $tab_array[2] = array("Pre-shared keys", false, "vpn_ipsec_keys.php"); - $tab_array[3] = array("Logs", false, "diag_logs_ipsec.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/vpn_ipsec_phase2.php b/usr/local/www/vpn_ipsec_phase2.php index 779c06c108..e00535ef19 100644 --- a/usr/local/www/vpn_ipsec_phase2.php +++ b/usr/local/www/vpn_ipsec_phase2.php @@ -317,7 +317,6 @@ function change_protocol() { $tab_array[0] = array("Tunnels", true, "vpn_ipsec.php"); $tab_array[1] = array("Mobile clients", false, "vpn_ipsec_mobile.php"); $tab_array[2] = array("Pre-shared keys", false, "vpn_ipsec_keys.php"); - $tab_array[3] = array("Logs", false, "diag_logs_ipsec.php"); display_top_tabs($tab_array); ?> From 5224b8e7d2bb6f6452d4d66c716c722178cf0ebe Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 1 Jun 2010 16:03:05 -0400 Subject: [PATCH 18/54] Add status/log icons to DHCP page. --- usr/local/www/services_dhcp.php | 3 +++ usr/local/www/services_dhcp_edit.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/usr/local/www/services_dhcp.php b/usr/local/www/services_dhcp.php index 0bbb3bc4fe..d4259ed3c0 100755 --- a/usr/local/www/services_dhcp.php +++ b/usr/local/www/services_dhcp.php @@ -373,6 +373,9 @@ if ($_GET['act'] == "del") { } $pgtitle = array("Services","DHCP server"); +$statusurl = "diag_dhcp_leases.php"; +$logurl = "diag_logs_dhcp.php"; + include("head.inc"); ?> diff --git a/usr/local/www/services_dhcp_edit.php b/usr/local/www/services_dhcp_edit.php index 86fefe3852..e7bc745ef1 100755 --- a/usr/local/www/services_dhcp_edit.php +++ b/usr/local/www/services_dhcp_edit.php @@ -177,6 +177,9 @@ if ($_POST) { } $pgtitle = array("Services","DHCP","Edit static mapping"); +$statusurl = "diag_dhcp_leases.php"; +$logurl = "diag_logs_dhcp.php"; + include("head.inc"); ?> From 3bf8eb9345c930159f60bdadf10f670730a44afa Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 20:22:30 +0000 Subject: [PATCH 19/54] Use correct array to iterate. --- usr/local/captiveportal/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/local/captiveportal/index.php b/usr/local/captiveportal/index.php index 5990ec11ff..7d5494eaf1 100755 --- a/usr/local/captiveportal/index.php +++ b/usr/local/captiveportal/index.php @@ -294,7 +294,7 @@ function portal_allow($clientip,$clientmac,$username,$password = null, $attribut $mac = captiveportal_passthrumac_findbyname($username); if (!empty($mac)) { if ($_POST['replacemacpassthru']) { - foreach ($a_passthrumacs as $idx => $macent) { + foreach ($config['captiveportal']['passthrumac'] as $idx => $macent) { if ($macent['mac'] == $mac['mac']) { unset($config['captiveportal']['passthrumac'][$idx]); $mac['mac'] = $clientmac; From 4d349edec5f20b7f94d5ed0c97f382b9e082081f Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 20:31:56 +0000 Subject: [PATCH 20/54] Free ipfw ruleno so it can be reused. Propperly delete passthrough mac entries that are not used. --- usr/local/captiveportal/index.php | 8 ++++++++ usr/local/www/services_captiveportal_mac.php | 1 + 2 files changed, 9 insertions(+) diff --git a/usr/local/captiveportal/index.php b/usr/local/captiveportal/index.php index 7d5494eaf1..80bbc3f7de 100755 --- a/usr/local/captiveportal/index.php +++ b/usr/local/captiveportal/index.php @@ -296,6 +296,14 @@ function portal_allow($clientip,$clientmac,$username,$password = null, $attribut if ($_POST['replacemacpassthru']) { foreach ($config['captiveportal']['passthrumac'] as $idx => $macent) { if ($macent['mac'] == $mac['mac']) { + $macrules = ""; + $ruleno = captiveportal_get_ipfw_passthru_ruleno($mac['mac']); + if ($ruleno) { + captiveportal_free_ipfw_ruleno($ruleno, true); + $macrules .= "delete {$ruleno}"; + ++$ruleno; + $macrules .= "delete {$ruleno}"; + } unset($config['captiveportal']['passthrumac'][$idx]); $mac['mac'] = $clientmac; $config['captiveportal']['passthrumac'][] = $mac; diff --git a/usr/local/www/services_captiveportal_mac.php b/usr/local/www/services_captiveportal_mac.php index 3e459f48e2..55268cfb1a 100755 --- a/usr/local/www/services_captiveportal_mac.php +++ b/usr/local/www/services_captiveportal_mac.php @@ -83,6 +83,7 @@ if ($_POST) { if ($found == true) { $ruleno = captiveportal_get_ipfw_passthru_ruleno($_POST['delmac']); if ($ruleno) { + captiveportal_free_ipfw_ruleno($ruleno, true); mwexec("/sbin/ipfw delete {$ruleno}; /sbin/ipfw delete " . ++$ruleno); } unset($a_passthrumacs[$idx]); From e06b7fa20eb06d3bd17bd25c622138dc5622a5ee Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 20:33:58 +0000 Subject: [PATCH 21/54] Do not overwrite previous rules. --- usr/local/captiveportal/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/local/captiveportal/index.php b/usr/local/captiveportal/index.php index 80bbc3f7de..a4485ea73f 100755 --- a/usr/local/captiveportal/index.php +++ b/usr/local/captiveportal/index.php @@ -307,7 +307,7 @@ function portal_allow($clientip,$clientmac,$username,$password = null, $attribut unset($config['captiveportal']['passthrumac'][$idx]); $mac['mac'] = $clientmac; $config['captiveportal']['passthrumac'][] = $mac; - $macrules = captiveportal_passthrumac_configure_entry($mac); + $macrules .= captiveportal_passthrumac_configure_entry($mac); file_put_contents("{$g['tmp_path']}/macentry.rules.tmp", $macrules); mwexec("/sbin/ipfw -q {$g['tmp_path']}/macentry.rules.tmp"); $writecfg = true; From b90996c50415866e4604d2af54da4d76fc73f4b5 Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 20:49:21 +0000 Subject: [PATCH 22/54] Add forgotten newlines. --- usr/local/captiveportal/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usr/local/captiveportal/index.php b/usr/local/captiveportal/index.php index a4485ea73f..fc75e1e716 100755 --- a/usr/local/captiveportal/index.php +++ b/usr/local/captiveportal/index.php @@ -300,9 +300,9 @@ function portal_allow($clientip,$clientmac,$username,$password = null, $attribut $ruleno = captiveportal_get_ipfw_passthru_ruleno($mac['mac']); if ($ruleno) { captiveportal_free_ipfw_ruleno($ruleno, true); - $macrules .= "delete {$ruleno}"; + $macrules .= "delete {$ruleno}\n"; ++$ruleno; - $macrules .= "delete {$ruleno}"; + $macrules .= "delete {$ruleno}\n"; } unset($config['captiveportal']['passthrumac'][$idx]); $mac['mac'] = $clientmac; From eb15decbf7216536e7bf5c7680d9a0f1256507c9 Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 21:09:44 +0000 Subject: [PATCH 23/54] Provide a default error message on error pages if there is none provided by other means. --- usr/local/captiveportal/index.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/usr/local/captiveportal/index.php b/usr/local/captiveportal/index.php index fc75e1e716..32c8853d94 100755 --- a/usr/local/captiveportal/index.php +++ b/usr/local/captiveportal/index.php @@ -37,6 +37,8 @@ require_once("auth.inc"); require_once("functions.inc"); require_once("captiveportal.inc"); +$errormsg = "Invalid credentials specified."; + header("Expires: 0"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); @@ -140,14 +142,14 @@ exit; // YES: user is good for $timecredit minutes. captiveportal_logportalauth($voucher,$clientmac,$clientip,"Voucher login good for $timecredit min."); } else { - portal_reply_page($redirurl, "error", $config['voucher']['msgexpired']); + portal_reply_page($redirurl, "error", $config['voucher']['msgexpired'] ? $config['voucher']['msgexpired']: $errormsg); } } else if (-1 == $timecredit) { // valid but expired captiveportal_logportalauth($voucher,$clientmac,$clientip,"FAILURE","voucher expired"); - portal_reply_page($redirurl, "error", $config['voucher']['msgexpired']); + portal_reply_page($redirurl, "error", $config['voucher']['msgexpired'] ? $config['voucher']['msgexpired']: $errormsg); } else { captiveportal_logportalauth($voucher,$clientmac,$clientip,"FAILURE"); - portal_reply_page($redirurl, "error", $config['voucher']['msgnoaccess']); + portal_reply_page($redirurl, "error", $config['voucher']['msgnoaccess'] ? $config['voucher']['msgnoaccess'] : $errormsg); } } else if ($_POST['accept'] && $radius_enable) { @@ -162,15 +164,15 @@ exit; if ($auth_list['auth_val'] == 1) { captiveportal_logportalauth($_POST['auth_user'],$clientmac,$clientip,"ERROR",$auth_list['error']); - portal_reply_page($redirurl, $type, $auth_list['error']); + portal_reply_page($redirurl, $type, $auth_list['error'] ? $auth_list['error'] : $errormsg); } else if ($auth_list['auth_val'] == 3) { captiveportal_logportalauth($_POST['auth_user'],$clientmac,$clientip,"FAILURE",$auth_list['reply_message']); - portal_reply_page($redirurl, $type, $auth_list['reply_message']); + portal_reply_page($redirurl, $type, $auth_list['reply_message'] ? $auth_list['reply_message'] : $errormsg); } } else { captiveportal_logportalauth($_POST['auth_user'],$clientmac,$clientip,"ERROR"); - portal_reply_page($redirurl, "error", "Invalid username/password specified."); + portal_reply_page($redirurl, "error", $errormsg); } } else if ($_POST['accept'] && $config['captiveportal']['auth_method'] == "local") { @@ -182,7 +184,7 @@ exit; portal_allow($clientip, $clientmac,$_POST['auth_user']); } else { captiveportal_logportalauth($_POST['auth_user'],$clientmac,$clientip,"FAILURE"); - portal_reply_page($redirurl, "error"); + portal_reply_page($redirurl, "error", $errormsg); } } else if ($_POST['accept'] && $clientip) { captiveportal_logportalauth("unauthenticated",$clientmac,$clientip,"ACCEPT"); From f73be85cfd6ea44d545183cc9b7874d6db33de68 Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 22:13:32 +0000 Subject: [PATCH 24/54] Use sockstat, netstat might take to long under certain circumstances. --- etc/rc.initial | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/rc.initial b/etc/rc.initial index 7f7ad23589..13fcbbae03 100755 --- a/etc/rc.initial +++ b/etc/rc.initial @@ -62,7 +62,7 @@ echo "10) Filter Logs" echo "11) Restart webConfigurator" echo "12) ${product} Developer Shell" echo "13) Upgrade from console" -SSHD=`netstat -an | grep "*.22" | wc -l` +SSHD=`/usr/bin/sockstat -4l | grep "*.22" | wc -l` if [ "$SSHD" -gt 0 ]; then echo "14) Disable Secure Shell (sshd)"; else From 155e343b82373e216272b9e85944d8510106c636 Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 22:23:58 +0000 Subject: [PATCH 25/54] Do not use netstat to fetch default gateway interface but other faster commands to avoid problems on large interface setups. --- sbin/dhclient-script | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sbin/dhclient-script b/sbin/dhclient-script index 35ce76f511..132946d08a 100755 --- a/sbin/dhclient-script +++ b/sbin/dhclient-script @@ -211,9 +211,8 @@ if [ -f /etc/dhclient-enter-hooks ]; then fi fi -if [ -x $NETSTAT ]; then - $LOGGER "netstat" - if_defaultroute=`$NETSTAT -rn | $GREP "^default" | $AWK '{print $6}'` +if [ -x $ROUTE ]; then + if_defaultroute=`$ROUTE get default | $GREP interface | $AWK '{print $2}'` else $LOGGER "if_defaultroute" if_defaultroute="x" From 3fb8caf25800fce340a6478557040752e6dbb35d Mon Sep 17 00:00:00 2001 From: Scott Ullrich Date: Tue, 1 Jun 2010 19:05:22 -0400 Subject: [PATCH 26/54] Do not nuke /tmp/ on livecd's --- etc/rc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/etc/rc b/etc/rc index 57a5902cfc..c878145058 100755 --- a/etc/rc +++ b/etc/rc @@ -171,7 +171,9 @@ if [ ! -h /tmp/tmp ]; then fi # Make sure our /tmp is 777 + Sticky -rm -rf /tmp/* +if [ ! "$PLATFORM" = "cdrom" ] ; then + rm -rf /tmp/* +fi chmod 1777 /tmp if [ ! "$PLATFORM" = "cdrom" ] ; then From 634e5206525c3e9cb9067cdfe22a2b0d6e3bc580 Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 23:13:20 +0000 Subject: [PATCH 27/54] Remove spurious call to mute console. --- etc/rc.bootup | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/etc/rc.bootup b/etc/rc.bootup index e50d14dd7b..d9c3543c47 100755 --- a/etc/rc.bootup +++ b/etc/rc.bootup @@ -161,7 +161,6 @@ $wan_if = get_real_interface(); * and ask the user to reassign interfaces. This will * avoid a reboot and thats a good thing. */ -unmute_kernel_msgs(); while(is_interface_mismatch() == true) { echo "\nNetwork interface mismatch -- Running interface assignment option.\n"; set_networking_interfaces_ports(); @@ -379,4 +378,4 @@ led_normalize(); conf_mount_ro(); -?> \ No newline at end of file +?> From ac8ff0a4f3effcdd535bd9187bb92c1a781970e0 Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 1 Jun 2010 23:19:34 +0000 Subject: [PATCH 28/54] When an interface spoofs its mac address change the mac address of all vlans having it as parent. Remove such code from the vlan configuration phase since this is way the mac change will always get propagated and its faster. --- etc/inc/interfaces.inc | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index 9ff2c40167..cdfcf5d1db 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -151,16 +151,6 @@ function interface_vlan_configure(&$vlan) { /* invalidate interface cache */ get_interface_arr(true); - /* all vlans need to spoof their parent mac address, too. see - * ticket #1514: http://cvstrac.pfsense.com/tktview?tn=1514,33 - */ - foreach($config['interfaces'] as $interfaces) { - if($interfaces['if'] == $if && $interfaces['spoofmac']) { - mwexec("/sbin/ifconfig " . escapeshellarg($vlanif) . - " link " . escapeshellarg($interfaces['spoofmac'])); - } - } - /* XXX: ermal -- for now leave it here at the moment it does not hurt. */ interfaces_bring_up($if); @@ -1896,6 +1886,18 @@ function interface_configure($interface = "wan", $reloadall = false) { if ($wancfg['spoofmac']) { mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " link " . escapeshellarg($wancfg['spoofmac'])); + + /* + * All vlans need to spoof their parent mac address, too. see + * ticket #1514: http://cvstrac.pfsense.com/tktview?tn=1514,33 + */ + if (is_array($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if ($vlan['if'] == $realif) + mwexec("/sbin/ifconfig " . escapeshellarg($vlan['vlanif']) . + " link " . escapeshellarg($wancfg['spoofmac'])); + } + } } else { $mac = get_interface_mac(get_real_interface($wancfg['if'])); if($mac == "ff:ff:ff:ff:ff:ff") { From e234921a790214fe5b8aa24fab097f6dbfd28811 Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 09:51:51 -0400 Subject: [PATCH 29/54] Add status/log links to LB pages. --- usr/local/www/load_balancer_monitor.php | 4 ++++ usr/local/www/load_balancer_monitor_edit.php | 4 ++++ usr/local/www/load_balancer_pool.php | 4 ++++ usr/local/www/load_balancer_pool_edit.php | 4 ++++ usr/local/www/load_balancer_relay_action.php | 4 ++++ usr/local/www/load_balancer_relay_action_edit.php | 4 ++++ usr/local/www/load_balancer_relay_protocol.php | 4 ++++ usr/local/www/load_balancer_relay_protocol_edit.php | 4 ++++ usr/local/www/load_balancer_virtual_server.php | 4 ++++ usr/local/www/load_balancer_virtual_server_edit.php | 4 ++++ 10 files changed, 40 insertions(+) diff --git a/usr/local/www/load_balancer_monitor.php b/usr/local/www/load_balancer_monitor.php index ebb640676d..2f0f37284a 100755 --- a/usr/local/www/load_balancer_monitor.php +++ b/usr/local/www/load_balancer_monitor.php @@ -86,6 +86,10 @@ if ($_GET['act'] == "del") { } $pgtitle = array("Services", "Load Balancer","Monitor"); +#$statusurl = "status_slbd_vs.php"; +$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); ?> diff --git a/usr/local/www/load_balancer_monitor_edit.php b/usr/local/www/load_balancer_monitor_edit.php index 320a54f95d..c3b269fb34 100755 --- a/usr/local/www/load_balancer_monitor_edit.php +++ b/usr/local/www/load_balancer_monitor_edit.php @@ -188,6 +188,10 @@ if ($_POST) { } $pgtitle = array("Services", "Load Balancer","Monitor","Edit"); +#$statusurl = "status_slbd_vs.php"; +$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); $types = array("icmp" => "ICMP", "tcp" => "TCP", "http" => "HTTP", "https" => "HTTPS", "send" => "Send/Expect"); diff --git a/usr/local/www/load_balancer_pool.php b/usr/local/www/load_balancer_pool.php index c320683a6d..4742ab1a52 100755 --- a/usr/local/www/load_balancer_pool.php +++ b/usr/local/www/load_balancer_pool.php @@ -95,6 +95,10 @@ for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) { } $pgtitle = array("Services", "Load Balancer","Pool"); +#$statusurl = "status_slbd_vs.php"; +$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); ?> diff --git a/usr/local/www/load_balancer_pool_edit.php b/usr/local/www/load_balancer_pool_edit.php index a81faa3c57..5936d3533c 100755 --- a/usr/local/www/load_balancer_pool_edit.php +++ b/usr/local/www/load_balancer_pool_edit.php @@ -138,6 +138,10 @@ if ($_POST) { } $pgtitle = array("Services", "Load Balancer","Pool","Edit"); +#$statusurl = "status_slbd_vs.php"; +$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); ?> diff --git a/usr/local/www/load_balancer_relay_action.php b/usr/local/www/load_balancer_relay_action.php index 8926f6538f..36b4b8f9e0 100755 --- a/usr/local/www/load_balancer_relay_action.php +++ b/usr/local/www/load_balancer_relay_action.php @@ -102,6 +102,10 @@ if ($_GET['act'] == "del") { */ $pgtitle = array("Services", "Load Balancer","Relay Action"); +#$statusurl = "status_slbd_vs.php"; +$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); ?> diff --git a/usr/local/www/load_balancer_relay_action_edit.php b/usr/local/www/load_balancer_relay_action_edit.php index 218c49d86e..dc47e45933 100755 --- a/usr/local/www/load_balancer_relay_action_edit.php +++ b/usr/local/www/load_balancer_relay_action_edit.php @@ -176,6 +176,10 @@ if ($_POST) { } $pgtitle = array("Services", "Load Balancer","Relay Action","Edit"); +#$statusurl = "status_slbd_vs.php"; +$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); $types = array("http" => "HTTP", "tcp" => "TCP", "dns" => "DNS"); ?> diff --git a/usr/local/www/load_balancer_relay_protocol.php b/usr/local/www/load_balancer_relay_protocol.php index 767e96200d..f8540419a6 100755 --- a/usr/local/www/load_balancer_relay_protocol.php +++ b/usr/local/www/load_balancer_relay_protocol.php @@ -98,6 +98,10 @@ if ($_GET['act'] == "del") { */ $pgtitle = array("Services", "Load Balancer","Relay Protocol"); +#$statusurl = "status_slbd_vs.php"; +$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); ?> diff --git a/usr/local/www/load_balancer_relay_protocol_edit.php b/usr/local/www/load_balancer_relay_protocol_edit.php index eac04c1baf..4575aebcd8 100755 --- a/usr/local/www/load_balancer_relay_protocol_edit.php +++ b/usr/local/www/load_balancer_relay_protocol_edit.php @@ -132,6 +132,10 @@ if ($_POST) { } $pgtitle = array("Services", "Load Balancer","Relay Protocol","Edit"); +#$statusurl = "status_slbd_vs.php"; +$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); $types = array("http" => "HTTP", "tcp" => "TCP", "dns" => "DNS"); diff --git a/usr/local/www/load_balancer_virtual_server.php b/usr/local/www/load_balancer_virtual_server.php index 772cbf8aed..9114dc9868 100755 --- a/usr/local/www/load_balancer_virtual_server.php +++ b/usr/local/www/load_balancer_virtual_server.php @@ -94,6 +94,10 @@ for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) { } $pgtitle = array("Services","Load Balancer","Virtual Servers"); +$statusurl = "status_slbd_vs.php"; +#$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); ?> diff --git a/usr/local/www/load_balancer_virtual_server_edit.php b/usr/local/www/load_balancer_virtual_server_edit.php index 6eb49bd37c..dda2c71e2e 100755 --- a/usr/local/www/load_balancer_virtual_server_edit.php +++ b/usr/local/www/load_balancer_virtual_server_edit.php @@ -129,6 +129,10 @@ if ($_POST) { } $pgtitle = array("Services", "Load Balancer","Virtual Server","Edit"); +$statusurl = "status_slbd_vs.php"; +#$statusurl = "status_slbd_pool.php"; +$logurl = "diag_logs_relayd.php"; + include("head.inc"); ?> From 02ca24c9d2b71ecf2a77c9e9ce8c467f91c3762c Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 09:58:31 -0400 Subject: [PATCH 30/54] Add status links to gateway/route pages. --- usr/local/www/system_gateway_groups.php | 2 ++ usr/local/www/system_gateway_groups_edit.php | 2 ++ usr/local/www/system_gateways.php | 2 ++ usr/local/www/system_gateways_edit.php | 2 ++ usr/local/www/system_routes.php | 2 ++ 5 files changed, 10 insertions(+) diff --git a/usr/local/www/system_gateway_groups.php b/usr/local/www/system_gateway_groups.php index d79627f278..43dfea760d 100755 --- a/usr/local/www/system_gateway_groups.php +++ b/usr/local/www/system_gateway_groups.php @@ -86,6 +86,8 @@ if ($_GET['act'] == "del") { } $pgtitle = array(gettext("System"),gettext("Gateway Groups")); +$statusurl = "status_gateway_groups.php"; + include("head.inc"); ?> diff --git a/usr/local/www/system_gateway_groups_edit.php b/usr/local/www/system_gateway_groups_edit.php index d5076c1cf5..1a504c5fd4 100755 --- a/usr/local/www/system_gateway_groups_edit.php +++ b/usr/local/www/system_gateway_groups_edit.php @@ -141,6 +141,8 @@ if ($_POST) { } $pgtitle = array(gettext("System"),gettext("Gateways"),gettext("Edit gateway")); +$statusurl = "status_gateway_groups.php"; + include("head.inc"); ?> diff --git a/usr/local/www/system_gateways.php b/usr/local/www/system_gateways.php index 6f38012252..82004a77ce 100755 --- a/usr/local/www/system_gateways.php +++ b/usr/local/www/system_gateways.php @@ -118,6 +118,8 @@ if ($_GET['act'] == "del") { $pgtitle = array(gettext("System"),gettext("Gateways")); +$statusurl = "status_gateways.php"; + include("head.inc"); ?> diff --git a/usr/local/www/system_gateways_edit.php b/usr/local/www/system_gateways_edit.php index 5c14f17feb..21cf65b5a9 100755 --- a/usr/local/www/system_gateways_edit.php +++ b/usr/local/www/system_gateways_edit.php @@ -279,6 +279,8 @@ if ($_POST) { $pgtitle = array(gettext("System"),gettext("Gateways"),gettext("Edit gateway")); +$statusurl = "status_gateways.php"; + include("head.inc"); ?> diff --git a/usr/local/www/system_routes.php b/usr/local/www/system_routes.php index df80023fd2..032a5c2140 100755 --- a/usr/local/www/system_routes.php +++ b/usr/local/www/system_routes.php @@ -99,6 +99,8 @@ if ($_GET['act'] == "del") { } $pgtitle = array(gettext("System"),gettext("Static Routes")); +$statusurl = "diag_routes.php"; + include("head.inc"); ?> From 3cceb5d5eb3374cfb8cfec9be6a78a2863b1334d Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 10:04:24 -0400 Subject: [PATCH 31/54] Add status/log links to Firewall rules --- usr/local/www/firewall_rules.php | 3 +++ usr/local/www/firewall_rules_edit.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/usr/local/www/firewall_rules.php b/usr/local/www/firewall_rules.php index 0edba705f5..b9888e69b2 100755 --- a/usr/local/www/firewall_rules.php +++ b/usr/local/www/firewall_rules.php @@ -42,6 +42,9 @@ ##|-PRIV $pgtitle = array("Firewall", "Rules"); +$statusurl = "status_filter_reload.php"; +$logurl = "diag_logs_filter.php"; + require("guiconfig.inc"); require_once("functions.inc"); require_once("filter.inc"); diff --git a/usr/local/www/firewall_rules_edit.php b/usr/local/www/firewall_rules_edit.php index 2baaef003e..342b6899a6 100755 --- a/usr/local/www/firewall_rules_edit.php +++ b/usr/local/www/firewall_rules_edit.php @@ -549,6 +549,9 @@ read_layer7_config(); $l7clist =& get_l7_unique_list(); $pgtitle = array("Firewall","Rules","Edit"); +$statusurl = "status_filter_reload.php"; +$logurl = "diag_logs_filter.php"; + $closehead = false; $page_filename = "firewall_rules_edit.php"; From 5633ab302be4deeceec687c07c0db9fa119c8eb9 Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 10:23:54 -0400 Subject: [PATCH 32/54] Add status/log links to Captive Portal pages --- usr/local/www/services_captiveportal.php | 3 +++ usr/local/www/services_captiveportal_filemanager.php | 3 +++ usr/local/www/services_captiveportal_ip.php | 3 +++ usr/local/www/services_captiveportal_ip_edit.php | 3 +++ usr/local/www/services_captiveportal_mac.php | 3 +++ usr/local/www/services_captiveportal_mac_edit.php | 3 +++ usr/local/www/services_captiveportal_vouchers.php | 3 +++ usr/local/www/services_captiveportal_vouchers_edit.php | 3 +++ 8 files changed, 24 insertions(+) diff --git a/usr/local/www/services_captiveportal.php b/usr/local/www/services_captiveportal.php index 331708aadc..51ff96d39c 100755 --- a/usr/local/www/services_captiveportal.php +++ b/usr/local/www/services_captiveportal.php @@ -39,6 +39,9 @@ ##|-PRIV $pgtitle = array("Services","Captive portal"); +$statusurl = "status_captiveportal.php"; +$logurl = "diag_logs_auth.php"; + require("guiconfig.inc"); require("functions.inc"); require("filter.inc"); diff --git a/usr/local/www/services_captiveportal_filemanager.php b/usr/local/www/services_captiveportal_filemanager.php index 2c8d8156ad..65d93349b5 100755 --- a/usr/local/www/services_captiveportal_filemanager.php +++ b/usr/local/www/services_captiveportal_filemanager.php @@ -50,6 +50,9 @@ function cpelements_sort() { } $pgtitle = array("Services","Captive portal"); +$statusurl = "status_captiveportal.php"; +$logurl = "diag_logs_auth.php"; + require("guiconfig.inc"); require("functions.inc"); diff --git a/usr/local/www/services_captiveportal_ip.php b/usr/local/www/services_captiveportal_ip.php index 61e05e5eb8..c5a3a31c98 100755 --- a/usr/local/www/services_captiveportal_ip.php +++ b/usr/local/www/services_captiveportal_ip.php @@ -40,6 +40,9 @@ ##|-PRIV $pgtitle = array("Services","Captive portal"); +$statusurl = "status_captiveportal.php"; +$logurl = "diag_logs_auth.php"; + require("guiconfig.inc"); require("functions.inc"); require("filter.inc"); diff --git a/usr/local/www/services_captiveportal_ip_edit.php b/usr/local/www/services_captiveportal_ip_edit.php index 57e8476deb..419327d154 100755 --- a/usr/local/www/services_captiveportal_ip_edit.php +++ b/usr/local/www/services_captiveportal_ip_edit.php @@ -50,6 +50,9 @@ function allowedips_sort() { } $pgtitle = array("Services","Captive portal","Edit allowed IP address"); +$statusurl = "status_captiveportal.php"; +$logurl = "diag_logs_auth.php"; + require("guiconfig.inc"); require("functions.inc"); require("filter.inc"); diff --git a/usr/local/www/services_captiveportal_mac.php b/usr/local/www/services_captiveportal_mac.php index 55268cfb1a..6f699f2d2c 100755 --- a/usr/local/www/services_captiveportal_mac.php +++ b/usr/local/www/services_captiveportal_mac.php @@ -39,6 +39,9 @@ ##|-PRIV $pgtitle = array("Services","Captive portal"); +$statusurl = "status_captiveportal.php"; +$logurl = "diag_logs_auth.php"; + require("guiconfig.inc"); require("functions.inc"); require("filter.inc"); diff --git a/usr/local/www/services_captiveportal_mac_edit.php b/usr/local/www/services_captiveportal_mac_edit.php index bc397b7e6e..b55e750da3 100755 --- a/usr/local/www/services_captiveportal_mac_edit.php +++ b/usr/local/www/services_captiveportal_mac_edit.php @@ -49,6 +49,9 @@ function passthrumacs_sort() { } $pgtitle = array("Services","Captive portal","Edit pass-through MAC address"); +$statusurl = "status_captiveportal.php"; +$logurl = "diag_logs_auth.php"; + require("guiconfig.inc"); require("functions.inc"); require("filter.inc"); diff --git a/usr/local/www/services_captiveportal_vouchers.php b/usr/local/www/services_captiveportal_vouchers.php index de305b7e82..6188d73c4f 100644 --- a/usr/local/www/services_captiveportal_vouchers.php +++ b/usr/local/www/services_captiveportal_vouchers.php @@ -37,6 +37,9 @@ ##|-PRIV $pgtitle = array("Services", "Captive portal", "Vouchers"); +$statusurl = "status_captiveportal_vouchers.php"; +$logurl = "diag_logs_auth.php"; + require("guiconfig.inc"); require("functions.inc"); require("filter.inc"); diff --git a/usr/local/www/services_captiveportal_vouchers_edit.php b/usr/local/www/services_captiveportal_vouchers_edit.php index ee95927c4b..cacbb612c4 100644 --- a/usr/local/www/services_captiveportal_vouchers_edit.php +++ b/usr/local/www/services_captiveportal_vouchers_edit.php @@ -36,6 +36,9 @@ ##|-PRIV $pgtitle = array("Services", "Captive portal", "Edit Voucher Rolls"); +$statusurl = "status_captiveportal_vouchers.php"; +$logurl = "diag_logs_auth.php"; + require("guiconfig.inc"); require("functions.inc"); require("filter.inc"); From 14e96066937fc759846e579e48b7e8ae7c0cec98 Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 10:27:21 -0400 Subject: [PATCH 33/54] Remove auth logs tab, since it is handled by the log link above. --- usr/local/www/services_captiveportal.php | 1 - usr/local/www/services_captiveportal_filemanager.php | 1 - usr/local/www/services_captiveportal_ip.php | 1 - usr/local/www/services_captiveportal_mac.php | 1 - usr/local/www/services_captiveportal_vouchers.php | 1 - 5 files changed, 5 deletions(-) diff --git a/usr/local/www/services_captiveportal.php b/usr/local/www/services_captiveportal.php index 51ff96d39c..5206535a21 100755 --- a/usr/local/www/services_captiveportal.php +++ b/usr/local/www/services_captiveportal.php @@ -291,7 +291,6 @@ function enable_change(enable_change) { $tab_array[] = array("Allowed IP addresses", false, "services_captiveportal_ip.php"); $tab_array[] = array("Vouchers", false, "services_captiveportal_vouchers.php"); $tab_array[] = array("File Manager", false, "services_captiveportal_filemanager.php"); - $tab_array[] = array("Auth Logs", false, "diag_logs_auth.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/services_captiveportal_filemanager.php b/usr/local/www/services_captiveportal_filemanager.php index 65d93349b5..efef6b76df 100755 --- a/usr/local/www/services_captiveportal_filemanager.php +++ b/usr/local/www/services_captiveportal_filemanager.php @@ -140,7 +140,6 @@ include("head.inc"); $tab_array[] = array("Allowed IP addresses", false, "services_captiveportal_ip.php"); $tab_array[] = array("Vouchers", false, "services_captiveportal_vouchers.php"); $tab_array[] = array("File Manager", true, "services_captiveportal_filemanager.php"); - $tab_array[] = array("Auth Logs", false, "diag_logs_auth.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/services_captiveportal_ip.php b/usr/local/www/services_captiveportal_ip.php index c5a3a31c98..29acb1ca38 100755 --- a/usr/local/www/services_captiveportal_ip.php +++ b/usr/local/www/services_captiveportal_ip.php @@ -88,7 +88,6 @@ include("head.inc"); $tab_array[] = array("Allowed IP addresses", true, "services_captiveportal_ip.php"); $tab_array[] = array("Vouchers", false, "services_captiveportal_vouchers.php"); $tab_array[] = array("File Manager", false, "services_captiveportal_filemanager.php"); - $tab_array[] = array("Auth Logs", false, "diag_logs_auth.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/services_captiveportal_mac.php b/usr/local/www/services_captiveportal_mac.php index 6f699f2d2c..8e64fd8fe9 100755 --- a/usr/local/www/services_captiveportal_mac.php +++ b/usr/local/www/services_captiveportal_mac.php @@ -129,7 +129,6 @@ include("head.inc"); $tab_array[] = array("Allowed IP addresses", false, "services_captiveportal_ip.php"); $tab_array[] = array("Vouchers", false, "services_captiveportal_vouchers.php"); $tab_array[] = array("File Manager", false, "services_captiveportal_filemanager.php"); - $tab_array[] = array("Auth Logs", false, "diag_logs_auth.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/services_captiveportal_vouchers.php b/usr/local/www/services_captiveportal_vouchers.php index 6188d73c4f..f6c4577dd4 100644 --- a/usr/local/www/services_captiveportal_vouchers.php +++ b/usr/local/www/services_captiveportal_vouchers.php @@ -247,7 +247,6 @@ function enable_change(enable_change) { $tab_array[] = array("Allowed IP addresses", false, "services_captiveportal_ip.php"); $tab_array[] = array("Vouchers", true, "services_captiveportal_vouchers.php"); $tab_array[] = array("File Manager", false, "services_captiveportal_filemanager.php"); - $tab_array[] = array("Auth Logs", false, "diag_logs_auth.php"); display_top_tabs($tab_array); ?> From af1e20319e87699f5933ed13984eadadf251743a Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 10:34:29 -0400 Subject: [PATCH 34/54] Add status link to Interfaces --- usr/local/www/interfaces.php | 2 ++ usr/local/www/interfaces_assign.php | 2 ++ 2 files changed, 4 insertions(+) diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php index 5ec2e36e66..414a10ef58 100755 --- a/usr/local/www/interfaces.php +++ b/usr/local/www/interfaces.php @@ -828,6 +828,8 @@ function check_wireless_mode() { } $pgtitle = array("Interfaces", $pconfig['descr']); +$statusurl = "status_interfaces.php"; + $closehead = false; include("head.inc"); $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" => "PPPoE", "pptp" => "PPTP" /* , "carpdev-dhcp" => "CarpDev"*/); diff --git a/usr/local/www/interfaces_assign.php b/usr/local/www/interfaces_assign.php index 407755f88d..107aaea809 100755 --- a/usr/local/www/interfaces_assign.php +++ b/usr/local/www/interfaces_assign.php @@ -41,6 +41,8 @@ ##|-PRIV $pgtitle = array("Interfaces", "Assign network ports"); +$statusurl = "status_interfaces.php"; + require("guiconfig.inc"); require("functions.inc"); require("filter.inc"); From b9b9b4d8d8ee1ae167331240e466f758bcbfe4b5 Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 10:42:11 -0400 Subject: [PATCH 35/54] Add status links to shaper pages. --- usr/local/www/firewall_shaper.php | 1 + usr/local/www/firewall_shaper_layer7.php | 1 + usr/local/www/firewall_shaper_queues.php | 1 + usr/local/www/firewall_shaper_vinterface.php | 1 + usr/local/www/firewall_shaper_wizards.php | 1 + 5 files changed, 5 insertions(+) diff --git a/usr/local/www/firewall_shaper.php b/usr/local/www/firewall_shaper.php index 6b6824ffdd..6618389087 100755 --- a/usr/local/www/firewall_shaper.php +++ b/usr/local/www/firewall_shaper.php @@ -52,6 +52,7 @@ if($_GET['reset'] <> "") { } $pgtitle = array("Firewall","Traffic Shaper"); +$statusurl = "status_queues.php"; $shaperIFlist = get_configured_interface_with_descr(); read_altq_config(); diff --git a/usr/local/www/firewall_shaper_layer7.php b/usr/local/www/firewall_shaper_layer7.php index 1fe4ead0c8..3e2dc2218f 100755 --- a/usr/local/www/firewall_shaper_layer7.php +++ b/usr/local/www/firewall_shaper_layer7.php @@ -57,6 +57,7 @@ $show_proto_form = false; //More variables $pgtitle = array("Firewall","Traffic Shaper", "Layer7"); +$statusurl = "status_queues.php"; $output_form = ""; diff --git a/usr/local/www/firewall_shaper_queues.php b/usr/local/www/firewall_shaper_queues.php index 1072d72f73..35b6f2176c 100755 --- a/usr/local/www/firewall_shaper_queues.php +++ b/usr/local/www/firewall_shaper_queues.php @@ -170,6 +170,7 @@ if ($_POST['apply']) { } $pgtitle = "Firewall: Shaper: By Queues View"; +$statusurl = "status_queues.php"; include("head.inc"); ?> diff --git a/usr/local/www/firewall_shaper_vinterface.php b/usr/local/www/firewall_shaper_vinterface.php index 45ec5cc236..b6c8c76f40 100644 --- a/usr/local/www/firewall_shaper_vinterface.php +++ b/usr/local/www/firewall_shaper_vinterface.php @@ -52,6 +52,7 @@ if($_GET['reset'] <> "") { } $pgtitle = array("Firewall","Traffic Shaper", "Limiter"); +$statusurl = "status_queues.php"; read_dummynet_config(); /* diff --git a/usr/local/www/firewall_shaper_wizards.php b/usr/local/www/firewall_shaper_wizards.php index 155724212e..acd744c881 100755 --- a/usr/local/www/firewall_shaper_wizards.php +++ b/usr/local/www/firewall_shaper_wizards.php @@ -71,6 +71,7 @@ if ($_POST['apply']) { } $pgtitle = array("Firewall", "Traffic Shaper", "Wizards"); +$statusurl = "status_queues.php"; $wizards = array("Single Lan multi Wan" => "traffic_shaper_wizard.xml", "Single Wan multi Lan" => "traffic_shaper_wizard_multi_lan.xml", From 41d984713b815ee6a59121e8c1055ffd25b514aa Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 11:13:32 -0400 Subject: [PATCH 36/54] Default to "dynamic" for a dynamic gateway. --- usr/local/www/system_gateways_edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/local/www/system_gateways_edit.php b/usr/local/www/system_gateways_edit.php index 21cf65b5a9..d0f3f3c883 100755 --- a/usr/local/www/system_gateways_edit.php +++ b/usr/local/www/system_gateways_edit.php @@ -348,7 +348,7 @@ function show_advanced_gateway() { From 3dd81dea7a62812ae64105b08d165247ba3f21a9 Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 11:26:58 -0400 Subject: [PATCH 37/54] Ensure that monitor IP stays blank when editing a system dynamic gateway. --- usr/local/www/system_gateways_edit.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usr/local/www/system_gateways_edit.php b/usr/local/www/system_gateways_edit.php index d0f3f3c883..69cc405f97 100755 --- a/usr/local/www/system_gateways_edit.php +++ b/usr/local/www/system_gateways_edit.php @@ -76,7 +76,7 @@ if (isset($id) && $a_gateways[$id]) { $pconfig['down'] = $a_gateway_item[$id]['down']; if (isset($a_gateways[$id]['dynamic'])) $pconfig['dynamic'] = true; - if($a_gateways[$id]['monitor'] <> "") { + if(($a_gateways[$id]['monitor'] <> "") && ($a_gateways[$id]['attribute'] != "system") && ($a_gateways[$id]['gateway'] != "dynamic")) { $pconfig['monitor'] = $a_gateways[$id]['monitor']; } else { $pconfig['monitor'] == ""; @@ -363,7 +363,7 @@ function show_advanced_gateway() {
- + /> @@ -676,7 +677,7 @@ function netbios_change() { $i = 0; foreach($a_csc as $csc): $disabled = "NO"; - if ($csc['disable']) + if (isset($csc['disable'])) $disabled = "YES"; ?>
- > + " >
Date: Wed, 2 Jun 2010 12:26:48 -0400 Subject: [PATCH 38/54] Remove this line, it is not needed. --- etc/rc.halt | 2 -- 1 file changed, 2 deletions(-) diff --git a/etc/rc.halt b/etc/rc.halt index d208ccd39d..4f3d1ef017 100755 --- a/etc/rc.halt +++ b/etc/rc.halt @@ -9,7 +9,5 @@ fi sleep 1 -killall -TERM sshd 2>&1 /dev/null - /sbin/shutdown -p now From 2d99dce73be4d5c020f8e6bdbbb61bc2e52fdd4c Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 2 Jun 2010 12:27:24 -0400 Subject: [PATCH 39/54] Don't kill ssh, it will stop the rest of the process when done from ssh. Instead, do not shut down network interfaces before a reboot. The original motive for doing this may no longer be necessary. Fixes #626 --- etc/rc.reboot | 9 --------- 1 file changed, 9 deletions(-) diff --git a/etc/rc.reboot b/etc/rc.reboot index b3ed50ace9..ecc47c23ae 100755 --- a/etc/rc.reboot +++ b/etc/rc.reboot @@ -21,15 +21,6 @@ else /etc/rc.conf_mount_ro fi -killall -TERM sshd 2>&1 /dev/null - sleep 1 -echo -n "Downing interfaces: " -for INTERFACE in `/sbin/ifconfig -l`; do - echo -n "$INTERFACE " - /sbin/ifconfig $INTERFACE down -done - /sbin/shutdown -r now - From 871768cf8a5eda75f829c4c6da00c1c1dd30bd3c Mon Sep 17 00:00:00 2001 From: Ermal Date: Wed, 2 Jun 2010 16:39:54 +0000 Subject: [PATCH 40/54] Use the functions from the pfSense module to configure interfaces on interfaces.inc. --- etc/inc/interfaces.inc | 138 ++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 72 deletions(-) diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index cdfcf5d1db..7bcd95dcb9 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -51,7 +51,7 @@ function interfaces_bring_up($interface) { log_error( "Backtrace: " . debug_backtrace() ); return; } - mwexec("/sbin/ifconfig " . escapeshellarg($interface) . " up"); + pfSense_interface_flags($interface, IFF_UP); } /* @@ -87,7 +87,7 @@ function does_interface_exist($interface) { function interfaces_loopback_configure() { if($g['booting']) echo "Configuring loopback interface..."; - mwexec("/sbin/ifconfig lo0 127.0.0.1"); + pfSense_interface_setaddress("lo0", "127.0.0.1"); interfaces_bring_up("lo0"); exec("/sbin/route add 127.0.0.2 127.0.0.1"); if($g['booting']) @@ -122,7 +122,7 @@ function interface_vlan_configure(&$vlan) { $vlanif = empty($vlan['vlanif']) ? "{$if}_vlan{$vlan['tag']}" : $vlan['vlanif']; $tag = $vlan['tag']; - if(empty($if)) { + if (empty($if)) { log_error("interface_vlan_confgure called with if undefined."); return; } @@ -130,21 +130,17 @@ function interface_vlan_configure(&$vlan) { /* make sure the parent interface is up */ interfaces_bring_up($if); /* Since we are going to add vlan(4) try to enable all that hardware supports. */ - mwexec("/sbin/ifconfig {$if} vlanhwtag"); - mwexec("/sbin/ifconfig {$if} vlanmtu"); - mwexec("/sbin/ifconfig {$if} vlanhwfilter"); + pfSense_interface_capabilities($if, IFCAP_VLAN_HWTAGGING|IFCAP_VLAN_MTU|IFCAP_VLAN_HWFILTER); if (!empty($vlanif) && does_interface_exist($vlanif)) { interface_bring_down($vlanif); } else { - $tmpvlanif = exec("/sbin/ifconfig vlan create"); - mwexec("/sbin/ifconfig {$tmpvlanif} name {$vlanif}"); - mwexec("/usr/sbin/ngctl name {$tmpvlanif}: {$vlanif}"); + $tmpvlanif = pfSense_interface_create("vlan"); + pfSense_interface_rename($tmpvlanif, $vlanif); + pfSense_ngctl_name("{$tmpvlanif}:", $vlanif); } - - mwexec("/sbin/ifconfig {$vlanif} vlan " . - escapeshellarg($tag) . " vlandev " . - escapeshellarg($if)); + + pfSense_vlan_create($vlanif, $if, $tag); interfaces_bring_up($vlanif); @@ -323,12 +319,11 @@ function interface_bridge_configure(&$bridge) { $checklist = get_configured_interface_list(); if ($g['booting'] || !empty($bridge['bridgeif'])) { - mwexec("/sbin/ifconfig {$bridge['bridgeif']} destroy"); - mwexec("/sbin/ifconfig {$bridge['bridgeif']} create"); + pfSense_interface_destroy($bridge['bridgeif']); + pfSense_interface_create($bridge['bridgeif']); $bridgeif = $bridge['bridgeif']; - } else { - $bridgeif = exec("/sbin/ifconfig bridge create"); - } + } else + $bridgeif = pfSense_interface_create("bridge"); /* Calculate smaller mtu and enforce it */ $smallermtu = 0; @@ -352,7 +347,7 @@ function interface_bridge_configure(&$bridge) { $realif1 = get_real_interface($member); $realif = escapeshellarg($realif1); /* make sure the parent interface is up */ - mwexec("/sbin/ifconfig {$realif} mtu {$smallermtu}"); + pfSense_interface_mtu($realif, $smallermtu); if(!$realif) log_error("realif not defined in interfaces bridge - up"); interfaces_bring_up($realif1); @@ -476,7 +471,7 @@ function interface_bridge_add_member($bridgeif, $interface) { $mtum = get_interface_mtu($interface); if ($mtu != $mtum) - mwexec("/sbin/ifconfig {$interface} mtu {$mtu}"); + pfSense_interface_mtu($interface, $mtu); interfaces_bring_up($interface); mwexec("/sbin/ifconfig {$bridgeif} addm {$interface}"); @@ -514,11 +509,11 @@ function interface_lagg_configure(&$lagg) { $checklist = get_interface_list(); if ($g['booting'] || !(empty($lagg['laggif']))) { - mwexec("/sbin/ifconfig {$lagg['laggif']} destroy"); - mwexec("/sbin/ifconfig {$lagg['laggif']} create"); + pfSense_interface_destroy($lagg['laggif']); + pfSense_interface_create($lagg['laggif']); $laggif = $lagg['laggif']; } else - $laggif = exec("/sbin/ifconfig lagg create"); + $laggif = pfSense_interface_create("lagg"); /* Calculate smaller mtu and enforce it */ $smallermtu = 0; @@ -538,7 +533,7 @@ function interface_lagg_configure(&$lagg) { if (!array_key_exists($member, $checklist)) continue; /* make sure the parent interface is up */ - mwexec("/sbin/ifconfig {$member} mtu {$smallermtu}"); + pfSense_interface_mtu($member, $smallermtu); interfaces_bring_up($member); mwexec("/sbin/ifconfig {$laggif} laggport {$member}"); } @@ -578,22 +573,21 @@ function interface_gre_configure(&$gre) { interfaces_bring_up($realif); if ($g['booting'] || !(empty($gre['greif']))) { - mwexec("/sbin/ifconfig {$gre['greif']} destroy"); - mwexec("/sbin/ifconfig {$gre['greif']} create"); + pfSense_interface_destroy($gre['greif']); + pfSense_interface_create($gre['greif']); $greif = $gre['greif']; - } else { - $greif = exec("/sbin/ifconfig gre create"); - } + } else + $greif = pfSense_interface_create("gre"); /* Do not change the order here for more see gre(4) NOTES section. */ mwexec("/sbin/ifconfig {$greif} tunnel {$realifip} {$gre['remote-addr']}"); mwexec("/sbin/ifconfig {$greif} {$gre['tunnel-local-addr']} {$gre['tunnel-remote-addr']} netmask " . gen_subnet_mask($gre['tunnel-remote-net'])); if (isset($gre['link0']) && $gre['link0']) - mwexec("/sbin/ifconfig {$greif} link0"); + pfSense_interface_flags($greif, IFF_LINK0); if (isset($gre['link1']) && $gre['link1']) - mwexec("/sbin/ifconfig {$greif} link1"); + pfSense_interface_flags($greif, IFF_LINK1); if (isset($gre['link2']) && $gre['link2']) - mwexec("/sbin/ifconfig {$greif} link2"); + pfSense_interface_flags($greif, IFF_LINK2); if($greif) interfaces_bring_up($greif); @@ -637,19 +631,19 @@ function interface_gif_configure(&$gif) { log_error("could not bring realif up -- variable not defined -- interface_gif_configure()"); if ($g['booting'] || !(empty($gif['gifif']))) { - mwexec("/sbin/ifconfig {$gif['gifif']} destroy"); - mwexec("/sbin/ifconfig {$gif['gifif']} create"); + pfSense_interface_destroy($gif['gifif']); + pfSense_interface_create($gif['gifif']); $gifif = $gif['gifif']; } else - $gifif = exec("/sbin/ifconfig gif create"); + $gifif = pfSense_interface_create("gif"); /* Do not change the order here for more see gif(4) NOTES section. */ mwexec("/sbin/ifconfig {$gifif} tunnel {$realifip} {$gif['remote-addr']}"); mwexec("/sbin/ifconfig {$gifif} {$gif['tunnel-local-addr']} {$gif['tunnel-remote-addr']} netmask " . gen_subnet_mask($gif['tunnel-remote-net'])); if (isset($gif['link0']) && $gif['link0']) - mwexec("/sbin/ifconfig {$gifif} link0"); + pfSense_interface_flags($gifif, IFF_LINK0); if (isset($gif['link1']) && $gif['link1']) - mwexec("/sbin/ifconfig {$gifif} link1"); + pfSense_interface_flags($gifif, IFF_LINK1); if($gifif) interfaces_bring_up($gifif); else @@ -680,6 +674,11 @@ function interfaces_configure() { $delayed_list = array(); $bridge_list = array(); + /* This is needed to speedup interfaces on bootup. */ + $reload = false; + if ($g['booting']) + $reload = true; + foreach($iflist as $if => $ifname) { $realif = $config['interfaces'][$if]['if']; if(is_array($config['interfaces'][$if]['pppoe']) && isset($config['interfaces'][$if]['pppoe']['pppoe-reset-type'])) @@ -697,7 +696,7 @@ function interfaces_configure() { echo "Configuring {$ifname} interface..."; if($g['debug']) log_error("Configuring {$ifname}"); - interface_configure($if, true); + interface_configure($if, $reload); if ($g['booting']) echo "done.\n"; } @@ -718,7 +717,7 @@ function interfaces_configure() { if ($g['debug']) log_error("Configuring {$ifname}"); - interface_configure($if, true); + interface_configure($if, $reload); if ($g['booting']) echo "done.\n"; @@ -733,7 +732,7 @@ function interfaces_configure() { if($g['debug']) log_error("Configuring {$ifname}"); - interface_configure($if, true); + interface_configure($if, $reload); if ($g['booting']) echo "done.\n"; @@ -770,7 +769,7 @@ function interfaces_configure() { function interface_reconfigure($interface = "wan") { interface_bring_down($interface); - interface_configure($interface); + interface_configure($interface, true); } function interface_vip_bring_down(&$vip) { @@ -781,17 +780,17 @@ function interface_vip_bring_down(&$vip) { case "ipalias": $vipif = get_real_interface($vip['interface']); if(does_interface_exist($vipif)) - mwexec("/sbin/ifconfig {$vipif} delete {$vip['subnet']}"); + pfSense_interface_deladdress($vipif, $vip['subnet']); break; case "carp": $vipif = "vip" . $vip['vhid']; if(does_interface_exist($vipif)) - mwexec("/sbin/ifconfig {$vipif} destroy"); + pfSense_interface_destroy($vipif); break; case "carpdev-dhcp": $vipif = "vip" . $vip['vhid']; if(does_interface_exist($vipif)) - mwexec("/sbin/ifconfig {$vipif} destroy"); + pfSense_interface_destroy($vipif); break; } } @@ -830,7 +829,7 @@ function interface_bring_down($interface = "wan", $destroy = false) { unlink_if_exists("{$g['varetc_path']}/dhclient_{$interface}.conf"); if(does_interface_exist("$realif")) { mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true); - mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " down"); + pfSense_interface_flags($realif, -IFF_UP); mwexec("/usr/sbin/arp -d -i {$realif} -a"); } break; @@ -842,7 +841,7 @@ function interface_bring_down($interface = "wan", $destroy = false) { default: if(does_interface_exist("$realif")) { mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true); - mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " down"); + pfSense_interface_flags($realif, -IFF_UP); mwexec("/usr/sbin/arp -d -i {$realif} -a"); } break; @@ -862,7 +861,7 @@ function interface_bring_down($interface = "wan", $destroy = false) { if ($destroy == true) { if (preg_match("/^tun|^ovpn|^gif|^gre|^lagg|^bridge|vlan/i", $realif)) - mwexec("/sbin/ifconfig {$realif} destroy"); + pfSense_interface_destroy($realif); } return; @@ -1301,11 +1300,11 @@ function interface_carp_configure(&$vip) { /* create the carp interface and setup */ if (does_interface_exist($vipif)) { - interface_bring_down($vipif); + pfSense_interface_flags($vipif, -IFF_UP); } else { - $carpif = exec("/sbin/ifconfig carp create"); - mwexec("/sbin/ifconfig {$carpif} name {$vipif}"); - mwexec("/usr/sbin/ngctl name {$carpif}: {$vipif}"); + $carpif = pfSense_interface_create("carp"); + pfSense_interface_rename($carpif, $vipif); + pfSense_ngctl_name("{$carpif}:", $vipif); } /* invalidate interface cache */ @@ -1351,7 +1350,7 @@ function interface_carpdev_configure(&$vip) { } else { $carpdevif = exec("/sbin/ifconfig carp create"); mwexec("/sbin/ifconfig {$carpdevif} name {$vipif}"); - mwexec("/usr/sbin/ngctl name {$carpdevif}: {$vipif}"); + pfSense_ngctl_name("{$carpdevif}:", $vipif); } mwexec("/sbin/ifconfig {$vipif} carpdev {$realif} vhid {$vip['vhid']} advskew {$vip['advskew']} {$password}"); @@ -1439,7 +1438,7 @@ function interface_wireless_clone($realif, $wlcfg) { if($needs_clone == true) { /* remove previous instance if it exists */ if(does_interface_exist($realif)) - mwexec("/sbin/ifconfig {$realif} destroy"); + pfSense_interface_destroy($realif); log_error("Cloning new wireless interface {$realif}"); // Create the new wlan interface. FreeBSD returns the new interface name. @@ -1451,7 +1450,7 @@ function interface_wireless_clone($realif, $wlcfg) { } $newif = trim($out[0]); // Rename the interface to {$parentnic}_wlan{$number}#: EX: ath0_wlan0 - mwexec("/sbin/ifconfig {$newif} name {$realif} 2>&1", false); + pfSense_interface_rename($newif, $realif); // FIXME: not sure what ngctl is for. Doesn't work. // mwexec("/usr/sbin/ngctl name {$newif}: {$realif}", false); } @@ -1887,17 +1886,17 @@ function interface_configure($interface = "wan", $reloadall = false) { mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " link " . escapeshellarg($wancfg['spoofmac'])); - /* - * All vlans need to spoof their parent mac address, too. see - * ticket #1514: http://cvstrac.pfsense.com/tktview?tn=1514,33 - */ - if (is_array($config['vlans']['vlan'])) { - foreach ($config['vlans']['vlan'] as $vlan) { - if ($vlan['if'] == $realif) - mwexec("/sbin/ifconfig " . escapeshellarg($vlan['vlanif']) . - " link " . escapeshellarg($wancfg['spoofmac'])); - } - } + /* + * All vlans need to spoof their parent mac address, too. see + * ticket #1514: http://cvstrac.pfsense.com/tktview?tn=1514,33 + */ + if (is_array($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if ($vlan['if'] == $realif) + mwexec("/sbin/ifconfig " . escapeshellarg($vlan['vlanif']) . + " link " . escapeshellarg($wancfg['spoofmac'])); + } + } } else { $mac = get_interface_mac(get_real_interface($wancfg['if'])); if($mac == "ff:ff:ff:ff:ff:ff") { @@ -1924,7 +1923,7 @@ function interface_configure($interface = "wan", $reloadall = false) { mwexec($cmd); } if (!empty($wancfg['mtu'])) - mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " mtu {$wancfg['mtu']}"); + pfSense_interface_mtu($realif, $wancfg['mtu']); /* invalidate interface/ip/sn cache */ get_interface_arr(true); @@ -1950,10 +1949,7 @@ function interface_configure($interface = "wan", $reloadall = false) { break; default: if ($wancfg['ipaddr'] <> "" && $wancfg['subnet'] <> "") { - if($wancfg['ipaddr'] && $wancfg['subnet']) - mwexec("/sbin/ifconfig " . escapeshellarg($realif) . - " " . escapeshellarg($wancfg['ipaddr'] . "/" . - $wancfg['subnet'])); + pfSense_interface_setaddress($realif, "{$wancfg['ipaddr']}/{$wancfg['subnet']}"); } else if (substr($realif, 0, 3) == "gre") { if (is_array($config['gres']['gre'])) { foreach ($config['gres']['gre'] as $gre) @@ -2029,8 +2025,6 @@ function interface_configure($interface = "wan", $reloadall = false) { } } - unmute_kernel_msgs(); - return 0; } From b29d9c8ea328c3454346fa2c334673c36f78ca0c Mon Sep 17 00:00:00 2001 From: Ermal Date: Wed, 2 Jun 2010 16:50:54 +0000 Subject: [PATCH 41/54] Start sshd early on boot so it is availble as soon as the first ip is configured. --- etc/rc.bootup | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/etc/rc.bootup b/etc/rc.bootup index d9c3543c47..858ea2e891 100755 --- a/etc/rc.bootup +++ b/etc/rc.bootup @@ -198,6 +198,10 @@ system_hosts_generate(); /* configure loopback interface */ interfaces_loopback_configure(); +echo "Starting Secure Shell Services..."; +mwexec_bg("/etc/sshd"); +echo "done.\n"; + /* set up interfaces */ if(!$debugging) mute_kernel_msgs(); @@ -260,10 +264,6 @@ system_routing_configure(); /* enable routing */ system_routing_enable(); -echo "Starting Secure Shell Services..."; -mwexec_bg("/etc/sshd"); -echo "done.\n"; - /* configure console menu */ system_console_configure(); From bf444c344e9a95a5d7e65ae13f40d20aa9958df1 Mon Sep 17 00:00:00 2001 From: Ermal Date: Wed, 2 Jun 2010 16:56:46 +0000 Subject: [PATCH 42/54] Use the new functions on CP code too. --- etc/inc/captiveportal.inc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc index 885040b7f9..0f94462b65 100644 --- a/etc/inc/captiveportal.inc +++ b/etc/inc/captiveportal.inc @@ -34,7 +34,7 @@ added rules which may have been created by other per-user code (index.php, etc). These changes are (c) 2004 Keycom PLC. - pfSense_BUILDER_BINARIES: /sbin/ifconfig /sbin/ipfw /sbin/sysctl /sbin/kldunload + pfSense_BUILDER_BINARIES: /sbin/ipfw /sbin/sysctl /sbin/kldunload pfSense_BUILDER_BINARIES: /usr/local/sbin/lighttpd /usr/local/bin/minicron /sbin/pfctl pfSense_BUILDER_BINARIES: /bin/hostname /bin/cp pfSense_MODULE: captiveportal @@ -58,7 +58,7 @@ function captiveportal_configure() { $ifaces = get_configured_interface_list(); foreach ($ifaces as $kiface => $kiface2) { $tmpif = get_real_interface($kiface); - mwexec("/sbin/ifconfig {$tmpif} -ipfwfilter"); + pfSense_interface_flags($tmpif, -IFF_IPFW_FILTER); } $cpinterfaces = explode(",", $config['captiveportal']['interface']); $firsttime = 0; @@ -77,14 +77,14 @@ function captiveportal_configure() { if (!empty($carpif)) { $carpsif = explode(" ", $carpif); foreach ($carpsif as $cpcarp) { - mwexec("/sbin/ifconfig {$cpcarp} ipfwfilter"); + pfSense_interface_flags($cpcarp, IFF_IPFW_FILTER); $carpip = find_interface_ip($cpcarp); if (is_ipaddr($carpip)) $cpips[] = $carpip; } } $cpips[] = $cpipm; - mwexec("/sbin/ifconfig {$tmpif} ipfwfilter"); + pfSense_interface_flags($tmpif, IFF_IPFW_FILTER); } } } @@ -391,12 +391,12 @@ EOD; foreach ($listifs as $listrealif => $listif) { if (!empty($listrealif)) { if (does_interface_exist($listrealif)) { - mwexec("/sbin/ifconfig {$listrealif} -ipfwfilter"); + pfSense_interface_flags($listrealif, -IFF_IPFW_FILTER); $carpif = link_ip_to_carp_interface(find_interface_ip($listrealif)); if (!empty($carpif)) { $carpsif = explode(" ", $carpif); foreach ($carpsif as $cpcarp) - mwexec("/sbin/ifconfig {$cpcarp} -ipfwfilter"); + pfSense_interface_flags($cpcarp, -IFF_IPFW_FILTER); } } } From 3d0633917f7acf6f32d178bd68602282db18538d Mon Sep 17 00:00:00 2001 From: Ermal Date: Wed, 2 Jun 2010 17:17:55 +0000 Subject: [PATCH 43/54] Use the module functions to set/remove/test interface capabilities. --- etc/inc/pfsense-utils.inc | 61 ++++++++++++++------------------------- 1 file changed, 21 insertions(+), 40 deletions(-) diff --git a/etc/inc/pfsense-utils.inc b/etc/inc/pfsense-utils.inc index 1015023acb..21bbe0ce32 100644 --- a/etc/inc/pfsense-utils.inc +++ b/etc/inc/pfsense-utils.inc @@ -188,13 +188,15 @@ function enable_hardware_offloading($interface) { if($int <> "") $interface = $int; $int_family = preg_split("/[0-9]+/", $interface); - $options = strtolower(`/sbin/ifconfig -m {$interface} | grep capabilities`); + $options = pfSense_get_interface_addresses($interface); + if (!is_array($options)) + return; $supported_ints = array('fxp'); if (in_array($int_family, $supported_ints)) { if(isset($config['system']['do_not_use_nic_microcode'])) continue; if(does_interface_exist($interface)) - mwexec("/sbin/ifconfig {$interface} link0"); + pfSense_interface_flags($interface, IFF_LINK0); } /* skip vlans for checksumming and polling */ @@ -202,26 +204,24 @@ function enable_hardware_offloading($interface) { return; if($config['system']['disablechecksumoffloading']) { - if(stristr($options, "txcsum") == true) - mwexec("/sbin/ifconfig {$interface} -txcsum 2>/dev/null"); - if(stristr($options, "rxcsum") == true) - mwexec("/sbin/ifconfig {$interface} -rxcsum 2>/dev/null"); + if (isset($options['encaps']['txcsum'])) + pfSense_interface_capabilities($interface, -IFCAP_TXCSUM); + if (isset($options['encaps']['rxcsum'])) + pfSense_interface_capabilities($interface, -IFCAP_RXCSUM); } else { - if(stristr($options, "txcsum") == true) - mwexec("/sbin/ifconfig {$interface} txcsum 2>/dev/null"); - if(stristr($options, "rxcsum") == true) - mwexec("/sbin/ifconfig {$interface} rxcsum 2>/dev/null"); + if (isset($options['caps']['txcsum'])) + pfSense_interface_capabilities($interface, IFCAP_TXCSUM); + if (isset($options['caps']['rxcsum'])) + pfSense_interface_capabilities($interface, IFCAP_RXCSUM); } /* if the NIC supports polling *AND* it is enabled in the GUI */ - if(interface_supports_polling($interface)) { - $polling = isset($config['system']['polling']); - if($polling) { - mwexec("/sbin/ifconfig {$interface} polling 2>/dev/null"); - } else { - mwexec("/sbin/ifconfig {$interface} -polling 2>/dev/null"); - } - } + $polling = isset($config['system']['polling']); + if($polling && isset($options['caps']['polling'])) + pfSense_interface_capabilities($interface, IFCAP_POLLING); + else + pfSense_interface_capabilities($interface, -IFCAP_POLLING); + return; } @@ -236,29 +236,10 @@ function enable_hardware_offloading($interface) { * ******/ function interface_supports_polling($iface) { - $pattern = '/([a-z].*)[0-9]/'; - preg_match($pattern, $iface, $iface2); - $interface=$iface2[1]; - $supported_ints = array("bge", - "dc", - "em", - "fwe", - "fwip", - "fxp", - "ixgb", - "nfe", - "vge", - "re", - "rl", - "sf", - "sis", - "ste", - "stge", - "vge", - "vr", - "xl"); - if(in_array($interface, $supported_ints)) + $opts = pfSense_get_interface_addresses($iface); + if (is_array($opts) && isset($opts['caps']['polling'])) return true; + return false; } From d538b8fa7e05f75a457fbdda1072b90f326ee149 Mon Sep 17 00:00:00 2001 From: Ermal Date: Wed, 2 Jun 2010 17:20:10 +0000 Subject: [PATCH 44/54] Correct ifconfig syntax --- etc/inc/config.lib.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/inc/config.lib.inc b/etc/inc/config.lib.inc index 90968adefc..707dee8928 100644 --- a/etc/inc/config.lib.inc +++ b/etc/inc/config.lib.inc @@ -932,7 +932,7 @@ EODD; if (strcasecmp(chop(fgets($fp)), "y") == 0) { if($config['interfaces']['lan']['if']) - mwexec("/sbin/ifconfig delete " . $config['interfaces']['lan']['if']); + mwexec("/sbin/ifconfig " . $config['interfaces']['lan']['if'] . " delete"); } if(isset($config['interfaces']['lan'])) unset($config['interfaces']['lan']); @@ -950,7 +950,7 @@ EODD; unset($config['nat']); } else { if(isset($config['interfaces']['lan']['if'])) - mwexec("/sbin/ifconfig delete " . $config['interfaces']['lan']['if']); + mwexec("/sbin/ifconfig " . $config['interfaces']['lan']['if'] . " delete"); if(isset($config['interfaces']['lan'])) unset($config['interfaces']['lan']); if(isset($config['dhcpd']['lan'])) From 6ef98d296de5b95f1a6f123b4dec5ea55e3aa4e9 Mon Sep 17 00:00:00 2001 From: Ermal Date: Wed, 2 Jun 2010 22:55:33 +0000 Subject: [PATCH 45/54] Mute this command so people do not think something went wrong. --- etc/inc/captiveportal.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc index 0f94462b65..ce2a8340ea 100644 --- a/etc/inc/captiveportal.inc +++ b/etc/inc/captiveportal.inc @@ -108,7 +108,7 @@ function captiveportal_configure() { unlink_if_exists("{$g['vardb_path']}/captiveportal_mac.db"); unlink_if_exists("{$g['vardb_path']}/captiveportal_ip.db"); unlink_if_exists("{$g['vardb_path']}/captiveportal_radius.db"); - mwexec("/sbin/ipfw -q table all flush"); + mwexec("/sbin/ipfw -q table all flush", true); /* setup new database in case someone tries to access the status -> captive portal page */ touch("{$g['vardb_path']}/captiveportal.db"); From b554f7bf1efef5af445042ca977e979453a9d112 Mon Sep 17 00:00:00 2001 From: Ermal Date: Wed, 2 Jun 2010 23:01:08 +0000 Subject: [PATCH 46/54] Fix logic. --- usr/local/www/wizard.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/usr/local/www/wizard.php b/usr/local/www/wizard.php index 08d2716c57..e733834a90 100755 --- a/usr/local/www/wizard.php +++ b/usr/local/www/wizard.php @@ -201,7 +201,7 @@ function enablechange() { $enablefields = explode(',', $field['enablefields']); foreach($enablefields as $enablefield) { $enablefield = strtolower($enablefield); - print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 1;' . "\n"; + print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 0;' . "\n"; } } if(isset($field['checkenablefields'])) { @@ -216,7 +216,7 @@ function enablechange() { $enablefields = explode(',', $field['enablefields']); foreach($enablefields as $enablefield) { $enablefield = strtolower($enablefield); - print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 0;' . "\n"; + print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 1;' . "\n"; } } if(isset($field['checkenablefields'])) { @@ -248,7 +248,7 @@ function disablechange() { $checkenablefields = explode(',', $field['checkdisablefields']); foreach($checkenablefields as $checkenablefield) { $checkenablefield = strtolower($checkenablefield); - print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 0;' . "\n"; + print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 1;' . "\n"; } } print "\t" . '} else {' . "\n"; @@ -263,7 +263,7 @@ function disablechange() { $checkenablefields = explode(',', $field['checkdisablefields']); foreach($checkenablefields as $checkenablefield) { $checkenablefield = strtolower($checkenablefield); - print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 1;' . "\n"; + print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 0;' . "\n"; } } print "\t" . '}' . "\n"; From 60ce86ea1e603f4b8aa413f7275a5efed28e9aaf Mon Sep 17 00:00:00 2001 From: Erik Fonnesbeck Date: Wed, 2 Jun 2010 17:59:07 -0600 Subject: [PATCH 47/54] For settings that exist in the configuration but are blank, only consider it true when associated with a checkbox. --- usr/local/www/wizard.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/usr/local/www/wizard.php b/usr/local/www/wizard.php index e733834a90..8c2ae36d15 100755 --- a/usr/local/www/wizard.php +++ b/usr/local/www/wizard.php @@ -365,7 +365,10 @@ function showchange() { $arraynum = "[" . $field['arraynum'] . "]"; foreach ($field_split as $f) $field_conv .= "['" . $f . "']"; - $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) { \$value = \$config" . $field_conv . $arraynum . "; if (empty(\$value)) \$value = true; }"; + if($field['type'] == "checkbox") + $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) { \$value = \$config" . $field_conv . $arraynum . "; if (empty(\$value)) \$value = true; }"; + else + $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) \$value = \$config" . $field_conv . $arraynum . ";"; eval($toeval); } From b72eb6c8cc0aa927ee79d4c389429eef1a648433 Mon Sep 17 00:00:00 2001 From: Scott Ullrich Date: Wed, 2 Jun 2010 23:47:19 -0400 Subject: [PATCH 48/54] Show when Padlock is active --- usr/local/www/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/local/www/index.php b/usr/local/www/index.php index 4125b5173a..0463750dd7 100755 --- a/usr/local/www/index.php +++ b/usr/local/www/index.php @@ -165,7 +165,7 @@ EOF; if ($fd) { while (!feof($fd)) { $dmesgl = fgets($fd); - if (preg_match("/^hifn.: (.*?),/", $dmesgl, $matches) or preg_match("/^safe.: (.*?),/", $dmesgl, $matches) or preg_match("/^ubsec.: (.*?),/", $dmesgl, $matches) or preg_match("/^padlock.: <(.*?)>,/", $dmesgl, $matches) or preg_match("/^glxsb.: (.*?),/", $dmesgl, $matches)) { + if (preg_match("/^hifn.: (.*?),/", $dmesgl, $matches) or preg_match("/.*(VIA Padlock)/", $dmesgl, $matches) or preg_match("/^safe.: (.*?),/", $dmesgl, $matches) or preg_match("/^ubsec.: (.*?),/", $dmesgl, $matches) or preg_match("/^padlock.: <(.*?)>,/", $dmesgl, $matches) or preg_match("/^glxsb.: (.*?),/", $dmesgl, $matches)) { $hwcrypto = $matches[1]; break; } From ae9618afa8ee7bc7292bf844760692c4e12bd1a4 Mon Sep 17 00:00:00 2001 From: Ermal Date: Thu, 3 Jun 2010 18:22:13 +0000 Subject: [PATCH 49/54] Return the gateway status only for gateways apinger knows about instead of assuming that all gateways are down, which might give consecuences. Also prepend 'filter_' to the function used to kill states for down gateways in filter.inc to be consistent. --- etc/inc/filter.inc | 5 +++-- etc/inc/gwlb.inc | 19 +------------------ 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc index ee9317e215..0d4e9a141b 100644 --- a/etc/inc/filter.inc +++ b/etc/inc/filter.inc @@ -140,8 +140,9 @@ function filter_configure() { touch($g['tmp_path'] . "/filter_dirty"); } -function delete_states_for_down_gateways() { +function filter_delete_states_for_down_gateways() { global $config; + $a_gateways = return_gateways_status(); foreach ($a_gateways as $gateway) { if ($gateway['status'] == "down") { @@ -369,7 +370,7 @@ function filter_configure_sync() { echo "."; update_filter_reload_status("Processing down interface states"); - delete_states_for_down_gateways(); + filter_delete_states_for_down_gateways(); update_filter_reload_status("Running plugins"); diff --git a/etc/inc/gwlb.inc b/etc/inc/gwlb.inc index 846d33d42b..70bfd52f0f 100644 --- a/etc/inc/gwlb.inc +++ b/etc/inc/gwlb.inc @@ -243,9 +243,7 @@ EOD; /* return the status of the apinger targets as a array */ function return_gateways_status() { - global $config; - global $g; - $gateways_arr = return_gateways_array(); + global $config, $g; $apingerstatus = array(); if (file_exists("{$g['tmp_path']}/apinger.status")) { @@ -253,21 +251,6 @@ function return_gateways_status() { } $status = array(); - $i = 2; - /* assign a dummy IP address for dynamic interfaces in case we need it */ - $monitor = array(); - foreach($gateways_arr as $name => $gateway) { - if($gateway['monitor'] == "dynamic") { - $gateway['monitor'] = "127.0.0.{$i}"; - $i++; - } - $status[$gateway['monitor']]['monitor'] = $gateway['monitor']; - $status[$gateway['monitor']]['interface'] = $gateway['interface']; - $status[$gateway['monitor']]['gateway'] = $gateway['gateway']; - $status[$gateway['monitor']]['name'] = $gateway['name']; - $status[$gateway['monitor']]['status'] = "down"; - - } foreach($apingerstatus as $line) { $info = explode("|", $line); $target = $info[0]; From f81cfcc92efecf60a652d7cdfee149894cbc6cc9 Mon Sep 17 00:00:00 2001 From: jim-p Date: Thu, 3 Jun 2010 15:37:32 -0400 Subject: [PATCH 50/54] Use require_once instead of require, in case these files have been loaded previously. Fixes #631 --- usr/local/www/interfaces.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php index 414a10ef58..b9b3e658a4 100755 --- a/usr/local/www/interfaces.php +++ b/usr/local/www/interfaces.php @@ -44,14 +44,14 @@ ##|*MATCH=interfaces.php* ##|-PRIV -require("guiconfig.inc"); -require("ipsec.inc"); -require("functions.inc"); -require("captiveportal.inc"); -require("filter.inc"); -require("shaper.inc"); -require("rrd.inc"); -require("vpn.inc"); +require_once("guiconfig.inc"); +require_once("ipsec.inc"); +require_once("functions.inc"); +require_once("captiveportal.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); +require_once("vpn.inc"); if ($_REQUEST['if']) { $if = $_REQUEST['if']; From 6d5446a2cb31db38b7c533f6b8cceae291bec52a Mon Sep 17 00:00:00 2001 From: Ermal Date: Thu, 3 Jun 2010 19:56:18 +0000 Subject: [PATCH 51/54] Add some missing code to convert_real_interface_to_friendly_interface_name. There is no need to go through all the interfaces just to find out if an interface has a gateway or not and is the same for finding the real interface name of a friendly interface. Also while here do not rely on stristr for finding if an interface exists rather do a proper matching on interface name otherwise wrong results might come up. --- etc/inc/filter.inc | 2 +- etc/inc/interfaces.inc | 240 ++++++++++++++++++++++------------------- 2 files changed, 129 insertions(+), 113 deletions(-) diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc index 0d4e9a141b..0bbcf5864b 100644 --- a/etc/inc/filter.inc +++ b/etc/inc/filter.inc @@ -2085,7 +2085,7 @@ EOD; /* if antilockout is enabled, LAN exists and has * an IP and subnet mask assigned */ - $lanif = $FilterIflist["lan"]['if']; + $lanif = $FilterIflist['lan']['if']; $ipfrules .= << 0) + $index = intval(substr($interface, 5)); + if ($interface == "pppoe") + return "lan"; + if ($index > 0) return "opt{$index}"; else return "wan"; } else if (stristr($interface, "pptp")) { - $index = substr($interface, 4); - if (intval($index) > 0) + $index = intval(substr($interface, 4)); + if ($interface == "pptp") + return "lan"; + if ($index > 0) + return "opt{$index}"; + else + return "wan"; + } else if (stristr($interface, "ppp")) { + $index = intval(substr($interface, 3)); + if ($interface == "ppp") + return "lan"; + if ($index > 0) + return "opt{$index}"; + else + return "wan"; + } else if (stristr($interface, "l2tp")) { + $index = intval(substr($interface, 4)); + if ($interface == "l2tp") + return "lan"; + if ($index > 0) return "opt{$index}"; else return "wan"; } else if (stristr($interface, "vip")) { - $index = substr($interface, 3); - $counter = 0; - foreach ($config['virtualip']['vip'] as $vip) { + $index = intval(substr($interface, 3)); + foreach ($config['virtualip']['vip'] as $counter => $vip) { if ($vip['mode'] == "carpdev-dhcp" || $vip['mode'] == "carp") { - if (intval($index) == $counter) + if ($index == $counter) return $vip['interface']; - $counter++; } } } else if (stristr($interface, "carp")) { - $index = substr($interface, 4); - $counter = 0; - foreach ($config['virtualip']['vip'] as $vip) { + $index = intval(substr($interface, 4)); + foreach ($config['virtualip']['vip'] as $counter => $vip) { if ($vip['mode'] == "carpdev-dhcp" || $vip['mode'] == "carp") { - if (intval($index) == $counter) + if ($index == $counter) return $vip['interface']; - $counter++; } } } - /* if list */ - $ifdescrs = get_configured_interface_list(false, true); + /* XXX: For speed reasons reference directly the interface array */ + $ifdescrs = $config['interfaces']; + //$ifdescrs = get_configured_interface_list(false, true); foreach ($ifdescrs as $if => $ifname) { - if($config['interfaces'][$if]['if'] == $interface) - return $ifname; + if ($config['interfaces'][$if]['if'] == $interface) + return $if; /* XXX: ermal - The 3 lines below are totally bogus code. */ $int = interface_translate_type_to_real($if); - if($ifname == $interface) - return $ifname; - - if($int == $interface) + if ($int == $interface) return $ifname; } return NULL; @@ -2576,7 +2602,7 @@ function interface_get_wireless_clone($wlif) { } function get_real_interface($interface = "wan") { - global $config; + global $config; $wanif = NULL; @@ -2601,78 +2627,60 @@ function get_real_interface($interface = "wan") { $wanif = "ppp"; break; default: - $iflist = get_configured_interface_with_descr(false, true); + // If a real interface was alread passed simply + // pass the real interface back. This encourages + // the usage of this function in more cases so that + // we can combine logic for more flexibility. + if(does_interface_exist($interface)) { + $wanif = $interface; + break; + } + if (empty($config['interfaces'][$interface])) + break; - foreach ($iflist as $if => $ifdesc) { - // If a real interface was alread passed simply - // pass the real interface back. This encourages - // the usage of this function in more cases so that - // we can combine logic for more flexibility. - if($config['interfaces'][$if]['if'] == $interface) { - if(does_interface_exist($interface)) { - $wanif = $interface; - break; + $cfg =& $config['interfaces'][$interface]; + + // Wireless cloned NIC support (FreeBSD 8+) + // interface name format: $parentnic_wlanparentnic# + // example: ath0_wlan0 + if (is_interface_wireless($cfg['if'])) { + $wanif = interface_get_wireless_clone($cfg['if']); + break; + } + /* + if (empty($cfg['if'])) { + $wancfg = $cfg['if']; + break; + } + */ + + switch ($cfg['ipaddr']) { + case "carpdev-dhcp": + $viparr = &$config['virtualip']['vip']; + if(is_array($viparr)) + foreach ($viparr as $counter => $vip) { + if ($vip['mode'] == "carpdev-dhcp") { + if($vip['interface'] == $interface) { + $wanif = "carp{$counter}"; + break; + } + } } - } - - if ($interface == $if || $interface == $ifdesc) { - - $cfg = $config['interfaces'][$if]; - - // Wireless cloned NIC support (FreeBSD 8+) - // interface name format: $parentnic_wlanparentnic# - // example: ath0_wlan0 - if(is_interface_wireless($cfg['if'])) { - $wanif = interface_get_wireless_clone($cfg['if']); break; - } - - if (empty($cfg['ipaddr'])) { + case "pppoe": + case "pptp": + case "l2tp": + case "ppp": + if ($interface == "wan") + $wanif = "{$cfg['ipaddr']}0"; + else { + $idx = substr($interface, 3); + $wanif = "{$cfg['ipaddr']}{$idx}"; + } + break; + default: $wanif = $cfg['if']; break; - } - - switch ($cfg['ipaddr']) { - case "carpdev-dhcp": - $viparr = &$config['virtualip']['vip']; - $counter = 0; - if(is_array($viparr)) - foreach ($viparr as $vip) { - if ($vip['mode'] == "carpdev-dhcp") { - if($vip['interface'] == $if) { - $wanif = "carp{$counter}"; - break; - } - $counter++; - } else if ($vip['mode'] = "carp") - $counter++; - } - break; - case "pppoe": - if ($if == "wan") - $wanif = "pppoe0"; - else - $wanif = "pppoe" . substr($if,3); - break; - case "pptp": - if ($if == "wan") - $wanif = "pptp0"; - else - $wanif = "pptp" . substr($if, 3); - break; - case "ppp": - if ($if == "wan") - $wanif = "ppp0"; - else - $wanif = "ppp" . substr($if, 3); - break; - default: - $wanif = $cfg['if']; - break; - } - - break; - } } break; } @@ -2920,10 +2928,6 @@ function get_interface_ip($interface = "wan") return null; } - /* Do we really come here for these interfaces ?! */ - if (in_array($realif, array("pptp", "pppoe", "l2tp", "openvpn", "enc0" /* , "ppp" */))) - return ""; - $curip = find_interface_ip($realif); if ($curip && is_ipaddr($curip) && ($curip != "0.0.0.0")) return $curip; @@ -2943,10 +2947,6 @@ function get_interface_subnet($interface = "wan") return null; } - /* Do we really come here for these interfaces ?! */ - if (in_array($realif, array("pptp", "pppoe", "l2tp", "openvpn", "enc0" /* , "ppp" */))) - return ""; - $cursn = find_interface_subnet($realif); if (!empty($cursn)) return $cursn; @@ -2968,12 +2968,13 @@ function get_interfaces_with_gateway() { case "carpdev-dhcp": case "pppoe": case "pptp": + case "l2tp": case "ppp"; - $ints[] = $ifdescr; + $ints[$ifdescr] = $ifdescr; break; default: if (!empty($ifname['gateway'])) - $ints[] = $ifdescr; + $ints[$ifdescr] = $ifdescr; break; } } @@ -2982,10 +2983,25 @@ function get_interfaces_with_gateway() { /* return true if interface has a gateway */ function interface_has_gateway($friendly) { + global $config; - $friendly = strtolower($friendly); - if (in_array($friendly, get_interfaces_with_gateway())) - return true; + if (!empty($config['interfaces'][$friendly])) { + $ifname =& $config['interfaces'][$friendly]; + switch ($ifname['ipaddr']) { + case "dhcp": + case "carpdev-dhcp": + case "pppoe": + case "pptp": + case "l2tp": + case "ppp"; + return true; + break; + default: + if (!empty($ifname['gateway'])) + return true; + break; + } + } return false; } From 922693e929f4589d719a58bfd4986d8a1572debb Mon Sep 17 00:00:00 2001 From: Ermal Date: Thu, 3 Jun 2010 20:41:31 +0000 Subject: [PATCH 52/54] Silence is better for this command. --- etc/inc/rrd.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/inc/rrd.inc b/etc/inc/rrd.inc index fa2920e268..7f9b13cd71 100644 --- a/etc/inc/rrd.inc +++ b/etc/inc/rrd.inc @@ -634,7 +634,7 @@ function enable_rrd_graphing() { } function kill_traffic_collector() { - mwexec("/bin/pkill -f updaterrd.sh"); + mwexec("/bin/pkill -f updaterrd.sh", true); } /* This xml 2 array function is courtesy of the php.net comment section on xml_parse. From 956950dea4f933af197b061b5e32a527544e375c Mon Sep 17 00:00:00 2001 From: Ermal Date: Fri, 4 Jun 2010 15:57:08 +0000 Subject: [PATCH 53/54] Fixes #374. Actually reload teh dhcpleases utility whenever the hosts files is regenerated to avoid problems. --- etc/inc/services.inc | 23 ----------------------- etc/inc/system.inc | 13 +++++++++++++ etc/rc.bootup | 3 --- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/etc/inc/services.inc b/etc/inc/services.inc index 013351bee8..94f69cd849 100644 --- a/etc/inc/services.inc +++ b/etc/inc/services.inc @@ -38,26 +38,6 @@ pfSense_MODULE: utils */ -function services_parse_dhcpd_hostnames() { - global $g, $config; - - // Launch if option enabled - if (isset($config['dnsmasq']['regdhcp'])) { - /* Make sure we do not error out */ - @touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"); - if (!file_exists("{$g['varetc_path']}/hosts")) - system_hosts_generate(); - if (file_exists("{$g['varrun_path']}/dhcpleases.pid")) - sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "HUP"); - else - mwexec("/usr/local/sbin/dhcpleases -l {$g['dhcpd_chroot_path']}/var/db/dhcpd.leases -d {$config['system']['domain']} -p {$g['varrun_path']}/dnsmasq.pid -h {$g['varetc_path']}/hosts"); - } else { - sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "TERM"); - @unlink("{$g['varrun_path']}/dhcpleases.pid"); - } - -} - function services_dhcpd_configure() { global $config, $g; @@ -648,9 +628,6 @@ function services_dnsmasq_configure() { $return = 1; } - // restart isc-dhcpd parser - services_parse_dhcpd_hostnames(); - return $return; } diff --git a/etc/inc/system.inc b/etc/inc/system.inc index 75e3f6d9d2..a7c3423577 100644 --- a/etc/inc/system.inc +++ b/etc/inc/system.inc @@ -225,6 +225,19 @@ function system_hosts_generate() { fwrite($fd, $hosts); fclose($fd); + /* Start the monitoring process for dynamic dhcpclients. */ + if (isset($config['dnsmasq']['regdhcp'])) { + /* Make sure we do not error out */ + @touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"); + if (file_exists("{$g['varrun_path']}/dhcpleases.pid")) + sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "HUP"); + else + mwexec("/usr/local/sbin/dhcpleases -l {$g['dhcpd_chroot_path']}/var/db/dhcpd.leases -d {$syscfg['domain']} -p {$g['varrun_path']}/dnsmasq.pid -h {$g['varetc_path']}/hosts"); + } else { + sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "TERM"); + @unlink("{$g['varrun_path']}/dhcpleases.pid"); + } + return 0; } diff --git a/etc/rc.bootup b/etc/rc.bootup index 858ea2e891..4f67a7b452 100755 --- a/etc/rc.bootup +++ b/etc/rc.bootup @@ -329,9 +329,6 @@ enable_rrd_graphing(); /* start DHCP service */ services_dhcpd_configure(); -/* start DHCP logging service which populates /etc/hosts */ -services_parse_dhcpd_hostnames(); - /* startup OLSR if needed */ setup_wireless_olsr(); From 5523fa3d2d35067a33504f9d143039d60e957adf Mon Sep 17 00:00:00 2001 From: Ermal Date: Fri, 4 Jun 2010 16:34:14 +0000 Subject: [PATCH 54/54] Fixes #632. Actually pass the interface and not the vip configuration to the function. --- usr/local/www/firewall_virtual_ip_edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/local/www/firewall_virtual_ip_edit.php b/usr/local/www/firewall_virtual_ip_edit.php index 415ced4f30..b84d8b0012 100755 --- a/usr/local/www/firewall_virtual_ip_edit.php +++ b/usr/local/www/firewall_virtual_ip_edit.php @@ -155,7 +155,7 @@ if ($_POST) { if (isset($id) && ($a_vip[$id])) { if ($a_vip[$id]['mode'] != $_POST['mode']) - interface_bring_down($a_vip[$id]); + interface_bring_down($a_vip[$id]['interface']); } if (!$input_errors) {