summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSelim <selim_guner2000@hotmail.com>2013-05-14 03:06:50 -0700
committerSelim <selim_guner2000@hotmail.com>2013-05-14 03:06:50 -0700
commitd6da1de899a1357d6942e99cb9c05a6536f1690a (patch)
tree321efff7876c0bcc2f5d57cf1c86eee7329260ec
parent9459b2de00d836a3e493198d67e4ccdc8029b5e7 (diff)
parentde4ae554f0b1941dd157198efdfdd8ea0701c688 (diff)
downloadpfsense-d6da1de899a1357d6942e99cb9c05a6536f1690a.zip
pfsense-d6da1de899a1357d6942e99cb9c05a6536f1690a.tar.gz
Merge pull request #1 from pfsense/master
test
-rw-r--r--etc/inc/IPv6.inc3
-rw-r--r--etc/inc/captiveportal.inc40
-rw-r--r--etc/inc/filter.inc2
-rw-r--r--etc/inc/openvpn.inc8
-rw-r--r--etc/inc/shaper.inc109
-rwxr-xr-xusr/local/www/services_captiveportal_filemanager.php4
-rwxr-xr-xusr/local/www/services_captiveportal_hostname.php4
-rwxr-xr-xusr/local/www/services_captiveportal_ip.php4
8 files changed, 115 insertions, 59 deletions
diff --git a/etc/inc/IPv6.inc b/etc/inc/IPv6.inc
index 453051e..7598226 100644
--- a/etc/inc/IPv6.inc
+++ b/etc/inc/IPv6.inc
@@ -580,6 +580,9 @@ class Net_IPv6 {
$cip = preg_replace('/((^:)|(:$))/', '' ,$cip);
$cip = preg_replace('/((^:)|(:$))/', '::' ,$cip);
+ } else {
+ // The input IP appears to be compressed already, give it back as-is to the caller.
+ $cip = $ip;
}
if ('' != $netmask) {
diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc
index 38202e9..01caca5 100644
--- a/etc/inc/captiveportal.inc
+++ b/etc/inc/captiveportal.inc
@@ -708,8 +708,8 @@ function captiveportal_prune_old() {
$cpentry[2], // clientip
$cpentry[3], // clientmac
10); // NAS Request
- pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ZERO_ENTRY_STATS, 1, $cpentry[2]);
- pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ZERO_ENTRY_STATS, 2, $cpentry[2]);
+ $_gb = @pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ZERO_ENTRY_STATS, 1, $cpentry[2]);
+ $_gb = @pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ZERO_ENTRY_STATS, 2, $cpentry[2]);
RADIUS_ACCOUNTING_START($cpentry[1], // ruleno
$cpentry[4], // username
$cpentry[5], // sessionid
@@ -851,11 +851,11 @@ function captiveportal_disconnect($dbent, $radiusservers,$term_cause = 1,$stop_t
if (is_ipaddr($dbent[2])) {
/* Delete client's ip entry from tables 1 and 2. */
- pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_DEL, 1, $dbent[2]);
- pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_DEL, 2, $dbent[2]);
+ $_gb = @pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_DEL, 1, $dbent[2]);
+ $_gb = @pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_DEL, 2, $dbent[2]);
/* XXX: Redundant?! Ensure all pf(4) states are killed. */
- pfSense_kill_states($dbent[2]);
- pfSense_kill_srcstates($dbent[2]);
+ $_gb = @pfSense_kill_states($dbent[2]);
+ $_gb = @pfSense_kill_srcstates($dbent[2]);
}
/*
@@ -863,8 +863,8 @@ function captiveportal_disconnect($dbent, $radiusservers,$term_cause = 1,$stop_t
* We could get an error if the pipe doesn't exist but everything should still be fine
*/
if (!empty($dbent[1])) {
- pfSense_pipe_action("pipe delete {$dbent[1]}");
- pfSense_pipe_action("pipe delete " . ($dbent[1]+1));
+ $_gb = @pfSense_pipe_action("pipe delete {$dbent[1]}");
+ $_gb = @pfSense_pipe_action("pipe delete " . ($dbent[1]+1));
/* Release the ruleno so it can be reallocated to new clients. */
captiveportal_free_dn_ruleno($dbent[1]);
@@ -941,9 +941,9 @@ function captiveportal_passthrumac_configure_entry($macent) {
$rules = "";
$pipeup = $pipeno;
- pfSense_pipe_action("pipe {$pipeup} config bw {$bwUp}Kbit/s queue 100 buckets 16");
+ $_gb = @pfSense_pipe_action("pipe {$pipeup} config bw {$bwUp}Kbit/s queue 100 buckets 16");
$pipedown = $pipeno + 1;
- pfSense_pipe_action("pipe {$pipedown} config bw {$bwDown}Kbit/s queue 100 buckets 16");
+ $_gb = @pfSense_pipe_action("pipe {$pipedown} config bw {$bwDown}Kbit/s queue 100 buckets 16");
$rules .= "add {$ruleno} pipe {$pipeup} ip from any to any MAC {$macent['mac']} any\n";
$ruleno++;
$rules .= "add {$ruleno} pipe {$pipedown} ip from any to any MAC any {$macent['mac']}\n";
@@ -1005,9 +1005,9 @@ function captiveportal_allowedip_configure_entry($ipent, $ishostname = false) {
$enBwdown = empty($ipent['bw_down']) ? 0 : intval($ipent['bw_down']);
$pipeno = captiveportal_get_next_dn_ruleno();
- pfSense_pipe_action("pipe {$pipeno} config bw {$enBwup}Kbit/s queue 100 buckets 16");
+ $_gb = @pfSense_pipe_action("pipe {$pipeno} config bw {$enBwup}Kbit/s queue 100 buckets 16");
$pipedown = $pipeno + 1;
- pfSense_pipe_action("pipe {$pipedown} config bw {$enBwdown}Kbit/s queue 100 buckets 16");
+ $_gb = @pfSense_pipe_action("pipe {$pipedown} config bw {$enBwdown}Kbit/s queue 100 buckets 16");
if ($ishostname === true) {
$cp_filterdns_conf .= "ipfw {$ipent['hostname']} 3 pipe {$pipeno}\n";
$cp_filterdns_conf .= "ipfw {$ipent['hostname']} 4 pipe {$pipedown}\n";
@@ -1701,8 +1701,8 @@ function captiveportal_reapply_attributes($cpentry, $attributes) {
$bw_up_pipeno = $cpentry[1];
$bw_down_pipeno = $cpentry[1]+1;
- pfSense_pipe_action("pipe {$bw_up_pipeno} config bw {$bw_up}Kbit/s queue 100 buckets 16");
- pfSense_pipe_action("pipe {$bw_down_pipeno} config bw {$bw_down}Kbit/s queue 100 buckets 16");
+ $_gb = @pfSense_pipe_action("pipe {$bw_up_pipeno} config bw {$bw_up}Kbit/s queue 100 buckets 16");
+ $_gb = @pfSense_pipe_action("pipe {$bw_down_pipeno} config bw {$bw_down}Kbit/s queue 100 buckets 16");
//captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "RADIUS_BANDWIDTH_REAPPLY", "{$bw_up}/{$bw_down}");
unset($bw_up_pipeno, $bw_down_pipeno, $bw_up, $bw_down);
@@ -1874,19 +1874,19 @@ function portal_allow($clientip,$clientmac,$username,$password = null, $attribut
$bw_up_pipeno = $pipeno;
$bw_down_pipeno = $pipeno + 1;
//$bw_up /= 1000; // Scale to Kbit/s
- pfSense_pipe_action("pipe {$bw_up_pipeno} config bw {$bw_up}Kbit/s queue 100 buckets 16");
- pfSense_pipe_action("pipe {$bw_down_pipeno} config bw {$bw_down}Kbit/s queue 100 buckets 16");
+ $_gb = @pfSense_pipe_action("pipe {$bw_up_pipeno} config bw {$bw_up}Kbit/s queue 100 buckets 16");
+ $_gb = @pfSense_pipe_action("pipe {$bw_down_pipeno} config bw {$bw_down}Kbit/s queue 100 buckets 16");
$clientsn = (is_ipaddrv6($clientip)) ? 128 : 32;
if (!isset($config['captiveportal'][$cpzone]['nomacfilter']))
- pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ADD, 1, $clientip, $clientsn, $clientmac, $bw_up_pipeno);
+ $_gb = @pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ADD, 1, $clientip, $clientsn, $clientmac, $bw_up_pipeno);
else
- pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ADD, 1, $clientip, $clientsn, NULL, $bw_up_pipeno);
+ $_gb = @pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ADD, 1, $clientip, $clientsn, NULL, $bw_up_pipeno);
if (!isset($config['captiveportal'][$cpzone]['nomacfilter']))
- pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ADD, 2, $clientip, $clientsn, $clientmac, $bw_down_pipeno);
+ $_gb = @pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ADD, 2, $clientip, $clientsn, $clientmac, $bw_down_pipeno);
else
- pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ADD, 2, $clientip, $clientsn, NULL, $bw_down_pipeno);
+ $_gb = @pfSense_ipfw_Tableaction($cpzone, IP_FW_TABLE_ADD, 2, $clientip, $clientsn, NULL, $bw_down_pipeno);
if ($attributes['voucher'])
$attributes['session_timeout'] = $remaining_time;
diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc
index 9d8a47f..13963a8 100644
--- a/etc/inc/filter.inc
+++ b/etc/inc/filter.inc
@@ -473,12 +473,12 @@ function filter_generate_nested_alias($name, $alias, &$aliasnesting, &$aliasaddr
else if(!isset($aliasnesting[$address]))
$tmpline = filter_generate_nested_alias($name, $aliastable[$address], $aliasnesting, $aliasaddrnesting);
} else if(!isset($aliasaddrnesting[$address])) {
- $aliasaddrnesting[$address] = $address;
if (!is_ipaddr($address) && !is_subnet($address) && !is_port($address) && is_hostname($address)) {
if (!isset($filterdns["{$address}{$name}"]))
$filterdns["{$address}{$name}"] = "pf {$address} {$name}\n";
continue;
}
+ $aliasaddrnesting[$address] = $address;
$tmpline = " {$address}";
}
if ((strlen($tmpline)+ $linelength) > 4036) {
diff --git a/etc/inc/openvpn.inc b/etc/inc/openvpn.inc
index bd92642..41b0ce2 100644
--- a/etc/inc/openvpn.inc
+++ b/etc/inc/openvpn.inc
@@ -514,7 +514,7 @@ function openvpn_reconfigure($mode, $settings) {
if ($settings['dev_mode'] == 'tun')
$conf .= "ifconfig-ipv6 {$ipv6_1} {$ipv6_2}\n";
else
- $conf .= "ifconfig {$ipv6_1} {$prefix}\n";
+ $conf .= "ifconfig-ipv6 {$ipv6_1} {$prefix}\n";
}
break;
case 'server_tls':
@@ -665,7 +665,7 @@ function openvpn_reconfigure($mode, $settings) {
if ($settings['dev_mode'] == 'tun')
$conf .= "ifconfig-ipv6 {$ipv6_2} {$ipv6_1}\n";
else
- $conf .= "ifconfig {$ipv6_2} {$prefix}\n";
+ $conf .= "ifconfig-ipv6 {$ipv6_2} {$prefix}\n";
}
if ($settings['proxy_addr']) {
@@ -1243,8 +1243,8 @@ function openvpn_get_interface_ipv6($ipv6, $prefix) {
// Is there a better way to do this math?
$ipv6_arr = explode(':', $basev6);
$last = hexdec(array_pop($ipv6_arr));
- $ipv6_1 = Net_IPv6::compress(implode(':', $ipv6_arr) . ':' . dechex($last + 1));
- $ipv6_2 = Net_IPv6::compress(implode(':', $ipv6_arr) . ':' . dechex($last + 2));
+ $ipv6_1 = Net_IPv6::compress(Net_IPv6::uncompress(implode(':', $ipv6_arr) . ':' . dechex($last + 1)));
+ $ipv6_2 = Net_IPv6::compress(Net_IPv6::uncompress(implode(':', $ipv6_arr) . ':' . dechex($last + 2)));
return array($ipv6_1, $ipv6_2);
}
diff --git a/etc/inc/shaper.inc b/etc/inc/shaper.inc
index 150c203..36bf462 100644
--- a/etc/inc/shaper.inc
+++ b/etc/inc/shaper.inc
@@ -2789,7 +2789,7 @@ class dummynet_class {
function GetLink() {
return $this->link;
}
- function Getmask() {
+ function GetMask() {
return $this->mask;
}
function SetMask($mask) {
@@ -2880,6 +2880,10 @@ class dummynet_class {
$input_errors[] = gettext("Queue names must be alphanumeric and _ or - only.");
if (!empty($data['name']) && !preg_match("/^[a-zA-Z0-9_-]+$/", $data['name']))
$input_errors[] = gettext("Queue names must be alphanumeric and _ or - only.");
+ if (isset($data['maskbits']) && ($data['maskbits'] <> "")) {
+ if ((!is_numeric($data['maskbits'])) || ($data['maskbits'] <= 0) || ($data['maskbits'] > 32))
+ $input_errors[] = gettext("Bit mask must be blank or numeric value between 1 and 32.");
+ }
}
}
@@ -3028,9 +3032,14 @@ class dnpipe_class extends dummynet_class {
else
$this->SetQlimit("");
if (isset($q['mask']) && $q['mask'] <> "")
- $this->SetMask($q['mask']);
+ $masktype = $q['mask'];
+ else
+ $masktype = "";
+ if (isset($q['maskbits']) && $q['maskbits'] <> "")
+ $maskbits = $q['maskbits'];
else
- $this->SetMask("");
+ $maskbits = "";
+ $this->SetMask(array("type" => $masktype, "bits" => $maskbits));
if (isset($q['buckets']) && $q['buckets'] <> "")
$this->SetBuckets($q['buckets']);
else
@@ -3115,19 +3124,26 @@ class dnpipe_class extends dummynet_class {
$pfq_rule .= " delay " . $this->GetDelay();
$mask = $this->GetMask();
- if (!empty($mask)) {
- /* XXX TODO extend this to support more complicated masks */
- switch ($mask) {
+ if (!empty($mask['type'])) {
+ switch ($mask['type']) {
case 'srcaddress':
- $pfq_rule .= " mask src-ip 0xffffffff ";
+ $pfq_rule .= " mask src-ip 0x";
+ if (!empty($mask['bits']) && ($mask['bits'] <> ""))
+ $pfq_rule .= sprintf("%x", gen_subnet_mask_long($mask['bits']));
+ else
+ $pfq_rule .= "ffffffff";
break;
case 'dstaddress':
- $pfq_rule .= " mask dst-ip 0xffffffff ";
+ $pfq_rule .= " mask dst-ip 0x";
+ if (!empty($mask['bits']) && ($mask['bits'] <> ""))
+ $pfq_rule .= sprintf("%x", gen_subnet_mask_long($mask['bits']));
+ else
+ $pfq_rule .= "ffffffff";
break;
default:
break;
}
- }
+ }
$pfq_rule .= "\n";
if (!empty($this->subqueues) && count($this->subqueues) > 0) {
@@ -3279,24 +3295,34 @@ EOD;
$form .= "<td class=\"vncellreq\">";
$form .= "<select name=\"mask\" class=\"formselect\">";
$form .= "<option value=\"none\"";
- if ($this->GetMask() == "none")
+ $mask = $this->GetMask();
+ if ($mask['type'] == "none")
$form .= " selected=\"selected\"";
$form .= ">none</option>";
$form .= "<option value=\"srcaddress\"";
- if ($this->GetMask() == "srcaddress")
+ if ($mask['type'] == "srcaddress")
$form .= " selected=\"selected\"";
$form .= ">" . gettext("Source addresses") . "</option>";
$form .= "<option value=\"dstaddress\"";
- if ($this->GetMask() == "dstaddress")
+ if ($mask['type'] == "dstaddress")
$form .= " selected=\"selected\"";
$form .= ">" . gettext("Destination addresses") . "</option>";
$form .= "</select>";
$form .= "&nbsp;<br/>";
- $form .= "<span class=\"vexpl\">" . gettext("If 'source' or 'destination' is chosen, \n"
+ $form .= "<span class=\"vexpl\">" . gettext("If 'source' or 'destination' slots is chosen, \n"
. "a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n"
. "be created for each source/destination IP address encountered, \n"
. "respectively. This makes it possible to easily specify bandwidth \n"
- . "limits per host.") . "</span>";
+ . "limits per host.") . "</span><br />";
+ $form .= "255.255.255.255/&nbsp;<input type=\"text\" class=\"formfld unknown\" size=\"2\" id=\"maskbits\" name=\"maskbits\" value=\"";
+ $mask = $this->GetMask();
+ $form .= $mask['bits'];
+ $form .= "\" />";
+ $form .= "&nbsp; mask bits (1-32)<br/>";
+ $form .= "<span class=\"vexpl\">" . gettext("If 'source' or 'destination' slots is chosen, \n"
+ . "leaving the mask bits blank will create one pipe per host. Otherwise specify \n"
+ . "the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+ . "per pipe.") . "</span>";
$form .= "</td></tr>";
$form .= "<tr><td valign=\"middle\" class=\"vncellreq\">" . gettext("Description") . "</td>";
$form .= "<td class=\"vncellreq\">";
@@ -3375,7 +3401,9 @@ EOD;
$cflink['enabled'] = $this->GetEnabled();
$cflink['buckets'] = $this->GetBuckets();
- $cflink['mask'] = $this->GetMask();
+ $mask = $this->GetMask();
+ $cflink['mask'] = $mask['type'];
+ $cflink['maskbits'] = $mask['bits'];
$cflink['delay'] = $this->GetDelay();
}
@@ -3448,10 +3476,16 @@ class dnqueue_class extends dummynet_class {
$this->SetQlimit($q['qlimit']);
else
$this->SetQlimit("");
+ $mask = array();
if (isset($q['mask']) && $q['mask'] <> "")
- $this->SetMask($q['mask']);
+ $masktype = $q['mask'];
else
- $this->SetMask("");
+ $masktype = "";
+ if (isset($q['maskbits']) && $q['maskbits'] <> "")
+ $maskbits = $q['maskbits'];
+ else
+ $maskbits = "";
+ $this->SetMask(array("type" => $masktype, "bits" => $maskbits));
if (isset($q['weight']) && $q['weight'] <> "")
$this->SetWeight($q['weight']);
else
@@ -3485,14 +3519,21 @@ class dnqueue_class extends dummynet_class {
if ($this->GetBuckets())
$pfq_rule .= " buckets " . $this->GetBuckets();
$mask = $this->GetMask();
- if (!empty($mask)) {
- /* XXX TODO extend this to support more complicated masks */
- switch ($mask) {
+ if (!empty($mask['type'])) {
+ switch ($mask['type']) {
case 'srcaddress':
- $pfq_rule .= " mask src-ip 0xffffffff ";
+ $pfq_rule .= " mask src-ip 0x";
+ if (!empty($mask['bits']) && ($mask['bits'] <> ""))
+ $pfq_rule .= sprintf("%x", gen_subnet_mask_long($mask['bits']));
+ else
+ $pfq_rule .= "ffffffff";
break;
case 'dstaddress':
- $pfq_rule .= " mask dst-ip 0xffffffff ";
+ $pfq_rule .= " mask dst-ip 0x";
+ if (!empty($mask['bits']) && ($mask['bits'] <> ""))
+ $pfq_rule .= sprintf("%x", gen_subnet_mask_long($mask['bits']));
+ else
+ $pfq_rule .= "ffffffff";
break;
default:
break;
@@ -3527,24 +3568,34 @@ class dnqueue_class extends dummynet_class {
$form .= "<td class=\"vncellreq\">";
$form .= "<select name=\"mask\" class=\"formselect\">";
$form .= "<option value=\"none\"";
- if ($this->GetMask() == "none")
+ $mask = $this->GetMask();
+ if ($mask['type'] == "none")
$form .= " selected=\"selected\"";
$form .= ">" . gettext("none") . "</option>";
$form .= "<option value=\"srcaddress\"";
- if ($this->GetMask() == "srcaddress")
+ if ($mask['type'] == "srcaddress")
$form .= " selected=\"selected\"";
$form .= ">" . gettext("Source addresses") . "</option>";
$form .= "<option value=\"dstaddress\"";
- if ($this->GetMask() == "dstaddress")
+ if ($mask['type'] == "dstaddress")
$form .= " selected=\"selected\"";
$form .= ">" . gettext("Destination addresses") . "</option>";
$form .= "</select>";
$form .= "&nbsp;slots<br/>";
- $form .= "<span class=\"vexpl\">" . gettext("If 'source' or 'destination' is chosen, \n"
+ $form .= "<span class=\"vexpl\">" . gettext("If 'source' or 'destination' slots is chosen, \n"
. "a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n"
. "be created for each source/destination IP address encountered, \n"
. "respectively. This makes it possible to easily specify bandwidth \n"
- . "limits per host.") . "</span>";
+ . "limits per host.") . "</span><br/>";
+ $form .= "255.255.255.255/&nbsp;<input type=\"text\" class=\"formfld unknown\" size=\"2\" id=\"maskbits\" name=\"maskbits\" value=\"";
+ $mask = $this->GetMask();
+ $form .= $mask['bits'];
+ $form .= "\" />";
+ $form .= "&nbsp; mask bits (1-32)<br/>";
+ $form .= "<span class=\"vexpl\">" . gettext("If 'source' or 'destination' slots is chosen, \n"
+ . "leaving the mask bits blank will create one pipe per host. Otherwise specify \n"
+ . "the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+ . "per queue.") . "</span>";
$form .= "</td></tr>";
$form .= "<tr><td valign=\"middle\" class=\"vncellreq\">" . gettext("Description") . "</td>";
$form .= "<td class=\"vncellreq\">";
@@ -3620,7 +3671,9 @@ class dnqueue_class extends dummynet_class {
$cflink['weight'] = $this->GetWeight();
$cflink['enabled'] = $this->GetEnabled();
$cflink['buckets'] = $this->GetBuckets();
- $cflink['mask'] = $this->GetMask();
+ $mask = $this->GetMask();
+ $cflink['mask'] = $mask['type'];
+ $cflink['maskbits'] = $mask['bits'];
}
}
diff --git a/usr/local/www/services_captiveportal_filemanager.php b/usr/local/www/services_captiveportal_filemanager.php
index 63768cc..aedd191 100755
--- a/usr/local/www/services_captiveportal_filemanager.php
+++ b/usr/local/www/services_captiveportal_filemanager.php
@@ -161,7 +161,7 @@ include("head.inc");
<td width="10%" class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
- <td width="17" heigth="17"></td>
+ <td width="17" height="17"></td>
<td><a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&act=add"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add file"); ?>" width="17" height="17" border="0"></a></td>
</tr>
</table>
@@ -200,7 +200,7 @@ include("head.inc");
<td class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
- <td width="17" heigth="17"></td>
+ <td width="17" height="17"></td>
<td><a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&act=add"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add file"); ?>" width="17" height="17" border="0"></a></td>
</tr>
</table>
diff --git a/usr/local/www/services_captiveportal_hostname.php b/usr/local/www/services_captiveportal_hostname.php
index dbbb688..6720430 100755
--- a/usr/local/www/services_captiveportal_hostname.php
+++ b/usr/local/www/services_captiveportal_hostname.php
@@ -122,7 +122,7 @@ include("head.inc");
<td width="10%" class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
- <td width="17" heigth="17"></td>
+ <td width="17" height="17"></td>
<td><a href="services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>"><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>
@@ -158,7 +158,7 @@ include("head.inc");
<td class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
- <td width="17" heigth="17"></td>
+ <td width="17" height="17"></td>
<td><a href="services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>"><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>
diff --git a/usr/local/www/services_captiveportal_ip.php b/usr/local/www/services_captiveportal_ip.php
index 410064d..2fb2cf5 100755
--- a/usr/local/www/services_captiveportal_ip.php
+++ b/usr/local/www/services_captiveportal_ip.php
@@ -117,7 +117,7 @@ include("head.inc");
<td width="10%" class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
- <td width="17" heigth="17"></td>
+ <td width="17" height="17"></td>
<td><a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>"><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>
@@ -157,7 +157,7 @@ include("head.inc");
<td class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
- <td width="17" heigth="17"></td>
+ <td width="17" height="17"></td>
<td><a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>"><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>
OpenPOWER on IntegriCloud