From 472136c9271f162ab65b224225fe3e478a77ccb4 Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Fri, 8 Mar 2013 08:38:41 +0100 Subject: [PATCH] Forward Firewall: Fix ruletimes. Now the timevalues which are entered in the gui are saved to the rulefile. Wenn rule.pl is called, the script calculates the difference to UTC time and sets the iptables times accordingly. With this approach there's no need to save if the times are created in summertime or wintertime. --- config/forwardfw/rules.pl | 40 +++++++++++++++++++++-- html/cgi-bin/forwardfw.cgi | 65 ++++---------------------------------- 2 files changed, 45 insertions(+), 60 deletions(-) diff --git a/config/forwardfw/rules.pl b/config/forwardfw/rules.pl index d4006846d..9332c9bec 100755 --- a/config/forwardfw/rules.pl +++ b/config/forwardfw/rules.pl @@ -25,6 +25,7 @@ ############################################################################### use strict; +use Time::Local; no warnings 'uninitialized'; # enable only the following on debugging purpose @@ -200,6 +201,10 @@ sub buildrules #get time if defined if($$hash{$key}[18] eq 'ON'){ + my ($time1,$time2,$daylight); + my $daylight=$$hash{$key}[28]; + $time1=&get_time($$hash{$key}[26],$daylight); + $time2=&get_time($$hash{$key}[27],$daylight); if($$hash{$key}[19] ne ''){push (@timeframe,"Mon");} if($$hash{$key}[20] ne ''){push (@timeframe,"Tue");} if($$hash{$key}[21] ne ''){push (@timeframe,"Wed");} @@ -208,8 +213,9 @@ sub buildrules if($$hash{$key}[24] ne ''){push (@timeframe,"Sat");} if($$hash{$key}[25] ne ''){push (@timeframe,"Sun");} $TIME=join(",",@timeframe); - $TIMEFROM="--timestart $$hash{$key}[26] "; - $TIMETILL="--timestop $$hash{$key}[27] "; + + $TIMEFROM="--timestart $time1 "; + $TIMETILL="--timestop $time2 "; $TIME="-m time --weekdays $TIME $TIMEFROM $TIMETILL"; } if ($MODE eq '1'){ @@ -287,6 +293,36 @@ sub buildrules undef $TIMETILL; } } +sub get_time +{ + my $val=shift; + my $val1=shift; + my $time; + my $minutes; + my $ruletime; + $minutes = &utcmin($val); + $ruletime = $minutes + &time_get_utc($val); + if ($ruletime < 0){$ruletime +=1440;} + if ($ruletime > 1440){$ruletime -=1440;} + $time=sprintf "%02d:%02d", $ruletime / 60, $ruletime % 60; + return $time; +} +sub time_get_utc +{ + # Calculates the UTCtime from a given time + my $val=shift; + my @localtime=localtime(time); + my @gmtime=gmtime(time); + my $diff = ($gmtime[2]*60+$gmtime[1]%60)-($localtime[2]*60+$localtime[1]%60); + return $diff; +} +sub utcmin +{ + my $ruletime=shift; + my ($hrs,$min) = split(":",$ruletime); + my $newtime = $hrs*60+$min; + return $newtime; +} sub p2pblock { my $P2PSTRING; diff --git a/html/cgi-bin/forwardfw.cgi b/html/cgi-bin/forwardfw.cgi index 1caa34869..1f3d6a9a6 100755 --- a/html/cgi-bin/forwardfw.cgi +++ b/html/cgi-bin/forwardfw.cgi @@ -74,7 +74,7 @@ my %ipsecsettings=(); my %aliases=(); my %optionsfw=(); -my $VERSION='0.9.8.3'; +my $VERSION='0.9.8.4'; my $color; my $confignet = "${General::swroot}/fwhosts/customnetworks"; my $confighost = "${General::swroot}/fwhosts/customhosts"; @@ -143,12 +143,6 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if( $fwdfwsettings{$fwdfwsettings{'grp1'}} eq 'IPFire' && $fwdfwsettings{'grp2'} eq 'ipfire'){ $errormessage.=$Lang::tr{'fwdfw err same'}; } - #Konvert timeframe if defined - if ($fwdfwsettings{'TIME'} eq 'ON'){ - $fwdfwsettings{'TIME_FROM'} = &timeconvert($fwdfwsettings{'TIME_FROM'},'2utc'); - $fwdfwsettings{'TIME_TO'} = &timeconvert($fwdfwsettings{'TIME_TO'},'2utc'); - print "NACHHER: $fwdfwsettings{'TIME_FROM'} - $fwdfwsettings{'TIME_TO'}
"; - } #DMZ-Part if ($fwdfwsettings{$fwdfwsettings{'grp1'}} eq 'ORANGE' || $checkorange eq 'on'){ $fwdfwsettings{'config'}=$configdmz; @@ -1391,11 +1385,10 @@ sub newrule $checked{'TIME_FRI'}{$fwdfwsettings{'TIME_FRI'}} = 'CHECKED'; $checked{'TIME_SAT'}{$fwdfwsettings{'TIME_SAT'}} = 'CHECKED'; $checked{'TIME_SUN'}{$fwdfwsettings{'TIME_SUN'}} = 'CHECKED'; - $fwdfwsettings{'TIME_FROM'} = &timeconvert($fwdfwsettings{'TIME_FROM'},''); - $fwdfwsettings{'TIME_TO'} = &timeconvert($fwdfwsettings{'TIME_TO'},''); $selected{'TIME_FROM'}{$fwdfwsettings{'TIME_FROM'}} = 'selected'; $selected{'TIME_TO'}{$fwdfwsettings{'TIME_TO'}} = 'selected'; $selected{'ipfire'}{$fwdfwsettings{$fwdfwsettings{'grp2'}}} ='selected'; + #check if update and get values if($fwdfwsettings{'updatefwrule'} eq 'on' || $fwdfwsettings{'copyfwrule'} eq 'on' && !$errormessage){ &General::readhasharray("$config", \%hash); @@ -1485,8 +1478,10 @@ sub newrule } } &Header::openbox('100%', 'left', $Lang::tr{'fwdfw addrule'}); - $fwdfwsettings{'TIME_FROM'} = &timeconvert($fwdfwsettings{'TIME_FROM'},''); - $fwdfwsettings{'TIME_TO'} = &timeconvert($fwdfwsettings{'TIME_TO'},''); + if ($fwdfwsettings{'TIME'} eq 'ON'){ + $fwdfwsettings{'TIME_FROM'} = &timeconvert($fwdfwsettings{'TIME_FROM'},''); + $fwdfwsettings{'TIME_TO'} = &timeconvert($fwdfwsettings{'TIME_TO'},''); + } print < @@ -1998,49 +1993,6 @@ sub saverule } } } -sub timeconvert -{ - my $orgtime=shift; - my $type=shift; - my $newtime; - my ($hour,$min) = split (":", $orgtime); - my @locar = localtime(time); - my @gmtar = gmtime(); - my $oldtime = $hour*60 + $min; - my $gmt = $gmtar[2]*60 + $gmtar[1]; - my $loc = $locar[2]*60 + $locar[1]; - my $diff; - my $newtime; - if ($gmt > $loc) - { - $diff = $gmt - $loc; - if ($type eq '2utc') - { - print"umrechnen nach UTC
"; - $newtime = $oldtime + $diff; - }else{ - $newtime = $oldtime - $diff; - } - }else{ - $diff = $loc - $gmt; - if ($type eq '2utc') - { - $newtime = $oldtime - $diff; - }else{ - $newtime = $oldtime + $diff; - } - } - if ($newtime < 0 ){ - $newtime += 1440; - } - if ($newtime >= 1440){ - $newtime -= 1440; - } - my $newhour =sprintf"%02d", $newtime/60; - my $newmin = sprintf"%02d",$newtime % 60; - $newtime = "$newhour:$newmin"; - return $newtime; -} sub validremark { # Checks a hostname against RFC1035 @@ -2221,10 +2173,7 @@ END if($$hash{$key}[25] ne ''){push (@days,$Lang::tr{'fwdfw wd_sun'});} my $weekdays=join(",",@days); if (@days){ - my $from = &timeconvert($$hash{$key}[26],'2loc'); - my $to = &timeconvert($$hash{$key}[27],'2loc');; - - print""; + print""; } }else{ print""; -- 2.39.2
$weekdays   $from - $to$weekdays   $$hash{$key}[26] - $$hash{$key}[27] 24/7