summaryrefslogtreecommitdiffstats
path: root/usr/local/www
diff options
context:
space:
mode:
authorVinicius Coque <vinicius.coque@bluepex.com>2011-01-28 16:38:09 -0200
committerVinicius Coque <vinicius.coque@bluepex.com>2011-01-28 16:38:09 -0200
commit1596d9c17349f47ef06defa5c44333db0158a110 (patch)
tree4a3ee13deb4884dc67841f2b16eff691eb8c7411 /usr/local/www
parenteac181cad00c25a90432ebbc35327ac9cfbed5b0 (diff)
parent20413b72bfd31282276c8ac2a116014f92914d4e (diff)
downloadpfsense-1596d9c17349f47ef06defa5c44333db0158a110.zip
pfsense-1596d9c17349f47ef06defa5c44333db0158a110.tar.gz
Merge remote branch 'mainline/master'
Diffstat (limited to 'usr/local/www')
-rw-r--r--usr/local/www/csrf/csrf-magic.php2
-rwxr-xr-xusr/local/www/diag_backup.php13
-rwxr-xr-xusr/local/www/diag_logs_filter.php8
-rwxr-xr-xusr/local/www/fbegin.inc5
-rwxr-xr-xusr/local/www/firewall_aliases_edit.php9
-rwxr-xr-xusr/local/www/firewall_nat.php12
-rwxr-xr-xusr/local/www/firewall_nat_1to1.php2
-rwxr-xr-xusr/local/www/firewall_nat_1to1_edit.php33
-rwxr-xr-xusr/local/www/firewall_nat_edit.php2
-rwxr-xr-xusr/local/www/firewall_nat_out.php4
-rwxr-xr-xusr/local/www/firewall_nat_out_edit.php106
-rwxr-xr-xusr/local/www/firewall_rules.php3
-rwxr-xr-xusr/local/www/firewall_rules_edit.php8
-rwxr-xr-xusr/local/www/firewall_virtual_ip.php6
-rwxr-xr-xusr/local/www/firewall_virtual_ip_edit.php55
-rwxr-xr-xusr/local/www/guiconfig.inc20
-rw-r--r--usr/local/www/help.php11
-rwxr-xr-xusr/local/www/index.php12
-rw-r--r--usr/local/www/installer.php753
-rw-r--r--usr/local/www/installer/index.php5
-rw-r--r--usr/local/www/installer/installer.php1212
-rwxr-xr-xusr/local/www/interfaces.php30
-rwxr-xr-xusr/local/www/interfaces_assign.php6
-rw-r--r--usr/local/www/interfaces_bridge_edit.php4
-rw-r--r--usr/local/www/interfaces_gif_edit.php4
-rw-r--r--usr/local/www/interfaces_gre.php2
-rw-r--r--usr/local/www/interfaces_gre_edit.php4
-rwxr-xr-xusr/local/www/interfaces_groups_edit.php4
-rw-r--r--usr/local/www/interfaces_lagg_edit.php3
-rw-r--r--usr/local/www/interfaces_ppps_edit.php4
-rwxr-xr-xusr/local/www/interfaces_qinq_edit.php4
-rwxr-xr-xusr/local/www/interfaces_vlan_edit.php5
-rwxr-xr-xusr/local/www/javascript/row_helper_dynamic.js34
-rwxr-xr-xusr/local/www/load_balancer_pool_edit.php14
-rwxr-xr-xusr/local/www/pkg_edit.php1
-rwxr-xr-xusr/local/www/pkg_mgr.php52
-rwxr-xr-xusr/local/www/pkg_mgr_install.php19
-rwxr-xr-xusr/local/www/pkg_mgr_installed.php20
-rwxr-xr-xusr/local/www/services_captiveportal.php17
-rwxr-xr-xusr/local/www/services_captiveportal_filemanager.php3
-rwxr-xr-xusr/local/www/services_captiveportal_hostname.php188
-rwxr-xr-xusr/local/www/services_captiveportal_hostname_edit.php217
-rwxr-xr-xusr/local/www/services_captiveportal_ip.php3
-rwxr-xr-xusr/local/www/services_captiveportal_ip_edit.php131
-rwxr-xr-xusr/local/www/services_captiveportal_mac.php3
-rw-r--r--usr/local/www/services_captiveportal_vouchers.php5
-rwxr-xr-xusr/local/www/services_dhcp.php9
-rwxr-xr-xusr/local/www/services_dnsmasq_domainoverride_edit.php6
-rwxr-xr-xusr/local/www/services_igmpproxy_edit.php4
-rwxr-xr-xusr/local/www/services_snmp.php10
-rwxr-xr-xusr/local/www/services_wol.php6
-rwxr-xr-xusr/local/www/status_captiveportal.php2
-rwxr-xr-xusr/local/www/status_dhcp_leases.php2
-rwxr-xr-xusr/local/www/status_lb_pool.php17
-rwxr-xr-xusr/local/www/status_lb_vs.php61
-rwxr-xr-xusr/local/www/status_rrd_graph.php185
-rw-r--r--usr/local/www/status_rrd_graph_img.php44
-rwxr-xr-xusr/local/www/status_rrd_graph_settings.php30
-rwxr-xr-xusr/local/www/status_services.php10
-rw-r--r--usr/local/www/system_advanced_admin.php12
-rw-r--r--usr/local/www/system_camanager.php2
-rw-r--r--usr/local/www/system_certmanager.php2
-rwxr-xr-xusr/local/www/system_firmware.php6
-rwxr-xr-xusr/local/www/system_firmware_auto.php16
-rwxr-xr-xusr/local/www/system_gateways_edit.php2
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rw-r--r--usr/local/www/vpn_openvpn_client.php20
-rw-r--r--usr/local/www/vpn_openvpn_server.php45
-rwxr-xr-xusr/local/www/vpn_pppoe.php2
-rwxr-xr-xusr/local/www/vpn_pptp_users_edit.php2
-rw-r--r--usr/local/www/widgets/include/wake_on_lan.inc7
-rw-r--r--usr/local/www/widgets/widgets/captive_portal_status.widget.php5
-rw-r--r--usr/local/www/widgets/widgets/carp_status.widget.php3
-rw-r--r--usr/local/www/widgets/widgets/gateways.widget.php3
-rw-r--r--usr/local/www/widgets/widgets/gmirror_status.widget.php2
-rw-r--r--usr/local/www/widgets/widgets/installed_packages.widget.php175
-rw-r--r--usr/local/www/widgets/widgets/interface_statistics.widget.php2
-rw-r--r--usr/local/www/widgets/widgets/interfaces.widget.php3
-rw-r--r--usr/local/www/widgets/widgets/ipsec.widget.php2
-rw-r--r--usr/local/www/widgets/widgets/load_balancer_status.widget.php239
-rw-r--r--usr/local/www/widgets/widgets/log.widget.php3
-rw-r--r--usr/local/www/widgets/widgets/openvpn.widget.php3
-rw-r--r--usr/local/www/widgets/widgets/picture.widget.php1
-rw-r--r--usr/local/www/widgets/widgets/rss.widget.php2
-rw-r--r--usr/local/www/widgets/widgets/services_status.widget.php9
-rw-r--r--usr/local/www/widgets/widgets/system_information.widget.php3
-rw-r--r--usr/local/www/widgets/widgets/traffic_graphs.widget.php2
-rw-r--r--usr/local/www/widgets/widgets/wake_on_lan.widget.php76
-rw-r--r--usr/local/www/wizards/openvpn_wizard.inc12
-rw-r--r--usr/local/www/wizards/openvpn_wizard.xml23
-rw-r--r--usr/local/www/wizards/setup_wizard.xml7
-rw-r--r--usr/local/www/wizards/traffic_shaper_wizard.inc496
-rwxr-xr-xusr/local/www/wizards/traffic_shaper_wizard_dedicated.inc519
-rwxr-xr-xusr/local/www/wizards/traffic_shaper_wizard_multi_all.inc565
-rw-r--r--usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc122
108 files changed, 3028 insertions, 2809 deletions
diff --git a/usr/local/www/csrf/csrf-magic.php b/usr/local/www/csrf/csrf-magic.php
index 447ecc9..ccb1617 100644
--- a/usr/local/www/csrf/csrf-magic.php
+++ b/usr/local/www/csrf/csrf-magic.php
@@ -244,7 +244,7 @@ function csrf_get_tokens() {
*/
function csrf_callback($tokens) {
header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
- echo "<html><head><title>CSRF check failed</title></head><body>CSRF check failed. Please enable cookies.<br />Debug: ".$tokens."</body></html>
+ echo "<html><head><title>CSRF check failed</title></head><body>CSRF check failed. Either your session has expired, this page has been inactive too long, or you need to enable cookies.<br />Debug: ".$tokens."</body></html>
";
}
diff --git a/usr/local/www/diag_backup.php b/usr/local/www/diag_backup.php
index 410fb0b..5892f06 100755
--- a/usr/local/www/diag_backup.php
+++ b/usr/local/www/diag_backup.php
@@ -223,7 +223,7 @@ if ($_POST) {
* Backup RRD Data
*/
if(!$_POST['donotbackuprrd']) {
- $data = str_replace("</pfsense>", "\t<rrddata>", $data);
+ $data = str_replace("</" . $g['xml_rootobj'] . ">", "\t<rrddata>", $data);
$rrd_files_var_db_rrd = split("\n",`cd /var/db/rrd && ls *.rrd`);
foreach($rrd_files_var_db_rrd as $rrd) {
if($rrd) {
@@ -237,7 +237,7 @@ if ($_POST) {
}
}
$data .= "\t</rrddata>\n";
- $data .= "</pfsense>\n";
+ $data .= "</" . $g['xml_rootobj'] . ">\n";
}
$size = strlen($data);
@@ -315,7 +315,7 @@ if ($_POST) {
if(file_exists("{$g['tmp_path']}/config.cache"))
unlink("{$g['tmp_path']}/config.cache");
$config = parse_config(true);
- /* extract out rrd items, unset from $confgi when done */
+ /* extract out rrd items, unset from $config when done */
if($config['rrddata']) {
foreach($config['rrddata']['rrddatafile'] as $rrd) {
$rrd_fd = fopen("{$g['vardb_path']}/rrd/{$rrd['filename']}", "w");
@@ -451,6 +451,13 @@ if ($_POST) {
header("Location: interfaces_assign.php");
exit;
}
+ if (is_interface_vlan_mismatch() == true) {
+ touch("/var/run/interface_mismatch_reboot_needed");
+ clear_subsystem_dirty("restore");
+ convert_config();
+ header("Location: interfaces_assign.php");
+ exit;
+ }
} else {
$input_errors[] = gettext("The configuration could not be restored.");
}
diff --git a/usr/local/www/diag_logs_filter.php b/usr/local/www/diag_logs_filter.php
index 025a7a3..5fb94cf 100755
--- a/usr/local/www/diag_logs_filter.php
+++ b/usr/local/www/diag_logs_filter.php
@@ -155,13 +155,13 @@ include("head.inc");
$dststr = $filterent['dstip'] . get_port_with_service($filterent['dstport'], $proto);
?>
<td class="listr" nowrap>
- <a href="diag_dns.php?host=<?php echo $filterent['srcip']; ?>" title="<?=gettext("Reverse Resolve with DNS");?>"><img border="0" src="/themes/nervecenter/images/icons/icon_log.gif"></a>
- <a href="easyrule.php?<?php echo "action=block&int={$int}&src={$filterent['srcip']}"; ?>" title="<?=gettext("Easy Rule: Add to Block List");?>" onclick="return confirm('<?=gettext("Do you really want to add this BLOCK rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.")?>')"><img border="0" src="/themes/nervecenter/images/icons/icon_block_add.gif"></a>
+ <a href="diag_dns.php?host=<?php echo $filterent['srcip']; ?>" title="<?=gettext("Reverse Resolve with DNS");?>"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif"></a>
+ <a href="easyrule.php?<?php echo "action=block&int={$int}&src={$filterent['srcip']}"; ?>" title="<?=gettext("Easy Rule: Add to Block List");?>" onclick="return confirm('<?=gettext("Do you really want to add this BLOCK rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.")?>')"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_block_add.gif"></a>
<?php echo $srcstr;?>
</td>
<td class="listr" nowrap>
- <a href="diag_dns.php?host=<?php echo $filterent['dstip']; ?>" title="<?=gettext("Reverse Resolve with DNS");?>"><img border="0" src="/themes/nervecenter/images/icons/icon_log.gif"></a>
- <a href="easyrule.php?<?php echo "action=pass&int={$int}&proto={$proto}&src={$filterent['srcip']}&dst={$filterent['dstip']}&dstport={$filterent['dstport']}"; ?>" title="<?=gettext("Easy Rule: Pass this traffic");?>" onclick="return confirm('<?=gettext("Do you really want to add this PASS rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.");?>')"><img border="0" src="/themes/nervecenter/images/icons/icon_pass_add.gif"></a>
+ <a href="diag_dns.php?host=<?php echo $filterent['dstip']; ?>" title="<?=gettext("Reverse Resolve with DNS");?>"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif"></a>
+ <a href="easyrule.php?<?php echo "action=pass&int={$int}&proto={$proto}&src={$filterent['srcip']}&dst={$filterent['dstip']}&dstport={$filterent['dstport']}"; ?>" title="<?=gettext("Easy Rule: Pass this traffic");?>" onclick="return confirm('<?=gettext("Do you really want to add this PASS rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.");?>')"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_pass_add.gif"></a>
<?php echo $dststr;?>
</td>
<?php
diff --git a/usr/local/www/fbegin.inc b/usr/local/www/fbegin.inc
index 45a14a2..8183797 100755
--- a/usr/local/www/fbegin.inc
+++ b/usr/local/www/fbegin.inc
@@ -425,5 +425,10 @@ function add_to_menu($url, $name) {
<br />
<?php
+/* if upgrade in progress, alert user */
+if(is_subsystem_dirty('packagelock')) {
+ $pgtitle = array(gettext("System"),gettext("Package Manager"));
+ print_info_box(gettext("Packages are currently being reinstalled in the background.<p>Do not make changes in the GUI until this is complete.") . "<p><img src='/themes/{$g['theme']}/images/icons/icon_fw-update.gif'>");
+}
$pgtitle_output = true;
?>
diff --git a/usr/local/www/firewall_aliases_edit.php b/usr/local/www/firewall_aliases_edit.php
index ab90a5a..3710644 100755
--- a/usr/local/www/firewall_aliases_edit.php
+++ b/usr/local/www/firewall_aliases_edit.php
@@ -284,7 +284,7 @@ if ($_POST) {
if (!$input_errors) {
$alias['address'] = is_array($address) ? implode(" ", $address) : $address;
- $alias['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
+ $alias['descr'] = $_POST['descr'];
$alias['type'] = $_POST['type'];
$alias['detail'] = implode("||", $final_address_details);
@@ -333,7 +333,6 @@ if ($_POST) {
$a_aliases = msort($a_aliases, "name");
write_config();
- filter_configure();
header("Location: firewall_aliases.php");
exit;
@@ -342,7 +341,7 @@ if ($_POST) {
else
{
$pconfig['name'] = $_POST['name'];
- $pconfig['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
+ $pconfig['descr'] = $_POST['descr'];
$pconfig['address'] = implode(" ", $address);
$pconfig['type'] = $_POST['type'];
$pconfig['detail'] = implode("||", $final_address_details);
@@ -583,8 +582,8 @@ EOD;
<option value="host" <?php if ($pconfig['type'] == "host") echo "selected"; ?>><?=gettext("Host(s)"); ?></option>
<option value="network" <?php if ($pconfig['type'] == "network") echo "selected"; ?>><?=gettext("Network(s)"); ?></option>
<option value="port" <?php if ($pconfig['type'] == "port") echo "selected"; ?>><?=gettext("Port(s)"); ?></option>
- <option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected"; ?>><?=gettext("OpenVPN Users"); ?></option>
- <option value="url" <?php if ($pconfig['type'] == "url") echo "selected"; ?>><?=gettext("URL");?></option>
+<!-- <option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected"; ?>><?=gettext("OpenVPN Users"); ?></option> -->
+ <option value="url" <?php if ($pconfig['type'] == "url") echo "selected"; ?>><?=gettext("URL");?></option>
<option value="urltable" <?php if ($pconfig['type'] == "urltable") echo "selected"; ?>><?=gettext("URL Table"); ?></option>
</select>
</td>
diff --git a/usr/local/www/firewall_nat.php b/usr/local/www/firewall_nat.php
index e768334..06da39d 100755
--- a/usr/local/www/firewall_nat.php
+++ b/usr/local/www/firewall_nat.php
@@ -191,12 +191,12 @@ echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript
<td width="3%" class="list">&nbsp;</td>
<td width="5%" class="listhdrr"><?=gettext("If");?></td>
<td width="5%" class="listhdrr"><?=gettext("Proto");?></td>
- <td width="11%" class="listhdrr"><?=gettext("Src. addr");?></td>
- <td width="11%" class="listhdrr"><?=gettext("Src. ports");?></td>
- <td width="11%" class="listhdrr"><?=gettext("Dest. addr");?></td>
- <td width="11%" class="listhdrr"><?=gettext("Dest. ports");?></td>
- <td width="11%" class="listhdrr"><?=gettext("NAT IP");?></td>
- <td width="11%" class="listhdrr"><?=gettext("NAT Ports");?></td>
+ <td width="11%" class="listhdrr"><nobr><?=gettext("Src. addr");?></nobr></td>
+ <td width="11%" class="listhdrr"><nobr><?=gettext("Src. ports");?></nobr></td>
+ <td width="11%" class="listhdrr"><nobr><?=gettext("Dest. addr");?></nobr></td>
+ <td width="11%" class="listhdrr"><nobr><?=gettext("Dest. ports");?></nobr></td>
+ <td width="11%" class="listhdrr"><nobr><?=gettext("NAT IP");?></nobr></td>
+ <td width="11%" class="listhdrr"><nobr><?=gettext("NAT Ports");?></nobr></td>
<td width="11%" class="listhdr"><?=gettext("Description");?></td>
<td width="5%" class="list">
<table border="0" cellspacing="0" cellpadding="1">
diff --git a/usr/local/www/firewall_nat_1to1.php b/usr/local/www/firewall_nat_1to1.php
index 306c811..60f1189 100755
--- a/usr/local/www/firewall_nat_1to1.php
+++ b/usr/local/www/firewall_nat_1to1.php
@@ -102,7 +102,7 @@ include("head.inc");
<tr>
<td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
<td width="20%" class="listhdrr"><?=gettext("External IP"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("Source IP"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Internal IP"); ?></td>
<td width="15%" class="listhdrr"><?=gettext("Destination IP"); ?></td>
<td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
<td width="10%" class="list">
diff --git a/usr/local/www/firewall_nat_1to1_edit.php b/usr/local/www/firewall_nat_1to1_edit.php
index 199adef..1a3ce77 100755
--- a/usr/local/www/firewall_nat_1to1_edit.php
+++ b/usr/local/www/firewall_nat_1to1_edit.php
@@ -131,22 +131,25 @@ if ($_POST) {
$_POST['dsttype'] = "single";
}
- if (($_POST['external'] && !is_ipaddroralias($_POST['external'])))
+ /* For external, user can enter only ip's */
+ if (($_POST['external'] && !is_ipaddr($_POST['external'])))
$input_errors[] = gettext("A valid external subnet must be specified.");
- /* if user enters an alias and selects "network" then disallow. */
- if( ($_POST['srctype'] == "network" && is_alias($_POST['src']) )
- || ($_POST['dsttype'] == "network" && is_alias($_POST['dst']) ) )
+ /* For dst, if user enters an alias and selects "network" then disallow. */
+ if ($_POST['dsttype'] == "network" && is_alias($_POST['dst']) )
$input_errors[] = gettext("You must specify single host or alias for alias entries.");
+ /* For src, user can enter only ip's or networks */
if (!is_specialnet($_POST['srctype'])) {
- if (($_POST['src'] && !is_ipaddroralias($_POST['src']))) {
- $input_errors[] = sprintf(gettext("%s is not a valid source IP address or alias."), $_POST['src']);
+ if (($_POST['src'] && !is_ipaddr($_POST['src']))) {
+ $input_errors[] = sprintf(gettext("%s is not a valid internal IP address."), $_POST['src']);
}
if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) {
- $input_errors[] = gettext("A valid source bit count must be specified.");
+ $input_errors[] = gettext("A valid internal bit count must be specified.");
}
}
+
+ /* For dst, user can enter ip's, networks or aliases */
if (!is_specialnet($_POST['dsttype'])) {
if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) {
$input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']);
@@ -307,14 +310,14 @@ function typesel_change() {
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("External subnet IP"); ?></td>
<td width="78%" class="vtable">
- <input name="external" type="text" class="formfldalias" id="external" size="20" value="<?=htmlspecialchars($pconfig['external']);?>">
+ <input name="external" type="text" class="formfld" id="external" size="20" value="<?=htmlspecialchars($pconfig['external']);?>">
<br/>
- <span class="vexpl"><?=gettext("Enter the external (usually on a WAN) subnet's starting address for the 1:1 mapping. The subnet mask from the source address below will be applied to this IP address."); ?><br>
+ <span class="vexpl"><?=gettext("Enter the external (usually on a WAN) subnet's starting address for the 1:1 mapping. The subnet mask from the internal address below will be applied to this IP address."); ?><br>
<?=gettext("Hint: this is generally an address owned by the router itself on the selected interface."); ?></span>
</td>
</tr>
<tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Source"); ?></td>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Internal IP"); ?></td>
<td width="78%" class="vtable">
<input name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked"; ?>>
<strong><?=gettext("not"); ?></strong>
@@ -330,7 +333,7 @@ function typesel_change() {
<?php
$sel = is_specialnet($pconfig['src']); ?>
<option value="any" <?php if ($pconfig['src'] == "any") { echo "selected"; } ?>><?=gettext("any"); ?></option>
- <option value="single" <?php if (($pconfig['srcmask'] == 32) && !$sel) { echo "selected"; $sel = 1; } ?>><?=gettext("Single host"); ?></option>
+ <option value="single" <?php if ((($pconfig['srcmask'] == 32) || !isset($pconfig['srcmask'])) && !$sel) { echo "selected"; $sel = 1; } ?>><?=gettext("Single host"); ?></option>
<option value="network" <?php if (!$sel) echo "selected"; ?>><?=gettext("Network"); ?></option>
<?php if(have_ruleint_access("pptp")): ?>
<option value="pptp" <?php if ($pconfig['src'] == "pptp") { echo "selected"; } ?>><?=gettext("PPTP clients"); ?></option>
@@ -355,7 +358,7 @@ function typesel_change() {
<tr>
<td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
<td>
- <input name="src" type="text" class="formfldalias" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>"> /
+ <input name="src" type="text" class="formfld" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>"> /
<select name="srcmask" class="formselect" id="srcmask">
<?php for ($i = 31; $i > 0; $i--): ?>
<option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected"; ?>><?=$i;?></option>
@@ -410,7 +413,7 @@ function typesel_change() {
<tr>
<td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
<td>
- <input name="dst" type="text" class="formfldalias" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>">
+ <input name="dst" type="text" class="formfld" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>">
/
<select name="dstmask" class="formselect" id="dstmask">
<?php
@@ -481,9 +484,7 @@ if($config['aliases']['alias'] <> "")
<!--
var addressarray=new Array(<?php echo $aliasesaddr; ?>);
- var oTextbox1 = new AutoSuggestControl(document.getElementById("external"), new StateSuggestions(addressarray));
- var oTextbox2 = new AutoSuggestControl(document.getElementById("src"), new StateSuggestions(addressarray));
- var oTextbox3 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
//-->
</script>
<?php include("fend.inc"); ?>
diff --git a/usr/local/www/firewall_nat_edit.php b/usr/local/www/firewall_nat_edit.php
index d216a98..125a34f 100755
--- a/usr/local/www/firewall_nat_edit.php
+++ b/usr/local/www/firewall_nat_edit.php
@@ -646,6 +646,8 @@ include("fbegin.inc"); ?>
<?php if (is_array($config['virtualip']['vip'])):
foreach ($config['virtualip']['vip'] as $sn):
+ if (isset($sn['noexpand']))
+ continue;
if ($sn['mode'] == "proxyarp" && $sn['type'] == "network"):
$start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
$end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
diff --git a/usr/local/www/firewall_nat_out.php b/usr/local/www/firewall_nat_out.php
index bf72f2c..85c4550 100755
--- a/usr/local/www/firewall_nat_out.php
+++ b/usr/local/www/firewall_nat_out.php
@@ -363,6 +363,7 @@ include("head.inc");
</td>
<td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$nnats;?>';">
<?php
+ echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
if (!$natent['sourceport'])
echo "*";
else
@@ -382,6 +383,7 @@ include("head.inc");
</td>
<td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$nnats;?>';">
<?php
+ echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
if (!$natent['dstport'])
echo "*";
else
@@ -392,6 +394,8 @@ include("head.inc");
<?php
if (!$natent['target'])
echo "*";
+ elseif ($natent['target'] == "other-subnet")
+ echo $natent['targetip'] . '/' . $natent['targetip_subnet'];
else
echo $natent['target'];
?>
diff --git a/usr/local/www/firewall_nat_out_edit.php b/usr/local/www/firewall_nat_out_edit.php
index 2910c08..f03bded 100755
--- a/usr/local/www/firewall_nat_out_edit.php
+++ b/usr/local/www/firewall_nat_out_edit.php
@@ -54,6 +54,10 @@ if (!is_array($config['nat']['advancedoutbound']['rule'])) {
$a_out = &$config['nat']['advancedoutbound']['rule'];
+if (!is_array($config['aliases']['alias']))
+ $config['aliases']['alias'] = array();
+$a_aliases = &$config['aliases']['alias'];
+
$id = $_GET['id'];
if (isset($_POST['id'])) {
$id = $_POST['id'];
@@ -75,6 +79,9 @@ if (isset($id) && $a_out[$id]) {
$pconfig['dstport'] = $a_out[$id]['dstport'];
$pconfig['natport'] = $a_out[$id]['natport'];
$pconfig['target'] = $a_out[$id]['target'];
+ $pconfig['targetip'] = $a_out[$id]['targetip'];
+ $pconfig['targetip_subnet'] = $a_out[$id]['targetip_subnet'];
+ $pconfig['poolopts'] = $a_out[$id]['poolopts'];
$pconfig['interface'] = $a_out[$id]['interface'];
if (!$pconfig['interface']) {
$pconfig['interface'] = "wan";
@@ -149,10 +156,32 @@ if ($_POST) {
}
}
- if ($_POST['target'] && !is_ipaddr($_POST['target']) && !isset($_POST['nonat'])) {
+ if ($_POST['target'] && !is_ipaddr($_POST['target']) && !is_subnet($_POST['target']) && !is_alias($_POST['target']) && !isset($_POST['nonat']) && !($_POST['target'] == "other-subnet")) {
$input_errors[] = gettext("A valid target IP address must be specified.");
}
+ if ($_POST['target'] == "other-subnet") {
+ if (!is_ipaddr($_POST['targetip'])) {
+ $input_errors[] = gettext("A valid target IP must be specified when using the 'Other Subnet' type.");
+ }
+ if (!is_numericint($_POST['targetip_subnet'])) {
+ $input_errors[] = gettext("A valid target bit count must be specified when using the 'Other Subnet' type.");
+ }
+ }
+
+ /* Verify Pool Options */
+ $poolopts = "";
+ if ($_POST['poolopts']) {
+ if (is_subnet($_POST['target']) || ($_POST['target'] == "other-subnet"))
+ $poolopts = $_POST['poolopts'];
+ elseif (is_alias($_POST['target'])) {
+ if (substr($_POST['poolopts'], 0, 11) == "round-robin")
+ $poolopts = $_POST['poolopts'];
+ else
+ $input_errors[] = gettext("Only Round Robin pool options may be chosen when selecting an alias.");
+ }
+ }
+
/* if user has selected any as source, set it here */
if($_POST['source_type'] == "any") {
$osn = "any";
@@ -183,7 +212,10 @@ if ($_POST) {
$natent['sourceport'] = ($protocol_uses_ports) ? $_POST['sourceport'] : "";
$natent['descr'] = $_POST['descr'];
$natent['target'] = (!isset($_POST['nonat'])) ? $_POST['target'] : "";
+ $natent['targetip'] = (!isset($_POST['nonat'])) ? $_POST['targetip'] : "";
+ $natent['targetip_subnet'] = (!isset($_POST['nonat'])) ? $_POST['targetip_subnet'] : "";
$natent['interface'] = $_POST['interface'];
+ $natent['poolopts'] = $poolopts;
/* static-port */
if(isset($_POST['staticnatport']) && $protocol_uses_ports && !isset($_POST['nonat'])) {
@@ -320,6 +352,24 @@ function proto_change() {
document.getElementById("tportstatic_tr").style.display = 'none';
}
}
+function poolopts_change() {
+ if ($('target').options[$('target').selectedIndex].text.substring(0,4) == "Host") {
+ $('poolopts_tr').style.display = '';
+ $('target_network').style.display = 'none';
+ } else if ($('target').options[$('target').selectedIndex].text.substring(0,6) == "Subnet") {
+ $('poolopts_tr').style.display = '';
+ $('target_network').style.display = 'none';
+ } else if ($('target').options[$('target').selectedIndex].text.substring(0,5) == "Other") {
+ $('poolopts_tr').style.display = '';
+ $('target_network').style.display = '';
+ } else {
+ $('poolopts').selectedIndex = 0;
+ $('poolopts_tr').style.display = 'none';
+ $('target_network').style.display = 'none';
+ $('targetip').value = '';
+ $('targetip_subnet').value = '0';
+ }
+}
//-->
</script>
</head>
@@ -467,16 +517,18 @@ any)");?></td>
<table border="0" cellspacing="1" cellpadding="1">
<tr>
<td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td><select name="target" class="formselect">
+ <td><select name="target" class="formselect" id="target" onChange="poolopts_change();">
<option value=""<?php if (!$pconfig['target']) echo " selected"; ?>><?=gettext("Interface address");?></option>
<?php if (is_array($config['virtualip']['vip'])):
foreach ($config['virtualip']['vip'] as $sn):
+ if (isset($sn['noexpand']))
+ continue;
if ($sn['mode'] == "proxyarp" && $sn['type'] == "network"):
$start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
$end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
- $len = $end - $start;
-
- for ($i = 0; $i <= $len; $i++):
+ $len = $end - $start; ?>
+ <option value="<?=$sn['subnet'].'/'.$sn['subnet_bits'];?>" <?php if ($sn['subnet'].'/'.$sn['subnet_bits'] == $pconfig['target']) echo "selected"; ?>><?=htmlspecialchars("Subnet: {$sn['subnet']}/{$sn['subnet_bits']} ({$sn['descr']})");?></option>
+ <?php for ($i = 0; $i <= $len; $i++):
$snip = long2ip32($start+$i);
?>
<option value="<?=$snip;?>" <?php if ($snip == $pconfig['target']) echo "selected"; ?>><?=htmlspecialchars("{$snip} ({$sn['descr']})");?></option>
@@ -485,18 +537,57 @@ any)");?></td>
<option value="<?=$sn['subnet'];?>" <?php if ($sn['subnet'] == $pconfig['target']) echo "selected"; ?>><?=htmlspecialchars("{$sn['subnet']} ({$sn['descr']})");?></option>
<?php endif; endforeach;
endif;
-?>
+ foreach ($a_aliases as $alias):
+ if ($alias['type'] != "host")
+ continue; ?>
+ <option value="<?=$alias['name'];?>" <?php if ($alias['name'] == $pconfig['target']) echo "selected"; ?>><?=htmlspecialchars("Host Alias: {$alias['name']} ({$alias['descr']})");?></option>
+<?php endforeach; ?>
+ <option value="other-subnet"<?php if($pconfig['target'] == "other-subnet") echo " selected"; ?>><?=gettext("Other Subnet (Enter Below)");?></option>
<option value=""<?php if($pconfig['target'] == "any") echo " selected"; ?>><?=gettext("any");?></option>
</select>
</td>
</tr>
+
+ <tr id="target_network">
+ <td><?=gettext("Other Subnet:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="targetip" type="text" class="formfld unknown" id="targetip" size="20" value="<?=htmlspecialchars($pconfig['targetip']);?>">/<select name="targetip_subnet" class="formfld" id="targetip_subnet">
+<?php for ($i = 32; $i >= 0; $i--): ?>
+ <option value="<?=$i;?>"<?php if ($i == $pconfig['targetip_subnet']) echo " selected"; ?>><?=$i;?></option>
+<?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+
<tr><td>&nbsp;</td><td>
<span class="vexpl"><?=gettext("Packets matching this rule will be mapped to the IP address given here.");?><br>
<?=gettext("If you want this rule to apply to another IP address than the IP address of the interface chosen above, ".
"select it here (you need to define");?> <a href="firewall_virtual_ip.php"><?=gettext("Virtual IP");?></a> <?=gettext("addresses on the first).");?>
<?=gettext("Also note that if you are trying to redirect connections on the LAN select the \"any\" option.");?>
- </span>
+ </span><br/>
</td></tr>
+ <tr id="poolopts_tr">
+ <td valign="top">Pool Options</td>
+ <td>
+ <select name="poolopts" id="poolopts">
+ <option value="" <?php if ($pconfig['poolopts'] == "" ) echo "selected"; ?>><?=htmlspecialchars("Default" );?></option>
+ <option value="round-robin" <?php if ($pconfig['poolopts'] == "round-robin" ) echo "selected"; ?>><?=htmlspecialchars("Round Robin" );?></option>
+ <option value="round-robin sticky-address" <?php if ($pconfig['poolopts'] == "round-robin sticky-address") echo "selected"; ?>><?=htmlspecialchars("Round Robin with Sticky Address");?></option>
+ <option value="random" <?php if ($pconfig['poolopts'] == "random" ) echo "selected"; ?>><?=htmlspecialchars("Random" );?></option>
+ <option value="random sticky-address" <?php if ($pconfig['poolopts'] == "random sticky-address" ) echo "selected"; ?>><?=htmlspecialchars("Random with Sticky Address" );?></option>
+ <option value="source-hash" <?php if ($pconfig['poolopts'] == "source-hash" ) echo "selected"; ?>><?=htmlspecialchars("Source Hash" );?></option>
+ <option value="bitmask" <?php if ($pconfig['poolopts'] == "bitmask" ) echo "selected"; ?>><?=htmlspecialchars("Bitmask" );?></option>
+ </select><br/>
+ <span class="vexpl">
+ <?=gettext("Only Round Robin types work with Host Aliases. Any type can be used with a Subnet.");?><br/>
+ * <?=gettext("Round Robin: Loops through the translation addresses.");?><br/>
+ * <?=gettext("Random: Selects an address from the translation address pool at random.");?><br/>
+ * <?=gettext("Source Hash: Uses a hash of the source address to determine the translation address, ensuring that the redirection address is always the same for a given source.");?><br/>
+ * <?=gettext("Bitmask: Applies the subnet mask and keeps the last portion identical; 10.0.1.50 -&gt; x.x.x.50.");?><br/>
+ * <?=gettext("Sticky Address: The Sticky Address option can be used with the Random and Round Robin pool types to ensure that a particular source address is always mapped to the same translation address.");?><br/>
+ </span><br/>
+ </td>
+ </tr>
<tr name="tport_tr" id="tport_tr">
<td><?=gettext("Port:");?>&nbsp;&nbsp;</td>
<td><input name="natport" type="text" class="formfld unknown" id="natport" size="5" value="<?=htmlspecialchars($pconfig['natport']);?>"></td>
@@ -543,6 +634,7 @@ typesel_change();
staticportchange();
nonat_change();
proto_change();
+poolopts_change();
//-->
</script>
<?php include("fend.inc"); ?>
diff --git a/usr/local/www/firewall_rules.php b/usr/local/www/firewall_rules.php
index ae4f60e..a0b34b4 100755
--- a/usr/local/www/firewall_rules.php
+++ b/usr/local/www/firewall_rules.php
@@ -826,9 +826,6 @@ if($_REQUEST['undodrag']) {
"to the rule order. Everything that isn't explicitly passed is blocked " .
"by default. ");?>
</li>
-<li>
- <?=gettext("You may drag and drop rules using your mouse to reorder the rule ordering.");?>
-</li>
</ul>
</td>
</tr>
diff --git a/usr/local/www/firewall_rules_edit.php b/usr/local/www/firewall_rules_edit.php
index 1c6c3f0..8933344 100755
--- a/usr/local/www/firewall_rules_edit.php
+++ b/usr/local/www/firewall_rules_edit.php
@@ -364,7 +364,7 @@ if ($_POST) {
}
if (isset($_POST['floating']) && $_POST['pdnpipe'] != "none" && (empty($_POST['direction']) || $_POST['direction'] == "any"))
$input_errors[] = gettext("You can not use limiters in Floating rules without choosing a direction.");
- if (isset($_POST['floating']) && $_POST['gateway'] != "default" && (empty($_POST['direction']) || $_POST['direction'] == "any"))
+ if (isset($_POST['floating']) && $_POST['gateway'] != "" && (empty($_POST['direction']) || $_POST['direction'] == "any"))
$input_errors[] = gettext("You can not use gateways in Floating rules without choosing a direction.");
if ($_POST['pdnpipe'] && $_POST['pdnpipe'] != "none") {
if ($_POST['dnpipe'] == "none" )
@@ -727,7 +727,7 @@ include("head.inc");
<td width="78%" class="vtable">
<select <?=$edit_disabled;?> name="proto" class="formselect" onchange="proto_change()">
<?php
- $protocols = explode(" ", "TCP UDP TCP/UDP ICMP ESP AH GRE IGMP any carp pfsync");
+ $protocols = explode(" ", "TCP UDP TCP/UDP ICMP ESP AH GRE IGMP OSPF any carp pfsync");
foreach ($protocols as $proto): ?>
<option value="<?=strtolower($proto);?>" <?php if (strtolower($proto) == $pconfig['proto']) echo "selected"; ?>><?=htmlspecialchars($proto);?></option>
<?php endforeach; ?>
@@ -1238,7 +1238,7 @@ include("head.inc");
}
?>
</select>
- <p><strong><?=gettext("Leave as 'default' to use the system routing table. Or choose a gateway to utilize policy based routing.");?></strong></p>
+ <p><?=gettext("Leave as 'default' to use the system routing table. Or choose a gateway to utilize policy based routing.");?></p>
</div>
</td>
</tr>
@@ -1287,7 +1287,7 @@ include("head.inc");
?>
</select>
<br />
- <span class="vexpl"><?=gettext("Choose the Out queue/Virtual interface only if you have selected In too.")."<br/>".gettext("The Out selection is applied to traffic going out the interface the rule is created, In is the incoming one.")."<br/>".gettext("If you are creating a rule on the Floating tab if the direction is In then the same rules apply, if the direction is out the selections are reverted Out is for incoming and In is for outgoing and if you do not select any direction use only the In since the Out selection does not make sense in there to prevent oddities.");?></span>
+ <span class="vexpl"><?=gettext("Choose the Out queue/Virtual interface only if you have also selected In.")."<br/>".gettext("The Out selection is applied to traffic leaving the interface where the rule is created, In is applied to traffic coming into the chosen interface.")."<br/>".gettext("If you are creating a floating rule, if the direction is In then the same rules apply, if the direction is out the selections are reverted Out is for incoming and In is for outgoing.");?></span>
</div>
</td>
</tr>
diff --git a/usr/local/www/firewall_virtual_ip.php b/usr/local/www/firewall_virtual_ip.php
index c3607ec..63d0f7e 100755
--- a/usr/local/www/firewall_virtual_ip.php
+++ b/usr/local/www/firewall_virtual_ip.php
@@ -117,6 +117,12 @@ if ($_GET['act'] == "del") {
if (ip_in_subnet($vip['subnet'], gen_subnet($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']) . "/" . $a_vip[$_GET['id']]['subnet_bits']))
$input_errors[] = gettext("This entry cannot be deleted because it is still referenced by CARP") . " {$vip['descr']}.";
}
+ } else if ($a_vip[$_GET['id']]['mode'] == "carp") {
+ $vipiface = $a_vip[$_GET['id']]['interface'];
+ foreach ($a_vip as $vip) {
+ if ($vipiface == "vip{$vip['vhid']}" && $vip['mode'] == "ipalias")
+ $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by ip alias entry") . " {$vip['descr']}.";
+ }
}
diff --git a/usr/local/www/firewall_virtual_ip_edit.php b/usr/local/www/firewall_virtual_ip_edit.php
index edcde6c..5825aaf 100755
--- a/usr/local/www/firewall_virtual_ip_edit.php
+++ b/usr/local/www/firewall_virtual_ip_edit.php
@@ -87,6 +87,7 @@ if (isset($id) && $a_vip[$id]) {
$pconfig['range'] = $a_vip[$id]['range'];
$pconfig['subnet'] = $a_vip[$id]['subnet'];
$pconfig['subnet_bits'] = $a_vip[$id]['subnet_bits'];
+ $pconfig['noexpand'] = $a_vip[$id]['noexpand'];
$pconfig['descr'] = $a_vip[$id]['descr'];
$pconfig['type'] = $a_vip[$id]['type'];
$pconfig['interface'] = $a_vip[$id]['interface'];
@@ -134,7 +135,9 @@ if ($_POST) {
/* make sure new ip is within the subnet of a valid ip
* on one of our interfaces (wan, lan optX)
*/
- if ($_POST['mode'] == "carp" or $_POST['mode'] == "carpdev-dhcp") {
+ switch ($_POST['mode']) {
+ case "carp":
+ case "carpdev-dhcp":
/* verify against reusage of vhids */
$idtracker = 0;
foreach($config['virtualip']['vip'] as $vip) {
@@ -151,8 +154,26 @@ if ($_POST) {
$cannot_find = $_POST['subnet'] . "/" . $_POST['subnet_bits'] ;
$input_errors[] = sprintf(gettext("Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface."),$cannot_find);
}
+ if (substr($_POST['interface'], 0, 3) == "vip")
+ $input_errors[] = gettext("For this type of vip a carp parent is not allowed.");
+ break;
+ case "ipalias":
+ if (substr($_POST['interface'], 0, 3) == "vip") {
+ $parent_ip = get_interface_ip($_POST['interface']);
+ $parent_sn = get_interface_subnet($_POST['interface']);
+ if (!ip_in_subnet($_POST['subnet'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['interface'], $_POST['subnet'])) {
+ $cannot_find = $_POST['subnet'] . "/" . $_POST['subnet_bits'] ;
+ $input_errors[] = sprintf(gettext("Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface."),$cannot_find);
+ }
+ }
+ break;
+ default:
+ if (substr($_POST['interface'], 0, 3) == "vip")
+ $input_errors[] = gettext("For this type of vip a carp parent is not allowed.");
+ break;
}
+
if (isset($id) && ($a_vip[$id])) {
if ($a_vip[$id]['mode'] != $_POST['mode']) {
$bringdown = false;
@@ -179,7 +200,9 @@ if ($_POST) {
if ($_POST['type'] == "range") {
$vipent['range']['from'] = $_POST['range_from'];
$vipent['range']['to'] = $_POST['range_to'];
+
}
+ $vipent['noexpand'] = isset($_POST['noexpand']);
}
/* CARP specific fields */
@@ -268,6 +291,8 @@ function enable_change(enable_over) {
document.iform.type.disabled = 1;
document.iform.subnet_bits.disabled = 0;
document.iform.subnet.disabled = 0;
+ document.iform.noexpand.disabled = 1;
+ $('noexpandrow').style.display = 'none';
if (note.firstChild == null) {
note.appendChild(carpnote);
} else {
@@ -282,6 +307,8 @@ function enable_change(enable_over) {
document.iform.type.disabled = 0;
document.iform.subnet_bits.disabled = 1;
document.iform.subnet.disabled = 0;
+ document.iform.noexpand.disabled = 0;
+ $('noexpandrow').style.display = '';
if (note.firstChild == null) {
note.appendChild(proxyarpnote);
} else {
@@ -295,6 +322,8 @@ function enable_change(enable_over) {
note.removeChild(note.firstChild);
}
document.iform.subnet.disabled = 0;
+ document.iform.noexpand.disabled = 1;
+ $('noexpandrow').style.display = 'none';
}
if (get_radio_value(document.iform.mode) == "ipalias") {
document.iform.type.disabled = 1;
@@ -302,6 +331,8 @@ function enable_change(enable_over) {
note.appendChild(ipaliasnote);
document.iform.subnet_bits.disabled = 0;
document.iform.subnet.disabled = 0;
+ document.iform.noexpand.disabled = 1;
+ $('noexpandrow').style.display = 'none';
}
if (get_radio_value(document.iform.mode) == "carpdev-dhcp") {
document.iform.type.disabled = 1;
@@ -315,29 +346,40 @@ function enable_change(enable_over) {
document.iform.password.disabled = 0;
document.iform.advskew.disabled = 0;
document.iform.advbase.disabled = 0;
+ document.iform.noexpand.disabled = 1;
+ $('noexpandrow').style.display = 'none';
}
+ typesel_change();
}
function typesel_change() {
switch (document.iform.type.selectedIndex) {
case 0: // single
document.iform.subnet.disabled = 0;
if((get_radio_value(document.iform.mode) == "proxyarp")) document.iform.subnet_bits.disabled = 1;
+ document.iform.noexpand.disabled = 1;
+ $('noexpandrow').style.display = 'none';
break;
case 1: // network
document.iform.subnet.disabled = 0;
document.iform.subnet_bits.disabled = 0;
+ document.iform.noexpand.disabled = 0;
+ $('noexpandrow').style.display = '';
//document.iform.range_from.disabled = 1;
//document.iform.range_to.disabled = 1;
break;
case 2: // range
document.iform.subnet.disabled = 1;
document.iform.subnet_bits.disabled = 1;
+ document.iform.noexpand.disabled = 1;
+ $('noexpandrow').style.display = 'none';
//document.iform.range_from.disabled = 0;
//document.iform.range_to.disabled = 0;
break;
case 3: // IP alias
document.iform.subnet.disabled = 1;
document.iform.subnet_bits.disabled = 0;
+ document.iform.noexpand.disabled = 1;
+ $('noexpandrow').style.display = 'none';
//document.iform.range_from.disabled = 0;
//document.iform.range_to.disabled = 0;
break;
@@ -378,6 +420,9 @@ function typesel_change() {
<select name="interface" class="formselect">
<?php
$interfaces = get_configured_interface_with_descr(false, true);
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip)
+ $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")";
foreach ($interfaces as $iface => $ifacename): ?>
<option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected"; ?>>
<?=htmlspecialchars($ifacename);?>
@@ -413,6 +458,12 @@ function typesel_change() {
</select> <i id="typenote"></i>
</td>
</tr>
+ <tr id="noexpandrow">
+ <td><?=gettext("Expansion:");?>&nbsp;&nbsp;</td>
+ <td><input name="noexpand" type="checkbox" class="formfld unknown" id="noexpand" <?php echo (isset($pconfig['noexpand'])) ? "checked" : "" ; ?>>
+ Disable expansion of this entry into IPs on NAT lists (e.g. 192.168.1.0/24 expands to 256 entries.)
+ </td>
+ </tr>
<?php
/*
<tr>
@@ -436,7 +487,7 @@ function typesel_change() {
<tr valign="top">
<td width="22%" class="vncellreq"><?=gettext("VHID Group");?></td>
<td class="vtable"><select id='vhid' name='vhid'>
- <?php for ($i = 1; $i <= 65536; $i++): ?>
+ <?php for ($i = 1; $i <= 255; $i++): ?>
<option value="<?=$i;?>" <?php if ($i == $pconfig['vhid']) echo "selected"; ?>>
<?=$i;?>
</option>
diff --git a/usr/local/www/guiconfig.inc b/usr/local/www/guiconfig.inc
index 1e30482..c6a58b3 100755
--- a/usr/local/www/guiconfig.inc
+++ b/usr/local/www/guiconfig.inc
@@ -881,7 +881,7 @@ function echo_array($array,$return_me=false){
* RESULT
* null
******/
-function display_top_tabs(& $tab_array) {
+function display_top_tabs(& $tab_array, $no_drop_down = false) {
global $HTTP_SERVER_VARS;
global $config;
global $g;
@@ -896,16 +896,15 @@ function display_top_tabs(& $tab_array) {
*/
/* empty string code */
- if ($tab_array_indent == '')
- {
+ if ($tab_array_indent == '') {
$tab_array_indent = 0;
}
- if ($tab_array_space == '')
- {
+
+ if ($tab_array_space == '') {
$tab_array_space = 1;
}
- if ($tab_array_char_limit == '')
- {
+
+ if ($tab_array_char_limit == '') {
$tab_array_char_limit = 82;
}
@@ -956,6 +955,11 @@ function display_top_tabs(& $tab_array) {
foreach ($tab_array as $ta)
$tabcharcount = $tabcharcount + strlen($ta[0]);
+ if($no_drop_down == true) {
+ $tabcharcount = 0;
+ unset($tab_array_char_limit);
+ }
+
// If the character count of the tab names is > 670
// then show a select item dropdown menubox.
if($tabcharcount > $tab_array_char_limit) {
@@ -975,7 +979,6 @@ function display_top_tabs(& $tab_array) {
echo " function tabs_will_go(obj){ document.location = obj.value; }";
echo "</script>";
} else {
- //////>>>
echo "<div class=\"newtabmenu\" style=\"margin:{$tab_array_space}px {$tab_array_indent}px; width:775px;\">\n";
echo "<!-- Tabbed bar code-->\n";
echo "<ul class=\"newtabmenu\">\n";
@@ -989,7 +992,6 @@ function display_top_tabs(& $tab_array) {
$tabscounter++;
}
echo "</ul>\n</div>\n";
- ////////>>>>
}
}
diff --git a/usr/local/www/help.php b/usr/local/www/help.php
index 89a5feb..59cc905 100644
--- a/usr/local/www/help.php
+++ b/usr/local/www/help.php
@@ -121,7 +121,7 @@ $helppages = array(
'services_snmp.php' => 'http://doc.pfsense.org/index.php/SNMP_Daemon',
'services_wol.php' => 'http://doc.pfsense.org/index.php/Wake_on_LAN',
'services_wol_edit.php' => 'http://doc.pfsense.org/index.php/Wake_on_LAN',
- 'routed/routed.xml' => 'http://doc.pfsense.org/index.php/Routing_Information_Protocol_(RIP)', # RIP
+ 'routed.xml' => 'http://doc.pfsense.org/index.php/Routing_Information_Protocol_(RIP)', # RIP
'system.php' => 'http://doc.pfsense.org/index.php/General_Setup_(2.0)',
'system_advanced_admin.php' => 'http://doc.pfsense.org/index.php/Advanced_Setup_(2.0)',
'system_advanced_firewall.php' => 'http://doc.pfsense.org/index.php/Advanced_Setup_(2.0)#Firewall.2FNAT',
@@ -208,6 +208,14 @@ $helppages = array(
'vpn_openvpn_crl_edit.php' => 'http://doc.pfsense.org/index.php/Category:OpenVPN',
'vpn_openvpn_srv.php' => 'http://doc.pfsense.org/index.php/Category:OpenVPN',
'vpn_openvpn_srv_edit.php' => 'http://doc.pfsense.org/index.php/Category:OpenVPN',
+ 'diag_authentication.php' => 'http://doc.pfsense.org/index.php/User_Authentication_Servers',
+ 'diag_limiter_info.php' => 'http://doc.pfsense.org/index.php/Traffic_Shaping_Guide#Display_Pipes',
+ 'diag_pf_info.php' => 'http://doc.pfsense.org/index.php/Packet_Filter_Information',
+ 'diag_smart.php' => 'http://doc.pfsense.org/index.php/SMART_Status',
+ 'diag_states_summary.php' => 'http://doc.pfsense.org/index.php/States_Summary',
+ 'interfaces_wireless.php' => 'http://doc.pfsense.org/index.php/Wireless_Interfaces',
+ 'interfaces_wireless_edit.php' => 'http://doc.pfsense.org/index.php/Wireless_Interfaces',
+ 'system_crlmanager.php' => 'http://doc.pfsense.org/index.php/Certificate_Management',
/* Below here are pages that may need some cleanup or have not been fully looked at yet */
@@ -294,6 +302,7 @@ $helppages = array(
'siproxdusers.xml' => 'http://doc.pfsense.org/index.php/Siproxd_package',
'open-vm-tools.xml' => 'http://doc.pfsense.org/index.php/Open_VM_Tools_package',
'arping.xml' => 'http://doc.pfsense.org/index.php/Arping_package',
+ 'unbound.xml' => 'http://doc.pfsense.org/index.php/Unbound_package',
);
diff --git a/usr/local/www/index.php b/usr/local/www/index.php
index 3bb68cf..c1fdc26 100755
--- a/usr/local/www/index.php
+++ b/usr/local/www/index.php
@@ -42,6 +42,9 @@
##|*MATCH=index.php*
##|-PRIV
+// Turn off csrf for the dashboard
+$nocsrf = true;
+
// Turn on buffering to speed up rendering
ini_set('output_buffering','true');
@@ -107,14 +110,15 @@ if (!is_array($config['widgets'])) {
## User recently restored his config.
## If packages are installed lets resync
if(file_exists('/conf/needs_package_sync')) {
- if($config['installedpackages'] <> '') {
- conf_mount_rw();
- @unlink('/conf/needs_package_sync');
- conf_mount_ro();
+ if($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) {
if($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") {
header('Location: pkg_mgr_install.php?mode=reinstallall');
exit;
}
+ } else {
+ conf_mount_rw();
+ @unlink('/conf/needs_package_sync');
+ conf_mount_ro();
}
}
diff --git a/usr/local/www/installer.php b/usr/local/www/installer.php
deleted file mode 100644
index 68570ac..0000000
--- a/usr/local/www/installer.php
+++ /dev/null
@@ -1,753 +0,0 @@
-<?php
-/*
- installer.php
- part of pfSense (http://www.pfsense.com/)
- Copyright (C) 2010 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require("globals.inc");
-require("guiconfig.inc");
-
-define('PC_SYSINSTALL', '/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh');
-
-if($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") {
- Header("Location: /index.php");
- exit;
-}
-
-// Main switch dispatcher
-switch ($_REQUEST['state']) {
- case "update_installer_status":
- update_installer_status();
- exit;
- case "custominstall":
- installer_custom();
- exit;
- case "begin_install":
- installing_gui();
- begin_install();
- exit;
- case "verify_before_install":
- verify_before_install();
- exit;
- default:
- installer_main();
-}
-
-function write_out_pc_sysinstaller_config($disk, $fstype = "UFS+S", $swapsize = false) {
- $fd = fopen("/usr/sbin/pc-sysinstall/examples/pfSense-install.cfg", "w");
- if(!$fd) {
- return true;
- }
- if($swapsize <> "") {
- $diskareas = "disk0-part=SWAP {$swapsize} none \n";
- $diskareas .= "disk0-part={$fstype} 0 /\n";
- } else {
- $diskareas = "disk0-part={$fstype} 0 /\n";
- }
- $config = <<<EOF
-# Sample configuration file for an installation using pc-sysinstall
-
-installMode=fresh
-installInteractive=yes
-installType=FreeBSD
-installMedium=LiveCD
-
-# Set the disk parameters
-disk0={$disk}
-partition=all
-bootManager=bsd
-commitDiskPart
-
-# Setup the disk label
-# All sizes are expressed in MB
-# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP
-# Size 0 means use the rest of the slice size
-{$diskareas}
-
-# Do it now!
-commitDiskLabel
-
-# Set if we are installing via optical, USB, or FTP
-installType=FreeBSD
-
-packageType=cpdup
-
-# Optional Components
-cpdupPaths=boot,COPYRIGHT,bin,conf,conf.default,dev,etc,home,kernels,libexec,lib,root,sbin,sys,usr,var
-
-# runExtCommand=chmod a+rx /usr/local/bin/after_installation_routines.sh ; cd / ; /usr/local/bin/after_installation_routines.sh
-EOF;
- fwrite($fd, $config);
- fclose($fd);
- return;
-}
-
-function start_installation() {
- global $g, $fstype;
- if(file_exists("/tmp/install_complete"))
- return;
- $ps_running = exec("ps awwwux | grep -v grep | grep 'sh /tmp/installer.sh'");
- if($ps_running)
- return;
- $fd = fopen("/tmp/installer.sh", "w");
- if(!$fd) {
- die(gettext("Could not open /tmp/installer.sh for writing"));
- exit;
- }
- fwrite($fd, "rm /tmp/.pc-sysinstall/pc-sysinstall.log 2>/dev/null\n");
- fwrite($fd, "/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh -c /usr/sbin/pc-sysinstall/examples/pfSense-install.cfg \n");
- fwrite($fd, "chmod a+rx /usr/local/bin/after_installation_routines.sh\n");
- fwrite($fd, "cd / && /usr/local/bin/after_installation_routines.sh\n");
- fwrite($fd, "mkdir /mnt/tmp\n");
-// fwrite($fd, "umount /mnt\n");
- fwrite($fd, "touch /tmp/install_complete\n");
- fclose($fd);
- exec("chmod a+rx /tmp/installer.sh");
- mwexec_bg("sh /tmp/installer.sh");
-}
-
-function installer_find_first_disk() {
- global $g, $fstype;
- $disk = `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list | head -n1 | cut -d':' -f1`;
- return $disk;
-}
-
-function pcsysinstall_get_disk_info($diskname) {
- global $g, $fstype;
- $disk = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list`);
- $disks_array = array();
- foreach($disk as $d) {
- if(!$d)
- continue;
- $disks_info = split(":", $d);
- $tmp_array = array();
- if($disks_info[0] == $diskname) {
- $disk_info = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-info {$disks_info[0]}`);
- foreach($disk_info as $di) {
- $di_s = split("=", $di);
- if($di_s[0])
- $tmp_array[$di_s[0]] = $di_s[1];
- }
- $tmp_array['disk'] = trim($disks_info[0]);
- $tmp_array['desc'] = trim(htmlentities($disks_info[1]));
- return $tmp_array;
- }
- }
-}
-
-// Return an array with all disks information.
-function installer_find_all_disks() {
- global $g, $fstype;
- $disk = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list`);
- $disks_array = array();
- foreach($disk as $d) {
- if(!$d)
- continue;
- $disks_info = split(":", $d);
- $tmp_array = array();
- $disk_info = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-info {$disks_info[0]}`);
- foreach($disk_info as $di) {
- $di_s = split("=", $di);
- if($di_s[0])
- $tmp_array[$di_s[0]] = $di_s[1];
- }
- $tmp_array['disk'] = trim($disks_info[0]);
- $tmp_array['desc'] = trim(htmlentities($disks_info[1]));
- $disks_array[] = $tmp_array;
- }
- return $disks_array;
-}
-
-function update_installer_status() {
- global $g, $fstype;
- // Ensure status files exist
- if(!file_exists("/tmp/installer_installer_running"))
- touch("/tmp/installer_installer_running");
- $status = `cat /tmp/.pc-sysinstall/pc-sysinstall.log`;
- $status = str_replace("\n", "\\n", $status);
- $status = str_replace("\n", "\\r", $status);
- echo "this.document.forms[0].installeroutput.value='$status';\n";
- echo "this.document.forms[0].installeroutput.scrollTop = this.document.forms[0].installeroutput.scrollHeight;\n";
- // Find out installer progress
- $progress = "5";
- if(strstr($status, "Running: dd"))
- $progress = "6";
- if(strstr($status, "Running: gpart create -s GPT"))
- $progress = "7";
- if(strstr($status, "Running: gpart bootcode"))
- $progress = "7";
- if(strstr($status, "Running: newfs -U"))
- $progress = "8";
- if(strstr($status, "Running: sync"))
- $progress = "9";
- if(strstr($status, "/boot /mnt/boot"))
- $progress = "10";
- if(strstr($status, "/COPYRIGHT /mnt/COPYRIGHT"))
- $progress = "11";
- if(strstr($status, "/bin /mnt/bin"))
- $progress = "12";
- if(strstr($status, "/conf /mnt/conf"))
- $progress = "15";
- if(strstr($status, "/conf.default /mnt/conf.default"))
- $progress = "20";
- if(strstr($status, "/dev /mnt/dev"))
- $progress = "25";
- if(strstr($status, "/etc /mnt/etc"))
- $progress = "30";
- if(strstr($status, "/home /mnt/home"))
- $progress = "35";
- if(strstr($status, "/kernels /mnt/kernels"))
- $progress = "40";
- if(strstr($status, "/libexec /mnt/libexec"))
- $progress = "50";
- if(strstr($status, "/lib /mnt/lib"))
- $progress = "60";
- if(strstr($status, "/root /mnt/root"))
- $progress = "70";
- if(strstr($status, "/sbin /mnt/sbin"))
- $progress = "75";
- if(strstr($status, "/sys /mnt/sys"))
- $progress = "80";
- if(strstr($status, "/usr /mnt/usr"))
- $progress = "95";
- if(strstr($status, "/usr /mnt/usr"))
- $progress = "90";
- if(strstr($status, "/var /mnt/var"))
- $progress = "95";
- if(strstr($status, "cap_mkdb /etc/login.conf"))
- $progress = "96";
- if(strstr($status, "Setting hostname"))
- $progress = "97";
- if(strstr($status, "umount -f /mnt"))
- $progress = "98";
- if(strstr($status, "umount -f /mnt"))
- $progress = "99";
- if(strstr($status, "Installation finished"))
- $progress = "100";
- // Check for error and bail if we see one.
- if(stristr($status, "error")) {
- $error = true;
- echo "\$('installerrunning').innerHTML='<img class=\"infoboxnpimg\" src=\"/themes/{$g['theme']}/images/icons/icon_exclam.gif\"> <font size=\"2\"><b>An error occurred. Aborting installation. <a href=\"installer.php\">Back</a> to webInstaller'; ";
- echo "\$('progressbar').style.width='100%';\n";
- unlink_if_exists("/tmp/install_complete");
- return;
- }
- $running_old = trim(file_get_contents("/tmp/installer_installer_running"));
- if($installer_running <> "running") {
- $ps_running = exec("ps awwwux | grep -v grep | grep 'sh /tmp/installer.sh'");
- if($ps_running) {
- $running = "\$('installerrunning').innerHTML='<table><tr><td valign=\"middle\"><img src=\"/themes/{$g['theme']}/images/misc/loader.gif\"></td><td valign=\"middle\">&nbsp;<font size=\"2\"><b>Installer running ({$progress}% completed)...</td></tr></table>'; ";
- if($running_old <> $running) {
- echo $running;
- file_put_contents("/tmp/installer_installer_running", "$running");
- }
- }
- }
- if($progress)
- echo "\$('progressbar').style.width='{$progress}%';\n";
- if(file_exists("/tmp/install_complete")) {
- echo "\$('installerrunning').innerHTML='<img class=\"infoboxnpimg\" src=\"/themes/{$g['theme']}/images/icons/icon_exclam.gif\"> <font size=\"+1\">Installation completed. Please <a href=\"reboot.php\">reboot</a> to continue';\n";
- echo "\$('pbdiv').Fade();\n";
- unlink_if_exists("/tmp/installer.sh");
- file_put_contents("/tmp/installer_installer_running", "finished");
- }
-}
-
-function update_installer_status_win($status) {
- global $g, $fstype;
- echo "<script type=\"text/javascript\">\n";
- echo " \$('installeroutput').value = '" . str_replace(htmlentities($status), "\n", "") . "';\n";
- echo "</script>";
-}
-
-function begin_install() {
- global $g;
- if(file_exists("/tmp/install_complete"))
- return;
- unlink_if_exists("/tmp/install_complete");
- if($_REQUEST['disk'])
- $disk = htmlspecialchars($_REQUEST['disk']);
- else
- $disk = installer_find_first_disk();
- if(!$disk) {
- echo "<script type=\"text/javascript\">";
- echo "\$('pbdiv').Fade();\n";
- echo "</script>";
- $savemsg = gettext("Could not find a suitable disk for installation");
- update_installer_status_win(gettext("Could not find a suitable disk for installation."));
- return;
- }
- // Handle other type of file systems
- if($_REQUEST['fstype'])
- $fstype = htmlspecialchars(strtoupper($_REQUEST['fstype']));
- else
- $fstype = "UFS+S";
- write_out_pc_sysinstaller_config($disk, $fstype);
- update_installer_status_win(sprintf(gettext("Beginning installation on disk %s."),$disk));
- start_installation();
-}
-
-function head_html() {
- global $g, $fstype;
- echo <<<EOF
-<html>
- <head>
- <style type='text/css'>
- a:link {
- color: #000000;
- text-decoration:underline;
- font-size:14;
- }
- a:visited {
- color: #000000;
- text-decoration:underline;
- font-size:14;
- }
- a:hover {
- color: #FFFF00;
- text-decoration: none;
- font-size:14;
- }
- a:active {
- color: #FFFF00;
- text-decoration:underline;
- font-size:14;
- }
- </style>
- </head>
-EOF;
-
-}
-
-function body_html() {
- global $g, $fstype;
- $pfSversion = str_replace("\n", "", file_get_contents("/etc/version"));
- if(strstr($pfSversion, "1.2"))
- $one_two = true;
- $pgtitle = "{$g['product_name']}: " . gettext("Installer");
- include("head.inc");
- echo <<<EOF
- <body link="#0000CC" vlink="#0000CC" alink="#0000CC">
- <script src="/javascript/scriptaculous/prototype.js" type="text/javascript"></script>
- <script type="text/javascript">
- function getinstallerprogress() {
- url = 'installer.php';
- pars = 'state=update_installer_status';
- callajax(url, pars, installcallback);
- }
- function callajax(url, pars, activitycallback) {
- var myAjax = new Ajax.Request(
- url,
- {
- method: 'post',
- parameters: pars,
- onComplete: activitycallback
- });
- }
- function installcallback(transport) {
- setTimeout('getinstallerprogress()', 2000);
- eval(transport.responseText);
- }
- </script>
-EOF;
-
- if($one_two)
- echo "<p class=\"pgtitle\">{$pgtitle}</font></p>";
-
- if ($savemsg) print_info_box($savemsg);
-}
-
-function end_html() {
- global $g, $fstype;
- echo "</form>";
- echo "</body>";
- echo "</html>";
-}
-
-function template() {
- global $g, $fstype;
- head_html();
- body_html();
- echo <<<EOF
- <div id="mainlevel">
- <table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td class="tabcont" >
- <form action="installer.php" method="post">
- <div id="pfsensetemplate">
-
-
- </div>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </div>
-EOF;
- end_html();
-}
-
-function verify_before_install() {
- global $g, $fstype;
- head_html();
- body_html();
- page_table_start();
- $disk = pcsysinstall_get_disk_info(htmlspecialchars($_REQUEST['disk']));
- $disksize = format_bytes($disk['size'] * 1048576);
- $swapsize = htmlspecialchars($_REQUEST['swapsize']);
- $fstype_echo = htmlspecialchars($_REQUEST['fstype']);
- $disk_echo = htmlspecialchars($_REQUEST['disk']);
- $swapsize_echo = htmlspecialchars($_REQUEST['swapsize']);
- echo <<<EOF
- <form method="post" action="installer.php">
- <input type="hidden" name="fstype" value="{$fstype_echo}">
- <input type="hidden" name="disk" value="{$disk_echo}">
- <input type="hidden" name="state" value="begin_install">
- <input type="hidden" name="swapsize" value="{$swapsize_echo}">
- <div id="mainlevel">
- <table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <div id="mainarea">
- <table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td >
- <div>
- <center>
- <div id="pfsensetemplate">
- <table bgcolor="FFFF00" width="400" height="30" cellpadding="2" style="border:1px dashed;">
- <tr valign="middle">
- <td>
- <center><b>Please verify that the following is correct:</b></center>
- </td>
- </tr>
- </table>
- <p/>
- <table>
- <tr><td align="right"><b>Disk:</td><td>{$disk_echo}</td></tr>
- <tr><td align="right"><b>Description:</td><td>{$disk['desc']}</td></tr>
- <tr><td align="right"><b>Size:</td><td>{$disksize}</td></tr>
- <tr><td align="right"><b>SWAP Size:</td><td>{$swapsize}</td></tr>
- <tr><td align="right"><b>Filesystem:</td><td>{$fstype_echo}</td></tr>
- </table>
- </div>
- </center>
- </div>
- </td>
- </tr>
- </table>
- </div>
- <center>
- <p/>
- <input type="button" value="Cancel" onClick="javascript:document.location='/installer.php';"> &nbsp;&nbsp;
- <input type="submit" value="Begin installation">
- </center>
- </td>
- </tr>
- </table>
- </div>
-EOF;
- page_table_end();
- end_html();
-}
-
-function installing_gui() {
- global $g, $fstype;
- head_html();
- body_html();
- echo "<form action=\"installer.php\" method=\"post\" state=\"step1_post\">";
- page_table_start();
- echo <<<EOF
- <center>
- <table width="100%">
- <tr><td>
- <div id="mainlevel">
- <table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <div id="mainarea">
- <table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <div id="pfsenseinstaller" width="100%">
- <div id='installerrunning' width='100%' style="padding:8px; border:1px dashed #000000">
- <table>
- <tr>
- <td valign="middle">
- <img src="/themes/{$g['theme']}/images/misc/loader.gif">
- </td>
- <td valign="middle">
- &nbsp;<font size="2"><b>Starting Installer... Please wait...
- </td>
- </tr>
- </table>
- </div>
- <div id='pbdiv'>
- <br/>
- <center>
- <table id='pbtable' height='15' width='640' border='0' colspacing='0' cellpadding='0' cellspacing='0'>
- <tr>
- <td background="./themes/the_wall/images/misc/bar_left.gif" height='15' width='5'>
- </td>
- <td>
- <table id="progholder" name="progholder" height='15' width='630' border='0' colspacing='0' cellpadding='0' cellspacing='0'>
- <td background="./themes/the_wall/images/misc/bar_gray.gif" valign="top" align="left">
- <img src='./themes/the_wall/images/misc/bar_blue.gif' width='0' height='15' name='progressbar' id='progressbar'>
- </td>
- </table>
- </td>
- <td background="./themes/the_wall/images/misc/bar_right.gif" height='15' width='5'>
- </td>
- </tr>
- </table>
- <br/>
- </div>
- <textarea name='installeroutput' id='installeroutput' rows="31" cols="90">
- </textarea>
- </div>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </div>
- </td></tr>
- </table>
- </center>
- <script type="text/javascript">setTimeout('getinstallerprogress()', 250);</script>
-
-EOF;
- page_table_end();
- end_html();
-}
-
-function page_table_start() {
- global $g, $fstype;
- echo <<<EOF
- <center>
- <img border="0" src="./themes/{$g['theme']}/images/logo.gif"></a><br/>
- <table cellpadding="6" cellspacing="0" width="550" height="380" style="border:1px solid #000000">
- <tr height="10" bgcolor="#990000">
- <td style="border-bottom:1px solid #000000">
- <font color='white'>
- <b>
- {$g['product_name']} installer
- </b>
- </font>
- </td>
- </tr>
- <tr>
- <td>
-
-EOF;
-
-}
-
-function page_table_end() {
- global $g, $fstype;
- echo <<<EOF
- </td>
- </tr>
- </table>
- </center>
-
-EOF;
-
-}
-
-function installer_custom() {
- global $g, $fstype;
- if(file_exists("/tmp/.pc-sysinstall/pc-sysinstall.log"))
- unlink("/tmp/.pc-sysinstall/pc-sysinstall.log");
- head_html();
- body_html();
- page_table_start();
- echo <<<EOF
- <form action="installer.php" method="post">
- <input type="hidden" name="state" value="verify_before_install">
- <div id="mainlevel">
- <center>
- <table width="100%" border="0" cellpadding="5" cellspacing="0">
- <tr>
- <td>
- <center>
- <div id="mainarea">
- <br/>
- <center>
- <table width="100%" border="0" cellpadding="5" cellspacing="5">
- <tr>
- <td>
- <div id="pfsenseinstaller">
- <center>
- <div id='loadingdiv'>
- <img src="/themes/{$g['theme']}/images/misc/loader.gif"> Probing disks, please wait...
- </div>
-EOF;
- ob_flush();
- $disks = installer_find_all_disks();
- if(!$disks) {
- $custom_txt = gettext("ERROR: Could not find any suitable disks for installation.");
- } else {
- // Prepare disk selection dropdown
- $custom_txt = <<<EOF
- <table bgcolor="FFFF00" width="400" height="30" cellpadding="2" style="border:1px dashed;">
- <tr valign="middle">
- <td>
- <center><b>Select the installation parameters for {$g['product_name']}:</b></center>
- </td>
- </tr>
- </table><p/>
- <table>
-EOF;
- $custom_txt .= "<tr><td align='right'><b>Swap size</td><td><input name='swapsize' type='text' value='200M'></td></tr>\n";
- $custom_txt .= "<tr><td align='right'><b>Disk:</td><td><select name='disk'>\n";
- foreach($disks as $disk) {
- $disksize = format_bytes($disk['size'] * 1048576);
- $custom_txt .= "<option value='{$disk['disk']}'>{$disk['disk']} - {$disksize} - {$disk['desc']}</option>\n";
- }
- $custom_txt .= "</select></td></tr>\n";
- // XXX: Convert to rowhelper. Add Ajax callbacks to verify sizes, etc.
- // Prepare disk types
- $custom_txt .= "<tr><td align='right'><b>Filesystem type:</td><td><select name='fstype'>\n";
- $custom_txt .= "<option value='UFS'>UFS</option>\n";
- $custom_txt .= "<option value='UFS+S'>UFS + Softupdates</option>\n";
- $release = php_uname("r");
- $release = $release[0];
- if($release == "9")
- $custom_txt .= "<option value='UFS+J'>UFS + Journaling</option>\n";
- if(file_exists("/boot/gptzfsboot"))
- $custom_txt .= "<option value='ZFS'>ZFS</option>\n";
- $custom_txt .= "</select>\n</td></tr></table><p/>";
- }
- echo <<<EOF
- <script type="text/javascript">
- \$('loadingdiv').style.visibility='hidden';
- </script>
- <div id='contentdiv' style="display:none;">
- {$custom_txt}<p/>
- <input type="button" value="Cancel" onClick="javascript:document.location='/installer.php';"> &nbsp;&nbsp
- <input type="submit" value="Next">
- </div>
- <script type="text/javascript">
- \$('contentdiv').appear();
- </script>
- </center>
- </td></tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </div>
-
-EOF;
- page_table_end();
- end_html();
-}
-
-function installer_main() {
- global $g, $fstype;
- if(file_exists("/tmp/.pc-sysinstall/pc-sysinstall.log"))
- unlink("/tmp/.pc-sysinstall/pc-sysinstall.log");
- head_html();
- body_html();
- $disk = installer_find_first_disk();
- // Only enable ZFS if this exists. The install will fail otherwise.
- if(file_exists("/boot/gptzfsboot"))
- $zfs_enabled = "<tr bgcolor=\"#9A9A9A\"><td align=\"center\"><a href=\"installer.php?state=verify_before_install&fstype=ZFS&swapsize=200M\">Easy installation of {$g['product_name']} using the ZFS filesystem on disk {$disk}</a></td></tr>";
- page_table_start();
- echo <<<EOF
- <form action="installer.php" method="post" state="step1_post">
- <div id="mainlevel">
- <center>
- <b><font face="arial" size="+2">Welcome to the {$g['product_name']} webInstaller!</b></font><p/>
- <font face="arial" size="+1">This utility will install {$g['product_name']} to a hard disk, flash drive, etc.</font>
- <table width="100%" border="0" cellpadding="5" cellspacing="0">
- <tr>
- <td>
- <center>
- <div id="mainarea">
- <br/>
- <center>
- Please select an installer option to begin:
- <p/>
- <table width="100%" border="0" cellpadding="5" cellspacing="5">
- <tr>
- <td>
- <div id="pfsenseinstaller">
- <center>
-EOF;
- if(!$disk) {
- echo gettext("ERROR: Could not find any suitable disks for installation.");
- echo "</div></td></tr></table></div></table></div>";
- end_html();
- exit;
- }
- echo <<<EOF
-
- <table cellspacing="5" cellpadding="5" style="border: 1px dashed;">
- <tr bgcolor="#CECECE"><td align="center">
- <a href="installer.php?state=verify_before_install&disk={$disk}&fstype=UFS&swapsize=200M">Easy installation of {$g['product_name']} using the UFS filesystem on disk {$disk}</a>
- </td></tr>
- {$zfs_enabled}
- <tr bgcolor="#AAAAAA"><td align="center">
- <a href="installer.php?state=custominstall">Custom installation of {$g['product_name']}</a>
- </td></tr>
- <tr bgcolor="#CECECE"><td align="center">
- <a href='/'>Cancel and return to Dashboard</a>
- </td></tr>
- </table>
- </center>
- </div>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </div>
-EOF;
- page_table_end();
- end_html();
-}
-
-?>
diff --git a/usr/local/www/installer/index.php b/usr/local/www/installer/index.php
new file mode 100644
index 0000000..2c7dd90
--- /dev/null
+++ b/usr/local/www/installer/index.php
@@ -0,0 +1,5 @@
+<?php
+
+Header("Location: installer.php");
+
+?> \ No newline at end of file
diff --git a/usr/local/www/installer/installer.php b/usr/local/www/installer/installer.php
new file mode 100644
index 0000000..fdb682a
--- /dev/null
+++ b/usr/local/www/installer/installer.php
@@ -0,0 +1,1212 @@
+<?php
+/*
+ installer.php (pfSense webInstaller)
+ part of pfSense (http://www.pfsense.com/)
+ Copyright (C) 2010 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$nocsrf = true;
+
+require("globals.inc");
+require("guiconfig.inc");
+
+define('PC_SYSINSTALL', '/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh');
+
+if($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") {
+ Header("Location: /");
+ exit;
+}
+
+// Main switch dispatcher
+switch ($_REQUEST['state']) {
+ case "update_installer_status":
+ update_installer_status();
+ exit;
+ case "custominstall":
+ installer_custom();
+ exit;
+ case "begin_install":
+ installing_gui();
+ begin_install();
+ exit;
+ case "verify_before_install":
+ verify_before_install();
+ exit;
+ case "easy_install_ufs":
+ easy_install("UFS+S");
+ exit;
+ case "easy_install_ufs":
+ easy_install("ZFS");
+ exit;
+
+ default:
+ installer_main();
+}
+
+function easy_install($fstype = "UFS+S") {
+ // Calculate swap and disk sizes
+ $disks = installer_find_all_disks();
+ $memory = get_memory();
+ $swap_size = $memory[0] * 2;
+ $first_disk = trim(installer_find_first_disk());
+ $disk_info = pcsysinstall_get_disk_info($first_disk);
+ $size = $disk_info['size'];
+ $first_disk_size = $size - $swap_size;
+ $disk_setup = array();
+ $tmp_array = array();
+ // Build the disk layout for /
+ $tmp_array['disk'] = $first_disk;
+ $tmp_array['size'] = $first_disk_size;
+ $tmp_array['mountpoint'] = "/";
+ $tmp_array['fstype'] = $fstype;
+ $disk_setup[] = $tmp_array;
+ unset($tmp_array);
+ $tmp_array = array();
+ // Build the disk layout for SWAP
+ $tmp_array['disk'] = $first_disk;
+ $tmp_array['size'] = $swap_size;
+ $tmp_array['mountpoint'] = "none";
+ $tmp_array['fstype'] = "SWAP";
+ $disk_setup[] = $tmp_array;
+ unset($tmp_array);
+ $bootmanager = "bsd";
+ file_put_contents("/tmp/webInstaller_disk_layout.txt", serialize($disk_setup));
+ file_put_contents("/tmp/webInstaller_disk_bootmanager.txt", serialize($bootmanager));
+ Header("Location: installer.php?state=verify_before_install");
+ exit;
+}
+
+function write_out_pc_sysinstaller_config($disks, $bootmanager = "bsd") {
+ $diskareas = "";
+ $fd = fopen("/usr/sbin/pc-sysinstall/examples/pfSense-install.cfg", "w");
+ if(!$fd)
+ return true;
+ if($bootmanager == "")
+ $bootmanager = "none";
+ // Yes, -1. We ++ early in loop.
+ $numdisks = -1;
+ $lastdisk = "";
+ $diskdefs = "";
+ // Run through the disks and create the conf areas for pc-sysinstaller
+ foreach($disks as $disksa) {
+ $fstype = $disksa['fstype'];
+ $size = $disksa['size'];
+ $mountpoint = $disksa['mountpoint'];
+ $disk = $disksa['disk'];
+ if($disk <> $lastdisk) {
+ $lastdisk = $disk;
+ $numdisks++;
+ $diskdefs .= "# disk {$disk}\n";
+ $diskdefs .= "disk{$numdisks}={$disk}\n";
+ $diskdefs .= "partition=all\n";
+ $diskdefs .= "bootManager={$bootmanager}\n";
+ $diskdefs .= "commitDiskPart\n\n";
+ }
+ $diskareas .= "disk{$numdisks}-part={$fstype} {$size} {$mountpoint} \n";
+ if($encpass)
+ $diskareas .= "encpass={$encpass}\n";
+ }
+
+ $config = <<<EOF
+# Sample configuration file for an installation using pc-sysinstall
+# This file was automatically generated by installer.php
+
+installMode=fresh
+installInteractive=yes
+installType=FreeBSD
+installMedium=LiveCD
+
+# Set the disk parameters
+{$diskdefs}
+
+# Setup the disk label
+# All sizes are expressed in MB
+# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP
+# Size 0 means use the rest of the slice size
+# Alternatively, you can append .eli to any of
+# the above filesystem types to encrypt that disk.
+# If you with to use a passphrase with this
+# encrypted partition, on the next line
+# the flag "encpass=" should be entered:
+# encpass=mypass
+# disk0-part=UFS 500 /boot
+# disk0-part=UFS.eli 500 /
+# disk0-part=UFS.eli 500 /usr
+{$diskareas}
+
+# Do it now!
+commitDiskLabel
+
+# Set if we are installing via optical, USB, or FTP
+installType=FreeBSD
+
+packageType=cpdup
+
+# Optional Components
+cpdupPaths=boot,COPYRIGHT,bin,conf,conf.default,dev,etc,home,kernels,libexec,lib,root,sbin,usr,var
+
+# runExtCommand=chmod a+rx /usr/local/bin/after_installation_routines.sh ; cd / ; /usr/local/bin/after_installation_routines.sh
+EOF;
+ fwrite($fd, $config);
+ fclose($fd);
+ return;
+}
+
+function start_installation() {
+ global $g, $fstype, $savemsg;
+ if(file_exists("/tmp/install_complete"))
+ return;
+ $ps_running = exec("/bin/ps awwwux | /usr/bin/grep -v grep | /usr/bin/grep 'sh /tmp/installer.sh'");
+ if($ps_running)
+ return;
+ $fd = fopen("/tmp/installer.sh", "w");
+ if(!$fd) {
+ die(gettext("Could not open /tmp/installer.sh for writing"));
+ exit;
+ }
+ fwrite($fd, "/bin/rm /tmp/.pc-sysinstall/pc-sysinstall.log 2>/dev/null\n");
+ fwrite($fd, "/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh -c /usr/sbin/pc-sysinstall/examples/pfSense-install.cfg \n");
+ fwrite($fd, "/bin/chmod a+rx /usr/local/bin/after_installation_routines.sh\n");
+ fwrite($fd, "cd / && /usr/local/bin/after_installation_routines.sh\n");
+ fwrite($fd, "/bin/mkdir /mnt/tmp\n");
+ fwrite($fd, "/usr/bin/touch /tmp/install_complete\n");
+ fclose($fd);
+ exec("/bin/chmod a+rx /tmp/installer.sh");
+ mwexec_bg("/bin/sh /tmp/installer.sh");
+}
+
+function installer_find_first_disk() {
+ global $g, $fstype, $savemsg;
+ $disk = `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list | head -n1 | cut -d':' -f1`;
+ return trim($disk);
+}
+
+function pcsysinstall_get_disk_info($diskname) {
+ global $g, $fstype, $savemsg;
+ $disk = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list`);
+ $disks_array = array();
+ foreach($disk as $d) {
+ $disks_info = split(":", $d);
+ $tmp_array = array();
+ if($disks_info[0] == $diskname) {
+ $disk_info = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-info {$disks_info[0]}`);
+ $disk_info_split = split("=", $disk_info);
+ foreach($disk_info as $di) {
+ $di_s = split("=", $di);
+ if($di_s[0])
+ $tmp_array[$di_s[0]] = $di_s[1];
+ }
+ $tmp_array['size']--;
+ $tmp_array['disk'] = trim($disks_info[0]);
+ $tmp_array['desc'] = trim(htmlentities($disks_info[1]));
+ return $tmp_array;
+ }
+ }
+}
+
+// Return an array with all disks information.
+function installer_find_all_disks() {
+ global $g, $fstype, $savemsg;
+ $disk = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list`);
+ $disks_array = array();
+ foreach($disk as $d) {
+ if(!$d)
+ continue;
+ $disks_info = split(":", $d);
+ $tmp_array = array();
+ $disk_info = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-info {$disks_info[0]}`);
+ foreach($disk_info as $di) {
+ $di_s = split("=", $di);
+ if($di_s[0])
+ $tmp_array[$di_s[0]] = $di_s[1];
+ }
+ $tmp_array['size']--;
+ $tmp_array['disk'] = trim($disks_info[0]);
+ $tmp_array['desc'] = trim(htmlentities($disks_info[1]));
+ $disks_array[] = $tmp_array;
+ }
+ return $disks_array;
+}
+
+function update_installer_status() {
+ global $g, $fstype, $savemsg;
+ // Ensure status files exist
+ if(!file_exists("/tmp/installer_installer_running"))
+ touch("/tmp/installer_installer_running");
+ $status = `cat /tmp/.pc-sysinstall/pc-sysinstall.log`;
+ $status = str_replace("\n", "\\n", $status);
+ $status = str_replace("\n", "\\r", $status);
+ echo "this.document.forms[0].installeroutput.value='$status';\n";
+ echo "this.document.forms[0].installeroutput.scrollTop = this.document.forms[0].installeroutput.scrollHeight;\n";
+ // Find out installer progress
+ $progress = "5";
+ if(strstr($status, "Running: dd"))
+ $progress = "6";
+ if(strstr($status, "Running: gpart create -s GPT"))
+ $progress = "7";
+ if(strstr($status, "Running: gpart bootcode"))
+ $progress = "7";
+ if(strstr($status, "Running: newfs -U"))
+ $progress = "8";
+ if(strstr($status, "Running: sync"))
+ $progress = "9";
+ if(strstr($status, "/boot /mnt/boot"))
+ $progress = "10";
+ if(strstr($status, "/COPYRIGHT /mnt/COPYRIGHT"))
+ $progress = "11";
+ if(strstr($status, "/bin /mnt/bin"))
+ $progress = "12";
+ if(strstr($status, "/conf /mnt/conf"))
+ $progress = "15";
+ if(strstr($status, "/conf.default /mnt/conf.default"))
+ $progress = "20";
+ if(strstr($status, "/dev /mnt/dev"))
+ $progress = "25";
+ if(strstr($status, "/etc /mnt/etc"))
+ $progress = "30";
+ if(strstr($status, "/home /mnt/home"))
+ $progress = "35";
+ if(strstr($status, "/kernels /mnt/kernels"))
+ $progress = "40";
+ if(strstr($status, "/libexec /mnt/libexec"))
+ $progress = "50";
+ if(strstr($status, "/lib /mnt/lib"))
+ $progress = "60";
+ if(strstr($status, "/root /mnt/root"))
+ $progress = "70";
+ if(strstr($status, "/sbin /mnt/sbin"))
+ $progress = "75";
+ if(strstr($status, "/sys /mnt/sys"))
+ $progress = "80";
+ if(strstr($status, "/usr /mnt/usr"))
+ $progress = "95";
+ if(strstr($status, "/usr /mnt/usr"))
+ $progress = "90";
+ if(strstr($status, "/var /mnt/var"))
+ $progress = "95";
+ if(strstr($status, "cap_mkdb /etc/login.conf"))
+ $progress = "96";
+ if(strstr($status, "Setting hostname"))
+ $progress = "97";
+ if(strstr($status, "umount -f /mnt"))
+ $progress = "98";
+ if(strstr($status, "umount -f /mnt"))
+ $progress = "99";
+ if(strstr($status, "Installation finished"))
+ $progress = "100";
+ // Check for error and bail if we see one.
+ if(stristr($status, "error")) {
+ $error = true;
+ echo "\$('installerrunning').innerHTML='<img class=\"infoboxnpimg\" src=\"/themes/{$g['theme']}/images/icons/icon_exclam.gif\"> <font size=\"2\"><b>An error occurred. Aborting installation. <a href=\"/installer\">Back</a> to webInstaller'; ";
+ echo "\$('progressbar').style.width='100%';\n";
+ unlink_if_exists("/tmp/install_complete");
+ return;
+ }
+ $running_old = trim(file_get_contents("/tmp/installer_installer_running"));
+ if($installer_running <> "running") {
+ $ps_running = exec("/bin/ps awwwux | /usr/bin/grep -v grep | /usr/bin/grep 'sh /tmp/installer.sh'");
+ if($ps_running) {
+ $running = "\$('installerrunning').innerHTML='<table><tr><td valign=\"middle\"><img src=\"/themes/{$g['theme']}/images/misc/loader.gif\"></td><td valign=\"middle\">&nbsp;<font size=\"2\"><b>Installer running ({$progress}% completed)...</td></tr></table>'; ";
+ if($running_old <> $running) {
+ echo $running;
+ file_put_contents("/tmp/installer_installer_running", "$running");
+ }
+ }
+ }
+ if($progress)
+ echo "\$('progressbar').style.width='{$progress}%';\n";
+ if(file_exists("/tmp/install_complete")) {
+ echo "\$('installerrunning').innerHTML='<img class=\"infoboxnpimg\" src=\"/themes/{$g['theme']}/images/icons/icon_exclam.gif\"> <font size=\"+1\">Installation completed. Please <a href=\"/reboot.php\">reboot</a> to continue';\n";
+ echo "\$('pbdiv').Fade();\n";
+ unlink_if_exists("/tmp/installer.sh");
+ file_put_contents("/tmp/installer_installer_running", "finished");
+ }
+}
+
+function update_installer_status_win($status) {
+ global $g, $fstype, $savemsg;
+ echo "<script type=\"text/javascript\">\n";
+ echo " \$('installeroutput').value = '" . str_replace(htmlentities($status), "\n", "") . "';\n";
+ echo "</script>\n";
+}
+
+function begin_install() {
+ global $g, $savemsg;
+ if(file_exists("/tmp/install_complete"))
+ return;
+ unlink_if_exists("/tmp/install_complete");
+ update_installer_status_win(sprintf(gettext("Beginning installation on disk %s."),$disk));
+ start_installation();
+}
+
+function head_html() {
+ global $g, $fstype, $savemsg;
+ echo <<<EOF
+<html>
+ <head>
+ <style type='text/css'>
+ hr {
+ border: 0;
+ color: #000000;
+ background-color: #000000;
+ height: 1px;
+ width: 100%;
+ text-align: left;
+ }
+ a:link {
+ color: #000000;
+ text-decoration:underline;
+ font-size:14;
+ }
+ a:visited {
+ color: #000000;
+ text-decoration:underline;
+ font-size:14;
+ }
+ a:hover {
+ color: #FFFF00;
+ text-decoration: none;
+ font-size:14;
+ }
+ a:active {
+ color: #FFFF00;
+ text-decoration:underline;
+ font-size:14;
+ }
+ </style>
+ </head>
+EOF;
+
+}
+
+function body_html() {
+ global $g, $fstype, $savemsg;
+ $pfSversion = str_replace("\n", "", file_get_contents("/etc/version"));
+ if(strstr($pfSversion, "1.2"))
+ $one_two = true;
+ $pgtitle = array("{$g['product_name']}", gettext("Installer"));
+ include("head.inc");
+ echo <<<EOF
+ <body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <script src="/javascript/scriptaculous/prototype.js" type="text/javascript"></script>
+ <script src="/javascript/scriptaculous/scriptaculous.js" type="text/javascript"></script>
+ <script type="text/javascript">
+ function getinstallerprogress() {
+ url = '/installer/installer.php';
+ pars = 'state=update_installer_status';
+ callajax(url, pars, installcallback);
+ }
+ function callajax(url, pars, activitycallback) {
+ var myAjax = new Ajax.Request(
+ url,
+ {
+ method: 'post',
+ parameters: pars,
+ onComplete: activitycallback
+ });
+ }
+ function installcallback(transport) {
+ setTimeout('getinstallerprogress()', 2000);
+ eval(transport.responseText);
+ }
+ </script>
+EOF;
+
+ if($one_two)
+ echo "<p class=\"pgtitle\">{$pgtitle}</font></p>";
+
+ if ($savemsg) print_info_box($savemsg);
+}
+
+function end_html() {
+ global $g, $fstype, $savemsg;
+ echo "</form>";
+ echo "</body>";
+ echo "</html>";
+}
+
+function template() {
+ global $g, $fstype, $savemsg;
+ head_html();
+ body_html();
+ echo <<<EOF
+ <div id="mainlevel">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="tabcont" >
+ <form action="installer.php" method="post">
+ <div id="pfsensetemplate">
+
+
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+EOF;
+ end_html();
+}
+
+function verify_before_install() {
+ global $g, $fstype, $savemsg;
+ $encrypted_root = false;
+ $non_encrypted_boot = false;
+ $non_encrypted_notice = false;
+ head_html();
+ body_html();
+ page_table_start($g['product_name'] . " installer - Verify final installation settings");
+ // If we are visiting this step from anything but the row editor / custom install
+ // then load the on disk layout contents if they are available.
+ if(!$_REQUEST['fstype0'] && file_exists("/tmp/webInstaller_disk_layout.txt")) {
+ $disks = unserialize(file_get_contents("/tmp/webInstaller_disk_layout.txt"));
+ $bootmanager = unserialize(file_get_contents("/tmp/webInstaller_disk_bootmanager.txt"));
+ $restored_layout_from_file = true;
+ $restored_layout_txt = "The previous disk layout was restored from disk";
+ } else {
+ $disks = array();
+ }
+ if(!$bootmanager)
+ $bootmanager = $_REQUEST['bootmanager'];
+ echo "\n<!--" . print_r($_REQUEST, true) . " -->\n";
+ $disk = pcsysinstall_get_disk_info(htmlspecialchars($_REQUEST['disk']));
+ $disksize = format_bytes($disk['size'] * 1048576);
+ // Loop through posted items and create an array
+ for($x=0; $x<99; $x++) { // XXX: Make this more optimal
+ if(!$_REQUEST['fstype' . $x])
+ continue;
+ $tmparray = array();
+ if($_REQUEST['fstype' . $x] <> "SWAP") {
+ $tmparray['mountpoint'] = $_REQUEST['mountpoint' . $x];
+ // Check for encrypted slice /
+ if(stristr($_REQUEST['fstype' . $x], ".eli")) {
+ if($tmparray['mountpoint'] == "/")
+ $encrypted_root = true;
+ }
+ // Check if we have a non-encrypted /boot
+ if($tmparray['mountpoint'] == "/boot") {
+ if(!stristr($_REQUEST['fstype' . $x], ".eli"))
+ $non_encrypted_boot = true;
+ }
+ if($tmparray['mountpoint'] == "/conf") {
+ $tmparray['mountpoint'] = "/conf{$x}";
+ $error_txt[] = "/conf is not an allowed mount point and has been renamed to /conf{$x}.";
+ }
+ } else {
+ $tmparray['mountpoint'] = "none";
+ }
+ // If we have an encrypted /root and lack a non encrypted /boot, throw an error/warning
+ if($encrypted_root && !$non_encrypted_boot && !$non_encrypted_notice) {
+ $error_txt[] = "A non-encrypted /boot slice is required when encrypting the / slice";
+ $non_encrypted_notice = true;
+ }
+ $tmparray['disk'] = $_REQUEST['disk' . $x];
+ $tmparray['fstype'] = $_REQUEST['fstype' . $x];
+ $tmparray['size'] = $_REQUEST['size' . $x];
+ $tmparray['encpass'] = $_REQUEST['encpass' . $x];
+ $disks[] = $tmparray;
+ }
+ echo "\n<!-- " . print_r($disks, true) . " --> \n";
+ $bootmanagerupper = strtoupper($bootmanager);
+ echo <<<EOFAMBAC
+ <form method="post" action="installer.php">
+ <input type="hidden" name="fstype" value="{$fstype_echo}">
+ <input type="hidden" name="disk" value="{$disk_echo}">
+ <input type="hidden" name="state" value="begin_install">
+ <input type="hidden" name="swapsize" value="{$swapsize}">
+ <input type="hidden" name="encpass" value="{$encpass}">
+ <input type="hidden" name="bootmanager" value="{$bootmanager}">
+ <div id="mainlevel">
+ <table width="800" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td >
+ <div>
+ <center>
+ <div id="pfsensetemplate">
+ <table width='100%'>
+EOFAMBAC;
+ // If errors are found, throw the big red box.
+ if ($error_txt) {
+ echo "<tr><td colspan=\"5\">&nbsp;</td>";
+ echo "<tr><td colspan=\"5\">";
+ print_input_errors($error_txt);
+ echo "</td></tr>";
+ } else
+ echo "<tr><td>&nbsp;</td></tr>";
+
+ echo <<<EOFAMBACBAF
+
+ <tr><td colspan='5' align="center"><b>Boot manager: {$bootmanagerupper}</td></tr>
+ <tr><td>&nbsp;</td></tr>
+ <tr>
+ <td align='left'>
+ <b>Mount point</b>
+ </td>
+ <td align='left'>
+ <b>Filesysytem type</b>
+ </td>
+ <td align='left'>
+ <b>Disk</b>
+ </td>
+ <td align='left'>
+ <b>Size</b>
+ </td>
+ <td align='left'>
+ <b>Encryption password</b>
+ </td>
+ </tr>
+ <tr><td colspan='5'><hr></td></tr>
+
+EOFAMBACBAF;
+
+ foreach($disks as $disk) {
+ $desc = pcsysinstall_get_disk_info($disk['disk']);
+ echo "<tr>";
+ echo "<td>&nbsp;&nbsp;&nbsp;{$disk['mountpoint']}</td>";
+ echo "<td>{$disk['fstype']}</td>";
+ echo "<td>{$disk['disk']} {$desc['desc']}</td>";
+ echo "<td>{$disk['size']}</td>";
+ echo "<td>{$disk['encpass']}</td>";
+ echo "</tr>";
+ }
+
+echo <<<EOFAMB
+ <tr><td colspan="5"><hr></td></tr>
+ </table>
+ </div>
+ </center>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <center>
+ <p/>
+ <input type="button" value="Cancel" onClick="javascript:document.location='installer.php?state=custominstall';"> &nbsp;&nbsp;
+EOFAMB;
+ if(!$error_txt)
+ echo "<input type=\"submit\" value=\"Begin installation\"> <br/>&nbsp;";
+echo <<<EOFAMBASDF
+
+ </center>
+ </td>
+ </tr>
+ </table>
+ </div>
+EOFAMBASDF;
+
+
+ page_table_end();
+ end_html();
+ write_out_pc_sysinstaller_config($disks, $bootmanager);
+ // Serialize layout to disk so it can be read in later.
+ file_put_contents("/tmp/webInstaller_disk_layout.txt", serialize($disks));
+ file_put_contents("/tmp/webInstaller_disk_bootmanager.txt", serialize($bootmanager));
+}
+
+function installing_gui() {
+ global $g, $fstype, $savemsg;
+ head_html();
+ body_html();
+ echo "<form action=\"installer.php\" method=\"post\" state=\"step1_post\">";
+ page_table_start();
+ echo <<<EOF
+ <center>
+ <table width="100%">
+ <tr><td>
+ <div id="mainlevel">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <div id="pfsenseinstaller" width="100%">
+ <div id='installerrunning' width='100%' style="padding:8px; border:1px dashed #000000">
+ <table>
+ <tr>
+ <td valign="middle">
+ <img src="/themes/{$g['theme']}/images/misc/loader.gif">
+ </td>
+ <td valign="middle">
+ &nbsp;<font size="2"><b>Starting Installer... Please wait...
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id='pbdiv'>
+ <br/>
+ <center>
+ <table id='pbtable' height='15' width='640' border='0' colspacing='0' cellpadding='0' cellspacing='0'>
+ <tr>
+ <td background="/themes/the_wall/images/misc/bar_left.gif" height='15' width='5'>
+ </td>
+ <td>
+ <table id="progholder" name="progholder" height='15' width='630' border='0' colspacing='0' cellpadding='0' cellspacing='0'>
+ <td background="/themes/the_wall/images/misc/bar_gray.gif" valign="top" align="left">
+ <img src='/themes/the_wall/images/misc/bar_blue.gif' width='0' height='15' name='progressbar' id='progressbar'>
+ </td>
+ </table>
+ </td>
+ <td background="/themes/the_wall/images/misc/bar_right.gif" height='15' width='5'>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </div>
+ <textarea name='installeroutput' id='installeroutput' rows="31" cols="90">
+ </textarea>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td></tr>
+ </table>
+ </center>
+ <script type="text/javascript">setTimeout('getinstallerprogress()', 250);</script>
+
+EOF;
+ page_table_end();
+ end_html();
+}
+
+function page_table_start($pgtitle = "") {
+ global $g, $fstype, $savemsg;
+ if($pgtitle == "")
+ $pgtitle = "{$g['product_name']} installer";
+ echo <<<EOF
+ <center>
+ <img border="0" src="/themes/{$g['theme']}/images/logo.gif"></a><br/>
+ <table cellpadding="6" cellspacing="0" width="550" style="border:1px solid #000000">
+ <tr height="10" bgcolor="#990000">
+ <td style="border-bottom:1px solid #000000">
+ <font color='white'>
+ <b>
+ {$pgtitle}
+ </b>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td>
+
+EOF;
+
+}
+
+function page_table_end() {
+ global $g, $fstype, $savemsg;
+ echo <<<EOF
+ </td>
+ </tr>
+ </table>
+ </center>
+
+EOF;
+
+}
+
+function installer_custom() {
+ global $g, $fstype, $savemsg;
+ global $select_txt, $custom_disks;
+ if(file_exists("/tmp/.pc-sysinstall/pc-sysinstall.log"))
+ unlink("/tmp/.pc-sysinstall/pc-sysinstall.log");
+ $disks = installer_find_all_disks();
+ // Pass size of disks down to javascript.
+ $disk_sizes_js_txt = "var disk_sizes = new Array();\n";
+ foreach($disks as $disk)
+ $disk_sizes_js_txt .= "disk_sizes['{$disk['disk']}'] = '{$disk['size']}';\n";
+ head_html();
+ body_html();
+ page_table_start($g['product_name'] . " installer - Customize disk(s) layout");
+ echo <<<EOF
+ <script type="text/javascript">
+ Array.prototype.in_array = function(p_val) {
+ for(var i = 0, l = this.length; i < l; i++) {
+ if(this[i] == p_val) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function row_helper_dynamic_custom() {
+ var totalsize = 0;
+ {$disk_sizes_js_txt}
+ // Run through all rows and process data
+ for(var x = 0; x<99; x++) { //optimize me better
+ if(\$('fstype' + x)) {
+ if(\$('size' + x).value == '')
+ \$('size' + x).value = disk_sizes[\$('disk' + x).value];
+ var fstype = \$F('fstype' + x);
+ if(fstype.substring(fstype.length - 4) == ".eli") {
+ \$('encpass' + x).disabled = 0;
+ if(!encryption_warning_shown) {
+ alert('NOTE: If you define a disk encryption password you will need to enter it on *EVERY* bootup!');
+ encryption_warning_shown = true;
+ }
+ } else {
+ \$('encpass' + x).disabled = 1;
+ }
+ }
+ // Calculate size allocations
+ if(\$('size' + x)) {
+ if(parseInt($('size' + x).value) > 0)
+ totalsize += parseInt($('size' + x).value);
+ }
+ }
+ // If the totalsize element exists, set it and disable
+ if(\$('totalsize')) {
+ if(\$('totalsize').value != totalsize) {
+ // When size allocation changes, draw attention.
+ new Effect.Highlight('totalsize');
+ \$('totalsize').value = totalsize;
+ }
+ \$('totalsize').disabled = 1;
+ }
+ if(\$('disktotals')) {
+ var disks_seen = new Array();
+ var tmp_sizedisks = 0;
+ var disksseen = 0;
+ for(var xx = 0; xx<99; xx++) {
+ if(\$('disk' + xx)) {
+ if(!disks_seen.in_array(\$('disk' + xx).value)) {
+ tmp_sizedisks += parseInt(disk_sizes[\$('disk' + xx).value]);
+ disks_seen[disksseen] = \$('disk' + xx).value;
+ disksseen++;
+ }
+ }
+ \$('disktotals').value = tmp_sizedisks;
+ \$('disktotals').disabled = 1;
+ \$('disktotals').setStyle({color:'#000000'});
+ var remaining = parseInt(\$('disktotals').value) - parseInt(\$('totalsize').value);
+ if(remaining == 0) {
+ if(\$('totalsize'))
+ \$('totalsize').setStyle({
+ background:'#00FF00',
+ color:'#000000'
+ });
+ } else {
+ if(\$('totalsize'))
+ \$('totalsize').setStyle({
+ background:'#FFFFFF',
+ color:'#000000'
+ });
+ }
+ if(parseInt(\$('totalsize').value) > parseInt(\$('disktotals').value)) {
+ if(\$('totalsize'))
+ \$('totalsize').setStyle({
+ background:'#FF0000',
+ color:'#000000'
+ });
+ }
+ if(\$('availalloc')) {
+ \$('availalloc').disabled = 1;
+ \$('availalloc').value = remaining;
+ \$('availalloc').setStyle({
+ background:'#FFFFFF',
+ color:'#000000'
+ });
+ }
+ }
+ }
+ }
+ </script>
+ <script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
+ <script type="text/javascript">
+ // Setup rowhelper data types
+ rowname[0] = "mountpoint";
+ rowtype[0] = "textbox";
+ rowsize[0] = "8";
+ rowname[1] = "fstype";
+ rowtype[1] = "select";
+ rowsize[1] = "1";
+ rowname[2] = "disk";
+ rowtype[2] = "select";
+ rowsize[2] = "1";
+ rowname[3] = "size";
+ rowtype[3] = "textbox";
+ rowsize[3] = "8";
+ rowname[4] = "encpass";
+ rowtype[4] = "textbox";
+ rowsize[4] = "8";
+ field_counter_js = 5;
+ rows = 1;
+ totalrows = 1;
+ loaded = 1;
+ rowhelper_onChange = " onChange='javascript:row_helper_dynamic_custom()' ";
+ rowhelper_onDelete = "row_helper_dynamic_custom(); ";
+ rowhelper_onAdd = "row_helper_dynamic_custom();";
+ </script>
+ <form action="installer.php" method="post">
+ <input type="hidden" name="state" value="verify_before_install">
+ <div id="mainlevel">
+ <center>
+ <table width="100%" border="0" cellpadding="5" cellspacing="0">
+ <tr>
+ <td>
+ <center>
+ <div id="mainarea">
+ <center>
+ <table width="100%" border="0" cellpadding="5" cellspacing="5">
+ <tr>
+ <td>
+ <div id="pfsenseinstaller">
+ <center>
+ <div id='loadingdiv'>
+ <table>
+ <tr>
+ <td valign="center">
+ <img src="/themes/{$g['theme']}/images/misc/loader.gif">
+ </td>
+ <td valign="center">
+ &nbsp;Probing disks, please wait...
+ </td>
+ </tr>
+ </table>
+ </div>
+EOF;
+ ob_flush();
+ // Read bootmanager setting from disk if found
+ if(file_exists("/tmp/webInstaller_disk_bootmanager.txt"))
+ $bootmanager = unserialize(file_get_contents("/tmp/webInstaller_disk_bootmanager.txt"));
+ if($bootmanager == "none")
+ $noneselected = " SELECTED";
+ if($bootmanager == "bsd")
+ $bsdeselected = " SELECTED";
+ if(!$disks) {
+ $custom_txt = gettext("ERROR: Could not find any suitable disks for installation.");
+ } else {
+ // Prepare disk selection dropdown
+ $custom_txt = <<<EOF
+ <center>
+ <table>
+ <tr>
+ <td align='right'>
+ Boot manager:
+ </td>
+ <td>
+ <select name='bootmanager'>
+ <option value='none' $noneselected>
+ None
+ </option>
+ <option value='bsd' $bsdeselected>
+ BSD
+ </option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <hr>
+ <table id='maintable'><tbody>
+ <tr>
+ <td align="middle">
+ <b>Mount</b>
+ </td>
+ <td align='middle'>
+ <b>Filesysytem</b>
+ </td>
+ <td align="middle">
+ <b>Disk</b>
+ </td>
+ <td align="middle">
+ <b>Size</b>
+ </td>
+ <td align="middle">
+ <b>Encryption password</b>
+ </td>
+ <td>
+ &nbsp;
+ </td>
+ </tr>
+ <tr>
+
+EOF;
+
+ // Calculate swap disk sizes
+ $memory = get_memory();
+ $swap_size = $memory[0] * 2;
+ $first_disk = trim(installer_find_first_disk());
+ $disk_info = pcsysinstall_get_disk_info($first_disk);
+ $size = $disk_info['size'];
+ $first_disk_size = $size - $swap_size;
+
+ // Debugging
+ echo "\n\n<!-- $first_disk - " . print_r($disk_info, true) . " - $size - $first_disk_size -->\n\n";
+
+ // Check to see if a on disk layout exists
+ if(file_exists("/tmp/webInstaller_disk_layout.txt")) {
+ $disks_restored = unserialize(file_get_contents("/tmp/webInstaller_disk_layout.txt"));
+ $restored_layout_from_file = true;
+ $restored_layout_txt = "<br/>* The previous disk layout was restored from a previous session";
+ }
+
+ // If we restored disk layout(s) from a file then build the rows
+ if($restored_layout_from_file == true) {
+ $diskcounter = 0;
+ foreach($disks_restored as $dr) {
+ $custom_txt .= return_rowhelper_row("$diskcounter", $dr['mountpoint'], $dr['fstype'], $dr['disk'], $dr['size'], $dr['encpass']);
+ $diskcounter++;
+ }
+ } else {
+ // Construct the default rows that outline the disks configuration.
+ $custom_txt .= return_rowhelper_row("0", "/", "UFS+S", $first_disk, "{$first_disk_size}", "");
+ $custom_txt .= return_rowhelper_row("1", "none", "SWAP", $first_disk, "$swap_size", "");
+ }
+
+ // tfoot and tbody are used by rowhelper
+ $custom_txt .= "</tr>";
+ $custom_txt .= "<tfoot></tfoot></tbody>";
+ // Total allocation box
+ $custom_txt .= "<tr><td></td><td></td><td align='right'>Total allocated:</td><td><input style='border:0px; background-color: #FFFFFF;' size='8' id='totalsize' name='totalsize'></td>";
+ // Add row button
+ $custom_txt .= "</td><td>&nbsp;</td><td>";
+ $custom_txt .= "<div id=\"addrowbutton\">";
+ $custom_txt .= "<a onclick=\"javascript:addRowTo('maintable', 'formfldalias'); return false;\" href=\"#\">";
+ $custom_txt .= "<img border=\"0\" src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" alt=\"\" title=\"add another entry\" /></a>";
+ $custom_txt .= "</div>";
+ $custom_txt .= "</td></tr>";
+ // Disk capacity box
+ $custom_txt .= "<tr><td></td><td></td><td align='right'>Disk(s) capacity total:</td><td><input style='border:0px; background-color: #FFFFFF;' size='8' id='disktotals' name='disktotals'></td></tr>";
+ // Remaining allocation box
+ $custom_txt .= "<tr><td></td><td></td><td align='right'>Available space for allocation:</td><td><input style='border:0px; background-color: #FFFFFF;' size='8' id='availalloc' name='availalloc'></td></tr>";
+ $custom_txt .= "</table>";
+ $custom_txt .= "<script type=\"text/javascript\">row_helper_dynamic_custom();</script>";
+ }
+ echo <<<EOF
+
+ <tr>
+ <td colspan='4'>
+ <script type="text/javascript">
+ \$('loadingdiv').style.visibility='hidden';
+ </script>
+ <div id='contentdiv' style="display:none;">
+ <p/>
+ {$custom_txt}<p/>
+ <hr><p/>
+ <input type="button" value="Cancel" onClick="javascript:document.location='/installer/installer.php';"> &nbsp;&nbsp
+ <input type="submit" value="Next">
+ </div>
+ <script type="text/javascript">
+ var encryption_warning_shown = false;
+ \$('contentdiv').appear();
+ row_helper_dynamic_custom();
+ </script>
+ </center>
+ </td></tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </center>
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ NOTES:
+ </strong>
+ </span>
+ <br/>* Sizes are in megabytes.
+ <br/>* Mount points named /conf are not allowed. Use /cf if you want to make a configuration slice/mount.
+ {$restored_layout_txt}
+ </span>
+ </strong>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </center>
+ <script type="text/javascript">
+ <!--
+ newrow[1] = "{$select_txt}";
+ newrow[2] = "{$custom_disks}";
+ -->
+ </script>
+
+
+EOF;
+ page_table_end();
+ end_html();
+}
+
+function installer_main() {
+ global $g, $fstype, $savemsg;
+ if(file_exists("/tmp/.pc-sysinstall/pc-sysinstall.log"))
+ unlink("/tmp/.pc-sysinstall/pc-sysinstall.log");
+ head_html();
+ body_html();
+ $disk = installer_find_first_disk();
+ // Only enable ZFS if this exists. The install will fail otherwise.
+ if(file_exists("/boot/gptzfsboot"))
+ $zfs_enabled = "<tr bgcolor=\"#9A9A9A\"><td align=\"center\"><a href=\"installer.php?state=easy_install_zfs\">Easy installation of {$g['product_name']} using the ZFS filesystem on disk {$disk}</a></td></tr>";
+ page_table_start();
+ echo <<<EOF
+ <form action="installer.php" method="post" state="step1_post">
+ <div id="mainlevel">
+ <center>
+ <b><font face="arial" size="+2">Welcome to the {$g['product_name']} webInstaller!</b></font><p/>
+ <font face="arial" size="+1">This utility will install {$g['product_name']} to a hard disk, flash drive, etc.</font>
+ <table width="100%" border="0" cellpadding="5" cellspacing="0">
+ <tr>
+ <td>
+ <center>
+ <div id="mainarea">
+ <br/>
+ <center>
+ Please select an installer option to begin:
+ <p/>
+ <table width="100%" border="0" cellpadding="5" cellspacing="5">
+ <tr>
+ <td>
+ <div id="pfsenseinstaller">
+ <center>
+EOF;
+ if(!$disk) {
+ echo gettext("ERROR: Could not find any suitable disks for installation.");
+ echo "</div></td></tr></table></div></table></div>";
+ end_html();
+ exit;
+ }
+ echo <<<EOF
+
+ <table cellspacing="5" cellpadding="5" style="border: 1px dashed;">
+ <tr bgcolor="#CECECE"><td align="center">
+ <a href="installer.php?state=easy_install_ufs">Easy installation of {$g['product_name']} using the UFS filesystem on disk {$disk}</a>
+ </td></tr>
+ {$zfs_enabled}
+ <tr bgcolor="#AAAAAA"><td align="center">
+ <a href="installer.php?state=custominstall">Custom installation of {$g['product_name']}</a>
+ </td></tr>
+ <tr bgcolor="#CECECE"><td align="center">
+ <a href='/'>Cancel and return to Dashboard</a>
+ </td></tr>
+ </table>
+ </center>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+EOF;
+ page_table_end();
+ end_html();
+}
+
+function return_rowhelper_row($rownum, $mountpoint, $fstype, $disk, $size, $encpass) {
+ global $g, $select_txt, $custom_disks, $savemsg;
+ $release = php_uname("r");
+ $release = trim($release[0]);
+
+ // Mount point
+ $disks = installer_find_all_disks();
+ $custom_txt .= "<tr>";
+ $custom_txt .= "<td><input size='8' id='mountpoint{$rownum}' name='mountpoint{$rownum}' value='{$mountpoint}'></td>";
+
+ // Filesystem type array
+ $types = array(
+ 'UFS' => 'UFS',
+ 'UFS+S' => 'UFS + Softupdates',
+ 'UFS.eli' => 'Encrypted UFS',
+ 'UFS+S.eli' => 'Encrypted UFS + Softupdates',
+ 'SWAP' => 'SWAP'
+ );
+
+ // UFS + Journaling was introduced in 9.0
+ if($release == "9") {
+ $types['UFS+J'] = "UFS + Journaling";
+ $types['UFS+J.eli'] = "Encrypted UFS + Journaling";
+ }
+
+ // Add ZFS Boot loader if it exists
+ if(file_exists("/boot/gptzfsboot")) {
+ $types['ZFS'] = "Zetabyte Filesystem";
+ $types['ZFS.eli'] = "Encrypted Zetabyte Filesystem";
+ }
+
+ // fstype form field
+ $custom_txt .= "<td><select onChange='javascript:row_helper_dynamic_custom()' id='fstype{$rownum}' name='fstype{$rownum}'>";
+ $select_txt = "";
+ foreach($types as $type => $desc) {
+ if($type == $fstype)
+ $SELECTED="SELECTED";
+ else
+ $SELECTED="";
+ $select_txt .= "<option value='$type' $SELECTED>$desc</option>";
+ }
+ $custom_txt .= "{$select_txt}</select>\n";
+ $custom_txt .= "</td>";
+
+ // Disk selection form field
+ $custom_txt .= "<td><select id='disk{$rownum}' name='disk{$rownum}'>\n";
+ $custom_disks = "";
+ foreach($disks as $dsk) {
+ $disksize_bytes = format_bytes($dsk['size'] * 1048576);
+ $disksize = $dsk['size'];
+ if($disk == $dsk['disk'])
+ $SELECTED="SELECTED";
+ else
+ $SELECTED="";
+ $custom_disks .= "<option value='{$dsk['disk']}' $SELECTED>{$dsk['disk']} - {$dsk['desc']} - {$disksize}MB ({$disksize_bytes})</option>";
+ }
+ $custom_txt .= "{$custom_disks}</select></td>\n";
+
+ // Slice size
+ $custom_txt .= "<td><input onChange='javascript:row_helper_dynamic_custom();' name='size{$rownum}' id='size{$rownum}' size='8' type='text' value='{$size}'></td>";
+
+ // Encryption password
+ $custom_txt .= "<td>";
+ $custom_txt .= "<input id='encpass{$rownum}' name='encpass{$rownum}' size='8' value='{$encpass}'>";
+ $custom_txt .= "</td>";
+
+ // Add Rowhelper + button
+ if($rownum > 0)
+ $custom_txt .= "<td><a onclick=\"removeRow(this); return false;\" href=\"#\"><img border=\"0\" src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" alt=\"\" title=\"remove this entry\"/></a></td>";
+
+ $custom_txt .= "</tr>";
+ return $custom_txt;
+}
+
+?> \ No newline at end of file
diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php
index 2d821ab..98d449b 100755
--- a/usr/local/www/interfaces.php
+++ b/usr/local/www/interfaces.php
@@ -759,15 +759,15 @@ function handle_wireless_post() {
$config['wireless']['interfaces'][$wlanbaseif] = array();
} else if (isset($config['wireless']['interfaces'][$wlanbaseif]))
unset($config['wireless']['interfaces'][$wlanbaseif]);
- if (isset($_POST['diversity']) && $_POST['diversity'] != "")
+ if (isset($_POST['diversity']) && is_numeric($_POST['diversity']))
$wancfg['wireless']['diversity'] = $_POST['diversity'];
else if (isset($wancfg['wireless']['diversity']))
unset($wancfg['wireless']['diversity']);
- if (isset($_POST['txantenna']) && $_POST['txantenna'] != "")
+ if (isset($_POST['txantenna']) && is_numeric($_POST['txantenna']))
$wancfg['wireless']['txantenna'] = $_POST['txantenna'];
else if (isset($wancfg['wireless']['txantenna']))
unset($wancfg['wireless']['txantenna']);
- if (isset($_POST['rxantenna']) && $_POST['rxantenna'] != "")
+ if (isset($_POST['rxantenna']) && is_numeric($_POST['rxantenna']))
$wancfg['wireless']['rxantenna'] = $_POST['rxantenna'];
else if (isset($wancfg['wireless']['rxantenna']))
unset($wancfg['wireless']['rxantenna']);
@@ -1653,9 +1653,9 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
<td>
<?=gettext("Diversity"); ?><br/>
<select name="diversity" class="formselect" id="diversity">
- <option <?php if (empty($pconfig['diversity'])) echo "selected"; ?> value=""><?=gettext("Default"); ?></option>
- <option <?php if ($pconfig['diversity'] == '0') echo "selected"; ?> value="0"><?=gettext("Off"); ?></option>
- <option <?php if ($pconfig['diversity'] == '1') echo "selected"; ?> value="1"><?=gettext("On"); ?></option>
+ <option <?php if (!isset($pconfig['diversity'])) echo "selected"; ?> value=""><?=gettext("Default"); ?></option>
+ <option <?php if ($pconfig['diversity'] === '0') echo "selected"; ?> value="0"><?=gettext("Off"); ?></option>
+ <option <?php if ($pconfig['diversity'] === '1') echo "selected"; ?> value="1"><?=gettext("On"); ?></option>
</select>
</td>
<td>&nbsp;&nbsp</td>
@@ -1664,10 +1664,10 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
<td>
<?=gettext("Transmit antenna"); ?><br/>
<select name="txantenna" class="formselect" id="txantenna">
- <option <?php if (empty($pconfig['txantenna'])) echo "selected"; ?> value=""><?=gettext("Default"); ?></option>
- <option <?php if ($pconfig['txantenna'] == '0') echo "selected"; ?> value="0"><?=gettext("Auto"); ?></option>
- <option <?php if ($pconfig['txantenna'] == '1') echo "selected"; ?> value="1"><?=gettext("#1"); ?></option>
- <option <?php if ($pconfig['txantenna'] == '2') echo "selected"; ?> value="2"><?=gettext("#2"); ?></option>
+ <option <?php if (!isset($pconfig['txantenna'])) echo "selected"; ?> value=""><?=gettext("Default"); ?></option>
+ <option <?php if ($pconfig['txantenna'] === '0') echo "selected"; ?> value="0"><?=gettext("Auto"); ?></option>
+ <option <?php if ($pconfig['txantenna'] === '1') echo "selected"; ?> value="1"><?=gettext("#1"); ?></option>
+ <option <?php if ($pconfig['txantenna'] === '2') echo "selected"; ?> value="2"><?=gettext("#2"); ?></option>
</select>
</td>
<td>&nbsp;&nbsp</td>
@@ -1676,10 +1676,10 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
<td>
<?=gettext("Receive antenna"); ?><br/>
<select name="rxantenna" class="formselect" id="rxantenna">
- <option <?php if (empty($pconfig['rxantenna'])) echo "selected"; ?> value=""><?=gettext("Default"); ?></option>
- <option <?php if ($pconfig['rxantenna'] == '0') echo "selected"; ?> value="0"><?=gettext("Auto"); ?></option>
- <option <?php if ($pconfig['rxantenna'] == '1') echo "selected"; ?> value="1"><?=gettext("#1"); ?></option>
- <option <?php if ($pconfig['rxantenna'] == '2') echo "selected"; ?> value="2"><?=gettext("#2"); ?></option>
+ <option <?php if (!isset($pconfig['rxantenna'])) echo "selected"; ?> value=""><?=gettext("Default"); ?></option>
+ <option <?php if ($pconfig['rxantenna'] === '0') echo "selected"; ?> value="0"><?=gettext("Auto"); ?></option>
+ <option <?php if ($pconfig['rxantenna'] === '1') echo "selected"; ?> value="1"><?=gettext("#1"); ?></option>
+ <option <?php if ($pconfig['rxantenna'] === '2') echo "selected"; ?> value="2"><?=gettext("#2"); ?></option>
</select>
</td>
<?php endif; ?>
@@ -1963,7 +1963,7 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
<td class="vtable">
<input name="ieee8021x" type="checkbox" value="yes" class="formfld" id="ieee8021x" <?php if ($pconfig['ieee8021x']) echo "checked";?>>
<br/><?=gettext("Setting this option will enable 802.1x authentication."); ?>
- <br/><span class="red"><strong><?=gettext("NOTE"); ?>:</strong</span> <?=gettext("this option requires checking the \"Enable WPA box\"."); ?>
+ <br/><span class="red"><strong><?=gettext("NOTE"); ?>:</strong></span> <?=gettext("this option requires checking the \"Enable WPA box\"."); ?>
</td>
</tr>
<tr>
diff --git a/usr/local/www/interfaces_assign.php b/usr/local/www/interfaces_assign.php
index 340ee78..3d2cec0 100755
--- a/usr/local/www/interfaces_assign.php
+++ b/usr/local/www/interfaces_assign.php
@@ -191,6 +191,12 @@ if ($_POST['apply']) {
}
}
+ if (is_array($config['vlans']['vlan'])) {
+ foreach ($config['vlans']['vlan'] as $vlan) {
+ if (does_interface_exist($vlan['if']) == false)
+ $input_errors[] = "Vlan parent interface {$vlan['if']} does not exist anymore so vlan id {$vlan['tag']} cannot be created please fix the issue before continuing.";
+ }
+ }
if (!$input_errors) {
/* No errors detected, so update the config */
diff --git a/usr/local/www/interfaces_bridge_edit.php b/usr/local/www/interfaces_bridge_edit.php
index 06d5b94..ec48bc9 100644
--- a/usr/local/www/interfaces_bridge_edit.php
+++ b/usr/local/www/interfaces_bridge_edit.php
@@ -46,6 +46,10 @@ if (!is_array($config['bridges']['bridged']))
$a_bridges = &$config['bridges']['bridged'];
$ifacelist = get_configured_interface_with_descr();
+foreach ($ifacelist as $bif => $bdescr) {
+ if (substr(get_real_interface($bif), 0, 3) == "gre")
+ unset($ifacelist[$bif]);
+}
$id = $_GET['id'];
if (isset($_POST['id']))
diff --git a/usr/local/www/interfaces_gif_edit.php b/usr/local/www/interfaces_gif_edit.php
index 59bad8f..6744979 100644
--- a/usr/local/www/interfaces_gif_edit.php
+++ b/usr/local/www/interfaces_gif_edit.php
@@ -111,6 +111,10 @@ if ($_POST) {
write_config();
+ $confif = convert_real_interface_to_friendly_interface_name($gif['gifif']);
+ if ($confif <> "")
+ interface_configure($confif);
+
header("Location: interfaces_gif.php");
exit;
}
diff --git a/usr/local/www/interfaces_gre.php b/usr/local/www/interfaces_gre.php
index c9fa525..d9e19c2 100644
--- a/usr/local/www/interfaces_gre.php
+++ b/usr/local/www/interfaces_gre.php
@@ -110,7 +110,7 @@ include("head.inc");
<td width="10%" class="list"></td>
</tr>
<?php $i = 0; foreach ($a_gres as $gre): ?>
- <tr ondblclick="document.location='interfaces_vlan_gre.php?id=<?=$i;?>'">
+ <tr ondblclick="document.location='interfaces_gre_edit.php?id=<?=$i;?>'">
<td class="listlr">
<?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($gre['if']));?>
</td>
diff --git a/usr/local/www/interfaces_gre_edit.php b/usr/local/www/interfaces_gre_edit.php
index ce9f324..ca95369 100644
--- a/usr/local/www/interfaces_gre_edit.php
+++ b/usr/local/www/interfaces_gre_edit.php
@@ -114,6 +114,10 @@ if ($_POST) {
write_config();
+ $confif = convert_real_interface_to_friendly_interface_name($gre['greif']);
+ if ($confif <> "")
+ interface_configure($confif);
+
header("Location: interfaces_gre.php");
exit;
}
diff --git a/usr/local/www/interfaces_groups_edit.php b/usr/local/www/interfaces_groups_edit.php
index 253be67..2c193f6 100755
--- a/usr/local/www/interfaces_groups_edit.php
+++ b/usr/local/www/interfaces_groups_edit.php
@@ -93,7 +93,7 @@ if ($_POST) {
if (!$input_errors) {
$ifgroupentry = array();
$ifgroupentry['members'] = $members;
- $ifgroupentry['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
+ $ifgroupentry['descr'] = $_POST['descr'];
if (isset($id) && $a_ifgroups[$id] && $_POST['ifname'] != $a_ifgroups[$id]['ifname']) {
if (!empty($config['filter']) && is_array($config['filter']['rule'])) {
@@ -156,7 +156,7 @@ if ($_POST) {
header("Location: interfaces_groups.php");
exit;
} else {
- $pconfig['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
+ $pconfig['descr'] = $_POST['descr'];
$pconfig['members'] = $members;
}
}
diff --git a/usr/local/www/interfaces_lagg_edit.php b/usr/local/www/interfaces_lagg_edit.php
index b30853b..09dbf51 100644
--- a/usr/local/www/interfaces_lagg_edit.php
+++ b/usr/local/www/interfaces_lagg_edit.php
@@ -69,6 +69,9 @@ if (isset($_POST['id']))
if (isset($id) && $a_laggs[$id]) {
$pconfig['laggif'] = $a_laggs[$id]['laggif'];
$pconfig['members'] = $a_laggs[$id]['members'];
+ $laggiflist = explode(",", $a_laggs[$id]['members']);
+ foreach ($laggiflist as $tmpif)
+ unset($realifchecklist[get_real_interface($tmpif)]);
$pconfig['proto'] = $a_laggs[$id]['proto'];
$pconfig['descr'] = $a_laggs[$id]['descr'];
}
diff --git a/usr/local/www/interfaces_ppps_edit.php b/usr/local/www/interfaces_ppps_edit.php
index 46fb414..140b998 100644
--- a/usr/local/www/interfaces_ppps_edit.php
+++ b/usr/local/www/interfaces_ppps_edit.php
@@ -683,7 +683,7 @@ $types = array("select" => gettext("Select"), "ppp" => "PPP", "pppoe" => "PPPoE"
<td valign="top" class="vncell"><?= gettext("Dial On Demand"); ?></td>
<td class="vtable">
<input type="checkbox" value="on" id="ondemand" name="ondemand" <?php if (isset($pconfig['ondemand'])) echo "checked"; ?>> <?= gettext("Enable Dial-on-Demand mode"); ?>
- <br/> <span class="vexpl"><?= gettext("This option causes the interface to operate in dial-on-demand mode, allowing you to have a virtual full time connection. " .
+ <br/> <span class="vexpl"><?= gettext("This option causes the interface to operate in dial-on-demand mode. Do NOT enable if you want your link to be always up. " .
"The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."); ?> </span>
</td>
</tr>
@@ -779,7 +779,7 @@ $types = array("select" => gettext("Select"), "ppp" => "PPP", "pppoe" => "PPPoE"
<br> <span class="vexpl"><?=gettext("Set ONLY for MLPPP connections.");?> MRRU <?=gettext("will be auto-negotiated by default.");?></span>
</td>
</tr>
- </table
+ </table>
</td>
</tr><?php endfor; ?>
<tr>
diff --git a/usr/local/www/interfaces_qinq_edit.php b/usr/local/www/interfaces_qinq_edit.php
index e8b698e..2ffbac9 100755
--- a/usr/local/www/interfaces_qinq_edit.php
+++ b/usr/local/www/interfaces_qinq_edit.php
@@ -142,7 +142,7 @@ if ($_POST) {
if (!$input_errors) {
$qinqentry['members'] = $members;
- $qinqentry['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
+ $qinqentry['descr'] = $_POST['descr'];
$qinqentry['vlanif'] = "{$_POST['if']}_{$_POST['tag']}";
$nmembers = explode(" ", $members);
@@ -200,7 +200,7 @@ if ($_POST) {
header("Location: interfaces_qinq.php");
exit;
} else {
- $pconfig['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
+ $pconfig['descr'] = $_POST['descr'];
$pconfig['tag'] = $_POST['tag'];
$pconfig['members'] = $members;
}
diff --git a/usr/local/www/interfaces_vlan_edit.php b/usr/local/www/interfaces_vlan_edit.php
index 447722a..ea43508 100755
--- a/usr/local/www/interfaces_vlan_edit.php
+++ b/usr/local/www/interfaces_vlan_edit.php
@@ -96,6 +96,11 @@ if ($_POST) {
}
if (!$input_errors) {
+ if (isset($id) && $a_vlans[$id]) {
+ if ($a_vlans[$id]['if'] != $_POST['if'])
+ // Destroy previous vlan
+ pfSense_interface_destroy($a_vlans[$id]['if']);
+ }
$vlan = array();
$vlan['if'] = $_POST['if'];
$vlan['tag'] = $_POST['tag'];
diff --git a/usr/local/www/javascript/row_helper_dynamic.js b/usr/local/www/javascript/row_helper_dynamic.js
index bef6120..30312ba 100755
--- a/usr/local/www/javascript/row_helper_dynamic.js
+++ b/usr/local/www/javascript/row_helper_dynamic.js
@@ -1,14 +1,20 @@
// Global Variables
-var rowname = new Array(99);
-var rowtype = new Array(99);
-var newrow = new Array(99);
-var rowsize = new Array(99);
+var rowname = new Array(99);
+var rowtype = new Array(99);
+var newrow = new Array(99);
+var rowsize = new Array(99);
+
+// Global variables. Set to javascript code
+// that will be eval() after change, add & delete.
+var rowhelper_onChange = '';
+var rowhelper_onAdd = '';
+var rowhelper_onDelete = '';
for (i = 0; i < 99; i++) {
rowname[i] = '';
rowtype[i] = '';
- newrow[i] = '';
- rowsize[i] = '25';
+ newrow[i] = '';
+ rowsize[i] = '25';
}
var field_counter_js = 0;
@@ -30,17 +36,17 @@ var addRowTo = (function() {
if(typeof(rowtype[i]) == 'function') {
td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input>" + rowtype[i](rowname[i], objectSize, totalrows) + " ";
} else if(rowtype[i] == 'textbox') {
- td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input size='" + objectSize + "' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input " + rowhelper_onChange + " size='" + rowsize[i] + "' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
} else if(rowtype[i] == 'select') {
- td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
} else if(rowtype[i] == 'select_source') {
- td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
} else if(rowtype[i] == 'checkbox') {
- td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input type='checkbox'name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input " + rowhelper_onChange + " type='checkbox'name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
} else if(rowtype[i] == 'input') {
- td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input class='formfld unknown' size='" + objectSize + "' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input " + rowhelper_onChange + " class='formfld unknown' size='" + objectSize + "' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
} else if(rowtype[i] == 'password') {
- td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input class='formfld pwd' type='password' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input " + rowhelper_onChange + " class='formfld pwd' type='password' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
}
tr.appendChild(td);
}
@@ -49,6 +55,8 @@ var addRowTo = (function() {
td.innerHTML = '<a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" /></a>';
tr.appendChild(td);
tbody.appendChild(tr);
+ if(rowhelper_onAdd != '')
+ eval(rowhelper_onAdd);
});
})();
@@ -61,6 +69,8 @@ function removeRow(el) {
cel = el.getElementsByTagName("td").item(0);
el.parentNode.removeChild(el);
}
+ if(rowhelper_onDelete != '')
+ eval(rowhelper_onDelete);
}
function find_unique_field_name(field_name) {
diff --git a/usr/local/www/load_balancer_pool_edit.php b/usr/local/www/load_balancer_pool_edit.php
index 51b3bec..08e7fdc 100755
--- a/usr/local/www/load_balancer_pool_edit.php
+++ b/usr/local/www/load_balancer_pool_edit.php
@@ -56,6 +56,7 @@ if (isset($id) && $a_pool[$id]) {
$pconfig['mode'] = $a_pool[$id]['mode'];
$pconfig['descr'] = $a_pool[$id]['descr'];
$pconfig['port'] = $a_pool[$id]['port'];
+ $pconfig['retry'] = $a_pool[$id]['retry'];
$pconfig['servers'] = &$a_pool[$id]['servers'];
$pconfig['serversdisabled'] = &$a_pool[$id]['serversdisabled'];
$pconfig['monitor'] = $a_pool[$id]['monitor'];
@@ -86,6 +87,11 @@ if ($_POST) {
if (!is_port($_POST['port']))
$input_errors[] = gettext("The port must be an integer between 1 and 65535.");
+
+ // May as well use is_port as we want a positive integer and such.
+ if (!empty($_POST['retry']) && !is_port($_POST['retry']))
+ $input_errors[] = gettext("The retry value must be an integer between 1 and 65535.");
+
if (is_array($_POST['servers'])) {
foreach($pconfig['servers'] as $svrent) {
if (!is_ipaddr($svrent)) {
@@ -118,6 +124,7 @@ if ($_POST) {
update_if_changed("mode", $poolent['mode'], $_POST['mode']);
update_if_changed("description", $poolent['descr'], $_POST['descr']);
update_if_changed("port", $poolent['port'], $_POST['port']);
+ update_if_changed("retry", $poolent['retry'], $_POST['retry']);
update_if_changed("servers", $poolent['servers'], $_POST['servers']);
update_if_changed("serversdisabled", $poolent['serversdisabled'], $_POST['serversdisabled']);
update_if_changed("monitor", $poolent['monitor'], $_POST['monitor']);
@@ -199,6 +206,13 @@ function clearcombo(){
<div id="monitorport_desc"><?=gettext("This is the port your servers are listening on."); ?></div>
</td>
</tr>
+ <tr align="left">
+ <td width="22%" valign="top" id="retry_text" class="vncell"><?=gettext("Retry"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="retry" type="text" <?if(isset($pconfig['retry'])) echo "value=\"{$pconfig['retry']}\"";?> size="16" maxlength="16"><br>
+ <div id="retry_desc"><?=gettext("Optionally specify how many times to retry checking a server before declaring it down."); ?></div>
+ </td>
+ </tr>
<tr>
<td>&nbsp;</td>
</tr>
diff --git a/usr/local/www/pkg_edit.php b/usr/local/www/pkg_edit.php
index 8b71837..5361b51 100755
--- a/usr/local/www/pkg_edit.php
+++ b/usr/local/www/pkg_edit.php
@@ -644,6 +644,7 @@ if ($pkg['tabs'] <> "") {
$values = $value;
else
$values = explode(',', $value);
+ $ifaces["lo0"] = "loopback";
foreach($ifaces as $ifname => $iface) {
$selected = (in_array($ifname, $values) ? 'selected' : '');
if(isset($pkga['advancedfield']) && $adv_enabled)
diff --git a/usr/local/www/pkg_mgr.php b/usr/local/www/pkg_mgr.php
index b82ed26..15097a6 100755
--- a/usr/local/www/pkg_mgr.php
+++ b/usr/local/www/pkg_mgr.php
@@ -44,6 +44,19 @@ require_once("globals.inc");
require_once("guiconfig.inc");
require_once("pkg-utils.inc");
+/* if upgrade in progress, alert user */
+if(is_subsystem_dirty('packagelock')) {
+ $pgtitle = array(gettext("System"),gettext("Package Manager"));
+ include("head.inc");
+ echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
+ include("fbegin.inc");
+ echo "Please wait while packages are reinstalled in the background.";
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+}
+
$pkg_info = get_pkg_info('all', array("noembedded", "name", "category", "website", "version", "status", "descr", "maintainer", "required_version", "maximum_version", "pkginfolink", "supportedbybsdperimeter"));
if($pkg_info) {
$fout = fopen("{$g['tmp_path']}/pkg_info.cache", "w");
@@ -80,15 +93,11 @@ include("head.inc");
<tr>
<td>
<?php
- $version = file_get_contents("/etc/version");
- $dash = strpos($version, ".");
- $hyphen = strpos($version, "-");
- $major = substr($version, 0, $dash);
- $minor = substr($version, $dash + 1, $hyphen - $dash - 1);
- $testing_version = substr($version, $hyphen + 1, strlen($version) - $hyphen);
+ $version = rtrim(file_get_contents("/etc/version"));
$tab_array = array();
- $tab_array[] = array($version . gettext("packages"), $requested_version <> "" ? false : true, "pkg_mgr.php");
+ $tab_array[] = array(gettext("Available Packages"), $requested_version <> "" ? false : true, "pkg_mgr.php");
+// $tab_array[] = array($version . gettext("packages"), $requested_version <> "" ? false : true, "pkg_mgr.php");
// $tab_array[] = array("Packages for any platform", $requested_version == "none" ? true : false, "pkg_mgr.php?ver=none");
// $tab_array[] = array("Packages with a different version", $requested_version == "other" ? true : false, "pkg_mgr.php?ver=other");
$tab_array[] = array(gettext("Installed Packages"), false, "pkg_mgr_installed.php");
@@ -112,9 +121,6 @@ include("head.inc");
if(!$pkg_info) {
echo "<tr><td colspan=\"5\"><center>" . gettext("There are currently no packages available for installation.") . "</td></tr>";
} else {
- $installed_pfsense_version = rtrim(file_get_contents("/etc/version"));
- $dash = strpos($installed_pfsense_version, "-");
- $installed_pfsense_version = substr($installed_pfsense_version, 0, $dash);
$pkgs = array();
$instpkgs = array();
if($config['installedpackages']['package'] != "")
@@ -133,30 +139,28 @@ include("head.inc");
if($g['platform'] == "nanobsd")
if($index['noembedded'])
continue;
- $dash = strpos($index['required_version'], "-");
- $index['major_version'] = substr($index['required_version'], 0, $dash);
+ /* If we are on not on HEAD, and the package wants it, skip */
if ($version <> "HEAD" &&
$index['required_version'] == "HEAD" &&
$requested_version <> "other")
continue;
+ /* If there is no required version, and the requested package
+ version is not 'none', then skip */
if (empty($index['required_version']) &&
$requested_version <> "none")
continue;
- if($index['major_version'] > $major &&
- $requested_version <> "other")
- continue;
- if(isset($index['major_version']) &&
- $requested_version == "none")
+ /* If the requested version is not 'other', and the required version is newer than what we have, skip. */
+ if($requested_version <> "other" &&
+ (pfs_version_compare("", $version, $index['required_version']) < 0))
continue;
- if($index['major_version'] == $major &&
- $requested_version == "other")
+ /* If the requestion version is 'other' and we are on the version requested, skip. */
+ if($requested_version == "other" &&
+ (pfs_version_compare("", $version, $index['required_version']) == 0))
continue;
- /* Package is for a newer version, lets skip */
- if($installed_pfsense_version < $index['required_version'])
+ /* Package is only for an older version, lets skip */
+ if($index['maximum_version'] &&
+ (pfs_version_compare("", $version, $index['maximum_version']) > 0))
continue;
- if($index['maximum_version'])
- if($installed_pfsense_version > $index['maximum_version'])
- continue;
?>
<tr valign="top">
<td class="listlr">
diff --git a/usr/local/www/pkg_mgr_install.php b/usr/local/www/pkg_mgr_install.php
index 7139a0d..8659b8e 100755
--- a/usr/local/www/pkg_mgr_install.php
+++ b/usr/local/www/pkg_mgr_install.php
@@ -67,9 +67,9 @@ include("head.inc");
<tr>
<td>
<?php
- $version = file_get_contents("/etc/version");
+// $version = file_get_contents("/etc/version");
$tab_array = array();
- $tab_array[] = array("{$version} " . gettext("packages"), false, "pkg_mgr.php");
+ $tab_array[] = array(gettext("Available packages"), false, "pkg_mgr.php");
// $tab_array[] = array("Packages for any platform", false, "pkg_mgr.php?ver=none");
// $tab_array[] = array("Packages for a different platform", $requested_version == "other" ? true : false, "pkg_mgr.php?ver=other");
$tab_array[] = array(gettext("Installed packages"), false, "pkg_mgr_installed.php");
@@ -98,9 +98,9 @@ include("head.inc");
</table>
<br>
<!-- status box -->
- <textarea cols="60" rows="1" name="status" id="status" wrap="hard"><?=gettext("Beginning package installation.");?></textarea>
+ <textarea cols="80" rows="1" name="status" id="status" wrap="hard"><?=gettext("Beginning package installation.");?></textarea>
<!-- command output box -->
- <textarea cols="60" rows="25" name="output" id="output" wrap="hard"></textarea>
+ <textarea cols="80" rows="35" name="output" id="output" wrap="hard"></textarea>
</center>
</td>
</tr>
@@ -153,6 +153,8 @@ switch($_GET['mode']) {
update_output_window($static_output);
filter_configure();
}
+ file_put_contents("/tmp/{$_GET['pkg']}.info", $static_output);
+ echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$_GET['pkg']}\";</script>";
break;
case "installedinfo":
if(file_exists("/tmp/{$_GET['pkg']}.info")) {
@@ -164,8 +166,6 @@ switch($_GET['mode']) {
update_output_window(sprintf(gettext("Could not find %s."), $_GET['pkg']));
break;
case "reinstallall":
- if ($config['installedpackages']['package'])
- exec("rm -rf /var/db/pkg/*");
if (is_array($config['installedpackages']['package']))
foreach($config['installedpackages']['package'] as $package)
$todo[] = array('name' => $package['name'], 'version' => $package['version']);
@@ -191,8 +191,6 @@ switch($_GET['mode']) {
$static_output .= "\n" . gettext("Installation halted.");
update_output_window($static_output);
} else {
- $filename = escapeshellcmd("/tmp/" . $_GET['id'] . ".info");
- $fd = fopen($filename, "w");
$status_a = gettext("Installation of") . " " . htmlspecialchars($_GET['id']) . " " . gettext("completed.");
update_status($status_a);
$status = get_after_install_info($_GET['id']);
@@ -200,9 +198,8 @@ switch($_GET['mode']) {
$static_output .= "\n" . gettext("Installation completed.") . "\n{$_GET['id']} " . gettext("setup instructions") . ":\n{$status}";
else
$static_output .= "\n" . gettext("Installation completed. Please check to make sure that the package is configured from the respective menu then start the package.");
- fwrite($fd, $status_a . "\n". $static_output);
- fclose($fd);
- echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$_GET['id']}\";</script>";
+ file_put_contents("/tmp/{$_GET['id']}.info", $static_output);
+ echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$_GET['id']}\";</script>";
}
filter_configure();
break;
diff --git a/usr/local/www/pkg_mgr_installed.php b/usr/local/www/pkg_mgr_installed.php
index 2708c78..02fb8d3 100755
--- a/usr/local/www/pkg_mgr_installed.php
+++ b/usr/local/www/pkg_mgr_installed.php
@@ -40,6 +40,19 @@
require_once("guiconfig.inc");
require_once("pkg-utils.inc");
+/* if upgrade in progress, alert user */
+if(is_subsystem_dirty('packagelock')) {
+ $pgtitle = array(gettext("System"),gettext("Package Manager"));
+ include("head.inc");
+ echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
+ include("fbegin.inc");
+ echo "Please wait while packages are reinstalled in the background.";
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+}
+
if(is_array($config['installedpackages']['package'])) {
foreach($config['installedpackages']['package'] as $instpkg) {
$tocheck[] = $instpkg['name'];
@@ -60,10 +73,11 @@ include("head.inc");
<?php
$version = file_get_contents("/etc/version");
$tab_array = array();
- $tab_array[] = array("{$version} " . gettext("packages"), false, "pkg_mgr.php");
+ $tab_array[] = array(gettext("Available Packages"), false, "pkg_mgr.php");
+// $tab_array[] = array("{$version} " . gettext("packages"), false, "pkg_mgr.php");
// $tab_array[] = array("Packages for any platform", false, "pkg_mgr.php?ver=none");
// $tab_array[] = array("Packages for a different platform", $requested_version == "other" ? true : false, "pkg_mgr.php?ver=other");
- $tab_array[] = array(gettext("Installed packages"), true, "pkg_mgr_installed.php");
+ $tab_array[] = array(gettext("Installed Packages"), true, "pkg_mgr_installed.php");
display_top_tabs($tab_array);
?>
</td>
@@ -86,7 +100,7 @@ include("head.inc");
foreach($config['installedpackages']['package'] as $instpkg) {
$instpkgs[] = $instpkg['name'];
}
- asort($instpkgs);
+ natcasesort($instpkgs);
foreach ($instpkgs as $index => $pkgname):
diff --git a/usr/local/www/services_captiveportal.php b/usr/local/www/services_captiveportal.php
index 13ac985..8d12c7c 100755
--- a/usr/local/www/services_captiveportal.php
+++ b/usr/local/www/services_captiveportal.php
@@ -82,7 +82,7 @@ $pconfig['radmac_secret'] = $config['captiveportal']['radmac_secret'];
$pconfig['reauthenticate'] = isset($config['captiveportal']['reauthenticate']);
$pconfig['reauthenticateacct'] = $config['captiveportal']['reauthenticateacct'];
$pconfig['httpslogin_enable'] = isset($config['captiveportal']['httpslogin']);
-$pconfig['httpsname'] = strtolower($config['captiveportal']['httpsname']);
+$pconfig['preauthurl'] = strtolower($config['captiveportal']['preauthurl']);
$pconfig['cert'] = base64_decode($config['captiveportal']['certificate']);
$pconfig['cacert'] = base64_decode($config['captiveportal']['cacertificate']);
$pconfig['key'] = base64_decode($config['captiveportal']['private-key']);
@@ -198,6 +198,7 @@ if ($_POST) {
$config['captiveportal']['reauthenticateacct'] = $_POST['reauthenticateacct'];
$config['captiveportal']['httpslogin'] = $_POST['httpslogin_enable'] ? true : false;
$config['captiveportal']['httpsname'] = $_POST['httpsname'];
+ $config['captiveportal']['preauthurl'] = $_POST['preauthurl'];
$config['captiveportal']['peruserbw'] = $_POST['peruserbw'] ? true : false;
$config['captiveportal']['bwdefaultdn'] = $_POST['bwdefaultdn'];
$config['captiveportal']['bwdefaultup'] = $_POST['bwdefaultup'];
@@ -239,6 +240,8 @@ if ($_POST) {
if (is_array($_POST['cinterface']))
$pconfig['cinterface'] = implode(",", $_POST['cinterface']);
+
+ filter_configure();
}
}
include("head.inc");
@@ -312,9 +315,10 @@ function enable_change(enable_change) {
$tab_array[] = array(gettext("Captive portal"), true, "services_captiveportal.php");
$tab_array[] = array(gettext("Pass-through MAC"), false, "services_captiveportal_mac.php");
$tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php");
$tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php");
$tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php");
- display_top_tabs($tab_array);
+ display_top_tabs($tab_array, true);
?> </td></tr>
<tr>
<td class="tabcont">
@@ -395,7 +399,14 @@ value="<?=htmlspecialchars($pconfig['maxprocperip']);?>"> <?=gettext("per client
<?=gettext("If enabled, a popup window will appear when clients are allowed through the captive portal. This allows clients to explicitly disconnect themselves before the idle or hard timeout occurs."); ?></td>
</tr>
<tr>
- <td valign="top" class="vncell"><?=gettext("Redirection URL"); ?></td>
+ <td valign="top" class="vncell"><?=gettext("Pre-authentication redirect URL"); ?> </td>
+ <td class="vtable">
+ <input name="preauthurl" type="text" class="formfld url" id="preauthurl" size="60" value="<?=htmlspecialchars($pconfig['preauthurl']);?>"><br>
+ <?php printf(gettext("Use this field to set \$PORTAL_REDIRURL\$ variable which can be accessed using your custom captive portal index.php page or error pages."));?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("After authentication Redirection URL"); ?></td>
<td class="vtable">
<input name="redirurl" type="text" class="formfld url" id="redirurl" size="60" value="<?=htmlspecialchars($pconfig['redirurl']);?>">
<br>
diff --git a/usr/local/www/services_captiveportal_filemanager.php b/usr/local/www/services_captiveportal_filemanager.php
index bba925f..7bc61ec 100755
--- a/usr/local/www/services_captiveportal_filemanager.php
+++ b/usr/local/www/services_captiveportal_filemanager.php
@@ -139,9 +139,10 @@ include("head.inc");
$tab_array[] = array(gettext("Captive portal"), false, "services_captiveportal.php");
$tab_array[] = array(gettext("Pass-through MAC"), false, "services_captiveportal_mac.php");
$tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php");
$tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php");
$tab_array[] = array(gettext("File Manager"), true, "services_captiveportal_filemanager.php");
- display_top_tabs($tab_array);
+ display_top_tabs($tab_array, true);
?> </td></tr>
<tr>
<td class="tabcont">
diff --git a/usr/local/www/services_captiveportal_hostname.php b/usr/local/www/services_captiveportal_hostname.php
new file mode 100755
index 0000000..3668a35
--- /dev/null
+++ b/usr/local/www/services_captiveportal_hostname.php
@@ -0,0 +1,188 @@
+<?php
+/*
+ services_captiveportal_hostname.php
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ipfw
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-allowedhostnames
+##|*NAME=Services: Captive portal: Allowed IPs page
+##|*DESCR=Allow access to the 'Services: Captive portal: Allowed IPs' page.
+##|*MATCH=services_captiveportal_ip.php*
+##|-PRIV
+
+$statusurl = "status_captiveportal.php";
+$logurl = "diag_logs_auth.php";
+
+require("guiconfig.inc");
+require("functions.inc");
+require("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+$pgtitle = array(gettext("Services"),gettext("Captive portal"));
+
+if (!is_array($config['captiveportal']['allowedhostname']))
+ $config['captiveportal']['allowedhostname'] = array();
+
+$a_allowedhostnames = &$config['captiveportal']['allowedhostname'] ;
+
+if ($_GET['act'] == "del") {
+ if ($a_allowedhostnames[$_GET['id']]) {
+ $ipent = $a_allowedhostnames[$_GET['id']];
+
+ if (isset($config['captiveportal']['enable'])) {
+ if (!empty($ipent['sn']))
+ $ipent['ip'] .= "/{$ipent['sn']}";
+ $ip = gethostbyname($ipent['ip']);
+ if(is_ipaddr($ip)) {
+ mwexec("/sbin/ipfw table 3 delete {$ip}");
+ mwexec("/sbin/ipfw table 4 delete {$ip}");
+ mwexec("/sbin/ipfw table 5 delete {$ip}");
+ mwexec("/sbin/ipfw table 6 delete {$ip}");
+ mwexec("/sbin/ipfw table 7 delete {$ip}");
+ mwexec("/sbin/ipfw table 8 delete {$ip}");
+ mwexec("/sbin/ipfw table 9 delete {$ip}");
+ mwexec("/sbin/ipfw table 10 delete {$ip}");
+ }
+ }
+
+ unset($a_allowedhostnames[$_GET['id']]);
+ write_config();
+ header("Location: services_captiveportal_hostname.php");
+ exit;
+ }
+}
+
+
+include("head.inc");
+?>
+<?php include("fbegin.inc"); ?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<form action="services_captiveportal_hostname.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Captive portal"), false, "services_captiveportal.php");
+ $tab_array[] = array(gettext("Pass-through MAC"), false, "services_captiveportal_mac.php");
+ $tab_array[] = array(gettext("Allowed IP Addresses"), false, "services_captiveportal_ip.php");
+ $tab_array[] = array(gettext("Allowed Hostnames"), true, "services_captiveportal_hostname.php");
+ $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php");
+ $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php");
+ display_top_tabs($tab_array, true);
+?>
+ </td></tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="30%" class="listhdrr"><?=gettext("Hostname"); ?></td>
+ <td width="60%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td width="17" heigth="17"></td>
+ <td><a href="services_captiveportal_hostname_edit.php"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php $i = 0; foreach ($a_allowedhostnames as $ip): ?>
+ <tr ondblclick="document.location='services_captiveportal_hostname_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?php
+ if($ip['dir'] == "to") {
+ echo "any <img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"absmiddle\"> ";
+ }
+ if($ip['dir'] == "both") {
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" width=\"11\" height=\"11\" align=\"absmiddle\"> ";
+ }
+ echo strtolower($ip['hostname']);
+ if($ip['dir'] == "from") {
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"absmiddle\"> any";
+ }
+
+ ?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($ip['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" nowrap class="list"> <a href="services_captiveportal_hostname_edit.php?id=<?=$i;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit address"); ?>" width="17" height="17" border="0"></a>
+ &nbsp;<a href="services_captiveportal_hostname.php?act=del&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this address?"); ?>')"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete address"); ?>" width="17" height="17" border="0"></a></td>
+ </tr>
+ <?php $i++; endforeach; ?>
+ <tr>
+ <td class="list" colspan="2">&nbsp;</td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td width="17" heigth="17"></td>
+ <td><a href="services_captiveportal_hostname_edit.php"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list"><p class="vexpl"><span class="red"><strong>
+ <?=gettext("Note:"); ?><br>
+ </strong></span>
+ <?=gettext("Adding allowed Hostnames will allow a DNS hostname access to/from access through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example. By specifying <em>from</em> addresses, it may be used to always allow pass-through access from a client behind the captive portal."); ?></p>
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><span class="vexpl"><?=gettext("any"); ?> <img src="/themes/<?=$g['theme'];?>/images/icons/icon_in.gif" width="11" height="11" align="absmiddle"> x.x.x.x </span></td>
+ <td><span class="vexpl"><?=gettext("All connections"); ?> <strong><?=gettext("to"); ?></strong> <?=gettext("the Hostname are allowed"); ?></span></td>
+ </tr>
+ <tr>
+ <td colspan="5" height="4"></td>
+ </tr>
+ <tr>
+ <td>x.x.x.x <span class="vexpl"><img src="/themes/<?=$g['theme'];?>/images/icons/icon_in.gif" width="11" height="11" align="absmiddle"></span> <?=gettext("any"); ?>&nbsp;&nbsp;&nbsp; </td>
+ <td><span class="vexpl"><?=gettext("All connections"); ?> <strong><?=gettext("from"); ?></strong> <?=gettext("the Hostname are allowed"); ?> </span></td>
+ </tr>
+ <tr>
+ <td><span class="vexpl"><img src="/themes/<?=$g['theme'];?>/images/icons/icon_pass.gif" width="11" height="11" align="right"></span>&nbsp;&nbsp;&nbsp;&nbsp; </td>
+ <td><span class="vexpl"> All connections <strong>to</strong> and <strong>from</strong> the Hostname are allowed </span></td>
+ </tr>
+ </table></td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/usr/local/www/services_captiveportal_hostname_edit.php b/usr/local/www/services_captiveportal_hostname_edit.php
new file mode 100755
index 0000000..b6e580a
--- /dev/null
+++ b/usr/local/www/services_captiveportal_hostname_edit.php
@@ -0,0 +1,217 @@
+<?php
+/*
+ services_captiveportal_hostname_edit.php
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ipfw
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-editallowedhostnames
+##|*NAME=Services: Captive portal: Edit Allowed IPs page
+##|*DESCR=Allow access to the 'Services: Captive portal: Edit Allowed IPs' page.
+##|*MATCH=services_captiveportal_hostname_edit.php*
+##|-PRIV
+
+function allowedhostnamescmp($a, $b) {
+ return strcmp($a['hostname'], $b['hostname']);
+}
+
+function allowedhostnames_sort() {
+ global $g, $config;
+ usort($config['captiveportal']['allowedhostname'],"allowedhostname");
+}
+
+$statusurl = "status_captiveportal.php";
+$logurl = "diag_logs_auth.php";
+
+require("guiconfig.inc");
+require("functions.inc");
+require("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+$pgtitle = array(gettext("Services"),gettext("Captive portal"),gettext("Edit allowed Hostname"));
+
+if (!is_array($config['captiveportal']['allowedhostname']))
+ $config['captiveportal']['allowedhostname'] = array();
+
+$a_allowedhostnames = &$config['captiveportal']['allowedhostname'];
+
+$id = $_GET['id'];
+if (isset($_POST['id']))
+ $id = $_POST['id'];
+
+if (isset($id) && $a_allowedhostnames[$id]) {
+ $pconfig['hostname'] = $a_allowedhostnames[$id]['hostname'];
+ $pconfig['sn'] = $a_allowedhostnames[$id]['sn'];
+ $pconfig['dir'] = $a_allowedhostnames[$id]['dir'];
+ $pconfig['bw_up'] = $a_allowedhostnames[$id]['bw_up'];
+ $pconfig['bw_down'] = $a_allowedhostnames[$id]['bw_down'];
+ $pconfig['descr'] = $a_allowedhostnames[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "hostname");
+ $reqdfieldsn = array(gettext("Allowed Hostname"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+
+ if (($_POST['hostname'] && !is_hostname($_POST['hostname'])))
+ $input_errors[] = sprintf(gettext("A valid Hostname must be specified. [%s]"), $_POST['hostname']);
+
+ if ($_POST['bw_up'] && !is_numeric($_POST['bw_up']))
+ $input_errors[] = gettext("Upload speed needs to be an integer");
+ if ($_POST['bw_down'] && !is_numeric($_POST['bw_down']))
+ $input_errors[] = gettext("Download speed needs to be an integer");
+
+ foreach ($a_allowedhostnames as $ipent) {
+ if (isset($id) && ($a_allowedhostnames[$id]) && ($a_allowedhostnames[$id] === $ipent))
+ continue;
+
+ if ($ipent['hostname'] == $_POST['hostname']){
+ $input_errors[] = sprintf("[%s] %s.", $_POST['hostname'], gettext("already allowed")) ;
+ break ;
+ }
+ }
+
+ if (!$input_errors) {
+ $ip = array();
+ $ip['hostname'] = $_POST['hostname'];
+ $ip['sn'] = $_POST['sn'];
+ $ip['dir'] = $_POST['dir'];
+ $ip['descr'] = $_POST['descr'];
+ if ($_POST['bw_up'])
+ $ip['bw_up'] = $_POST['bw_up'];
+ if ($_POST['bw_down'])
+ $ip['bw_down'] = $_POST['bw_down'];
+ if (isset($id) && $a_allowedhostnames[$id]) {
+ $oldip = $a_allowedhostnames[$id]['hostname'];
+ if (!empty($a_allowedhostnames[$id]['sn']))
+ $oldip .= "/{$a_allowedhostnames[$id]['sn']}";
+ $a_allowedhostnames[$id] = $ip;
+ } else {
+ $oldip = $ip['hostname'];
+ if (!empty($$ip['sn']))
+ $oldip .= "/{$$ip['sn']}";
+ $a_allowedhostnames[] = $ip;
+ }
+ allowedhostnames_sort();
+
+ write_config();
+
+ if (isset($config['captiveportal']['enable']) && is_module_loaded("ipfw.ko")) {
+ $rules = "";
+ $hostname = gethostbyname($oldip);
+ if($hostname)
+ for ($i = 3; $i < 10; $i++)
+ $rules .= "table {$i} delete {$hostname}\n";
+ $hostname = gethostbyname($ip);
+ if(is_ipaddr($hostname))
+ $rules .= captiveportal_allowedip_configure_entry($hostname);
+ file_put_contents("{$g['tmp_path']}/allowedhostname_tmp{$id}", $rules);
+ mwexec("/sbin/ipfw -q {$g['tmp_path']}/allowedhostname_tmp{$id}");
+ @unlink("{$g['tmp_path']}/allowedhostname_tmp{$id}");
+ }
+
+ header("Location: services_captiveportal_hostname.php");
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+<?php include("fbegin.inc"); ?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="services_captiveportal_hostname_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Direction"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="dir" class="formfld">
+ <?php
+ $dirs = array(gettext("Both"),gettext("From"),gettext("To")) ;
+ foreach ($dirs as $dir): ?>
+ <option value="<?=strtolower($dir);?>" <?php if (strtolower($dir) == strtolower($pconfig['dir'])) echo "selected";?> >
+ <?=htmlspecialchars($dir);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br>
+ <span class="vexpl"><?=gettext("Use"); ?> <em><?=gettext("From"); ?></em> <?=gettext("to always allow an Hostname through the captive portal (without authentication)"); ?>.
+ <?=gettext("Use"); ?> <em><?=gettext("To"); ?></em> <?=gettext("to allow access from all clients (even non-authenticated ones) behind the portal to this Hostname"); ?>.</span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="hostname" type="text" class="formfld unknown" id="hostname" size="17" value="<?=htmlspecialchars($pconfig['hostname']);?>">
+ <br>
+ <span class="vexpl"><?=gettext("Hostname");?>.</span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>">
+ <br> <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this Hostname in Kbit/s"); ?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>">
+ <br> <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this Hostname in Kbit/s"); ?></span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>">
+ <?php if (isset($id) && $a_allowedhostnames[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/usr/local/www/services_captiveportal_ip.php b/usr/local/www/services_captiveportal_ip.php
index 25615e6..d636f8a 100755
--- a/usr/local/www/services_captiveportal_ip.php
+++ b/usr/local/www/services_captiveportal_ip.php
@@ -93,9 +93,10 @@ include("head.inc");
$tab_array[] = array(gettext("Captive portal"), false, "services_captiveportal.php");
$tab_array[] = array(gettext("Pass-through MAC"), false, "services_captiveportal_mac.php");
$tab_array[] = array(gettext("Allowed IP addresses"), true, "services_captiveportal_ip.php");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php");
$tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php");
$tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php");
- display_top_tabs($tab_array);
+ display_top_tabs($tab_array, true);
?>
</td></tr>
<tr>
diff --git a/usr/local/www/services_captiveportal_ip_edit.php b/usr/local/www/services_captiveportal_ip_edit.php
index d6119ce..fd87c5b 100755
--- a/usr/local/www/services_captiveportal_ip_edit.php
+++ b/usr/local/www/services_captiveportal_ip_edit.php
@@ -1,8 +1,10 @@
<?php
/*
services_captiveportal_ip_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Originally part of m0n0wall (http://m0n0.ch/wall)
Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
All rights reserved.
@@ -29,7 +31,7 @@
*/
/*
pfSense_BUILDER_BINARIES: /sbin/ipfw
- pfSense_MODULE: captiveportal
+ pfSense_MODULE: captiveportal
*/
##|+PRIV
@@ -44,9 +46,9 @@ function allowedipscmp($a, $b) {
}
function allowedips_sort() {
- global $g, $config;
+ global $g, $config;
- usort($config['captiveportal']['allowedip'],"allowedipscmp");
+ usort($config['captiveportal']['allowedip'],"allowedipscmp");
}
$statusurl = "status_captiveportal.php";
@@ -89,13 +91,14 @@ if ($_POST) {
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
- if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
+ if (($_POST['ip'] && !is_ipaddr($_POST['ip'])))
$input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['ip']);
- }
+
if ($_POST['bw_up'] && !is_numeric($_POST['bw_up']))
- $input_errors[] = gettext("Upload speed needs to be an integer");
- if ($_POST['bw_down'] && !is_numeric($_POST['bw_down']))
- $input_errors[] = gettext("Download speed needs to be an integer");
+ $input_errors[] = gettext("Upload speed needs to be an integer");
+
+ if ($_POST['bw_down'] && !is_numeric($_POST['bw_down']))
+ $input_errors[] = gettext("Download speed needs to be an integer");
foreach ($a_allowedips as $ipent) {
if (isset($id) && ($a_allowedips[$id]) && ($a_allowedips[$id] === $ipent))
@@ -114,9 +117,9 @@ if ($_POST) {
$ip['dir'] = $_POST['dir'];
$ip['descr'] = $_POST['descr'];
if ($_POST['bw_up'])
- $ip['bw_up'] = $_POST['bw_up'];
- if ($_POST['bw_down'])
- $ip['bw_down'] = $_POST['bw_down'];
+ $ip['bw_up'] = $_POST['bw_up'];
+ if ($_POST['bw_down'])
+ $ip['bw_down'] = $_POST['bw_down'];
if (isset($id) && $a_allowedips[$id]) {
$oldip = $a_allowedips[$id]['ip'];
if (!empty($a_allowedips[$id]['sn']))
@@ -124,8 +127,8 @@ if ($_POST) {
$a_allowedips[$id] = $ip;
} else {
$oldip = $ip['ip'];
- if (!empty($$ip['sn']))
- $oldip .= "/{$$ip['sn']}";
+ if (!empty($ip['sn']))
+ $oldip .= "/{$ip['sn']}";
$a_allowedips[] = $ip;
}
allowedips_sort();
@@ -153,65 +156,69 @@ include("head.inc");
<?php include("fbegin.inc"); ?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="services_captiveportal_ip_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <form action="services_captiveportal_ip_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Direction"); ?></td>
- <td width="78%" class="vtable">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Direction"); ?></td>
+ <td width="78%" class="vtable">
<select name="dir" class="formfld">
<?php
$dirs = array(gettext("Both"),gettext("From"),gettext("To")) ;
- foreach ($dirs as $dir): ?>
+ foreach ($dirs as $dir):
+ ?>
<option value="<?=strtolower($dir);?>" <?php if (strtolower($dir) == strtolower($pconfig['dir'])) echo "selected";?> >
<?=htmlspecialchars($dir);?>
</option>
<?php endforeach; ?>
</select>
- <br>
- <span class="vexpl"><?=gettext("Use"); ?> <em><?=gettext("From"); ?></em> <?=gettext("to always allow an IP address through the captive portal (without authentication)"); ?>.
- <?=gettext("Use"); ?> <em><?=gettext("To"); ?></em> <?=gettext("to allow access from all clients (even non-authenticated ones) behind the portal to this IP address"); ?>.</span></td>
- </tr>
+ <br>
+ <span class="vexpl"><?=gettext("Use"); ?> <em><?=gettext("From"); ?></em> <?=gettext("to always allow an IP address through the captive portal (without authentication)"); ?>.
+ <?=gettext("Use"); ?> <em><?=gettext("To"); ?></em> <?=gettext("to allow access from all clients (even non-authenticated ones) behind the portal to this IP address"); ?>.</span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="17" value="<?=htmlspecialchars($pconfig['ip']);?>">
+ /<select name='sn' class="formselect" id='sn'>
+ <?php for ($i = 32; $i >= 1; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['sn']) echo "selected"; ?>><?=$i;?></option>
+ <?php endfor; ?>
+ </select>
+ <br>
+ <span class="vexpl"><?=gettext("IP address and subnet mask. Use /32 for a single IP");?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
+ <br> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
+ </td>
+ </tr>
<tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="17" value="<?=htmlspecialchars($pconfig['ip']);?>">
- /<select name='sn' class="formselect" id='sn'>
- <?php for ($i = 32; $i >= 1; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['sn']) echo "selected"; ?>><?=$i;?></option>
- <?php endfor; ?>
- </select>
- <br>
- <span class="vexpl"><?=gettext("IP address and subnet mask. Use /32 for a single IP");?>.</span></td>
- </tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>">
+ <br> <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this IP address in Kbit/s"); ?></span>
+ </td>
+ </tr>
<tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
- <br> <span class="vexpl"><?=gettext("You may enter a description here " .
- "for your reference (not parsed)"); ?>.</span></td>
- </tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>">
+ <br> <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this IP address in Kbit/s"); ?></span>
+ </td>
+ </tr>
<tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
- <td width="78%" class="vtable">
- <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>">
- <br> <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this IP address in Kbit/s"); ?></span></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
- <td width="78%" class="vtable">
- <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>">
- <br> <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this IP address in Kbit/s"); ?></span></td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>">
- <?php if (isset($id) && $a_allowedips[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>">
- <?php endif; ?>
- </td>
- </tr>
- </table>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>">
+ <?php if (isset($id) && $a_allowedips[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>">
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
</form>
<?php include("fend.inc"); ?>
</body>
diff --git a/usr/local/www/services_captiveportal_mac.php b/usr/local/www/services_captiveportal_mac.php
index bbcd217..25c250c 100755
--- a/usr/local/www/services_captiveportal_mac.php
+++ b/usr/local/www/services_captiveportal_mac.php
@@ -134,9 +134,10 @@ include("head.inc");
$tab_array[] = array(gettext("Captive portal"), false, "services_captiveportal.php");
$tab_array[] = array(gettext("Pass-through MAC"), true, "services_captiveportal_mac.php");
$tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php");
$tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php");
$tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php");
- display_top_tabs($tab_array);
+ display_top_tabs($tab_array, true);
?>
</td></tr>
<tr>
diff --git a/usr/local/www/services_captiveportal_vouchers.php b/usr/local/www/services_captiveportal_vouchers.php
index c79b84d..2ad0217 100644
--- a/usr/local/www/services_captiveportal_vouchers.php
+++ b/usr/local/www/services_captiveportal_vouchers.php
@@ -77,7 +77,7 @@ if (!isset($config['voucher']['rollbits']))
if (!isset($config['voucher']['ticketbits']))
$config['voucher']['ticketbits'] = 10;
if (!isset($config['voucher']['saveinterval']))
- $config['voucher']['saveinterval'] = 300;
+ $config['voucher']['saveinterval'] = 5;
if (!isset($config['voucher']['checksumbits']))
$config['voucher']['checksumbits'] = 5;
if (!isset($config['voucher']['magic']))
@@ -377,9 +377,10 @@ function enable_change(enable_change) {
$tab_array[] = array(gettext("Captive portal"), false, "services_captiveportal.php");
$tab_array[] = array(gettext("Pass-through MAC"), false, "services_captiveportal_mac.php");
$tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php");
$tab_array[] = array(gettext("Vouchers"), true, "services_captiveportal_vouchers.php");
$tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php");
- display_top_tabs($tab_array);
+ display_top_tabs($tab_array, true);
?>
</ul>
</td>
diff --git a/usr/local/www/services_dhcp.php b/usr/local/www/services_dhcp.php
index 3f922d4..d02fef6 100755
--- a/usr/local/www/services_dhcp.php
+++ b/usr/local/www/services_dhcp.php
@@ -47,11 +47,6 @@ if(!$g['services_dhcp_server_enable']) {
exit;
}
-/* Fix failover DHCP problem
- * http://article.gmane.org/gmane.comp.security.firewalls.pfsense.support/18749
- */
-ini_set("memory_limit","64M");
-
/* This function will remove entries from dhcpd.leases that would otherwise
* overlap with static DHCP reservations. If we don't clean these out,
* then DHCP will print a warning in the logs about a duplicate lease
@@ -824,7 +819,7 @@ include("head.inc");
?>
<tr>
<td>
- <input autocomplete="off" name="number<?php echo $counter; ?>" type="text" class="formfld" id="number<?php echo $counter; ?>" size="10" value="<?=htmlspecialchars($number);?>" />
+ <input autocomplete="off" name="number<?php echo $counter; ?>" type="text" class="formfld unknown" id="number<?php echo $counter; ?>" size="10" value="<?=htmlspecialchars($number);?>" />
</td>
<td>
<select name="itemtype<?php echo $counter; ?>" class="formselect" id="itemtype<?php echo $counter; ?>">
@@ -838,7 +833,7 @@ include("head.inc");
</select>
</td>
<td>
- <input autocomplete="off" name="value<?php echo $counter; ?>" type="text" class="formfld" id="value<?php echo $counter; ?>" size="40" value="<?=htmlspecialchars($value);?>" />
+ <input autocomplete="off" name="value<?php echo $counter; ?>" type="text" class="formfld unknown" id="value<?php echo $counter; ?>" size="40" value="<?=htmlspecialchars($value);?>" />
</td>
<td>
<a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" /></a>
diff --git a/usr/local/www/services_dnsmasq_domainoverride_edit.php b/usr/local/www/services_dnsmasq_domainoverride_edit.php
index 948ecb0..ae1a0d5 100755
--- a/usr/local/www/services_dnsmasq_domainoverride_edit.php
+++ b/usr/local/www/services_dnsmasq_domainoverride_edit.php
@@ -69,8 +69,8 @@ if ($_POST) {
if (($_POST['domain'] && !is_domain($_POST['domain']))) {
$input_errors[] = gettext("A valid domain must be specified.");
}
- if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
- $input_errors[] = gettext("A valid IP address must be specified.");
+ if ($_POST['ip'] && !is_ipaddr($_POST['ip']) && ($_POST['ip'] != '#')) {
+ $input_errors[] = gettext("A valid IP address must be specified, or # for an exclusion.");
}
if (!$input_errors) {
@@ -115,7 +115,7 @@ include("head.inc");
<td width="78%" class="vtable">
<?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>">
<br> <span class="vexpl"><?=gettext("IP address of the authoritative DNS server for this domain"); ?><br>
- <?=gettext("e.g."); ?> <em>192.168.100.100</em></span></td>
+ <?=gettext("e.g."); ?> <em>192.168.100.100</em><br/><?=gettext("Or enter # for an exclusion to pass through this host/subdomain to standard nameservers instead of a previous override."); ?></span></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
diff --git a/usr/local/www/services_igmpproxy_edit.php b/usr/local/www/services_igmpproxy_edit.php
index 63cb10e..8d02173 100755
--- a/usr/local/www/services_igmpproxy_edit.php
+++ b/usr/local/www/services_igmpproxy_edit.php
@@ -98,7 +98,7 @@ if ($_POST) {
if (!$input_errors) {
$igmpentry['address'] = $address;
- $igmpentry['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
+ $igmpentry['descr'] = $_POST['descr'];
if (isset($id) && $a_igmpproxy[$id])
$a_igmpproxy[$id] = $igmpentry;
@@ -114,7 +114,7 @@ if ($_POST) {
//we received input errors, copy data to prevent retype
else
{
- $pconfig['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
+ $pconfig['descr'] = $_POST['descr'];
$pconfig['address'] = $address;
$pconfig['type'] = $_POST['type'];
}
diff --git a/usr/local/www/services_snmp.php b/usr/local/www/services_snmp.php
index 0b61bbf..432db3d 100755
--- a/usr/local/www/services_snmp.php
+++ b/usr/local/www/services_snmp.php
@@ -162,6 +162,12 @@ include("head.inc");
?>
<script language="JavaScript">
<!--
+function check_deps() {
+ if ($('hostres').checked == true) {
+ $('mibii').checked = true;
+ }
+}
+
function enable_change(whichone) {
if( whichone.name == "trapenable" )
@@ -369,13 +375,13 @@ function enable_change(whichone) {
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("SNMP Modules");?></td>
<td width="78%" class="vtable">
- <input name="mibii" type="checkbox" id="mibii" value="yes" <?php if ($pconfig['mibii']) echo "checked"; ?> ><?=gettext("MibII"); ?>
+ <input name="mibii" type="checkbox" id="mibii" value="yes" onClick="check_deps()" <?php if ($pconfig['mibii']) echo "checked"; ?> ><?=gettext("MibII"); ?>
<br />
<input name="netgraph" type="checkbox" id="netgraph" value="yes" <?php if ($pconfig['netgraph']) echo "checked"; ?> ><?=gettext("Netgraph"); ?>
<br />
<input name="pf" type="checkbox" id="pf" value="yes" <?php if ($pconfig['pf']) echo "checked"; ?> ><?=gettext("PF"); ?>
<br />
- <input name="hostres" type="checkbox" id="hostres" value="yes" <?php if ($pconfig['hostres']) echo "checked"; ?> ><?=gettext("Host Resources");?>
+ <input name="hostres" type="checkbox" id="hostres" value="yes" onClick="check_deps()" <?php if ($pconfig['hostres']) echo "checked"; ?> ><?=gettext("Host Resources (Requires MibII)");?>
</td>
</tr>
<?php if(!$config['interfaces']['lan']): ?>
diff --git a/usr/local/www/services_wol.php b/usr/local/www/services_wol.php
index 128fc3f..e3c5b7d 100755
--- a/usr/local/www/services_wol.php
+++ b/usr/local/www/services_wol.php
@@ -171,11 +171,7 @@ include("head.inc");
<?php $i = 0; foreach ($a_wol as $wolent): ?>
<tr>
<td class="listlr" ondblclick="document.location='services_wol_edit.php?id=<?=$i;?>';">
- <?php if ($wolent['interface'] == "lan")
- echo "LAN";
- else
- echo $config['interfaces'][$wolent['interface']]['descr'];
- ?>&nbsp;
+ <?=convert_friendly_interface_to_friendly_descr($wolent['interface']);?>&nbsp;
</td>
<td class="listr" ondblclick="document.location='services_wol_edit.php?id=<?=$i;?>';">
<a href="?mac=<?=$wolent['mac'];?>&if=<?=$wolent['interface'];?>"><?=strtolower($wolent['mac']);?></a>&nbsp;
diff --git a/usr/local/www/status_captiveportal.php b/usr/local/www/status_captiveportal.php
index 3625e40..9560041 100755
--- a/usr/local/www/status_captiveportal.php
+++ b/usr/local/www/status_captiveportal.php
@@ -71,7 +71,7 @@ function clientcmp($a, $b) {
$cpdb = array();
if (file_exists("{$g['vardb_path']}/captiveportal.db")) {
- $captiveportallck = lock('captiveportal');
+ $captiveportallck = lock('captiveportaldb');
$cpcontents = file("/var/db/captiveportal.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
unlock($captiveportallck);
} else
diff --git a/usr/local/www/status_dhcp_leases.php b/usr/local/www/status_dhcp_leases.php
index 896b1af..ed474de 100755
--- a/usr/local/www/status_dhcp_leases.php
+++ b/usr/local/www/status_dhcp_leases.php
@@ -354,7 +354,7 @@ foreach ($leases as $data) {
echo "<tr>\n";
echo "<td class=\"listlr\">{$fspans}{$data['ip']}{$fspane}&nbsp;</td>\n";
if ($data['online'] != "online") {
- echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&mac={$data['mac']}\" title=\"" . gettext("send Wake on LAN packet to this MAC address") ."\">{$data['mac']}</a>{$fspane}&nbsp;</td>\n";
+ echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&mac={$data['mac']}\" title=\"" . gettext("send Wake on LAN packet to this MAC address") ."\" onclick=\"return confirm('" . gettext("Send Wake on LAN packet to this MAC address?") . "')\">{$data['mac']}</a>{$fspane}&nbsp;</td>\n";
} else {
echo "<td class=\"listr\">{$fspans}{$data['mac']}{$fspane}&nbsp;</td>\n";
}
diff --git a/usr/local/www/status_lb_pool.php b/usr/local/www/status_lb_pool.php
index 16f474b..b7d79ce 100755
--- a/usr/local/www/status_lb_pool.php
+++ b/usr/local/www/status_lb_pool.php
@@ -43,6 +43,7 @@ require_once("guiconfig.inc");
require_once("functions.inc");
require_once("filter.inc");
require_once("shaper.inc");
+require_once("vslb.inc");
if (!is_array($config['load_balancer']['lbpool'])) {
$config['load_balancer']['lbpool'] = array();
@@ -61,21 +62,7 @@ $year = date("Y");
$pgtitle = array(gettext("Status"),gettext("Load Balancer"),gettext("Pool"));
include("head.inc");
-$relayctl=split("\n", shell_exec("/usr/local/sbin/relayctl show summary"));
-$relay_hosts=Array();
-foreach( (array) $relayctl as $line) {
- $t=split("\t", $line);
- switch (trim($t[1])) {
- case "table":
- $curpool=trim($t[2]);
- break;
- case "host":
- $curhost=trim($t[2]);
- $relay_hosts[$curpool][$curhost]['avail']=trim($t[3]);
- $relay_hosts[$curpool][$curhost]['state']=trim($t[4]);
- break;
- }
-}
+$relay_hosts = get_lb_summary();
if ($_POST) {
if ($_POST['apply']) {
diff --git a/usr/local/www/status_lb_vs.php b/usr/local/www/status_lb_vs.php
index 43510c8..33ad6e3 100755
--- a/usr/local/www/status_lb_vs.php
+++ b/usr/local/www/status_lb_vs.php
@@ -40,7 +40,8 @@
##|*MATCH=status_lb_vs.php*
##|-PRIV
-require("guiconfig.inc");
+require_once("guiconfig.inc");
+require_once("vslb.inc");
if (!is_array($config['load_balancer']['lbpool'])) {
$config['load_balancer']['lbpool'] = array();
@@ -50,63 +51,7 @@ if (!is_array($config['load_balancer']['virtual_server'])) {
}
$a_vs = &$config['load_balancer']['virtual_server'];
$a_pool = &$config['load_balancer']['lbpool'];
-
-
-
-// # relayctl show summary
-// Id Type Name Avlblty Status
-// 1 redirect testvs2 active
-// 5 table test2:80 active (3 hosts up)
-// 11 host 192.168.1.2 91.55% up
-// 10 host 192.168.1.3 100.00% up
-// 9 host 192.168.1.4 88.73% up
-// 3 table test:80 active (1 hosts up)
-// 7 host 192.168.1.2 66.20% down
-// 6 host 192.168.1.3 97.18% up
-// 0 redirect testvs active
-// 3 table test:80 active (1 hosts up)
-// 7 host 192.168.1.2 66.20% down
-// 6 host 192.168.1.3 97.18% up
-// 4 table testvs-sitedown:80 active (1 hosts up)
-// 8 host 192.168.1.4 84.51% up
-// # relayctl show redirects
-// Id Type Name Avlblty Status
-// 1 redirect testvs2 active
-// 0 redirect testvs active
-// # relayctl show redirects
-// Id Type Name Avlblty Status
-// 1 redirect testvs2 active
-// total: 2 sessions
-// last: 2/60s 2/h 2/d sessions
-// average: 1/60s 0/h 0/d sessions
-// 0 redirect testvs active
-
-$redirects_a = array();
-exec('/usr/local/sbin/relayctl show redirects 2>&1', $redirects_a);
-$summary_a = array();
-exec('/usr/local/sbin/relayctl show summary 2>&1', $summary_a);
-$rdr_a = parse_redirects($redirects_a);
-//$server_a = parse_summary($summary_a, parse_redirects($redirects_a));
-
-function parse_redirects($rdr_a) {
- $vs = array();
- for ($i = 0; isset($rdr_a[$i]); $i++) {
- $line = $rdr_a[$i];
- if (preg_match("/^[0-9]+/", $line)) {
- $regs = array();
- if($x = preg_match("/^[0-9]+\s+redirect\s+([0-9a-zA-Z\.]+)\s+([a-z]+)/", $line, $regs)) {
- $vs[trim($regs[1])] = array();
- $vs[trim($regs[1])]['status'] = trim($regs[2]);
- }
- }
- }
- return $vs;
-}
-
-function parse_summary($summary, $rdrs_a) {
- $server_a = array();
- return $server_a;
-}
+$rdr_a = get_lb_redirects();
$pgtitle = array(gettext("Status"),gettext("Load Balancer"),gettext("Virtual Server"));
include("head.inc");
diff --git a/usr/local/www/status_rrd_graph.php b/usr/local/www/status_rrd_graph.php
index 48f5734..4505a02 100755
--- a/usr/local/www/status_rrd_graph.php
+++ b/usr/local/www/status_rrd_graph.php
@@ -66,7 +66,11 @@ if ($_GET['cat']) {
if ($_GET['period']) {
$curperiod = $_GET['period'];
} else {
- $curperiod = "current";
+ if(! empty($config['rrd']['period'])) {
+ $curperiod = $config['rrd']['period'];
+ } else {
+ $curperiod = "absolute";
+ }
}
if ($_GET['option']) {
@@ -118,6 +122,9 @@ if ($_GET['option']) {
continue 2;
}
}
+ case "captiveportal":
+ $curoption = "allgraphs";
+ break;
default:
$curoption = "wan";
break;
@@ -128,11 +135,11 @@ $now = time();
if($curcat == "custom") {
if (is_numeric($_GET['start'])) {
if($start < ($now - (3600 * 24 * 365 * 5))) {
- $start = $now - (4 * 3600);
+ $start = $now - (8 * 3600);
}
$start = $_GET['start'];
} else {
- $start = $now - (4 * 3600);
+ $start = $now - (8 * 3600);
}
}
@@ -144,6 +151,7 @@ if (is_numeric($_GET['end'])) {
/* this should never happen */
if($end < $start) {
+ log_error("start $start is smaller than end $end");
$end = $now;
}
@@ -168,6 +176,7 @@ $dbheader = array("allgraphs-traffic.rrd",
"allgraphs-wireless.rrd",
"allgraphs-cellular.rrd",
"allgraphs-vpnusers.rrd",
+ "captiveportal-allgraphs.rrd",
"allgraphs-packets.rrd",
"system-allgraphs.rrd",
"system-throughput.rrd",
@@ -191,6 +200,9 @@ foreach($databases as $database) {
if(stristr($database, "-vpnusers")) {
$vpnusers = true;
}
+ if(stristr($database, "captiveportal-") && isset($config['captiveportal']['enable'])) {
+ $captiveportal = true;
+ }
}
/* append the existing array to the header */
$ui_databases = array_merge($dbheader, $databases);
@@ -198,81 +210,103 @@ $custom_databases = array_merge($dbheader_custom, $databases);
$styles = array('inverse' => gettext('Inverse'),
'absolute' => gettext('Absolute'));
-$graphs = array("day", "week", "month", "quarter", "year", "4year");
-$periods = array("current" => gettext("Current Period"), "previous" => gettext("Previous Period"));
+$graphs = array("8hour", "day", "week", "month", "quarter", "year", "4year");
+$periods = array("absolute" => gettext("Absolute Timespans"), "current" => gettext("Current Period"), "previous" => gettext("Previous Period"));
+$graph_length = array(
+ "8hour" => 28800,
+ "day" => 86400,
+ "week" => 604800,
+ "month" => 2764800,
+ "quarter" => 8035200,
+ "year" => 31622400,
+ "4year" => 126489600);
$pgtitle = array(gettext("Status"),gettext("RRD Graphs"));
include("head.inc");
function get_dates($curperiod, $graph) {
+ global $graph_length;
$now = time();
$end = $now;
- $curyear = date('Y', $now);
- $curmonth = date('m', $now);
- $curweek = date('W', $now);
- $curweekday = date('N', $now) - 1; // We want to start on monday
- $curday = date('d', $now);
-
- switch($curperiod) {
- case "previous":
- $offset = -1;
- break;
- default:
- $offset = 0;
- }
- switch($graph) {
- case "12hour":
- switch($offset) {
- case 0;
- $houroffset = 0;
- break;
- default:
- $houroffset = ($offset * 12) - 12;
- break;
- }
- $start = mktime((8 + $houroffset), 0, 0, $curmonth, $curday, $curyear);
- if(($offset != 0) || (($end - ($start + (12 * 3600)) ) > 0) ) {
- $end = mktime((8 + $houroffset) + 12, 0, 0, $curmonth, $curday, $curyear);
- }
- break;
- case "day":
- $start = mktime(0, 0, 0, $curmonth, ($curday + $offset), $curyear);
- if($offset != 0)
- $end = mktime(0, 0, 0, $curmonth, (($curday + $offset) + 1), $curyear);
- break;
- case "week":
- switch($offset) {
- case 0;
- $weekoffset = 0;
- break;
- default:
- $weekoffset = ($offset * 7) - 7;
- break;
- }
- $start = mktime(0, 0, 0, $curmonth, (($curday - $curweekday) + $weekoffset), $curyear);
- if($offset != 0)
- $end = mktime(0, 0, 0, $curmonth, (($curday - $curweekday) + $weekoffset + 7), $curyear);
- break;
- case "month":
- $start = mktime(0, 0, 0, ($curmonth + $offset), 0, $curyear);
- if($offset != 0)
- $end = mktime(0, 0, 0, (($curmonth + $offset) + 1), 0, $curyear);
- break;
- case "quarter":
- $start = mktime(0, 0, 0, (($curmonth - 2) + $offset), 0, $curyear);
- if($offset != 0)
- $end = mktime(0, 0, 0, (($curmonth + $offset) + 1), 0, $curyear);
- break;
- case "year":
- $start = mktime(0, 0, 0, 1, 0, ($curyear + $offset));
- if($offset != 0)
- $end = mktime(0, 0, 0, 1, 0, (($curyear + $offset) +1));
- break;
- case "4year":
- $start = mktime(0, 0, 0, 1, 0, (($curyear - 3) + $offset));
- if($offset != 0)
- $end = mktime(0, 0, 0, 1, 0, (($curyear + $offset) +1));
- break;
+
+ if($curperiod == "absolute") {
+ $start = $end - $graph_length[$graph];
+ } else {
+ $curyear = date('Y', $now);
+ $curmonth = date('m', $now);
+ $curweek = date('W', $now);
+ $curweekday = date('N', $now) - 1; // We want to start on monday
+ $curday = date('d', $now);
+ $curhour = date('G', $now);
+
+ switch($curperiod) {
+ case "previous":
+ $offset = -1;
+ break;
+ default:
+ $offset = 0;
+ }
+ switch($graph) {
+ case "8hour":
+ if($curhour < 24)
+ $starthour = 16;
+ if($curhour < 16)
+ $starthour = 8;
+ if($curhour < 8)
+ $starthour = 0;
+
+ switch($offset) {
+ case 0:
+ $houroffset = $starthour;
+ break;
+ default:
+ $houroffset = $starthour + ($offset * 8);
+ break;
+ }
+ $start = mktime($houroffset, 0, 0, $curmonth, $curday, $curyear);
+ if($offset != 0) {
+ $end = mktime(($houroffset + 8), 0, 0, $curmonth, $curday, $curyear);
+ }
+ break;
+ case "day":
+ $start = mktime(0, 0, 0, $curmonth, ($curday + $offset), $curyear);
+ if($offset != 0)
+ $end = mktime(0, 0, 0, $curmonth, (($curday + $offset) + 1), $curyear);
+ break;
+ case "week":
+ switch($offset) {
+ case 0:
+ $weekoffset = 0;
+ break;
+ default:
+ $weekoffset = ($offset * 7) - 7;
+ break;
+ }
+ $start = mktime(0, 0, 0, $curmonth, (($curday - $curweekday) + $weekoffset), $curyear);
+ if($offset != 0)
+ $end = mktime(0, 0, 0, $curmonth, (($curday - $curweekday) + $weekoffset + 7), $curyear);
+ break;
+ case "month":
+ $start = mktime(0, 0, 0, ($curmonth + $offset), 0, $curyear);
+ if($offset != 0)
+ $end = mktime(0, 0, 0, (($curmonth + $offset) + 1), 0, $curyear);
+ break;
+ case "quarter":
+ $start = mktime(0, 0, 0, (($curmonth - 2) + $offset), 0, $curyear);
+ if($offset != 0)
+ $end = mktime(0, 0, 0, (($curmonth + $offset) + 1), 0, $curyear);
+ break;
+ case "year":
+ $start = mktime(0, 0, 0, 1, 0, ($curyear + $offset));
+ if($offset != 0)
+ $end = mktime(0, 0, 0, 1, 0, (($curyear + $offset) +1));
+ break;
+ case "4year":
+ $start = mktime(0, 0, 0, 1, 0, (($curyear - 3) + $offset));
+ if($offset != 0)
+ $end = mktime(0, 0, 0, 1, 0, (($curyear + $offset) +1));
+ break;
+ }
}
// echo "start $start ". date('l jS \of F Y h:i:s A', $start) .", end $end ". date('l jS \of F Y h:i:s A', $end) ."<br>";
$dates = array();
@@ -317,6 +351,10 @@ function get_dates($curperiod, $graph) {
if($curcat == "vpnusers") { $tabactive = True; } else { $tabactive = False; }
$tab_array[] = array("VPN", $tabactive, "status_rrd_graph.php?cat=vpnusers");
}
+ if($captiveportal) {
+ if($curcat == "captiveportal") { $tabactive = True; } else { $tabactive = False; }
+ $tab_array[] = array("Captive Portal", $tabactive, "status_rrd_graph.php?cat=captiveportal");
+ }
if($curcat == "custom") { $tabactive = True; } else { $tabactive = False; }
$tab_array[] = array(gettext("Custom"), $tabactive, "status_rrd_graph.php?cat=custom");
if($curcat == "settings") { $tabactive = True; } else { $tabactive = False; }
@@ -360,6 +398,11 @@ function get_dates($curperiod, $graph) {
$replace = array(" :: ", "", $friendly);
switch($curcat) {
+ case "captiveportal":
+ $optionc = str_replace($search, $replace, $optionc[1]);
+ echo "<option value=\"$optionc\"";
+ $prettyprint = ucwords(str_replace($search, $replace, $optionc));
+ break;
case "system":
$optionc = str_replace($search, $replace, $optionc[1]);
echo "<option value=\"$optionc\"";
diff --git a/usr/local/www/status_rrd_graph_img.php b/usr/local/www/status_rrd_graph_img.php
index c57e322..34040db 100644
--- a/usr/local/www/status_rrd_graph_img.php
+++ b/usr/local/www/status_rrd_graph_img.php
@@ -63,11 +63,11 @@ $now = time();
if (is_numeric($_GET['start'])) {
if($start < ($now - (3600 * 24 * 365 * 5))) {
- $start = $now - (4 * 3600);
+ $start = $now - (8 * 3600);
}
$start = $_GET['start'];
} else {
- $start = $now - (4 * 3600);
+ $start = $now - (8 * 3600);
}
if (is_numeric($_GET['end'])) {
@@ -78,6 +78,7 @@ if (is_numeric($_GET['end'])) {
/* this should never happen */
if($end < $start) {
+ log_error("start $start is smaller than end $end");
$end = $now;
}
@@ -208,6 +209,7 @@ if(file_exists($rrdcolors)) {
$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
$colorspamdconn = array('00AA00BB', 'FFFFFFFF', '00660088', 'FFFFFF88', '006600');
$colorvpnusers = array('990000');
+ $colorcaptiveportalusers = array('990000');
}
switch ($curstyle) {
@@ -909,6 +911,44 @@ elseif((strstr($curdatabase, "-cellular.rrd")) && (file_exists("$rrddbpath$curda
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t`date +\"%b %d %H\:%M\:%S %Y\"`\" ";
}
+elseif((strstr($curdatabase, "-loggedin.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for online Captive Portal users stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end ";
+ $graphcmd .= "--vertical-label \"Captive Portal Users\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"`hostname` - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-loggedinusers=$rrddbpath$curdatabase:loggedinusers:AVERAGE\" ";
+ $graphcmd .= "LINE2:\"$curif-loggedinusers#{$colorcaptiveportalusers[0]}:$curif-loggedinusers\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t current\t\t average\t maximum\\n\" ";
+ $graphcmd .= "COMMENT:\"Users Online\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-loggedinusers:LAST:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-loggedinusers:AVERAGE:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-loggedinusers:MAX:%7.2lf \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t`date +\"%b %d %H\:%M\:%S %Y\"`\" ";
+}
+elseif((strstr($curdatabase, "-concurrent.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for online Captive Portal users stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end ";
+ $graphcmd .= "--vertical-label \"Captive Portal Users\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"`hostname` - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-concurrentusers=$rrddbpath$curdatabase:concurrentusers:AVERAGE\" ";
+ $graphcmd .= "LINE2:\"$curif-concurrentusers#{$colorcaptiveportalusers[0]}:$curif-concurrentusers\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t current\t\t average\t maximum\\n\" ";
+ $graphcmd .= "COMMENT:\"Users Online\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-concurrentusers:LAST:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-concurrentusers:AVERAGE:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-concurrentusers:MAX:%7.2lf \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t`date +\"%b %d %H\:%M\:%S %Y\"`\" ";
+}
else {
$data = false;
log_error(sprintf(gettext("Sorry we do not have data to graph for %s"),$curdatabase));
diff --git a/usr/local/www/status_rrd_graph_settings.php b/usr/local/www/status_rrd_graph_settings.php
index 6fb943a..a4b562e 100755
--- a/usr/local/www/status_rrd_graph_settings.php
+++ b/usr/local/www/status_rrd_graph_settings.php
@@ -47,15 +47,20 @@ require_once("rrd.inc");
$pconfig['enable'] = isset($config['rrd']['enable']);
$pconfig['category'] = $config['rrd']['category'];
$pconfig['style'] = $config['rrd']['style'];
+$pconfig['period'] = $config['rrd']['period'];
$curcat = "settings";
$categories = array('system' => gettext("System"),
'traffic' => gettext("Traffic"),
'packets' => gettext("Packets"),
'quality' => gettext("Quality"),
- 'queues' => gettext("Queues"));
+ 'queues' => gettext("Queues"),
+ 'captiveportal' => gettext("Captive Portal"));
$styles = array('inverse' => gettext("Inverse"),
'absolute' => gettext("Absolute"));
+$periods = array("absolute" => gettext("Absolute Timespans"),
+ "current" => gettext("Current Period"),
+ "previous" => gettext("Previous Period"));
if ($_POST) {
@@ -69,6 +74,7 @@ if ($_POST) {
$config['rrd']['enable'] = $_POST['enable'] ? true : false;
$config['rrd']['category'] = $_POST['category'];
$config['rrd']['style'] = $_POST['style'];
+ $config['rrd']['period'] = $_POST['period'];
write_config();
$retval = 0;
@@ -96,6 +102,9 @@ foreach($databases as $database) {
if(stristr($database, "-vpnusers")) {
$vpnusers = true;
}
+ if(stristr($database, "captiveportal-") && isset($config['captiveportal']['enable'])) {
+ $captiveportal = true;
+ }
}
$pgtitle = array(gettext("Status"),gettext("RRD Graphs"));
@@ -138,6 +147,10 @@ include("head.inc");
if($curcat == "vpnusers") { $tabactive = True; } else { $tabactive = False; }
$tab_array[] = array(gettext("VPN"), $tabactive, "status_rrd_graph.php?cat=vpnusers");
}
+ if($captiveportal) {
+ if($curcat == "captiveportal") { $tabactive = True; } else { $tabactive = False; }
+ $tab_array[] = array(gettext("Captive Portal"), $tabactive, "status_rrd_graph.php?cat=captiveportal");
+ }
if($curcat == "custom") { $tabactive = True; } else { $tabactive = False; }
$tab_array[] = array(gettext("Custom"), $tabactive, "status_rrd_graph.php?cat=custom");
if($curcat == "settings") { $tabactive = True; } else { $tabactive = False; }
@@ -189,6 +202,21 @@ include("head.inc");
</td>
</tr>
<tr>
+ <td width="22%" valign="top" class="vtable"><?=gettext("Default period");?></td>
+ <td width="78%" class="vtable">
+ <select name="period" class="formselect" style="z-index: -10;" >
+ <?php
+ foreach ($periods as $period => $periodd) {
+ echo "<option value=\"$period\"";
+ if ($period == $pconfig['period']) echo " selected";
+ echo ">" . htmlspecialchars($periodd) . "</option>\n";
+ }
+ ?>
+ </select>
+ <b><?=gettext("This selects the default period.");?></b>
+ </td>
+ </tr>
+ <tr>
<td width="22%" valign="top">&nbsp;</td>
<td width="78%">
<input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)">
diff --git a/usr/local/www/status_services.php b/usr/local/www/status_services.php
index 779e396..d463f3a 100755
--- a/usr/local/www/status_services.php
+++ b/usr/local/www/status_services.php
@@ -334,9 +334,15 @@ foreach (array('server', 'client') as $mode) {
}
}
}
-
-
+
+function service_name_compare($a, $b) {
+ if (strtolower($a['name']) == strtolower($b['name']))
+ return 0;
+ return (strtolower($a['name']) < strtolower($b['name'])) ? -1 : 1;
+}
+
if (count($services) > 0) {
+ uasort($services, "service_name_compare");
foreach($services as $service) {
if (empty($service['name']))
continue;
diff --git a/usr/local/www/system_advanced_admin.php b/usr/local/www/system_advanced_admin.php
index 2bdf7e2..7b4b8e3 100644
--- a/usr/local/www/system_advanced_admin.php
+++ b/usr/local/www/system_advanced_admin.php
@@ -346,12 +346,12 @@ function prot_change() {
<td width="22%" valign="top" class="vncell"><?=gettext("DNS Rebind Check"); ?></td>
<td width="78%" class="vtable">
<input name="nodnsrebindcheck" type="checkbox" id="nodnsrebindcheck" value="yes" <?php if ($pconfig['nodnsrebindcheck']) echo "checked"; ?> />
- <strong><?=gettext("Disable webConfigurator DNS Rebinding Checks"); ?></strong>
+ <strong><?=gettext("Disable DNS Rebinding Checks"); ?></strong>
<br/>
- <?php echo gettext("When this is unchecked, access to the webConfigurator " .
+ <?php echo gettext("When this is unchecked, your system " .
"is protected against <a href=\"http://en.wikipedia.org/wiki/DNS_rebinding\">DNS Rebinding attacks</a>. " .
- "Check this box to disable this protection if you find that it interferes with " .
- "webConfigurator access in certain corner cases. "); ?>
+ "This blocks private IP responses from your configured DNS servers. Check this box to disable this protection if it interferes with " .
+ "webConfigurator access or name resolution in your environment. "); ?>
</td>
</tr>
<tr>
@@ -374,7 +374,7 @@ function prot_change() {
<?php echo gettext("When this is unchecked, access to the webConfigurator " .
"is protected against HTTP_REFERER redirection attempts. " .
"Check this box to disable this protection if you find that it interferes with " .
- "webConfigurator access in certain corner cases such as using 3rd party scripts to interact with pfSense. More information on HTTP_REFERER is available from <a target='_new' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."); ?>
+ "webConfigurator access in certain corner cases such as using external scripts to interact with this system. More information on HTTP_REFERER is available from <a target='_new' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."); ?>
</td>
</tr>
<tr>
@@ -422,7 +422,7 @@ function prot_change() {
<input name="enableserial" type="checkbox" id="enableserial" value="yes" <?php if (isset($pconfig['enableserial'])) echo "checked"; ?> />
<strong><?=gettext("This will enable the first serial port with 9600/8/N/1"); ?></strong>
<br>
- <span class="vexpl"><?=gettext("Note: This will disable the internal video card/keyboard"); ?></span>
+ <span class="vexpl"><?=gettext("Note: This will redirect the console output and messages to the serial port. You can still access the console menu from the internal video card/keyboard. A <b>null modem</b> serial cable or adapter is required to use the serial console."); ?></span>
</td>
</tr>
<tr>
diff --git a/usr/local/www/system_camanager.php b/usr/local/www/system_camanager.php
index 2662775..6eddd39 100644
--- a/usr/local/www/system_camanager.php
+++ b/usr/local/www/system_camanager.php
@@ -138,6 +138,8 @@ if ($_POST) {
$reqdfieldsn = array(
gettext("Descriptive name"),
gettext("Certificate data"));
+ if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE")))
+ $input_errors[] = gettext("This certificate does not appear to be valid.");
}
if ($pconfig['method'] == "internal") {
$reqdfields = explode(" ",
diff --git a/usr/local/www/system_certmanager.php b/usr/local/www/system_certmanager.php
index 36a11bb..0113461 100644
--- a/usr/local/www/system_certmanager.php
+++ b/usr/local/www/system_certmanager.php
@@ -162,6 +162,8 @@ if ($_POST) {
gettext("Descriptive name"),
gettext("Certificate data"),
gettext("Key data"));
+ if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE")))
+ $input_errors[] = gettext("This certificate does not appear to be valid.");
}
if ($pconfig['method'] == "internal") {
diff --git a/usr/local/www/system_firmware.php b/usr/local/www/system_firmware.php
index 93b6997..9e876c9 100755
--- a/usr/local/www/system_firmware.php
+++ b/usr/local/www/system_firmware.php
@@ -43,6 +43,8 @@
##|-PRIV
$d_isfwfile = 1;
+$nocsrf = true;
+
require_once("globals.inc");
require_once("guiconfig.inc");
@@ -101,7 +103,7 @@ if(is_subsystem_dirty('firmwarelock')) {
echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
include("fbegin.inc");
echo "<div>\n";
- print_info_box(gettext("An upgrade is currently in progress.<p>The firewall will reboot when the operation is complete.") . "<p><center><img src='/themes/{$g['theme']}/images/icons/icon_fw-update.gif'>");
+ print_info_box(gettext("An upgrade is currently in progress.<p>The firewall will reboot when the operation is complete.") . "<p><img src='/themes/{$g['theme']}/images/icons/icon_fw-update.gif'>");
echo "</div>\n";
include("fend.inc");
echo "</body>";
@@ -145,7 +147,7 @@ if ($_POST && !is_subsystem_dirty('firmwarelock')) {
if (is_uploaded_file($_FILES['ulfile']['tmp_name'])) {
/* verify firmware image(s) */
if (file_is_for_platform($_FILES['ulfile']['tmp_name'], $_FILES['ulfile']['name']) == false && !$_POST['sig_override'])
- $input_errors[] = gettext("The uploaded image file is not for this platform") . " ({$g['platform']})";
+ $input_errors[] = gettext("The uploaded image file is not for this platform.");
else if (!file_exists($_FILES['ulfile']['tmp_name'])) {
/* probably out of memory for the MFS */
$input_errors[] = gettext("Image upload failed (out of memory?)");
diff --git a/usr/local/www/system_firmware_auto.php b/usr/local/www/system_firmware_auto.php
index 4f655fe..06a9eb1 100755
--- a/usr/local/www/system_firmware_auto.php
+++ b/usr/local/www/system_firmware_auto.php
@@ -42,6 +42,8 @@
##|*MATCH=system_firmware_auto.php*
##|-PRIV
+$nocsrf = true;
+
require("guiconfig.inc");
require_once("pfsense-utils.inc");
@@ -105,9 +107,9 @@ include("head.inc");
</table>
<br>
<!-- status box -->
- <textarea cols="60" rows="1" name="status" id="status" wrap="hard"><?=gettext("Beginning firmware upgrade"); ?>.</textarea>
+ <textarea cols="90" rows="1" name="status" id="status" wrap="hard"><?=gettext("Beginning firmware upgrade"); ?>.</textarea>
<!-- command output box -->
- <textarea cols="60" rows="25" name="output" id="output" wrap="hard"></textarea>
+ <textarea cols="90" rows="25" name="output" id="output" wrap="hard"></textarea>
</center>
</td>
</tr>
@@ -203,11 +205,13 @@ if ($sigchk == 1) {
if ($exitstatus) {
update_status($sig_warning);
- update_output_window(gettext("Update cannot continue"));
- require("fend.inc");
+ update_output_window(gettext("Update cannot continue. You can disable this check on the Updater Settings tab."));
+ require("fend.inc");
exit;
-} else if ($sigchk == 2)
- update_output_window("\n" . gettext("Image has no signature but the system configured to allow unsigned images.") . "\n");
+} else if ($sigchk == 2) {
+ update_status("Upgrade in progress...");
+ update_output_window("\n" . gettext("Upgrade Image does not contain a signature but the system has been configured to allow unsigned images. One moment please...") . "\n");
+}
if (!verify_gzip_file("{$g['upload_path']}/latest.tgz")) {
update_status(gettext("The image file is corrupt."));
diff --git a/usr/local/www/system_gateways_edit.php b/usr/local/www/system_gateways_edit.php
index 025ff97..7ded7ae 100755
--- a/usr/local/www/system_gateways_edit.php
+++ b/usr/local/www/system_gateways_edit.php
@@ -130,7 +130,7 @@ if ($_POST) {
foreach ($a_gateways as $gateway) {
if (isset($id) && ($a_gateways[$id]) && ($a_gateways[$id] === $gateway)) {
if ($gateway['name'] != $_POST['name'])
- $input_errors[] = gettext("Changing name on a gateway is not allowed because it can leave stale gateways around.");
+ $input_errors[] = gettext("Changing name on a gateway is not allowed.");
continue;
}
if($_POST['name'] <> "") {
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif b/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif
new file mode 100644
index 0000000..eb726d6
--- /dev/null
+++ b/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif b/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif
new file mode 100644
index 0000000..f7f4c20
--- /dev/null
+++ b/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_block_add.gif b/usr/local/www/themes/code-red/images/icons/icon_block_add.gif
new file mode 100644
index 0000000..eb726d6
--- /dev/null
+++ b/usr/local/www/themes/code-red/images/icons/icon_block_add.gif
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif b/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif
new file mode 100644
index 0000000..f7f4c20
--- /dev/null
+++ b/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_block_add.gif b/usr/local/www/themes/metallic/images/icons/icon_block_add.gif
new file mode 100644
index 0000000..eb726d6
--- /dev/null
+++ b/usr/local/www/themes/metallic/images/icons/icon_block_add.gif
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif b/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif
new file mode 100644
index 0000000..f7f4c20
--- /dev/null
+++ b/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif
new file mode 100644
index 0000000..eb726d6
--- /dev/null
+++ b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif
new file mode 100644
index 0000000..f7f4c20
--- /dev/null
+++ b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif
new file mode 100644
index 0000000..eb726d6
--- /dev/null
+++ b/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif
new file mode 100644
index 0000000..f7f4c20
--- /dev/null
+++ b/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif
new file mode 100644
index 0000000..eb726d6
--- /dev/null
+++ b/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif
new file mode 100644
index 0000000..f7f4c20
--- /dev/null
+++ b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif b/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif
new file mode 100644
index 0000000..eb726d6
--- /dev/null
+++ b/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif b/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif
new file mode 100644
index 0000000..f7f4c20
--- /dev/null
+++ b/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/usr/local/www/vpn_openvpn_client.php b/usr/local/www/vpn_openvpn_client.php
index 96f67bf..d2374b2 100644
--- a/usr/local/www/vpn_openvpn_client.php
+++ b/usr/local/www/vpn_openvpn_client.php
@@ -125,6 +125,7 @@ if($_GET['act']=="edit"){
} else
$pconfig['shared_key'] = base64_decode($a_client[$id]['shared_key']);
$pconfig['crypto'] = $a_client[$id]['crypto'];
+ $pconfig['engine'] = $a_server[$id]['engine'];
$pconfig['tunnel_network'] = $a_client[$id]['tunnel_network'];
$pconfig['remote_network'] = $a_client[$id]['remote_network'];
@@ -254,6 +255,7 @@ if ($_POST) {
$client['shared_key'] = base64_encode($pconfig['shared_key']);
}
$client['crypto'] = $pconfig['crypto'];
+ $client['engine'] = $pconfig['engine'];
$client['tunnel_network'] = $pconfig['tunnel_network'];
$client['remote_network'] = $pconfig['remote_network'];
@@ -716,6 +718,24 @@ if ($savemsg)
</select>
</td>
</tr>
+ <tr id="engine">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hardware Crypto"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="engine" class="formselect">
+ <?php
+ $engines = openvpn_get_engines();
+ foreach ($engines as $name => $desc):
+ $selected = '';
+ if ($name == $pconfig['engine'])
+ $selected = ' selected';
+ ?>
+ <option value="<?=$name;?>"<?=$selected?>>
+ <?=htmlspecialchars($desc);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
<tr>
<td colspan="2" class="list" height="12"></td>
</tr>
diff --git a/usr/local/www/vpn_openvpn_server.php b/usr/local/www/vpn_openvpn_server.php
index 9d7c00d..0f751e7 100644
--- a/usr/local/www/vpn_openvpn_server.php
+++ b/usr/local/www/vpn_openvpn_server.php
@@ -126,6 +126,7 @@ if($_GET['act']=="edit"){
} else
$pconfig['shared_key'] = base64_decode($a_server[$id]['shared_key']);
$pconfig['crypto'] = $a_server[$id]['crypto'];
+ $pconfig['engine'] = $a_server[$id]['engine'];
$pconfig['tunnel_network'] = $a_server[$id]['tunnel_network'];
$pconfig['remote_network'] = $a_server[$id]['remote_network'];
@@ -176,6 +177,8 @@ if($_GET['act']=="edit"){
// just in case the modes switch
$pconfig['autokey_enable'] = "yes";
$pconfig['autotls_enable'] = "yes";
+
+ $pconfig['duplicate_cn'] = isset($a_server[$id]['duplicate_cn']);
}
}
@@ -322,6 +325,7 @@ if ($_POST) {
$server['shared_key'] = base64_encode($pconfig['shared_key']);
}
$server['crypto'] = $pconfig['crypto'];
+ $server['engine'] = $pconfig['engine'];
$server['tunnel_network'] = $pconfig['tunnel_network'];
$server['remote_network'] = $pconfig['remote_network'];
@@ -364,7 +368,10 @@ if ($_POST) {
if ($pconfig['dns_server_enable'])
$server['nbdd_server1'] = $pconfig['nbdd_server1'];
}
-
+
+ if ($_POST['duplicate_cn'] == "yes")
+ $server['duplicate_cn'] = true;
+
if (isset($id) && $a_server[$id])
$a_server[$id] = $server;
else
@@ -867,6 +874,24 @@ if ($savemsg)
</select>
</td>
</tr>
+ <tr id="engine">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hardware Crypto"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="engine" class="formselect">
+ <?php
+ $engines = openvpn_get_engines();
+ foreach ($engines as $name => $desc):
+ $selected = '';
+ if ($name == $pconfig['engine'])
+ $selected = ' selected';
+ ?>
+ <option value="<?=$name;?>"<?=$selected?>>
+ <?=htmlspecialchars($desc);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
<tr id="strictusercn">
<td width="22%" valign="top" class="vncell"><?=gettext("Strict User/CN Matching"); ?></td>
<td width="78%" class="vtable">
@@ -1012,6 +1037,24 @@ if ($savemsg)
</table>
</td>
</tr>
+ <tr id="duplicate_cn">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Duplicate Connections"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['duplicate_cn'],$chk); ?>
+ <input name="duplicate_cn" type="checkbox" value="yes" <?=$chk;?>/>
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Allow multiple concurrent connections from clients using the same Common Name.<br/>NOTE: This is not generally recommended, but may be needed for some scenarios."); ?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
</table>
<table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts">
diff --git a/usr/local/www/vpn_pppoe.php b/usr/local/www/vpn_pppoe.php
index 8052466..52fd334 100755
--- a/usr/local/www/vpn_pppoe.php
+++ b/usr/local/www/vpn_pppoe.php
@@ -99,7 +99,7 @@ include("head.inc");
<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Local ip");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Local IP");?></td>
<td width="25%" class="listhdrr"><?=gettext("Number of users");?></td>
<td width="25%" class="listhdr"><?=gettext("Description");?></td>
<td width="5%" class="list">
diff --git a/usr/local/www/vpn_pptp_users_edit.php b/usr/local/www/vpn_pptp_users_edit.php
index 73ba7cc..1cd0075 100755
--- a/usr/local/www/vpn_pptp_users_edit.php
+++ b/usr/local/www/vpn_pptp_users_edit.php
@@ -84,7 +84,7 @@ if ($_POST) {
if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['username']))
$input_errors[] = gettext("The username contains invalid characters.");
- if (preg_match("/[[:cntrl:]\"]/", $_POST['password']))
+ if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['passwordfld']))
$input_errors[] = gettext("The password contains invalid characters.");
if (preg_match("/^!/", $_POST['password']))
diff --git a/usr/local/www/widgets/include/wake_on_lan.inc b/usr/local/www/widgets/include/wake_on_lan.inc
new file mode 100644
index 0000000..af3229c
--- /dev/null
+++ b/usr/local/www/widgets/include/wake_on_lan.inc
@@ -0,0 +1,7 @@
+<?php
+
+//set variable for custom title
+$wake_on_lan_title = "Wake On Lan";
+$wake_on_lan_title_link = "services_wol.php";
+
+?> \ No newline at end of file
diff --git a/usr/local/www/widgets/widgets/captive_portal_status.widget.php b/usr/local/www/widgets/widgets/captive_portal_status.widget.php
index 1ca7007..d240d69 100644
--- a/usr/local/www/widgets/widgets/captive_portal_status.widget.php
+++ b/usr/local/www/widgets/widgets/captive_portal_status.widget.php
@@ -32,10 +32,13 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("globals.inc");
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
+require_once("captiveportal.inc");
?>
@@ -55,7 +58,7 @@ function clientcmp($a, $b) {
$cpdb = array();
if (file_exists("{$g['vardb_path']}/captiveportal.db")) {
- $captiveportallck = lock('captiveportal');
+ $captiveportallck = lock('captiveportaldb');
$cpcontents = file("{$g['vardb_path']}/captiveportal.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
unlock($captiveportallck);
} else
diff --git a/usr/local/www/widgets/widgets/carp_status.widget.php b/usr/local/www/widgets/widgets/carp_status.widget.php
index 6399579..a671308 100644
--- a/usr/local/www/widgets/widgets/carp_status.widget.php
+++ b/usr/local/www/widgets/widgets/carp_status.widget.php
@@ -27,10 +27,13 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
require_once("/usr/local/www/widgets/include/carp_status.inc");
+
?>
<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0">
<?php
diff --git a/usr/local/www/widgets/widgets/gateways.widget.php b/usr/local/www/widgets/widgets/gateways.widget.php
index db6a83a..4abe524 100644
--- a/usr/local/www/widgets/widgets/gateways.widget.php
+++ b/usr/local/www/widgets/widgets/gateways.widget.php
@@ -26,6 +26,9 @@
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
+
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
diff --git a/usr/local/www/widgets/widgets/gmirror_status.widget.php b/usr/local/www/widgets/widgets/gmirror_status.widget.php
index cd73a0f..cbbead2 100644
--- a/usr/local/www/widgets/widgets/gmirror_status.widget.php
+++ b/usr/local/www/widgets/widgets/gmirror_status.widget.php
@@ -25,6 +25,8 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("/usr/local/www/widgets/include/gmirror_status.inc");
if ($_GET['textonly'] == "true") {
diff --git a/usr/local/www/widgets/widgets/installed_packages.widget.php b/usr/local/www/widgets/widgets/installed_packages.widget.php
index 6795d36..3ecb0ec 100644
--- a/usr/local/www/widgets/widgets/installed_packages.widget.php
+++ b/usr/local/www/widgets/widgets/installed_packages.widget.php
@@ -1,36 +1,38 @@
<?php
/*
- $Id$
- Copyright 2007 Scott Dale
- Part of pfSense widgets (www.pfsense.com)
- originally based on m0n0wall (http://m0n0.ch/wall)
+ $Id$
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (www.pfsense.com)
+ originally based on m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
@@ -48,76 +50,69 @@ $updateavailable = false;
?>
<table width="100%" border="0" cellpadding="6" cellspacing="0">
- <tr>
- <td width="15%" class="listhdrr">Package Name</td>
- <td width="15%" class="listhdrr">Category</td>
- <td width="30%" class="listhdrr">Package Version</td>
- </tr>
- <?php
- if($config['installedpackages']['package'] != "") {
- $instpkgs = array();
- foreach($config['installedpackages']['package'] as $instpkg) $instpkgs[] = $instpkg['name'];
- asort($instpkgs);
- $y=1;
- foreach ($instpkgs as $index => $pkgname){
-
+ <tr>
+ <td width="15%" class="listhdrr">Package Name</td>
+ <td width="15%" class="listhdrr">Category</td>
+ <td width="30%" class="listhdrr">Package Version</td>
+ </tr>
+ <?php
+ if($config['installedpackages']['package'] != "") {
+ $instpkgs = array();
+ foreach($config['installedpackages']['package'] as $instpkg)
+ $instpkgs[] = $instpkg['name'];
+ natcasesort($instpkgs);
+ $y=1;
+ foreach ($instpkgs as $index => $pkgname){
+
$pkg = $config['installedpackages']['package'][$index];
- if($pkg['name'] <> "") {
- ?>
- <tr valign="top">
- <td class="listlr">
- <?= $pkg['name'] ?>
- </td>
- <td class="listlr">
- <?= $pkg['category'] ?>
- </td>
- <td class="listlr">
- <?php
- $latest_package = $currentvers[$pkg['name']]['version'];
- if($latest_package == false)
- {
- // We can't determine this package's version status.
- echo "Current: Unknown.<br>Installed: " . $pkg['version'];
- }
- elseif(strcmp($pkg['version'], $latest_package) > 0)
- {
- /* we're running a newer version of the package */
- echo "Current: {$latest_package}";
- echo "<br>Installed: {$pkg['version']}";
- }
- elseif(strcmp($pkg['version'], $latest_package) < 0)
- {
- /* our package is out of date */
- $updateavailable = true;
- ?>
- <div id="updatediv-<?php echo $y; ?>" style="color:red">
- <b>Update Available!</b></div><div style="float:left">
- Current: <?php echo $latest_package; ?><br/>
- Installed: <?php echo $pkg['version']; ?></div><div style="float:right">
- <a href="pkg_mgr_install.php?mode=reinstallpkg&pkg=<?= $pkg['name']; ?>"><img title="Update this package." src="./themes/<?= $g['theme']; ?>/images/icons/icon_reinstall_pkg.gif" width="17" height="17" border="0"</a>
- </div>
- <?php $y++;
- }
- else
- {
- echo $pkg['version'];
- }
- ?></td>
- </tr>
- <?php
- }
- }
- } else {
- echo "<tr><td colspan=\"5\"><center>There are no packages currently installed.</td></tr>";
- }
- ?>
- </table>
-
+ if($pkg['name'] <> "") { ?>
+ <tr valign="top">
+ <td class="listlr">
+ <?= $pkg['name'] ?>
+ </td>
+ <td class="listlr">
+ <?= $pkg['category'] ?>
+ </td>
+ <td class="listlr">
+ <?php
+ $latest_package = $currentvers[$pkg['name']]['version'];
+ if($latest_package == false) {
+ // We can't determine this package's version status.
+ echo "Current: Unknown.<br>Installed: " . $pkg['version'];
+ } elseif(strcmp($pkg['version'], $latest_package) > 0) {
+ /* we're running a newer version of the package */
+ echo "Current: {$latest_package}";
+ echo "<br>Installed: {$pkg['version']}";
+ } elseif(strcmp($pkg['version'], $latest_package) < 0) {
+ /* our package is out of date */
+ $updateavailable = true;
+ ?>
+ <div id="updatediv-<?php echo $y; ?>" style="color:red">
+ <b>Update Available!</b></div><div style="float:left">
+ Current: <?php echo $latest_package; ?><br/>
+ Installed: <?php echo $pkg['version']; ?></div><div style="float:right">
+ <a href="pkg_mgr_install.php?mode=reinstallpkg&pkg=<?= $pkg['name']; ?>"><img title="Update this package." src="./themes/<?= $g['theme']; ?>/images/icons/icon_reinstall_pkg.gif" width="17" height="17" border="0"/></a>
+ </div>
+ <?php
+ $y++;
+ } else {
+ echo $pkg['version'];
+ } ?>
+ </td>
+ </tr>
+ <?php }
+ }
+ } else {
+ echo "<tr><td colspan=\"5\"><center>There are no packages currently installed.</td></tr>";
+ }
+ ?>
+</table>
+
<?php if ($updateavailable): ?>
<script language="javascript" type="text/javascript">
window.onload = function(in_event)
- {
- for (y=1; y<=<?php echo $y;?>; y++){
+ {
+ for (y=1; y<=<?php echo $y;?>; y++){
textID = "updatediv-" + y;
Effect.Pulsate(textID,{from:0.1});
}
diff --git a/usr/local/www/widgets/widgets/interface_statistics.widget.php b/usr/local/www/widgets/widgets/interface_statistics.widget.php
index 3fcf8a6..7dca538 100644
--- a/usr/local/www/widgets/widgets/interface_statistics.widget.php
+++ b/usr/local/www/widgets/widgets/interface_statistics.widget.php
@@ -31,6 +31,8 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
diff --git a/usr/local/www/widgets/widgets/interfaces.widget.php b/usr/local/www/widgets/widgets/interfaces.widget.php
index d74f690..626e067 100644
--- a/usr/local/www/widgets/widgets/interfaces.widget.php
+++ b/usr/local/www/widgets/widgets/interfaces.widget.php
@@ -30,6 +30,9 @@
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
+
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
diff --git a/usr/local/www/widgets/widgets/ipsec.widget.php b/usr/local/www/widgets/widgets/ipsec.widget.php
index 4966dd7..dd0c10e 100644
--- a/usr/local/www/widgets/widgets/ipsec.widget.php
+++ b/usr/local/www/widgets/widgets/ipsec.widget.php
@@ -31,6 +31,8 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("functions.inc");
require_once("ipsec.inc");
diff --git a/usr/local/www/widgets/widgets/load_balancer_status.widget.php b/usr/local/www/widgets/widgets/load_balancer_status.widget.php
index c1cf979..63f8bc4 100644
--- a/usr/local/www/widgets/widgets/load_balancer_status.widget.php
+++ b/usr/local/www/widgets/widgets/load_balancer_status.widget.php
@@ -1,137 +1,144 @@
<?php
/*
- $Id$
- Copyright 2007 Scott Dale
- Part of pfSense widgets (www.pfsense.com)
- originally based on m0n0wall (http://m0n0.ch/wall)
+ Copyright 2010 Jim Pingle
+ Portions copied from status_lb_pool.php, status_lb_vs.php, and vslb.inc:
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2005-2008 Bill Marquette
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
+ Part of pfSense widgets (www.pfsense.com)
+ originally based on m0n0wall (http://m0n0.ch/wall)
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
+require_once("vslb.inc");
+
+$now = time();
+$year = date("Y");
- if (!is_array($config['load_balancer']['lbpool'])) {
+if (!is_array($config['load_balancer']['lbpool'])) {
$config['load_balancer']['lbpool'] = array();
- }
- if (!is_array($config['load_balancer']['virtual_server'])) {
- $config['load_balancer']['virtual_server'] = array();
- }
- $a_vs = &$config['load_balancer']['virtual_server'];
- $a_pool = &$config['load_balancer']['lbpool'];
-
- $slbd_logfile = "{$g['varlog_path']}/slbd.log";
-
- $nentries = $config['syslog']['nentries'];
- if (!$nentries)
- $nentries = 50;
-
- $now = time();
- $year = date("Y");
-
-
+}
+if (!is_array($config['load_balancer']['virtual_server'])) {
+ $config['load_balancer']['virtual_server'] = array();
+}
+$a_vs = &$config['load_balancer']['virtual_server'];
+$a_pool = &$config['load_balancer']['lbpool'];
+$rdr_a = get_lb_redirects();
+$relay_hosts = get_lb_summary();
+
+$lb_logfile = "{$g['varlog_path']}/relayd.log";
+$nentries = $config['syslog']['nentries'];
+if (!$nentries)
+ $nentries = 50;
+
?>
- <table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td width="10%" class="listhdrr">Name</td>
- <td width="10%" class="listhdrr">Port</td>
- <td width="10%" class="listhdrr">Servers</td>
- <td width="30%" class="listhdrr">Status</td>
- <td width="30%" class="listhdr">Description</td>
- </tr>
- <?php $i = 0; foreach ($a_vs as $vsent): ?>
- <tr>
- <td class="listlr">
- <?=$vsent['name'];?>
- </td>
- <td class="listr" align="center" >
- <?=$vsent['port'];?>
- <br />
- </td>
- <td class="listr" align="center" >
- <table border="0" cellpadding="0" cellspacing="2">
- <?php
- foreach ($a_pool as $vipent) {
- if ($vipent['name'] == $vsent['pool']) {
- foreach ((array) $vipent['servers'] as $server) {
- PRINT "<tr><td> {$server} </td></tr>";
- }
+<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td width="10%" class="listhdrr">Server</td>
+ <td width="10%" class="listhdrr">Pool</td>
+ <td width="30%" class="listhdr">Description</td>
+ </tr>
+ <?php $i = 0; foreach ($a_vs as $vsent): ?>
+ <tr>
+ <?php
+ switch (trim($rdr_a[$vsent['name']]['status'])) {
+ case 'active':
+ $bgcolor = "lightgreen";
+ $rdr_a[$vsent['name']]['status'] = "Active";
+ break;
+ case 'down':
+ $bgcolor = "lightcoral";
+ $rdr_a[$vsent['name']]['status'] = "Down";
+ break;
+ default:
+ $bgcolor = "lightgray";
+ $rdr_a[$vsent['name']]['status'] = 'Unknown - relayd not running?';
+ }
+ ?>
+ <td class="listlr">
+ <?=$vsent['name'];?><br/>
+ <span style="background-color: <?=$bgcolor?>; display: block"><i><?=$rdr_a[$vsent['name']]['status']?></i></span>
+ <?=$vsent['ipaddr'].":".$vsent['port'];?><br/>
+ </td>
+ <td class="listr" align="center" >
+ <table border="0" cellpadding="0" cellspacing="2">
+ <?php
+ foreach ($a_pool as $pool) {
+ if ($pool['name'] == $vsent['pool']) {
+ $pool_hosts=array();
+ foreach ((array) $pool['servers'] as $server) {
+ $svr['ip']['addr']=$server;
+ $svr['ip']['state']=$relay_hosts[$pool['name'].":".$pool['port']][$server]['state'];
+ $svr['ip']['avail']=$relay_hosts[$pool['name'].":".$pool['port']][$server]['avail'];
+ $pool_hosts[]=$svr;
}
- }
- ?>
- </table>
- </td>
- <td class="listr" >
- <table border="0" cellpadding="0" cellspacing="2">
- <?php
- $poolfile = "{$g['tmp_path']}/{$vsent['name']}.pool";
- if(file_exists("$poolfile")) {
- $poolstatus = file_get_contents("$poolfile");
+ foreach ((array) $pool['serversdisabled'] as $server) {
+ $svr['ip']['addr']="$server";
+ $svr['ip']['state']='disabled';
+ $svr['ip']['avail']='disabled';
+ $pool_hosts[]=$svr;
}
- foreach ($a_pool as $vipent) {
- if ($vipent['name'] == $vsent['pool']) {
- foreach ((array) $vipent['servers'] as $server) {
- $lastchange = "";
- $monitorip = $server;
- $logstates = return_clog($slbd_logfile, $nentries, array("$monitorip", "marking"), true);
- $logstates = $logstates[0];
-
- if(stristr($logstates, $monitorip)) {
- $date = preg_split("/[ ]+/" , $logstates);
- $lastchange = "$date[0] $date[1] $year $date[2]";
- }
- if(stristr($poolstatus, $monitorip)) {
- $online = "Online";
- $bgcolor = "lightgreen";
- $change = $now - strtotime("$lastchange");
- if($change < 300) {
- $bgcolor = "khaki";
- }
- } else {
- $online = "Offline";
- $bgcolor = "lightcoral";
+ asort($pool_hosts);
+ foreach ((array) $pool_hosts as $server) {
+ if($server['ip']['addr']!="") {
+ switch ($server['ip']['state']) {
+ case 'up':
+ $bgcolor = "lightgreen";
+ $checked = "checked";
+ break;
+ case 'disabled':
+ $bgcolor = "white";
+ $checked = "";
+ break;
+ default:
+ $bgcolor = "lightcoral";
+ $checked = "checked";
}
- PRINT "<tr><td bgcolor=\"$bgcolor\" > $online </td><td>";
- if($lastchange <> "") {
- PRINT "Last change $lastchange";
- } else {
- PRINT "No changes found in logfile";
- }
- PRINT "</td></tr>";
- }
+ echo "<tr>";
+ echo "<td bgcolor={$bgcolor}> {$server['ip']['addr']}:{$pool['port']} </td><td bgcolor={$bgcolor}>";
+ if($server['ip']['avail'])
+ echo " ({$server['ip']['avail']}) ";
+ echo "</td></tr>";
+ }
}
}
- ?>
- </table>
- </td>
- <td class="listbg" >
- <font color="#FFFFFF"><?=$vipent['descr'];?></font>
- </td>
- </tr>
- <?php $i++; endforeach; ?>
- </table>
+ }
+ ?>
+ </table>
+ </td>
+ <td class="listbg" >
+ <font color="#FFFFFF"><?=$vsent['descr'];?></font>
+ </td>
+ </tr>
+ <?php $i++; endforeach; ?>
+</table>
diff --git a/usr/local/www/widgets/widgets/log.widget.php b/usr/local/www/widgets/widgets/log.widget.php
index c46a6ab..84f6585 100644
--- a/usr/local/www/widgets/widgets/log.widget.php
+++ b/usr/local/www/widgets/widgets/log.widget.php
@@ -30,6 +30,9 @@
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
+
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
diff --git a/usr/local/www/widgets/widgets/openvpn.widget.php b/usr/local/www/widgets/widgets/openvpn.widget.php
index 25454c8..fdf2e3c 100644
--- a/usr/local/www/widgets/widgets/openvpn.widget.php
+++ b/usr/local/www/widgets/widgets/openvpn.widget.php
@@ -1,4 +1,7 @@
<?php
+
+$nocsrf = true;
+
require_once("openvpn.inc");
/* Handle AJAX */
diff --git a/usr/local/www/widgets/widgets/picture.widget.php b/usr/local/www/widgets/widgets/picture.widget.php
index 7f25af4..90bf288 100644
--- a/usr/local/www/widgets/widgets/picture.widget.php
+++ b/usr/local/www/widgets/widgets/picture.widget.php
@@ -26,6 +26,7 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
diff --git a/usr/local/www/widgets/widgets/rss.widget.php b/usr/local/www/widgets/widgets/rss.widget.php
index d81fa4d..0843684 100644
--- a/usr/local/www/widgets/widgets/rss.widget.php
+++ b/usr/local/www/widgets/widgets/rss.widget.php
@@ -26,6 +26,8 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
diff --git a/usr/local/www/widgets/widgets/services_status.widget.php b/usr/local/www/widgets/widgets/services_status.widget.php
index 862a069..f41e7f5 100644
--- a/usr/local/www/widgets/widgets/services_status.widget.php
+++ b/usr/local/www/widgets/widgets/services_status.widget.php
@@ -29,6 +29,8 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("captiveportal.inc");
require_once("service-utils.inc");
@@ -175,7 +177,14 @@ if(isset($_POST['servicestatusfilter'])) {
<?php
$skipservices = explode(",", str_replace(" ", "", $config['widgets']['servicestatusfilter']));
+function service_name_compare($a, $b) {
+ if (strtolower($a['name']) == strtolower($b['name']))
+ return 0;
+ return (strtolower($a['name']) < strtolower($b['name'])) ? -1 : 1;
+}
+
if (count($services) > 0) {
+ uasort($services, "service_name_compare");
foreach($services as $service) {
if((!$service['name']) || (in_array($service['name'], $skipservices)))
continue;
diff --git a/usr/local/www/widgets/widgets/system_information.widget.php b/usr/local/www/widgets/widgets/system_information.widget.php
index 9604461..1b9683a 100644
--- a/usr/local/www/widgets/widgets/system_information.widget.php
+++ b/usr/local/www/widgets/widgets/system_information.widget.php
@@ -31,11 +31,12 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("functions.inc");
require_once("guiconfig.inc");
require_once('notices.inc');
-
if($_REQUEST['getupdatestatus']) {
if(isset($curcfg['alturl']['enable']))
$updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}";
diff --git a/usr/local/www/widgets/widgets/traffic_graphs.widget.php b/usr/local/www/widgets/widgets/traffic_graphs.widget.php
index 9d1e76c..4686d0b 100644
--- a/usr/local/www/widgets/widgets/traffic_graphs.widget.php
+++ b/usr/local/www/widgets/widgets/traffic_graphs.widget.php
@@ -31,6 +31,8 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+$nocsrf = true;
+
require_once("guiconfig.inc");
require_once("pfsense-utils.inc");
require_once("functions.inc");
diff --git a/usr/local/www/widgets/widgets/wake_on_lan.widget.php b/usr/local/www/widgets/widgets/wake_on_lan.widget.php
new file mode 100644
index 0000000..598dc1f
--- /dev/null
+++ b/usr/local/www/widgets/widgets/wake_on_lan.widget.php
@@ -0,0 +1,76 @@
+<?php
+/*
+ wake_on_lan.widget.php
+ Copyright (C) 2010 Yehuda Katz
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INClUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$nocsrf = true;
+
+require_once("/usr/local/www/widgets/include/wake_on_lan.inc");
+
+if (is_array($config['wol']['wolentry']))
+ $wolcomputers = $config['wol']['wolentry'];
+else
+ $wolcomputers = array();
+
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <?
+ echo '<td class="widgetsubheader"><b><center>' . gettext("Computer / Device") . '</center></b></td>';
+ echo '<td class="widgetsubheader"><b><center>' . gettext("Interface") . '</center></b></td>';
+ echo '<td class="widgetsubheader"><b><center>' . gettext("Status") . '</center></b></td>';
+ ?>
+ <td class="widgetsubheader">&nbsp;</td>
+ </tr>
+<?php
+
+if (count($wolcomputers) > 0) {
+ foreach($wolcomputers as $wolent) {
+ echo '<tr><td class="listlr">' . $wolent['descr'] . '<br />' . $wolent['mac'] . '</td>' . "\n";
+ echo '<td class="listr">' . convert_friendly_interface_to_friendly_descr($wolent['interface']) . '</td>' . "\n";
+
+ $is_active = exec("/usr/sbin/arp -an |/usr/bin/grep {$wolent['mac']}| /usr/bin/wc -l|/usr/bin/awk '{print $1;}'");
+ if($is_active == 1) {
+ echo '<td class="listr"><center>' . "\n";
+ echo "<img src=\"/themes/" . $g["theme"] . "/images/icons/icon_pass.gif\"> " . gettext("Online") . "</td>\n";
+ } else {
+ echo '<td class="listbg"><center>' . "\n";
+ echo "<img src=\"/themes/" . $g["theme"] . "/images/icons/icon_block.gif\"> <font color=\"white\">" . gettext("Offline") . "</td>\n";
+ }
+ echo '<td valign="middle" class="list" nowrap>';
+ /*if($is_active) { */
+ /* Will always show wake-up button even if pfsense thinks it is awake */
+ /* } else { */
+ echo "<a href='services_wol.php?mac={$wolent['mac']}&if={$wolent['interface']}'> ";
+ echo "<img title='" . gettext("Wake Up") . "' border='0' src='./themes/".$g['theme']."/images/icons/icon_wol_all.gif'></a>\n";
+ /* } */
+ echo "</td></tr>\n";
+ }
+} else {
+ echo "<tr><td colspan=\"3\"><center>" . gettext("No saved WoL addresses") . ".</td></tr>\n";
+}
+?>
+</table>
+<center><a href="status_dhcp_leases.php" class="navlink">DHCP Leases Status</a></center>
diff --git a/usr/local/www/wizards/openvpn_wizard.inc b/usr/local/www/wizards/openvpn_wizard.inc
index 35bca7c..5af4510 100644
--- a/usr/local/www/wizards/openvpn_wizard.inc
+++ b/usr/local/www/wizards/openvpn_wizard.inc
@@ -321,6 +321,15 @@ function step10_stepbeforeformdisplay() {
$opt['value'] = $name;
$pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
}
+ } else if ($field['name'] == "engine") {
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
+ $engines = openvpn_get_engines();
+ foreach ($engines as $name => $desc) {
+ $opt = array();
+ $opt['name'] = $desc;
+ $opt['value'] = $name;
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
+ }
} else if ($field['name'] == "nbttype") {
$pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
foreach ($netbios_nodetypes as $type => $name) {
@@ -550,6 +559,8 @@ function step12_submitphpaction() {
$server['passtos'] = $pconfig['step10']['tos'];
if (isset($pconfig['step10']['interclient']))
$server['client2client'] = $pconfig['step10']['interclient'];
+ if (isset($pconfig['step10']['duplicate_cn']))
+ $server['duplicate_cn'] = $pconfig['step10']['duplicate_cn'];
if (isset($pconfig['step10']['dynip']))
$server['dynamic_ip'] = $pconfig['step10']['dynip'];
if (isset($pconfig['step10']['addrpool']))
@@ -579,6 +590,7 @@ function step12_submitphpaction() {
$server['netbios_enable'] = $pconfig['step10']['nbtenable'];
}
$server['crypto'] = $pconfig['step10']['crypto'];
+ $server['engine'] = $pconfig['step10']['engine'];
if (isset($pconfig['step11']['ovpnrule'])) {
$rule = array();
diff --git a/usr/local/www/wizards/openvpn_wizard.xml b/usr/local/www/wizards/openvpn_wizard.xml
index c7c561e..5a7ca5b 100644
--- a/usr/local/www/wizards/openvpn_wizard.xml
+++ b/usr/local/www/wizards/openvpn_wizard.xml
@@ -692,6 +692,19 @@
<description>&lt;br/&gt;The method used to encrypt traffic between endpoints. This setting must match on the client and server side, but is otherwise set however you like. Certain algorithms will perform better on different hardware, depending on the availability of supported VPN accelerator chips.</description>
</field>
<field>
+ <name>engine</name>
+ <type>select</type>
+ <displayname>Hardware Crypto</displayname>
+ <bindstofield>ovpnserver->step10->engine</bindstofield>
+ <options>
+ <option>
+ <name>dummy</name>
+ <value>dummy</value>
+ </option>
+ </options>
+ <description>&lt;br/&gt;The hardware cryptographic accelerator to use for this VPN connection, if any.</description>
+ </field>
+ <field>
<type>listtopic</type>
<name>Tunnel Settings</name>
</field>
@@ -748,6 +761,13 @@
<bindstofield>ovpnserver->step10->interclient</bindstofield>
</field>
<field>
+ <displayname>Duplicate Connections</displayname>
+ <name>duplicate_cn</name>
+ <type>checkbox</type>
+ <description>Allow multiple concurrent connections from clients using the same Common Name.&lt;br/&gt;NOTE: This is not generally recommended, but may be needed for some scenarios.</description>
+ <bindstofield>ovpnserver->step10->duplicate_cn</bindstofield>
+ </field>
+ <field>
<type>listtopic</type>
<name>Client Settings</name>
</field>
@@ -820,6 +840,7 @@
<name>nbtenable</name>
<type>checkbox</type>
<displayname>NetBIOS Options</displayname>
+ <bindstofield>ovpnserver->step10->nbtenable</bindstofield>
<description>Enable NetBIOS over TCP/IP. &lt;br/&gt;If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled. </description>
</field>
<field>
@@ -941,4 +962,4 @@
<stepsubmitphpaction>step12_submitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
</step>
-</pfsensewizard>
+</pfsensewizard> \ No newline at end of file
diff --git a/usr/local/www/wizards/setup_wizard.xml b/usr/local/www/wizards/setup_wizard.xml
index 6b0627c..5a33d39 100644
--- a/usr/local/www/wizards/setup_wizard.xml
+++ b/usr/local/www/wizards/setup_wizard.xml
@@ -218,13 +218,6 @@
<type>listtopic</type>
</field>
<field>
- <name>interface</name>
- <type>interface_select</type>
- <donotdisable>true</donotdisable>
- <displayname>Interface</displayname>
- <bindstofield>interfaces->wan->if</bindstofield>
- </field>
- <field>
<donotdisable>true</donotdisable>
<name>MAC Address</name>
<bindstofield>interfaces->wan->spoofmac</bindstofield>
diff --git a/usr/local/www/wizards/traffic_shaper_wizard.inc b/usr/local/www/wizards/traffic_shaper_wizard.inc
index 05c3671..b684fb6 100644
--- a/usr/local/www/wizards/traffic_shaper_wizard.inc
+++ b/usr/local/www/wizards/traffic_shaper_wizard.inc
@@ -223,7 +223,7 @@ function step2_stepsubmitphpaction() {
/* Input Validation */
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
- for ($j = $i + 1; $j < $steps; $j++) {
+ for ($j = $i + 1; $j <= $steps; $j++) {
$wannum = $i+1;
if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface for WAN# {$wannum} and WAN #{$j}.");
@@ -436,6 +436,9 @@ function step3_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
+ if (!$_POST['enable'])
+ return;
+
if($_POST['address']) {
if(!is_ipaddroralias($_POST['address'])) {
/* item is not an ip or alias. error out */
@@ -447,24 +450,22 @@ function step3_stepsubmitphpaction() {
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
- if ($_POST["conn{$i}upload"]) {
- if (!is_numeric($_POST["conn{$i}upload"])) {
- $wannum = $i + 1;
- $savemsg = gettext("Upload bandwidth of WAN #{$wannum} is not valid.");
- $stepid--;
- return;
- }
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
- $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $friendly_interface = $i+1;
- $savemsg=gettext("You cannot set the VoIP upload bandwidth on WAN #{$friendly_interface} higher than 80% of the connection.");
- $stepid--;
- return;
- }
+ if (!is_numeric($_POST["conn{$i}upload"])) {
+ $wannum = $i + 1;
+ $savemsg = gettext("Upload bandwidth of WAN #{$wannum} is not valid.");
+ $stepid--;
+ return;
}
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
+ $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $friendly_interface = $i+1;
+ $savemsg=gettext("You cannot set the VoIP upload bandwidth on WAN #{$friendly_interface} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
}
$config['ezshaper']['step3']['download'] = $_POST['download'];
@@ -515,7 +516,7 @@ function step5_stepsubmitphpaction() {
global $stepid, $savemsg;
if ( $_POST['enable'] ) {
- if (isset($_POST['bandwidth']) && $_POST['bandwidth'] <> "") {
+ if ($_POST['p2pcatchall']) {
if(!is_numeric($_POST['bandwidth'])) {
$savemsg="Posted value is not a valid bandwidth.";
$stepid--;
@@ -586,7 +587,7 @@ function apply_all_choosen_items() {
$lanbw = 0;
for ($i = 0; $i < $steps; $i++) {
$down = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $input_bw = $config['ezshaper']['step2']["conn{$i}download"] * $down;
+ $input_bw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $down;
$lanbw += $input_bw;
}
@@ -623,45 +624,42 @@ function apply_all_choosen_items() {
$upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor;
if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
- $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
- if ($sched != "HFSC") {
- if ($voipbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += $voipbw * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s forHFSC linksharing */
+ $voip = true;
+ $voipbw = floatval($config['ezshaper']['step3']["conn{$i}upload"]);
+ $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
+ if ($voipbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($voipbwunit);
+ $remainbw += $voipbw * $factor;
}
if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += $penaltybw * $factor;
+ $penalty = true;
+ $penaltybw = $config['ezshaper']['step4']['bandwidth'];
+ $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
+ if ($penaltybwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
+ $remainbw += $penaltybw * $factor;
} else {
- $penalty = false;
- $penaltybw = 0;
+ $penalty = false;
+ $penaltybw = 0;
}
if ($config['ezshaper']['step5']['enable']) {
$p2p = true;
if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += $p2pcatchbw * $factor;
+ $p2pcatchall = true;
+ $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
+ $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
+ if ($p2pcatchbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
+ $remainbw += $p2pcatchbw * $factor;
} else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
}
} else {
$p2p = false;
@@ -943,392 +941,6 @@ function apply_all_choosen_items() {
array_pop($tmppath);
}
-/* LAN bandwidth ----------------------------------------------------------------------------------------- */
-
- $tmppath = array();
- $altq =& new altq_root_queue();
-
- $altq->SetInterface('lan');
- $altq->SetScheduler($config['ezshaper']['step2']["downloadscheduler"]);
- $altq->SetBandwidth($lanbw/1000);
- $altq->SetBwscale("Kb");
- $altq->SetEnabled("on");
- $altq_list_queues[$altq->GetQname()] =& $altq;
- array_push($tmppath, 'lan');
- $altq->SetLink($tmppath);
- //var_dump($input_errors);
- $altq->wconfig();
-
- $sched = $config['ezshaper']['step2']["downloadscheduler"];
- $voipbw =0;
- $voipbwunit = "%";
- $voip = false;
- $penalty = false;
- $penaltybw = 0;
- $penaltybwunit = "%";
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- $games = false;
- $otherpriority = false;
- $remainbw = 0;
-
-
- if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["download"];
- $voipbwunit = $config['ezshaper']['step3']["downloadspeed"];
- if ($sched != "HFSC") {
- if ($voipbwunit == "%")
- $factor = $lanbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += $voipbw * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s forHFSC linksharing */
- }
- if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $lanbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += $penaltybw * $factor;
- } else {
- $penalty = false;
- $penaltybw = 0;
- }
- if ($config['ezshaper']['step5']['enable']) {
- $p2p = true;
- if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $lanbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += $p2pcatchbw * $factor;
- } else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- } else {
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- if ($config['ezshaper']['step6']['enable']) {
- $games = true;
- } else {
- $games = false;
- }
-
- if ($config['ezshaper']['step7']['enable']) {
- $otherpriority = true;
- } else {
- $otherpriority = false;
- }
- $remainbw = round($remainbw / $lanbw * 100, 2);
-
- if ($remainbw > 0 && $remainbw > 30) {
- $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
- header("Location: wizard.php?xml=traffic_shaper_wizard.xml&stepid=2&message={$savemsg}");
- exit;
- } else {
- $remainbw = 100 - $remainbw;
- }
-
- if ($sched != "PRIQ") {
- if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qInternet";
- //$tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['bandwidth'] = $lanbw/1000;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- else if ($sched == "HFSC") {
- $tmpcf['linkshare3'] = $lanbw/1000 ."Kb";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = $lanbw/1000 ."Kb";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lanbw/1000;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qInternet");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- //array_pop($tmppath);
- //echo "qInternet <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- $altq =& $qtmp;
- }
-
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qACK";
- $tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2;
- $tmpcf['bandwidthtype'] = "%";
- }
- else if ($sched == "HFSC") {
- $lkbw = 0.20 * $remainbw;
- $tmpcf['linkshare3'] = "{$lkbw}%";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lkbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qACK");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qACK <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- if ($p2pcatchall)
- $tmpcf['name'] = "qOthersDefault";
- else
- $tmpcf['name'] = "qDefault";
- $tmpcf['priority'] = 3;
- $tmpcf['enabled'] = "on";
- if (!$p2pcatchall)
- $tmpcf['default'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, $tmpcf['name']);
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qDefault <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($p2p) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qP2P";
- $tmpcf['priority'] = 1;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($p2pcatchall) {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- }
- $tmpcf['default'] = "on";
-
- } else {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$tmpbw}%";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$tmpbw}%";
- $tmpcf['bandwidth'] = $tmpbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- }
- array_push($tmppath, "qP2P");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qP2P <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($voip) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qVoIP";
- $tmpcf['priority'] = 7;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($voipbw > 0) {
- $tmpcf['bandwidth'] = $voipbw;
- $tmpcf['bandwidthtype'] = $voipbwunit;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($voipbw > 0) {
- $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
- } else {
- $voipbw = $remainbw * 0.20; /* 20% bandwidth */
- $tmpcf['realtime3'] = "{$voipbw}%";
- }
- $tmpcf['realtime'] = "on";
- $tmpcf['bandwidth'] = 32;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qVoIP");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qVoIP <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($games) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qGames";
- $tmpcf['priority'] = 5;
- $tmpcf['enabled'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$gamesbw}%";
- $tmpcf['bandwidth'] = "{$gamesbw}";
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qGames");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qGames <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($otherpriority) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersHigh";
- $tmpcf['priority'] = 4;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $otherbw = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['linkshare3'] = "{$otherbw}%";
- $tmpcf['bandwidth'] = $otherbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qOthersHigh");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qHigh <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersLow";
- $tmpcf['priority'] = 2;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($penalty)
- $tmpcf['bandwidth'] = $penaltybw;
- else
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- if ($penalty) {
- $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $lsbw = $remainbw * 0.05;
- $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
- $tmpcf['bandwidth'] = $lsbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- $tmpcf['linkshare'] = "on";
- }
- array_push($tmppath, "qOthersLow");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qLow <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
- array_pop($tmppath);
-
-/* End LAN bandwidth ------------------------------------------------------------------------------------- */
-
-
if (!is_array($config['filter']['rule']))
$config['filter']['rule'] = array();
@@ -1504,23 +1116,23 @@ function apply_all_choosen_items() {
write_config();
}
-function wizard_get_bandwidthtype_scale($type) {
+function wizard_get_bandwidthtype_scale($type = "b") {
switch ($type) {
case "Gb":
- $factor = 1000 * 1000 * 1000;
+ $factor = 1024 * 1024 * 1024;
break;
case "Mb":
- $factor = 1000 * 1000;
+ $factor = 1024 * 1024;
break;
case "Kb":
- $factor = 1000;
+ $factor = 1024;
break;
case "b":
default:
$factor = 1;
break;
}
- return floatval($factor);
+ return intval($factor);
}
?>
diff --git a/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc b/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc
index 50fa627..b59c5a7 100755
--- a/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc
+++ b/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc
@@ -246,7 +246,7 @@ function step2_stepsubmitphpaction() {
/* Input Validation */
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
- for ($j = $i + 1; $j < $steps; $j++) {
+ for ($j = $i + 1; $j <= $steps; $j++) {
if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}.");
$stepid--;
@@ -450,6 +450,9 @@ function step3_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
+ if (!$_POST['enable'])
+ return;
+
if($_POST['address']) {
if(!is_ipaddroralias($_POST['address'])) {
/* item is not an ip or alias. error out */
@@ -461,39 +464,35 @@ function step3_stepsubmitphpaction() {
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
- if ($_POST["conn{$i}upload"]) {
- if (!is_numeric($_POST["conn{$i}upload"])) {
- $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
- $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
+ if (!is_numeric($_POST["conn{$i}upload"])) {
+ $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
}
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
+ $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
- if ($_POST["local{$i}download"]) {
- if (!is_numeric($_POST["local{$i}download"])) {
- $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}download"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
- $input_bw = $factor * floatval($_POST["local{$i}download"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
+ if (!is_numeric($_POST["local{$i}download"])) {
+ $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
}
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}download"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
+ $input_bw = $factor * floatval($_POST["local{$i}download"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
}
for ($i = 0; $i < $steps; $i++) {
@@ -543,7 +542,7 @@ function step5_stepsubmitphpaction() {
global $stepid, $savemsg;
if ( $_POST['enable'] ) {
- if (isset($_POST['bandwidth']) && $_POST['bandwidth'] <> "") {
+ if ($_POST['p2pcatchall']) {
if(!is_numeric($_POST['bandwidth'])) {
$savemsg="Posted value is not a valid bandwidth.";
$stepid--;
@@ -560,7 +559,7 @@ function step5_stepsubmitphpaction() {
$stepid--;
return;
}
- }
+ }
}
}
@@ -645,48 +644,42 @@ function apply_all_choosen_items() {
$upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor;
if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
- $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
- if ($sched != "HFSC") {
- if ($voipbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += $voipbw * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s forHFSC linksharing */
- //echo "<br/>" .$remainbw . " : hmmm " .intval($config['ezshaper']['step3']["conn{$i}upload"]) ."/". $factor;
+ $voip = true;
+ $voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
+ $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
+ if ($voipbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($voipbwunit);
+ $remainbw += $voipbw * $factor;
}
if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += $penaltybw * $factor;
- //echo "<br/>".$remainbw . " : hmmm " . ($config['ezshaper']['step4']['bandwidth']) . " / " .$factor;
+ $penalty = true;
+ $penaltybw = $config['ezshaper']['step4']['bandwidth'];
+ $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
+ if ($penaltybwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
+ $remainbw += $penaltybw * $factor;
} else {
- $penalty = false;
- $penaltybw = 0;
+ $penalty = false;
+ $penaltybw = 0;
}
if ($config['ezshaper']['step5']['enable']) {
$p2p = true;
if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += $p2pcatchbw * $factor;
- //echo "<br/>".$remainbw . " : hmmm " . floatval($config['ezshaper']['step5']['bandwidth']) ."/".$factor;
+ $p2pcatchall = true;
+ $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
+ $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
+ if ($p2pcatchbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
+ $remainbw += $p2pcatchbw * $factor;
} else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
}
} else {
$p2p = false;
@@ -704,7 +697,6 @@ function apply_all_choosen_items() {
} else {
$otherpriority = false;
}
- //echo "<br/>" .$remainbw . " <br/>";
$remainbw = round($remainbw / $upbw * 100, 2);
if (intval($remainbw) > 0 && intval($remainbw) > 30) {
@@ -1002,389 +994,6 @@ function apply_all_choosen_items() {
}
array_pop($tmppath);
- $downfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $downbw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $downfactor;
-
- $tmppath = array();
- $altq =& new altq_root_queue();
-
- $altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]);
- $altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]);
- $altq->SetBandwidth($config['ezshaper']['step2']["conn{$i}download"]);
- $altq->SetBwscale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $altq->SetEnabled("on");
- $altq_list_queues[$altq->GetQname()] =& $altq;
- array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]);
- $altq->SetLink($tmppath);
- //var_dump($input_errors);
- $altq->wconfig();
-
- $sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"];
- $voipbw =0;
- $voipbwunit = "%";
- $voip = false;
- $penalty = false;
- $penaltybw = 0;
- $penaltybwunit = "%";
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- $games = false;
- $otherpriority = false;
- $remainbw = 0;
-
-
- if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["local{$i}download"];
- $voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"];
- if ($sched != HFSC) {
- if ($penaltybwunit == "%")
- $factor = $downbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += floatval($voipbw) * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s reserved for HFSC linksharing */
- }
- if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $downbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += floatval($penaltybw) * $factor;
- } else {
- $penalty = false;
- $penaltybw = 0;
- }
- if ($config['ezshaper']['step5']['enable']) {
- $p2p = true;
- if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $downbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += floatval($p2pcatchbw) * $factor;
- } else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- } else {
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- if ($config['ezshaper']['step6']['enable']) {
- $games = true;
- } else {
- $games = false;
- }
-
- if ($config['ezshaper']['step7']['enable']) {
- $otherpriority = true;
- } else {
- $otherpriority = false;
- }
- $remainbw = round($remainbw / $downbw * 100, 2);
- if (intval($remainbw) > 0 && intval($remainbw) > 40) {
- $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
- header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}");
- exit;
- } else {
- $remainbw = 100 - $remainbw;
- }
-
- if ($sched != "PRIQ") {
- if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qInternet";
- //$tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]);
- $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"];
- }
- else if ($sched == "HFSC") {
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"];
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"];
- $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]);
- $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"];
- }
- array_push($tmppath, "qInternet");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- //array_pop($tmppath);
- //echo "qInternet <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- $altq =& $qtmp;
- }
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qACK";
- $tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2;
- $tmpcf['bandwidthtype'] = "%";
- }
- else if ($sched == "HFSC") {
- $lkbw = 0.20 * $remainbw;
- $tmpcf['linkshare3'] = "{$lkbw}%";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lkbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qACK");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qACK $remainbw <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- if ($p2pcatchall)
- $tmpcf['name'] = "qOthersDefault";
- else
- $tmpcf['name'] = "qDefault";
- $tmpcf['priority'] = 3;
- $tmpcf['enabled'] = "on";
- if (!$p2pcatchall)
- $tmpcf['default'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, $tmpcf['name']);
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qDefault <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($p2p) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qP2P";
- $tmpcf['priority'] = 1;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($p2pcatchall) {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- }
- $tmpcf['default'] = "on";
-
- } else {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$tmpbw}%";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$tmpbw}%";
- $tmpcf['bandwidth'] = $tmpbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- }
- array_push($tmppath, "qP2P");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qP2P <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($voip) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qVoIP";
- $tmpcf['priority'] = 7;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($voipbw > 0) {
- $tmpcf['bandwidth'] = $voipbw;
- $tmpcf['bandwidthtype'] = $voipbwunit;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($voipbw > 0) {
- $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
- } else {
- $voipbw = $remainbw * 0.20; /* 20% bandwidth */
- $tmpcf['realtime3'] = "{$voipbw}%";
- }
- $tmpcf['realtime'] = "on";
- $tmpcf['bandwidth'] = 32;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qVoIP");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qVoIP <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($games) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qGames";
- $tmpcf['priority'] = 5;
- $tmpcf['enabled'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$gamesbw}%";
- $tmpcf['bandwidth'] = "{$gamesbw}";
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qGames");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qGames <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($otherpriority) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersHigh";
- $tmpcf['priority'] = 4;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $otherbw = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['linkshare3'] = "{$otherbw}%";
- $tmpcf['bandwidth'] = $otherbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qOthersHigh");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qHigh <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersLow";
- $tmpcf['priority'] = 2;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($penalty) {
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $tmpcf['bandwidthtype'] = "%";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- }
- } else if ($sched == "HFSC") {
- if ($penalty) {
- $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $lsbw = $remainbw * 0.05;
- $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
- $tmpcf['bandwidth'] = $lsbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- $tmpcf['linkshare'] = "on";
- }
- array_push($tmppath, "qOthersLow");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qLow <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
- array_pop($tmppath);
}
@@ -1564,16 +1173,16 @@ function apply_all_choosen_items() {
write_config();
}
-function wizard_get_bandwidthtype_scale($type) {
+function wizard_get_bandwidthtype_scale($type = "b") {
switch ($type) {
case "Gb":
- $factor = 1000 * 1000 * 1000;
+ $factor = 1024 * 1024 * 1024;
break;
case "Mb":
- $factor = 1000 * 1000;
+ $factor = 1024 * 1024;
break;
case "Kb":
- $factor = 1000;
+ $factor = 1024;
break;
case "b":
default:
diff --git a/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc b/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc
index 83c3e49..c6347da 100755
--- a/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc
+++ b/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc
@@ -254,7 +254,7 @@ function step2_stepsubmitphpaction() {
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
$localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
for ($i = 0; $i < $steps; $i++) {
- for ($j = $i + 1; $j < $steps; $j++) {
+ for ($j = $i + 1; $j <= $steps; $j++) {
if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}.");
$stepid--;
@@ -480,6 +480,9 @@ function step3_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
+ if (!$_POST['enable'])
+ return;
+
if($_POST['address']) {
if(!is_ipaddroralias($_POST['address'])) {
/* item is not an ip or alias. error out */
@@ -491,8 +494,7 @@ function step3_stepsubmitphpaction() {
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
- if ($_POST["conn{$i}upload"]) {
- if (!is_numeric($_POST["conn{$i}upload"])) {
+ if (!is_numeric($_POST["conn{$i}upload"])) {
$savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
$stepid--;
return;
@@ -505,27 +507,24 @@ function step3_stepsubmitphpaction() {
$savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
$stepid--;
return;
- }
- }
+ }
}
$localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
for ($i = 0; $i < $localint; $i++) {
- if ($_POST["local{$i}download"]) {
- if (!is_numeric($_POST["local{$i}download"])) {
- $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}download"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
- $input_bw = $factor * floatval($_POST["local{$i}download"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
+ if (!is_numeric($_POST["local{$i}download"])) {
+ $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}download"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
+ $input_bw = $factor * floatval($_POST["local{$i}download"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
}
}
@@ -570,14 +569,14 @@ function step4_stepsubmitphpaction() {
/* item is not an ip or alias. error out */
$savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
$stepid--;
- }
+ }
}
}
function step5_stepsubmitphpaction() {
global $stepid, $savemsg;
if ( $_POST['enable'] ) {
- if (isset($_POST['bandwidth']) && $_POST['bandwidth'] <> "") {
+ if ($_POST['p2pcatchall']) {
if(!is_numeric($_POST['bandwidth'])) {
$savemsg="Posted value is not a valid bandwidth.";
$stepid--;
@@ -681,75 +680,69 @@ function apply_all_choosen_items() {
$voip = true;
$voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
$voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
- if ($sched != "HFSC") {
- if ($voipbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += $voipbw * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s forHFSC linksharing */
- //echo "<br/>" .$remainbw . " : hmmm " .intval($config['ezshaper']['step3']["conn{$i}upload"]) ."/". $factor;
- }
- if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
+ if ($voipbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($voipbwunit);
+ $remainbw += $voipbw * $factor;
+ }
+ if ($config['ezshaper']['step4']['enable']) {
+ $penalty = true;
+ $penaltybw = $config['ezshaper']['step4']['bandwidth'];
+ $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
+ if ($penaltybwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
+ $remainbw += $penaltybw * $factor;
+ } else {
+ $penalty = false;
+ $penaltybw = 0;
+ }
+ if ($config['ezshaper']['step5']['enable']) {
+ $p2p = true;
+ if ($config['ezshaper']['step5']['p2pcatchall']) {
+ $p2pcatchall = true;
+ $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
+ $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
+ if ($p2pcatchbwunit == "%")
$factor = $upbw/100;
else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += $penaltybw * $factor;
- //echo "<br/>".$remainbw . " : hmmm " . ($config['ezshaper']['step4']['bandwidth']) . " / " .$factor;
- } else {
- $penalty = false;
- $penaltybw = 0;
- }
- if ($config['ezshaper']['step5']['enable']) {
- $p2p = true;
- if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += $p2pcatchbw * $factor;
- //echo "<br/>".$remainbw . " : hmmm " . floatval($config['ezshaper']['step5']['bandwidth']) ."/".$factor;
- } else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
+ $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
+ $remainbw += $p2pcatchbw * $factor;
} else {
- $p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
}
- if ($config['ezshaper']['step6']['enable']) {
- $games = true;
- } else {
- $games = false;
- }
+ } else {
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ if ($config['ezshaper']['step6']['enable']) {
+ $games = true;
+ } else {
+ $games = false;
+ }
- if ($config['ezshaper']['step7']['enable']) {
- $otherpriority = true;
- } else {
- $otherpriority = false;
- }
-
- $remainbw = round($remainbw / $upbw * 100, 2);
-
- if (intval($remainbw) > 0 && intval($remainbw) > 30) {
- $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
- header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
- exit;
- } else {
- $remainbw = 100 - $remainbw;
- }
+ if ($config['ezshaper']['step7']['enable']) {
+ $otherpriority = true;
+ } else {
+ $otherpriority = false;
+ }
+
+ $remainbw = round($remainbw / $upbw * 100, 2);
+
+ if (intval($remainbw) > 0 && intval($remainbw) > 30) {
+ $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
+ header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
+ exit;
+ } else {
+ $remainbw = 100 - $remainbw;
+ }
- if ($sched != "PRIQ") {
- if ($sched == "CBQ")
+ if ($sched != "PRIQ") {
+ if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
@@ -1039,404 +1032,6 @@ function apply_all_choosen_items() {
array_pop($tmppath);
}
-/* LAN bandwidth ----------------------------------------------------------------------------------------- */
- $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
- $lanbw = 0;
- for ($i = 0; $i < $steps; $i++) {
- $down = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $input_bw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $down;
- $lanbw += $input_bw;
- }
-
- for ($i = 0; $i < $localint; $i++) {
-
- $tmppath = array();
- $altq =& new altq_root_queue();
-
- $altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]);
- $altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]);
- $altq->SetBandwidth($lanbw/1000);
- $altq->SetBwscale("Kb");
- $altq->SetEnabled("on");
- $altq_list_queues[$altq->GetQname()] =& $altq;
- array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]);
- $altq->SetLink($tmppath);
- //var_dump($input_errors);
- $altq->wconfig();
-
- $sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"];
- $voipbw =0;
- $voipbwunit = "%";
- $voip = false;
- $penalty = false;
- $penaltybw = 0;
- $penaltybwunit = "%";
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- $games = false;
- $otherpriority = false;
- $remainbw = 0;
-
-
- if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["local{$i}download"];
- $voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"];
- if ($sched != HFSC) {
- if ($penaltybwunit == "%")
- $factor = $lanbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += floatval($voipbw) * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s reserved for HFSC linksharing */
- }
- if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $lanbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += floatval($penaltybw) * $factor;
- } else {
- $penalty = false;
- $penaltybw = 0;
- }
- if ($config['ezshaper']['step5']['enable']) {
- $p2p = true;
- if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += floatval($p2pcatchbw) * $factor;
- } else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- } else {
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- if ($config['ezshaper']['step6']['enable']) {
- $games = true;
- } else {
- $games = false;
- }
-
- if ($config['ezshaper']['step7']['enable']) {
- $otherpriority = true;
- } else {
- $otherpriority = false;
- }
- $remainbw = round($remainbw / $lanbw * 100, 2);
-
- if (intval($remainbw) > 0 && intval($remainbw) > 40) {
- $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
- header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
- exit;
- } else {
- $remainbw = 100 - $remainbw;
- }
-
- if ($sched != "PRIQ") {
- if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qInternet";
- //$tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['bandwidth'] = $lanbw/1000;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- else if ($sched == "HFSC") {
- $tmpcf['linkshare3'] = $lanbw/1000 . "Kb";
- $tmpcf['upperlimit3'] = $lanbw/1000 . "Kb";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lanbw/1000;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qInternet");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- //array_pop($tmppath);
- //echo "qInternet <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- $altq =& $qtmp;
- }
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qACK";
- $tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2;
- $tmpcf['bandwidthtype'] = "%";
- }
- else if ($sched == "HFSC") {
- $lkbw = 0.20 * $remainbw;
- $tmpcf['linkshare3'] = "{$lkbw}%";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lkbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qACK");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qACK <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- if ($p2pcatchall)
- $tmpcf['name'] = "qOthersDefault";
- else
- $tmpcf['name'] = "qDefault";
- $tmpcf['priority'] = 3;
- $tmpcf['enabled'] = "on";
- if (!$p2pcatchall)
- $tmpcf['default'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, $tmpcf['name']);
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qDefault <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($p2p) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qP2P";
- $tmpcf['priority'] = 1;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($p2pcatchall) {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- }
- $tmpcf['default'] = "on";
-
- } else {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$tmpbw}%";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$tmpbw}%";
- $tmpcf['bandwidth'] = $tmpbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- }
- array_push($tmppath, "qP2P");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qP2P <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($voip) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qVoIP";
- $tmpcf['priority'] = 7;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($voipbw > 0) {
- $tmpcf['bandwidth'] = $voipbw;
- $tmpcf['bandwidthtype'] = $voipbwunit;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($voipbw > 0) {
- $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
- } else {
- $voipbw = $remainbw * 0.20; /* 20% bandwidth */
- $tmpcf['realtime3'] = "{$voipbw}%";
- }
- $tmpcf['realtime'] = "on";
- $tmpcf['bandwidth'] = 32;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qVoIP");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qVoIP <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($games) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qGames";
- $tmpcf['priority'] = 5;
- $tmpcf['enabled'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$gamesbw}%";
- $tmpcf['bandwidth'] = "{$gamesbw}";
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qGames");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qGames <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($otherpriority) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersHigh";
- $tmpcf['priority'] = 4;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $otherbw = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['linkshare3'] = "{$otherbw}%";
- $tmpcf['bandwidth'] = $otherbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qOthersHigh");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qHigh <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersLow";
- $tmpcf['priority'] = 2;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($penalty) {
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $tmpcf['bandwidthtype'] = "%";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- }
- } else if ($sched == "HFSC") {
- if ($penalty) {
- $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $lsbw = $remainbw * 0.05;
- $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
- $tmpcf['bandwidth'] = $lsbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- $tmpcf['linkshare'] = "on";
- }
- array_push($tmppath, "qOthersLow");
- $qtmp =& $altq->add_queue($q, &$tmpcf, &$tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qLow <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
- array_pop($tmppath);
- }
-
-/* End LAN bandwidth ------------------------------------------------------------------------------------- */
-
-
-
if (!is_array($config['filter']['rule']))
$config['filter']['rule'] = array();
@@ -1611,16 +1206,16 @@ function apply_all_choosen_items() {
write_config();
}
-function wizard_get_bandwidthtype_scale($type) {
+function wizard_get_bandwidthtype_scale($type = "b") {
switch ($type) {
case "Gb":
- $factor = 1000 * 1000 * 1000;
+ $factor = 1024 * 1024 * 1024;
break;
case "Mb":
- $factor = 1000 * 1000;
+ $factor = 1024 * 1024;
break;
case "Kb":
- $factor = 1000;
+ $factor = 1024;
break;
case "b":
default:
diff --git a/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc b/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc
index b5f8d63..a5de47e 100644
--- a/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc
+++ b/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc
@@ -228,7 +228,7 @@ function step2_stepsubmitphpaction() {
/* Input Validation */
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
- for ($j = $j; $j < $steps; $j++) {
+ for ($j = $i + 1; $j <= $steps; $j++) {
if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface for different LAN #{$i} and LAN #{$j}.");
$stepid--;
@@ -284,6 +284,9 @@ function step3_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
+ if (!$_POST['enable'])
+ return;
+
if($_POST['address']) {
if(!is_ipaddroralias($_POST['address'])) {
/* item is not an ip or alias. error out */
@@ -295,22 +298,20 @@ function step3_stepsubmitphpaction() {
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
- if ($_POST["connupload"]) {
- if (!is_numeric($_POST["connupload"])) {
- $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
- $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
+ if (!is_numeric($_POST["connupload"])) {
+ $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
}
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
+ $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
}
}
@@ -357,7 +358,7 @@ function step5_stepsubmitphpaction() {
global $stepid, $savemsg;
if ( $_POST['enable'] ) {
- if (isset($_POST['bandwidth']) && $_POST['bandwidth'] <> "") {
+ if ($_POST['p2pcatchall']) {
if(!is_numeric($_POST['bandwidth'])) {
$savemsg="Posted value is not a valid bandwidth.";
$stepid--;
@@ -458,45 +459,42 @@ function apply_all_choosen_items() {
$upbw = floatval($config['ezshaper']['step2']["conndownload"]) * $upfactor;
if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["conndownload"];
- $voipbwunit = $config['ezshaper']['step3']["conndownloadspeed"];
- if ($sched != "HFSC") {
- if ($voipbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += $voipbw * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s forHFSC linksharing */
+ $voip = true;
+ $voipbw = $config['ezshaper']['step3']["conndownload"];
+ $voipbwunit = $config['ezshaper']['step3']["conndownloadspeed"];
+ if ($voipbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($voipbwunit);
+ $remainbw += $voipbw * $factor;
}
if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += $penaltybw * $factor;
+ $penalty = true;
+ $penaltybw = $config['ezshaper']['step4']['bandwidth'];
+ $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
+ if ($penaltybwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
+ $remainbw += $penaltybw * $factor;
} else {
- $penalty = false;
- $penaltybw = 0;
+ $penalty = false;
+ $penaltybw = 0;
}
if ($config['ezshaper']['step5']['enable']) {
$p2p = true;
if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += $p2pcatchbw * $factor;
+ $p2pcatchall = true;
+ $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
+ $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
+ if ($p2pcatchbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
+ $remainbw += $p2pcatchbw * $factor;
} else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
}
} else {
$p2p = false;
@@ -1348,23 +1346,23 @@ function apply_all_choosen_items() {
write_config();
}
-function wizard_get_bandwidthtype_scale($type) {
+function wizard_get_bandwidthtype_scale($type = "b") {
switch ($type) {
- case "Gb":
- $factor = 1000 * 1000 * 1000;
- break;
- case "Mb":
- $factor = 1000 * 1000;
- break;
- case "Kb":
- $factor = 1000;
- break;
- case "b":
- default:
+ case "Gb":
+ $factor = 1024 * 1024 * 1024;
+ break;
+ case "Mb":
+ $factor = 1024 * 1024;
+ break;
+ case "Kb":
+ $factor = 1024;
+ break;
+ case "b":
+ default:
$factor = 1;
- break;
+ break;
}
- return floatval($factor);
+ return intval($factor);
}
?>
OpenPOWER on IntegriCloud