X-Git-Url: http://git.ipfire.org/?p=people%2Fteissler%2Fipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Ffwhosts.cgi;h=444b3660eb73841497ddd7bc73c965a60c57f4d2;hp=bb1b3492074aded4749cd255f9058f9168f73ee3;hb=fb0ce57589a8ba724d3c446b612181f6d7f3b8c5;hpb=13e5dda402cac2e441d029459e152750c2493e7f
diff --git a/html/cgi-bin/fwhosts.cgi b/html/cgi-bin/fwhosts.cgi
index bb1b34920..444b3660e 100755
--- a/html/cgi-bin/fwhosts.cgi
+++ b/html/cgi-bin/fwhosts.cgi
@@ -26,6 +26,7 @@ use strict;
# enable only the following on debugging purpose
use warnings;
+use Sort::Naturally;
use CGI::Carp 'fatalsToBrowser';
no warnings 'uninitialized';
require '/var/ipfire/general-functions.pl';
@@ -80,6 +81,11 @@ unless (-e $configsrvgrp) { system("touch $configsrvgrp"); }
&Header::openbigbox('100%', 'center');
## ACTION ####
+if ($fwhostsettings{'ACTION'} eq $Lang::tr{'fwdfw reread'})
+{
+ &reread_rules;
+ &showmenu;
+}
# Update
if ($fwhostsettings{'ACTION'} eq 'updatenet' )
{
@@ -91,7 +97,8 @@ if ($fwhostsettings{'ACTION'} eq 'updatenet' )
$fwhostsettings{'orgname'} = $customnetwork{$key}[0];
$fwhostsettings{'orgip'} = $customnetwork{$key}[1];
$fwhostsettings{'orgsub'} = $customnetwork{$key}[2];
- $fwhostsettings{'count'} = $customnetwork{$key}[3];
+ $fwhostsettings{'netremark'} = $customnetwork{$key}[3];
+ $fwhostsettings{'count'} = $customnetwork{$key}[4];
delete $customnetwork{$key};
}
@@ -114,7 +121,7 @@ if ($fwhostsettings{'ACTION'} eq 'updatehost')
$ip = $customhost{$key}[2];
}
$fwhostsettings{'orgip'} = $ip;
- $fwhostsettings{'count'} = $customhost{$key}[3];
+ $fwhostsettings{'count'} = $customhost{$key}[4];
delete $customhost{$key};
&General::writehasharray("$confighost", \%customhost);
}
@@ -182,18 +189,14 @@ if ($fwhostsettings{'ACTION'} eq 'updateservice')
}
}
&General::writehasharray("$configsrvgrp", \%customservicegrp);
-
$needrules='on';
}
-
-
if($count gt 0 && $fwhostsettings{'oldsrvport'} ne $fwhostsettings{'SRV_PORT'} ){
$needrules='on';
}
if($count gt 0 && $fwhostsettings{'oldsrvprot'} ne $fwhostsettings{'PROT'} ){
$needrules='on';
}
-
$fwhostsettings{'SRV_NAME'} = '';
$fwhostsettings{'SRV_PORT'} = '';
$fwhostsettings{'PROT'} = '';
@@ -229,6 +232,11 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' )
$fwhostsettings{'NOCHECK'} ='false';
$fwhostsettings{'error'} ='on';
}
+ #check remark
+ if ($fwhostsettings{'NETREMARK'} ne '' && !&validremark($fwhostsettings{'NETREMARK'})){
+ $errormessage=$Lang::tr{'fwhost err remark'};
+ $fwhostsettings{'error'} ='on';
+ }
#check if subnet is sigle host
if(&General::iporsubtocidr($fwhostsettings{'SUBNET'}) eq '32')
{
@@ -279,17 +287,19 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' )
$customnetwork{$key}[0] = $fwhostsettings{'orgname'} ;
$customnetwork{$key}[1] = $fwhostsettings{'orgip'} ;
$customnetwork{$key}[2] = $fwhostsettings{'orgsub'};
- $customnetwork{$key}[3] = $fwhostsettings{'count'};
+ $customnetwork{$key}[3] = $fwhostsettings{'orgnetremark'};
+ $customnetwork{$key}[4] = $fwhostsettings{'count'};
&General::writehasharray("$confignet", \%customnetwork);
undef %customnetwork;
}
if (!$errormessage){
+
&General::readhasharray("$confignet", \%customnetwork);
if ($fwhostsettings{'ACTION'} eq 'updatenet'){
if ($fwhostsettings{'update'} == '0'){
foreach my $key (keys %customnetwork) {
if($customnetwork{$key}[0] eq $fwhostsettings{'orgname'}){
- $count=$customnetwork{$key}[3];
+ $count=$customnetwork{$key}[4];
delete $customnetwork{$key};
last;
}
@@ -339,22 +349,24 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' )
}
}
my $key = &General::findhasharraykey (\%customnetwork);
- foreach my $i (0 .. 3) { $customnetwork{$key}[$i] = "";}
+ foreach my $i (0 .. 4) { $customnetwork{$key}[$i] = "";}
$fwhostsettings{'SUBNET'} = &General::iporsubtocidr($fwhostsettings{'SUBNET'});
$customnetwork{$key}[0] = $fwhostsettings{'HOSTNAME'};
#convert ip when leading '0' in byte
- $fwhostsettings{'IP'}=&General::ip2dec($fwhostsettings{'IP'});
- $fwhostsettings{'IP'}=&General::dec2ip($fwhostsettings{'IP'});
+ $fwhostsettings{'IP'} =&General::ip2dec($fwhostsettings{'IP'});
+ $fwhostsettings{'IP'} =&General::dec2ip($fwhostsettings{'IP'});
$customnetwork{$key}[1] = &General::getnetworkip($fwhostsettings{'IP'},$fwhostsettings{'SUBNET'}) ;
$customnetwork{$key}[2] = &General::iporsubtodec($fwhostsettings{'SUBNET'}) ;
if($fwhostsettings{'newnet'} eq 'on'){$count=0;}
- $customnetwork{$key}[3] = $count;
+ $customnetwork{$key}[3] = $fwhostsettings{'NETREMARK'};
+ $customnetwork{$key}[4] = $count;
&General::writehasharray("$confignet", \%customnetwork);
$fwhostsettings{'IP'}=$fwhostsettings{'IP'}."/".&General::iporsubtodec($fwhostsettings{'SUBNET'});
undef %customnetwork;
$fwhostsettings{'HOSTNAME'}='';
$fwhostsettings{'IP'}='';
$fwhostsettings{'SUBNET'}='';
+ $fwhostsettings{'NETREMARK'}='';
#check if an edited net affected groups and need to reload rules
if ($needrules eq 'on'){
&rules;
@@ -380,24 +392,17 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
$errormessage=$errormessage.$Lang::tr{'fwhost err empty'};
$fwhostsettings{'ACTION'} = 'edithost';
}else{
- if($fwhostsettings{'type'} eq 'ip' && $fwhostsettings{'IP'}=~/^([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2}$/){
- $fwhostsettings{'type'} = 'mac';
- }elsif($fwhostsettings{'type'} eq 'mac' && $fwhostsettings{'IP'}=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/){
- $fwhostsettings{'type'} = 'ip';
- }elsif($fwhostsettings{'type'} eq 'mac' && $fwhostsettings{'IP'}=~/^([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2}$/){
+ if($fwhostsettings{'IP'}=~/^([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2}$/){
$fwhostsettings{'type'} = 'mac';
- }elsif($fwhostsettings{'type'} eq 'ip' && $fwhostsettings{'IP'}=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/){
+ }elsif($fwhostsettings{'IP'}=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/){
$fwhostsettings{'type'} = 'ip';
}else{
$fwhostsettings{'type'} = '';
$errormessage=$Lang::tr{'fwhost err ipmac'};
}
- if($fwhostsettings{'type'} eq 'mac' )
- {
- if ($fwhostsettings{'IP'}!~/^([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2}$/ )
- {
- $errormessage=$Lang::tr{'fwhost err mac'};
- }
+ #check remark
+ if ($fwhostsettings{'HOSTREMARK'} ne '' && !&validremark($fwhostsettings{'HOSTREMARK'})){
+ $errormessage=$Lang::tr{'fwhost err remark'};
}
#CHECK IP-PART
if ($fwhostsettings{'type'} eq 'ip'){
@@ -425,7 +430,7 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
if($fwhostsettings{'actualize'} eq 'on' && $fwhostsettings{'newhost'} ne 'on' && $errormessage){
$fwhostsettings{'actualize'} = '';
my $key = &General::findhasharraykey (\%customhost);
- foreach my $i (0 .. 3) { $customhost{$key}[$i] = "";}
+ foreach my $i (0 .. 4) { $customhost{$key}[$i] = "";}
$customhost{$key}[0] = $fwhostsettings{'orgname'} ;
$customhost{$key}[1] = $fwhostsettings{'type'} ;
if($customhost{$key}[1] eq 'ip'){
@@ -433,7 +438,8 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
}else{
$customhost{$key}[2] = $fwhostsettings{'orgip'};
}
- $customhost{$key}[3] = $fwhostsettings{'count'};
+ $customhost{$key}[3] = $fwhostsettings{'orgremark'};
+ $customhost{$key}[4] = $fwhostsettings{'count'};
&General::writehasharray("$confighost", \%customhost);
undef %customhost;
}
@@ -450,7 +456,6 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
foreach my $key (sort keys %customgrp){
if($customgrp{$key}[2] eq $fwhostsettings{'orgname'}){
$customgrp{$key}[2]=$fwhostsettings{'HOSTNAME'};
- last;
}
}
&General::writehasharray("$configgrp", \%customgrp);
@@ -479,7 +484,7 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
}
}
my $key = &General::findhasharraykey (\%customhost);
- foreach my $i (0 .. 3) { $customhost{$key}[$i] = "";}
+ foreach my $i (0 .. 4) { $customhost{$key}[$i] = "";}
$customhost{$key}[0] = $fwhostsettings{'HOSTNAME'} ;
$customhost{$key}[1] = $fwhostsettings{'type'} ;
if ($fwhostsettings{'type'} eq 'ip'){
@@ -491,12 +496,14 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
$customhost{$key}[2] = $fwhostsettings{'IP'};
}
if($fwhostsettings{'newhost'} eq 'on'){$count=0;}
- $customhost{$key}[3] = $count;
+ $customhost{$key}[3] = $fwhostsettings{'HOSTREMARK'};
+ $customhost{$key}[4] =$count;
&General::writehasharray("$confighost", \%customhost);
undef %customhost;
$fwhostsettings{'HOSTNAME'}='';
$fwhostsettings{'IP'}='';
$fwhostsettings{'type'}='';
+ $fwhostsettings{'HOSTREMARK'}='';
#check if we need to update rules while host was edited
if($needrules eq 'on'){
&rules;
@@ -511,7 +518,7 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
}
if ($fwhostsettings{'ACTION'} eq 'savegrp')
{
- my $grp;
+ my $grp=$fwhostsettings{'grp_name'};;
my $rem=$fwhostsettings{'remark'};
my $count;
my $type;
@@ -521,94 +528,102 @@ if ($fwhostsettings{'ACTION'} eq 'savegrp')
&General::readhasharray("$configgrp", \%customgrp);
&General::readhasharray("$confignet", \%customnetwork);
&General::readhasharray("$confighost", \%customhost);
- $grp=$fwhostsettings{'grp_name'};
- if (!&validhostname($grp)){$errormessage=$errormessage.$Lang::tr{'fwhost err name'};}
- ###check standard networks
- if ($fwhostsettings{'grp2'} eq 'std_net'){
- @target=$fwhostsettings{'DEFAULT_SRC_ADR'};
- $type='Standard Network';
- }
- ##check custom networks
- if ($fwhostsettings{'grp2'} eq 'cust_net' && $fwhostsettings{'CUST_SRC_NET'} ne ''){
- @target=$fwhostsettings{'CUST_SRC_NET'};
- $updcounter='net';
- $type='Custom Network';
- }elsif($fwhostsettings{'grp2'} eq 'cust_net' && $fwhostsettings{'CUST_SRC_NET'} eq ''){
- $errormessage=$Lang::tr{'fwhost err groupempty'}." ";
- $fwhostsettings{'grp_name'}='';
- $fwhostsettings{'remark'}='';
- }
- #check custom addresses
- if ($fwhostsettings{'grp2'} eq 'cust_host' && $fwhostsettings{'CUST_SRC_HOST'} ne ''){
- @target=$fwhostsettings{'CUST_SRC_HOST'};
- $updcounter='host';
- $type='Custom Host';
- }elsif($fwhostsettings{'grp2'} eq 'cust_host' && $fwhostsettings{'CUST_SRC_HOST'} eq ''){
- $errormessage=$Lang::tr{'fwhost err groupempty'}." ";
- $fwhostsettings{'grp_name'}='';
- $fwhostsettings{'remark'}='';
- }
- #get address from ovpn ccd static net
- if ($fwhostsettings{'grp2'} eq 'ovpn_net' && $fwhostsettings{'OVPN_CCD_NET'} ne ''){
- @target=$fwhostsettings{'OVPN_CCD_NET'};
- $type='OpenVPN static network';
- }elsif($fwhostsettings{'grp2'} eq 'ovpn_net' && $fwhostsettings{'OVPN_CCD_NET'} eq ''){
- $errormessage=$Lang::tr{'fwhost err groupempty'};
- $fwhostsettings{'grp_name'}='';
- $fwhostsettings{'remark'}='';
- }
- #get address from ovpn ccd static host
- if ($fwhostsettings{'grp2'} eq 'ovpn_host' && $fwhostsettings{'OVPN_CCD_HOST'} ne ''){
- @target=$fwhostsettings{'OVPN_CCD_HOST'};
- $type='OpenVPN static host';
- }elsif ($fwhostsettings{'grp2'} eq 'ovpn_host' && $fwhostsettings{'OVPN_CCD_HOST'} eq ''){
- $errormessage=$Lang::tr{'fwhost err groupempty'};
- }
- #get address from ovpn ccd Net-2-Net
- if ($fwhostsettings{'grp2'} eq 'ovpn_n2n' && $fwhostsettings{'OVPN_N2N'} ne ''){
- @target=$fwhostsettings{'OVPN_N2N'};
- $type='OpenVPN N-2-N';
- }elsif ($fwhostsettings{'grp2'} eq 'ovpn_n2n' && $fwhostsettings{'OVPN_N2N'} eq ''){
- $errormessage=$Lang::tr{'fwhost err groupempty'};
- $fwhostsettings{'grp_name'}='';
- $fwhostsettings{'remark'}='';
- }
- #get address from IPSEC HOST
- if ($fwhostsettings{'grp2'} eq 'ipsec_host' && $fwhostsettings{'IPSEC_HOST'} ne ''){
- @target=$fwhostsettings{'IPSEC_HOST'};
- $type='IpSec Host';
- }elsif ($fwhostsettings{'grp2'} eq 'ipsec_host' && $fwhostsettings{'IPSEC_HOST'} eq ''){
- $errormessage=$Lang::tr{'fwhost err groupempty'};
- $fwhostsettings{'grp_name'}='';
- $fwhostsettings{'remark'}='';
- }
- #get address from IPSEC NETWORK
- if ($fwhostsettings{'grp2'} eq 'ipsec_net' && $fwhostsettings{'IPSEC_NET'} ne ''){
- @target=$fwhostsettings{'IPSEC_NET'};
- $type='IpSec Network';
- }elsif ($fwhostsettings{'grp2'} eq 'ipsec_net' && $fwhostsettings{'IPSEC_NET'} eq ''){
- $errormessage=$Lang::tr{'fwhost err groupempty'};
- $fwhostsettings{'grp_name'}='';
- $fwhostsettings{'remark'}='';
- }
- #check if host/net exists in grp
- my $test="$grp,$fwhostsettings{'oldremark'},@target";
- foreach my $key (keys %customgrp) {
- my $test1="$customgrp{$key}[0],$customgrp{$key}[1],$customgrp{$key}[2]";
- if ($test1 eq $test){
- $errormessage=$Lang::tr{'fwhost err isingrp'};
- $fwhostsettings{'update'} = 'on';
+ #check name
+ if (!&validhostname($grp)){$errormessage.=$Lang::tr{'fwhost err name'};}
+ #check remark
+ if ($rem ne '' && !&validremark($rem) && $fwhostsettings{'update'} ne 'on'){
+ $errormessage.=$Lang::tr{'fwhost err remark'};
+ }
+ if ($fwhostsettings{'update'} eq 'on'){
+ #check standard networks
+ if ($fwhostsettings{'grp2'} eq 'std_net'){
+ @target=$fwhostsettings{'DEFAULT_SRC_ADR'};
+ $type='Standard Network';
+ }
+ #check custom networks
+ if ($fwhostsettings{'grp2'} eq 'cust_net' && $fwhostsettings{'CUST_SRC_NET'} ne ''){
+ @target=$fwhostsettings{'CUST_SRC_NET'};
+ $updcounter='net';
+ $type='Custom Network';
+ }elsif($fwhostsettings{'grp2'} eq 'cust_net' && $fwhostsettings{'CUST_SRC_NET'} eq ''){
+ $errormessage=$Lang::tr{'fwhost err groupempty'}." ";
+ $fwhostsettings{'grp_name'}='';
+ $fwhostsettings{'remark'}='';
+ }
+ #check custom addresses
+ if ($fwhostsettings{'grp2'} eq 'cust_host' && $fwhostsettings{'CUST_SRC_HOST'} ne ''){
+ @target=$fwhostsettings{'CUST_SRC_HOST'};
+ $updcounter='host';
+ $type='Custom Host';
+ }elsif($fwhostsettings{'grp2'} eq 'cust_host' && $fwhostsettings{'CUST_SRC_HOST'} eq ''){
+ $errormessage=$Lang::tr{'fwhost err groupempty'}." ";
+ $fwhostsettings{'grp_name'}='';
+ $fwhostsettings{'remark'}='';
+ }
+ #get address from ovpn ccd static net
+ if ($fwhostsettings{'grp2'} eq 'ovpn_net' && $fwhostsettings{'OVPN_CCD_NET'} ne ''){
+ @target=$fwhostsettings{'OVPN_CCD_NET'};
+ $type='OpenVPN static network';
+ }elsif($fwhostsettings{'grp2'} eq 'ovpn_net' && $fwhostsettings{'OVPN_CCD_NET'} eq ''){
+ $errormessage=$Lang::tr{'fwhost err groupempty'};
+ $fwhostsettings{'grp_name'}='';
+ $fwhostsettings{'remark'}='';
+ }
+ #get address from ovpn ccd static host
+ if ($fwhostsettings{'grp2'} eq 'ovpn_host' && $fwhostsettings{'OVPN_CCD_HOST'} ne ''){
+ @target=$fwhostsettings{'OVPN_CCD_HOST'};
+ $type='OpenVPN static host';
+ }elsif ($fwhostsettings{'grp2'} eq 'ovpn_host' && $fwhostsettings{'OVPN_CCD_HOST'} eq ''){
+ $errormessage=$Lang::tr{'fwhost err groupempty'};
+ }
+ #get address from ovpn ccd Net-2-Net
+ if ($fwhostsettings{'grp2'} eq 'ovpn_n2n' && $fwhostsettings{'OVPN_N2N'} ne ''){
+ @target=$fwhostsettings{'OVPN_N2N'};
+ $type='OpenVPN N-2-N';
+ }elsif ($fwhostsettings{'grp2'} eq 'ovpn_n2n' && $fwhostsettings{'OVPN_N2N'} eq ''){
+ $errormessage=$Lang::tr{'fwhost err groupempty'};
+ $fwhostsettings{'grp_name'}='';
+ $fwhostsettings{'remark'}='';
+ }
+ #get address from IPSEC HOST
+ if ($fwhostsettings{'grp2'} eq 'ipsec_host' && $fwhostsettings{'IPSEC_HOST'} ne ''){
+ @target=$fwhostsettings{'IPSEC_HOST'};
+ $type='IpSec Host';
+ }elsif ($fwhostsettings{'grp2'} eq 'ipsec_host' && $fwhostsettings{'IPSEC_HOST'} eq ''){
+ $errormessage=$Lang::tr{'fwhost err groupempty'};
+ $fwhostsettings{'grp_name'}='';
+ $fwhostsettings{'remark'}='';
+ }
+ #get address from IPSEC NETWORK
+ if ($fwhostsettings{'grp2'} eq 'ipsec_net' && $fwhostsettings{'IPSEC_NET'} ne ''){
+ @target=$fwhostsettings{'IPSEC_NET'};
+ $type='IpSec Network';
+ }elsif ($fwhostsettings{'grp2'} eq 'ipsec_net' && $fwhostsettings{'IPSEC_NET'} eq ''){
+ $errormessage=$Lang::tr{'fwhost err groupempty'};
+ $fwhostsettings{'grp_name'}='';
+ $fwhostsettings{'remark'}='';
+ }
+ #check if host/net exists in grp
+
+ my $test="$grp,$fwhostsettings{'oldremark'},@target";
+ foreach my $key (keys %customgrp) {
+ my $test1="$customgrp{$key}[0],$customgrp{$key}[1],$customgrp{$key}[2]";
+ if ($test1 eq $test){
+ $errormessage=$Lang::tr{'fwhost err isingrp'};
+ $fwhostsettings{'update'} = 'on';
+ }
}
}
+
if (!$errormessage){
#on first save, we have an empty @target, so fill it with nothing
my $targetvalues=@target;
if ($targetvalues == '0'){
- @target=$Lang::tr{'fwhost empty'};
+ @target="none";
}
#on update, we have to delete the dummy entry
foreach my $key (keys %customgrp){
- if ($customgrp{$key}[0] eq $grp && $customgrp{$key}[2] eq $Lang::tr{'fwhost empty'}){
+ if ($customgrp{$key}[0] eq $grp && $customgrp{$key}[2] eq "none"){
delete $customgrp{$key};
last;
}
@@ -646,7 +661,7 @@ if ($fwhostsettings{'ACTION'} eq 'savegrp')
if($updcounter eq 'net'){
foreach my $key (keys %customnetwork) {
if($customnetwork{$key}[0] eq $fwhostsettings{'CUST_SRC_NET'}){
- $customnetwork{$key}[3] = $customnetwork{$key}[3]+1;
+ $customnetwork{$key}[4] = $customnetwork{$key}[4]+1;
last;
}
}
@@ -654,27 +669,13 @@ if ($fwhostsettings{'ACTION'} eq 'savegrp')
}elsif($updcounter eq 'host'){
foreach my $key (keys %customhost) {
if ($customhost{$key}[0] eq $fwhostsettings{'CUST_SRC_HOST'}){
- $customhost{$key}[3]=$customhost{$key}[3]+1;
+ $customhost{$key}[4]=$customhost{$key}[4]+1;
}
}
&General::writehasharray("$confighost", \%customhost);
}
$fwhostsettings{'update'}='on';
}
- if ($fwhostsettings{'remark'} ne $fwhostsettings{'oldremark'} )
- {
- foreach my $key (sort keys %customgrp)
- {
- if($customgrp{$key}[0] eq $grp && $customgrp{$key}[1] eq $fwhostsettings{'oldremark'})
- {
- $customgrp{$key}[1]='';
- $customgrp{$key}[1]=$rem;
- }
- }
- &General::writehasharray("$configgrp", \%customgrp);
- $errormessage='';
- $fwhostsettings{'update'}='on';
- }
#check if ruleupdate is needed
if($count > 0 )
{
@@ -722,12 +723,18 @@ if ($fwhostsettings{'ACTION'} eq 'saveservicegrp')
&General::readhasharray("$configsrvgrp", \%customservicegrp );
&General::readhasharray("$configsrv", \%customservice );
$errormessage=&checkservicegroup;
+ #check remark
+ if ($fwhostsettings{'SRVGRP_REMARK'} ne '' && !&validremark($fwhostsettings{'SRVGRP_REMARK'})){
+ $errormessage=$Lang::tr{'fwhost err remark'};
+ }
if (!$errormessage){
#on first save, we have to enter a dummy value
- if ($fwhostsettings{'CUST_SRV'} eq ''){$fwhostsettings{'CUST_SRV'}=$Lang::tr{'fwhost empty'};}
+ if ($fwhostsettings{'CUST_SRV'} eq ''){
+ $fwhostsettings{'CUST_SRV'}='none';
+ }
#on update, we have to delete the dummy entry
foreach my $key (keys %customservicegrp){
- if ($customservicegrp{$key}[2] eq $Lang::tr{'fwhost empty'}){
+ if ($customservicegrp{$key}[2] eq 'none'){
delete $customservicegrp{$key};
last;
}
@@ -773,20 +780,6 @@ if ($fwhostsettings{'ACTION'} eq 'saveservicegrp')
&General::writehasharray("$configsrvgrp", \%customservicegrp );
$fwhostsettings{'updatesrvgrp'}='on';
}
- if ($fwhostsettings{'SRVGRP_REMARK'} ne $fwhostsettings{'oldsrvgrpremark'} && $errormessage){
- foreach my $key (keys %customservicegrp)
- {
- if($customservicegrp{$key}[0] eq $fwhostsettings{'SRVGRP_NAME'} && $customservicegrp{$key}[1] eq $fwhostsettings{'oldsrvgrpremark'})
- {
- $customservicegrp{$key}[1]='';
- $customservicegrp{$key}[1]=$fwhostsettings{'SRVGRP_REMARK'};
- }
- }
- &General::writehasharray("$configsrvgrp", \%customservicegrp);
- $errormessage='';
- $hint=$Lang::tr{'fwhost changeremark'};
- $fwhostsettings{'update'}='on';
- }
if ($count gt 0){
&rules;
}
@@ -865,6 +858,8 @@ if ($fwhostsettings{'ACTION'} eq 'delhost')
}
if ($fwhostsettings{'ACTION'} eq 'deletegrphost')
{
+ my $grpremark;
+ my $grpname;
&General::readhasharray("$configgrp", \%customgrp);
foreach my $key (keys %customgrp){
if($customgrp{$key}[0].",".$customgrp{$key}[1].",".$customgrp{$key}[2].",".$customgrp{$key}[3] eq $fwhostsettings{'delhost'}){
@@ -873,7 +868,7 @@ if ($fwhostsettings{'ACTION'} eq 'deletegrphost')
&General::readhasharray("$confignet", \%customnetwork);
foreach my $key1 (keys %customnetwork){
if ($customnetwork{$key1}[0] eq $customgrp{$key}[2]){
- $customnetwork{$key1}[3] = $customnetwork{$key1}[3]-1;
+ $customnetwork{$key1}[4] = $customnetwork{$key1}[4]-1;
last;
}
}
@@ -883,17 +878,23 @@ if ($fwhostsettings{'ACTION'} eq 'deletegrphost')
&General::readhasharray("$confighost", \%customhost);
foreach my $key1 (keys %customhost){
if ($customhost{$key1}[0] eq $customgrp{$key}[2]){
- $customhost{$key1}[3] = $customhost{$key1}[3]-1;
+ $customhost{$key1}[4] = $customhost{$key1}[4]-1;
last;
}
}
&General::writehasharray("$confighost", \%customhost);
}
+ $grpname=$customgrp{$key}[0];
+ $grpremark=$customgrp{$key}[1];
delete $customgrp{$key};
}
}
&General::writehasharray("$configgrp", \%customgrp);
- &rules;
+ if ($fwhostsettings{'grpcnt'} > 0){&rules;}
+ if ($fwhostsettings{'update'} eq 'on'){
+ $fwhostsettings{'remark'}= $grpremark;
+ $fwhostsettings{'grp_name'}=$grpname;
+ }
&addgrp;
&viewtablegrp;
}
@@ -947,6 +948,8 @@ if ($fwhostsettings{'ACTION'} eq 'delservicegrp')
}
if ($fwhostsettings{'ACTION'} eq 'delgrpservice')
{
+ my $grpname;
+ my $grpremark;
&General::readhasharray("$configsrvgrp", \%customservicegrp);
&General::readhasharray("$configsrv", \%customservice);
foreach my $key (keys %customservicegrp){
@@ -960,11 +963,17 @@ if ($fwhostsettings{'ACTION'} eq 'delgrpservice')
}
}
&General::writehasharray("$configsrv", \%customservice);
- delete $customservicegrp{$key}
+ $grpname=$customservicegrp{$key}[0];
+ $grpremark=$customservicegrp{$key}[1];
+ delete $customservicegrp{$key};
}
}
&General::writehasharray("$configsrvgrp", \%customservicegrp);
&rules;
+ if ($fwhostsettings{'updatesrvgrp'} eq 'on'){
+ $fwhostsettings{'SRVGRP_NAME'}=$grpname;
+ $fwhostsettings{'SRVGRP_REMARK'}=$grpremark;
+ }
&addservicegrp;
&viewtableservicegrp;
@@ -993,6 +1002,56 @@ if ($fwhostsettings{'ACTION'} eq $Lang::tr{'fwhost newservicegrp'})
&addservicegrp;
&viewtableservicegrp;
}
+if ($fwhostsettings{'ACTION'} eq 'changegrpremark')
+{
+ &General::readhasharray("$configgrp", \%customgrp);
+ if ($fwhostsettings{'oldrem'} ne $fwhostsettings{'newrem'} && (&validremark($fwhostsettings{'newrem'}) || $fwhostsettings{'newrem'} eq '')){
+ foreach my $key (sort keys %customgrp)
+ {
+ if($customgrp{$key}[0] eq $fwhostsettings{'grp'} && $customgrp{$key}[1] eq $fwhostsettings{'oldrem'})
+ {
+ $customgrp{$key}[1]='';
+ $customgrp{$key}[1]=$fwhostsettings{'newrem'};
+ }
+ }
+ &General::writehasharray("$configgrp", \%customgrp);
+ $fwhostsettings{'update'}='on';
+ $fwhostsettings{'remark'}=$fwhostsettings{'newrem'};
+ }else{
+ $errormessage=$Lang::tr{'fwhost err remark'};
+ $fwhostsettings{'remark'}=$fwhostsettings{'oldrem'};
+ $fwhostsettings{'grp_name'}=$fwhostsettings{'grp'};
+ $fwhostsettings{'update'} = 'on';
+ }
+ $fwhostsettings{'grp_name'}=$fwhostsettings{'grp'};
+ &addgrp;
+ &viewtablegrp;
+}
+if ($fwhostsettings{'ACTION'} eq 'changesrvgrpremark')
+{
+ &General::readhasharray("$configsrvgrp", \%customservicegrp );
+ if ($fwhostsettings{'oldsrvrem'} ne $fwhostsettings{'newsrvrem'} && (&validremark($fwhostsettings{'newsrvrem'}) || $fwhostsettings{'newsrvrem'} eq '')){
+ foreach my $key (sort keys %customservicegrp)
+ {
+ if($customservicegrp{$key}[0] eq $fwhostsettings{'srvgrp'} && $customservicegrp{$key}[1] eq $fwhostsettings{'oldsrvrem'})
+ {
+ $customservicegrp{$key}[1]='';
+ $customservicegrp{$key}[1]=$fwhostsettings{'newsrvrem'};
+ }
+ }
+ &General::writehasharray("$configsrvgrp", \%customservicegrp);
+ $fwhostsettings{'updatesrvgrp'}='on';
+ $fwhostsettings{'SRVGRP_REMARK'}=$fwhostsettings{'newsrvrem'};
+ }else{
+ $errormessage=$Lang::tr{'fwhost err remark'};
+ $fwhostsettings{'SRVGRP_REMARK'}=$fwhostsettings{'oldsrvrem'};
+ $fwhostsettings{'SRVGRP_NAME'}=$fwhostsettings{'srvgrp'};
+ $fwhostsettings{'updatesrvgrp'} = 'on';
+ }
+ $fwhostsettings{'SRVGRP_NAME'}=$fwhostsettings{'srvgrp'};
+ &addservicegrp;
+ &viewtableservicegrp;
+}
### VIEW ###
if($fwhostsettings{'ACTION'} eq '')
{
@@ -1001,7 +1060,9 @@ if($fwhostsettings{'ACTION'} eq '')
### FUNCTIONS ###
sub showmenu
{
-
+ if (-f "${General::swroot}/forward/reread"){
+ print "
";
+ }
&Header::openbox('100%', 'left',$Lang::tr{'fwhost menu'});
print<
END
-
&Header::closebox();
}
@@ -1020,14 +1080,18 @@ sub addnet
&showmenu;
&Header::openbox('100%', 'left', $Lang::tr{'fwhost addnet'});
$fwhostsettings{'orgname'}=$fwhostsettings{'HOSTNAME'};
+ $fwhostsettings{'orgnetremark'}=$fwhostsettings{'NETREMARK'};
print<";
&Header::closebox();
@@ -1069,32 +1131,42 @@ sub addgrp
&showmenu;
&Header::openbox('100%', 'left', $Lang::tr{'fwhost addgrp'});
&General::setup_default_networks(\%defaultNetworks);
+ &General::readhasharray("$configccdnet", \%ccdnet);
+ &General::readhasharray("$confignet", \%customnetwork);
+ &General::readhasharray("$configccdhost", \%ccdhost);
+ &General::readhasharray("$confighost", \%customhost);
+ &General::readhasharray("$configipsec", \%ipsecconf);
+
my %checked=();
+ my $show='';
$checked{'check1'}{'off'} = '';
$checked{'check1'}{'on'} = '';
$checked{'grp2'}{$fwhostsettings{'grp2'}} = 'CHECKED';
$fwhostsettings{'oldremark'}=$fwhostsettings{'remark'};
-
+ my $grp=$fwhostsettings{'grp_name'};
+ my $rem=$fwhostsettings{'remark'};
if ($fwhostsettings{'update'} eq ''){
print<
- $Lang::tr{'fwhost addgrpname'} $Lang::tr{'remark'}:
-
+ $Lang::tr{'fwhost addgrpname'}
+ $Lang::tr{'remark'}:
+
END
}else{
print<
- $Lang::tr{'fwhost addgrpname'} $Lang::tr{'remark'}:
-
+
+
END
-
}
if ($fwhostsettings{'update'} eq 'on'){
-
-
print<$Lang::tr{'fwhost stdnet'}
-
+
+ ";
+ print" ";
+ print"$Lang::tr{'fwhost attention'}: $Lang::tr{'fwhost macwarn'} ";
}
- print<
-
-
-END
-
+ print"";
&Header::closebox();
}
sub addservice
@@ -1202,7 +1252,8 @@ sub addservice
}
print<
- $Lang::tr{'fwhost srv_name'}: $Lang::tr{'fwhost prot'}:
+ $Lang::tr{'fwhost srv_name'}:
+ $Lang::tr{'fwhost prot'}:
END
foreach ("TCP","UDP","ICMP")
{
@@ -1214,18 +1265,19 @@ END
}
}
print< $Lang::tr{'fwhost port'}:
- $Lang::tr{'fwhost icmptype'}
+
+ $Lang::tr{'fwhost icmptype'}
END
&General::readhasharray("${General::swroot}/fwhosts/icmp-types", \%icmptypes);
print"All ICMP-Types ";
- foreach my $key (sort { uc($icmptypes{$a}[0]) cmp uc($icmptypes{$b}[0]) }keys %icmptypes){
+ foreach my $key (sort { ncmp($icmptypes{$a}[0],$icmptypes{$b}[0]) }keys %icmptypes){
print"$icmptypes{$key}[0] ($icmptypes{$key}[1]) ";
}
print<
-
+
+ $Lang::tr{'fwhost port'}:
+
END
if ($fwhostsettings{'updatesrv'} eq 'on')
@@ -1257,35 +1309,36 @@ sub addservicegrp
&showmenu;
&Header::openbox('100%', 'left', $Lang::tr{'fwhost newservicegrp'});
$fwhostsettings{'oldsrvgrpremark'}=$fwhostsettings{'SRVGRP_REMARK'};
-
if ($fwhostsettings{'updatesrvgrp'} eq ''){
print<
- $Lang::tr{'fwhost addgrpname'} $Lang::tr{'remark'}:
-
+ $Lang::tr{'fwhost addgrpname'}
+ $Lang::tr{'remark'}:
+
END
}else{
print<
- $Lang::tr{'fwhost addgrpname'} $Lang::tr{'remark'}:
-
-
+
END
}
if($fwhostsettings{'updatesrvgrp'} eq 'on'){
print<
+
$Lang::tr{'fwhost cust service'}
END
&General::readhasharray("$configsrv", \%customservice);
- foreach my $key (sort { uc($customservice{$a}[0]) cmp uc($customservice{$b}[0])|| $a <=> $b } keys %customservice)
+ foreach my $key (sort { ncmp($customservice{$a}[0],$customservice{$b}[0]) } keys %customservice)
{
print "$customservice{$key}[0] ";
}
print<
-
+
END
@@ -1295,7 +1348,6 @@ END
END
-
&Header::closebox();
}
# View
@@ -1309,12 +1361,12 @@ sub viewtablenet
print "$Lang::tr{'fwhost empty'} ";
}else{
print<
- $Lang::tr{'name'} $Lang::tr{'fwhost netaddress'} $Lang::tr{'netmask'} $Lang::tr{'used'}
+
+ $Lang::tr{'name'} $Lang::tr{'fwhost netaddress'} $Lang::tr{'netmask'} $Lang::tr{'remark'} $Lang::tr{'used'}
END
}
my $count=0;
- foreach my $key (sort {$a <=> $b} keys %customnetwork) {
+ foreach my $key (sort {ncmp($a,$b)} keys %customnetwork) {
if ($fwhostsettings{'ACTION'} eq 'editnet' && $fwhostsettings{'HOSTNAME'} eq $customnetwork{$key}[0]) {
print" ";
}elsif ($count % 2)
@@ -1325,15 +1377,16 @@ END
print" ";
}
print<$customnetwork{$key}[0]$customnetwork{$key}[1] $customnetwork{$key}[2] $customnetwork{$key}[3]x
+ $customnetwork{$key}[0] $customnetwork{$key}[1] $customnetwork{$key}[2] $customnetwork{$key}[3] $customnetwork{$key}[4]x
+
END
- if($customnetwork{$key}[3] == '0')
+ if($customnetwork{$key}[4] == '0')
{
print" ";
}else{
@@ -1356,27 +1409,29 @@ sub viewtablehost
print "$Lang::tr{'fwhost empty'} ";
}else{
print<
- $Lang::tr{'name'} $Lang::tr{'fwhost ip_mac'} $Lang::tr{'used'}
+
+ $Lang::tr{'name'} $Lang::tr{'fwhost ip_mac'} $Lang::tr{'remark'} $Lang::tr{'used'}
END
}
my $count=0;
- foreach my $key (sort { uc($customhost{$a}[0]) cmp uc($customhost{$b}[0])|| $a <=> $b } keys %customhost) {
+ foreach my $key (sort { ncmp ($customhost{$a}[0],$customhost{$b}[0])} keys %customhost) {
if ( ($fwhostsettings{'ACTION'} eq 'edithost' || $fwhostsettings{'error'}) && $fwhostsettings{'HOSTNAME'} eq $customhost{$key}[0]) {
print" ";
}elsif ($count % 2){ print" ";}
else{ print" ";}
my ($ip,$sub)=split(/\//,$customhost{$key}[2]);
+ $customhost{$key}[4]=~s/\s+//g;
print<$customhost{$key}[0]$ip $customhost{$key}[3]x
+ $customhost{$key}[0] $ip $customhost{$key}[3] $customhost{$key}[4]x
+
END
- if($customhost{$key}[3] == '0')
+ if($customhost{$key}[4] == '0')
{
print" ";
}else{
@@ -1400,20 +1455,32 @@ sub viewtablegrp
&General::readhasharray("$confignet", \%customnetwork);
my @grp=();
my $helper='';
- my $count=0;
+ my $count=1;
my $grpname;
my $remark;
- my $number=keys %customgrp;
+ my $number;
+ my $delflag;
if (!keys %customgrp)
{
print "$Lang::tr{'fwhost empty'} ";
}else{
- foreach my $key (sort { uc($customgrp{$a}[0]) cmp uc($customgrp{$b}[0]) } sort { uc($customgrp{$a}[2]) cmp uc($customgrp{$b}[2]) } keys %customgrp){
-
+ foreach my $key (sort { ncmp($customgrp{$a}[0],$customgrp{$b}[0]) } sort { ncmp ($customgrp{$a}[2],$customgrp{$b}[2]) } keys %customgrp){
$count++;
if ($helper ne $customgrp{$key}[0]){
+ $delflag='0';
+ foreach my $key1 (sort { ncmp($customgrp{$a}[0],$customgrp{$b}[0]) } sort { ncmp($customgrp{$a}[2],$customgrp{$b}[2]) } keys %customgrp){
+ if ($customgrp{$key}[0] eq $customgrp{$key1}[0])
+ {
+ $delflag++;
+ }
+ if($delflag > 1){
+ last;
+ }
+ }
+ $number=1;
+ if ($customgrp{$key}[2] eq "none"){$customgrp{$key}[2]=$Lang::tr{'fwhost empty'};}
$grpname=$customgrp{$key}[0];
- $remark=$customgrp{$key}[1];
+ $remark="$customgrp{$key}[1]";
if($count >=2){print"
";}
print "$grpname    ";
print " $Lang::tr{'remark'}:   $remark   " if ($remark ne '');
@@ -1423,32 +1490,36 @@ sub viewtablegrp
print" ";
}
print" ";
- print"Name $Lang::tr{'ip address'} $Lang::tr{'fwhost type'} ";
+ print"";
@@ -1465,10 +1536,10 @@ sub viewtableservice
&Header::openbox('100%', 'left', $Lang::tr{'fwhost services'});
&General::readhasharray("$configsrv", \%customservice);
print<
+
$Lang::tr{'fwhost srv_name'} $Lang::tr{'fwhost prot'} $Lang::tr{'fwhost port'} ICMP $Lang::tr{'fwhost used'}
END
- foreach my $key (sort { uc($customservice{$a}[0]) cmp uc($customservice{$b}[0])|| $a <=> $b } keys %customservice)
+ foreach my $key (sort { ncmp($customservice{$a}[0],$customservice{$b}[0])} keys %customservice)
{
$count++;
if ( ($fwhostsettings{'updatesrv'} eq 'on' || $fwhostsettings{'error'}) && $fwhostsettings{'SRV_NAME'} eq $customservice{$key}[0]) {
@@ -1505,16 +1576,32 @@ sub viewtableservicegrp
my $helper;
my $port;
my $protocol;
+ my $delflag;
if (! -z $configsrvgrp){
&Header::openbox('100%', 'left', $Lang::tr{'fwhost cust srvgrp'});
&General::readhasharray("$configsrvgrp", \%customservicegrp);
&General::readhasharray("$configsrv", \%customservice);
my $number= keys %customservicegrp;
- foreach my $key (sort { uc($customservicegrp{$a}[0]) cmp uc($customservicegrp{$b}[0])|| $a <=> $b } keys %customservicegrp){
+ foreach my $key (sort { ncmp($customservicegrp{$a}[0],$customservicegrp{$b}[0]) } keys %customservicegrp){
$count++;
if ($helper ne $customservicegrp{$key}[0]){
+ $delflag=0;
+ foreach my $key1 (sort { ncmp($customservicegrp{$a}[0],$customservicegrp{$b}[0]) } sort { ncmp($customservicegrp{$a}[2],$customservicegrp{$b}[2]) } keys %customservicegrp){
+ if ($customservicegrp{$key}[0] eq $customservicegrp{$key1}[0])
+ {
+ $delflag++;
+ }
+ if($delflag > 1){
+ last;
+ }
+ }
$grpname=$customservicegrp{$key}[0];
- $remark=$customservicegrp{$key}[1];
+ if ($customservicegrp{$key}[2] eq "none"){
+ $customservicegrp{$key}[2]=$Lang::tr{'fwhost empty'};
+ $port='';
+ $protocol='';
+ }
+ $remark="$customservicegrp{$key}[1]";
if($count >=2){print"
";}
print "$grpname     ";
print "$Lang::tr{'remark'}:   $remark " if ($remark ne '');
@@ -1524,12 +1611,11 @@ sub viewtableservicegrp
print" ";
}
print" ";
- print"Name $Lang::tr{'port'} $Lang::tr{'fwhost prot'} ";
+ print"";
@@ -1601,11 +1687,6 @@ sub checkservicegroup
$errormessage.=$Lang::tr{'fwhost err name'}." ";
return $errormessage;
}
- #check remark
- if ( ($fwhostsettings{'SRVGRP_REMARK'} ne '') && (! &validhostname($fwhostsettings{'SRVGRP_REMARK'})))
- {
- $errormessage.=$Lang::tr{'fwhost err remark'}." ";
- }
#check empty selectbox
if (keys %customservice lt 1)
{
@@ -1674,10 +1755,9 @@ sub deletefromgrp
}
sub plausicheck
{
-
my $edit=shift;
#check hostname
- if (!&General::validhostname($fwhostsettings{'HOSTNAME'}))
+ if (!&validhostname($fwhostsettings{'HOSTNAME'}))
{
$errormessage=$errormessage.$Lang::tr{'fwhost err name'};
$fwhostsettings{'BLK_IP'}='readonly';
@@ -1685,7 +1765,6 @@ sub plausicheck
if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}=$edit;}
}
#check if name collides with CCD Netname
-
&General::readhasharray("$configccdnet", \%ccdnet);
foreach my $key (keys %ccdnet) {
if($ccdnet{$key}[0] eq $fwhostsettings{'HOSTNAME'}){
@@ -1695,7 +1774,6 @@ sub plausicheck
last;
}
}
-
#check if IP collides with CCD NetIP
if ($fwhostsettings{'type'} ne 'mac'){
&General::readhasharray("$configccdnet", \%ccdnet);
@@ -1710,9 +1788,6 @@ sub plausicheck
}
}
}
-
-
-
#check if name collides with CCD Hostname
&General::readhasharray("$configccdhost", \%ccdhost);
foreach my $key (keys %ccdhost) {
@@ -1762,8 +1837,6 @@ sub plausicheck
{
$errormessage=$errormessage." ".$Lang::tr{'fwhost err ipcheck'};
}
-
-
return;
}
sub getipforgroup
@@ -1878,9 +1951,20 @@ sub getipforgroup
}
}
sub rules
+{
+ if (!-f "${General::swroot}/fwhosts/reread"){
+ system("touch ${General::swroot}/fwhosts/reread");
+ system("touch ${General::swroot}/forward/reread");
+ }
+}
+sub reread_rules
{
system ("/usr/local/bin/forwardfwctrl");
- system("rm ${General::swroot}/forward/reread");
+ if ( -f "${General::swroot}/fwhosts/reread"){
+ system("rm ${General::swroot}/fwhosts/reread");
+ system("rm ${General::swroot}/forward/reread");
+ }
+
}
sub decrease
{
@@ -1891,7 +1975,7 @@ sub decrease
if ( ($customgrp{$key}[0] eq $grp) && ($customgrp{$key}[3] eq 'Custom Network')){
foreach my $key1 (sort keys %customnetwork){
if ($customnetwork{$key1}[0] eq $customgrp{$key}[2]){
- $customnetwork{$key1}[3]=$customnetwork{$key1}[3]-1;
+ $customnetwork{$key1}[4]=$customnetwork{$key1}[4]-1;
last;
}
}
@@ -1900,7 +1984,7 @@ sub decrease
if (($customgrp{$key}[0] eq $grp) && ($customgrp{$key}[3] eq 'Custom Host')){
foreach my $key2 (sort keys %customhost){
if ($customhost{$key2}[0] eq $customgrp{$key}[2]){
- $customhost{$key2}[3]=$customhost{$key2}[3]-1;
+ $customhost{$key2}[4]=$customhost{$key2}[4]-1;
last;
}
}
@@ -1977,7 +2061,7 @@ sub validhostname
if (length ($hostname) < 1 || length ($hostname) > 63) {
return 0;}
# Only valid characters are a-z, A-Z, 0-9 and -
- if ($hostname !~ /^[a-zA-ZäöüÃÃÃ0-9-_()\/\s]*$/) {
+ if ($hostname !~ /^[a-zA-ZäöüÃÃÃ0-9-_.;()\/\s]*$/) {
return 0;}
# First character can only be a letter or a digit
if (substr ($hostname, 0, 1) !~ /^[a-zA-ZöäüÃÃÃ0-9]*$/) {
@@ -1987,6 +2071,24 @@ sub validhostname
return 0;}
return 1;
}
-
+sub validremark
+{
+ # Checks a hostname against RFC1035
+ my $remark = $_[0];
+ # Each part should be at least two characters in length
+ # but no more than 63 characters
+ if (length ($remark) < 1 || length ($remark) > 255) {
+ return 0;}
+ # Only valid characters are a-z, A-Z, 0-9 and -
+ if ($remark !~ /^[a-zäöüA-ZÃÃÃ0-9-.:;\|_()\/\s]*$/) {
+ return 0;}
+ # First character can only be a letter or a digit
+ if (substr ($remark, 0, 1) !~ /^[a-zäöüA-ZÃÃÃ0-9]*$/) {
+ return 0;}
+ # Last character can only be a letter or a digit
+ if (substr ($remark, -1, 1) !~ /^[a-zöäüA-ZÃÃÃ0-9.:;_)]*$/) {
+ return 0;}
+ return 1;
+}
&Header::closebigbox();
&Header::closepage();