Revision: 6255
          http://ipcop.svn.sourceforge.net/ipcop/?rev=6255&view=rev
Author:   owes
Date:     2012-01-23 21:08:19 +0000 (Mon, 23 Jan 2012)
Log Message:
-----------
Add file locking to puzzleFwRules.pl and make the logmessages more consistent. 
file locking helps to avoid iptables errormessages when 2 instances are running 
at the same time.

Modified Paths:
--------------
    ipcop/trunk/src/scripts/puzzleFwRules.pl
    ipcop/trunk/updates/2.0.3/ROOTFILES.i486-2.0.3

Modified: ipcop/trunk/src/scripts/puzzleFwRules.pl
===================================================================
--- ipcop/trunk/src/scripts/puzzleFwRules.pl    2012-01-23 07:36:15 UTC (rev 
6254)
+++ ipcop/trunk/src/scripts/puzzleFwRules.pl    2012-01-23 21:08:19 UTC (rev 
6255)
@@ -36,6 +36,7 @@
 use warnings;
 no warnings 'once';
 
+use Fcntl qw(:flock);
 require '/usr/lib/ipcop/general-functions.pl';
 require '/usr/lib/ipcop/lang.pl';
 require '/usr/lib/ipcop/header.pl';
@@ -48,7 +49,7 @@
 #      2 - only print rules
 my $debugLevel = 0;
 
-#&General::log("BlockOutTraffic: Renew rules");
+#&General::log("puzzleFwRules: Renew rules");
 # Debug
 
 my @preparedRules = ();
@@ -117,14 +118,14 @@
                 print "The $type rules need _no_ update\n";
 
                 # disable logging, it is filling the logs to much
-                #&General::log("$type rules need no update");
+                #&General::log("puzzleFwRules: $type rules need no update");
             }
         }
         else {
             push(@runRuleTypes, $type);
             if ($debugLevel > 0) {
                 print "The $type rules need an update\n";
-                &General::log("The $type rules need update");
+                &General::log("puzzleFwRules: the $type rules need update");
             }
         }
     }
@@ -138,7 +139,7 @@
 
     if ($debugLevel > 0) {
         print "Force update of '$type' rules\n";
-        &General::log("Force update of '$type' rules");
+        &General::log("puzzleFwRules: force update of '$type' rules");
     }
 }
 elsif ($argument eq '-a') {
@@ -150,7 +151,7 @@
 
     if ($debugLevel > 0) {
         print "Force update of all (and I mean ALL) rules\n";
-        &General::log("Force update of all rules");
+        &General::log("puzzleFwRules: force update of all rules");
     }
 }
 elsif ($argument eq '-u') {
@@ -160,7 +161,7 @@
 
     if ($debugLevel > 0) {
         print "Force update of user rules\n";
-        &General::log("Force update of user rules");
+        &General::log("puzzleFwRules: force update of user rules");
     }
 }
 elsif ($argument eq '-i') {
@@ -169,7 +170,7 @@
 
     if ($debugLevel > 0) {
         print "Force update of services rules\n";
-        &General::log("Force update of services rules");
+        &General::log("puzzleFwRules: force update of services rules");
     }
 }
 elsif ($argument eq '-w') {
@@ -178,7 +179,7 @@
 
     if ($debugLevel > 0) {
         print "Force update of Addressfilter rules\n";
-        &General::log("Force update of Addressfilter rules");
+        &General::log("puzzleFwRules: force update of Addressfilter rules");
     }
 }
 elsif ($argument eq '-d') {
@@ -481,7 +482,7 @@
         }
         else {    # 'custSrcNet'
             if ($custIfaces{$rule->{'SRC_NET'}} eq '') {
-                &General::log("BlockOutTraffic Error: Custom Interface 
$rule->{'SRC_NET'} does not exist");
+                &General::log("ERROR in puzzleFwRules: Custom Interface 
$rule->{'SRC_NET'} does not exist");
                 next;
             }
             $inDev = $custIfaces{$rule->{'SRC_NET'}}{'IFACE'};
@@ -514,7 +515,7 @@
             }
             else {    # 'custSrcNet'
                 if ($custIfaces{$rule->{'DST_NET'}} eq '') {
-                    &General::log("BlockOutTraffic Error: Custom Interface 
$rule->{'DST_NET'} does not exist");
+                    &General::log("ERROR in puzzleFwRules: Custom Interface 
$rule->{'DST_NET'} does not exist");
                     next;
                 }
                 @outDev = ($custIfaces{$rule->{'DST_NET'}}{'IFACE'});
@@ -546,14 +547,14 @@
         }
         elsif ($rule->{'SRC_ADR_TYPE'} eq 'custSrcAdr') {
             unless (defined $custAddresses{$rule->{'SRC_ADR'}}{'ADDRESS'}) {
-                &General::log("BlockOutTraffic Error: Custom Address 
$rule->{'SRC_ADR'} does not exist");
+                &General::log("ERROR in puzzleFwRules: Custom Address 
$rule->{'SRC_ADR'} does not exist");
                 next;
             }
             @srcAdres = (&buildAddressParams($rule->{'SRC_ADR'}, "custom", 
$invSrcAdr, "source"));
         }
         elsif ($rule->{'SRC_ADR_TYPE'} eq 'groupSrcAdr') {
             unless (defined $groupAddresses{$rule->{'SRC_ADR'}}{'ADDRESSES'}) {
-                &General::log("BlockOutTraffic Error: Address Group 
$rule->{'SRC_ADR'} does not exist");
+                &General::log("ERROR in puzzleFwRules: Address Group 
$rule->{'SRC_ADR'} does not exist");
                 next;
             }
             foreach my $adr 
(@{$groupAddresses{$rule->{'SRC_ADR'}}{'ADDRESSES'}}) {
@@ -638,13 +639,13 @@
             }
             elsif ($rule->{'DST_IP_TYPE'} eq 'custDestIP') {
                 unless (defined $custAddresses{$rule->{'DST_IP'}}{'ADDRESS'}) {
-                    &General::log("BlockOutTraffic Error: Custom Address 
$rule->{'DST_IP'} does not exist");
+                    &General::log("ERROR in puzzleFwRules: Custom Address 
$rule->{'DST_IP'} does not exist");
                     next;
                 }
                 my $custAdr = $custAddresses{$rule->{'DST_IP'}};
 
                 if ($custAdr->{'ADDRESS_TYPE'} ne 'ip') {
-                    &General::log("Error: Custom Address $rule->{'DST_IP'} - 
$Lang::tr{'mac adr not as dest'}");
+                    &General::log("ERROR in puzzleFwRules: Custom Address 
$rule->{'DST_IP'} - $Lang::tr{'mac adr not as dest'}");
                     next;
                 }
                 @destAdres = (&buildAddressParams($rule->{'DST_IP'}, "custom", 
$invDestAdr, $destAdrType));
@@ -652,7 +653,7 @@
             }
             elsif ($rule->{'DST_IP_TYPE'} eq 'groupDestIP') {
                 unless (defined 
$groupAddresses{$rule->{'DST_IP'}}{'ADDRESSES'}) {
-                    &General::log("BlockOutTraffic Error: Address Group 
$rule->{'DST_IP'} does not exist");
+                    &General::log("ERROR in puzzleFwRules: Address Group 
$rule->{'DST_IP'} does not exist");
                     next;
                 }
                 foreach my $adr 
(@{$groupAddresses{$rule->{'DST_IP'}}{'ADDRESSES'}}) {
@@ -1237,6 +1238,15 @@
 
 sub submitAllRules
 {
+    my $lockfile;
+    unless (open($lockfile, '>', '/var/lock/puzzleFwRules')) {
+        &General::log("ERROR in puzzleFwRules: open lockfile failed");
+        die("ERROR in puzzleFwRules: open lockfile failed");
+    }
+    unless (flock($lockfile, LOCK_EX)) {
+        &General::log("ERROR in puzzleFwRules: lock failed");
+        die("ERROR in puzzleFwRules: lock failed");
+    }
     foreach my $rule (@preparedRules) {
         ## DEBUG
         print "$rule\n" if ($debugLevel > 0);
@@ -1246,9 +1256,13 @@
             # Should not happen but if it does we want to know about it.
             my $rc = system($rule);
 
-            &General::log("ERROR in puzzleFw: $rc $rule") if ($rc);
+            &General::log("ERROR in puzzleFwRules: $rc $rule") if ($rc);
         }
     }
+    unless (flock($lockfile, LOCK_UN)) {
+        &General::log("ERROR in puzzleFwRules: unlock failed");
+        die("ERROR in puzzleFwRules: unlock failed");
+    }
 }
 
 # &inDayTime($rule->{'START_HOUR'}, $rule->{'END_HOUR'}, 
$rule->{'START_MINUTE'}, $rule->{'END_MINUTE'})
@@ -1354,7 +1368,7 @@
     $protoInv = '!' if ($custServices{$p_serviceName}{'PROTOCOL_INVERT'} eq 
'on');
 
     unless (defined $custServices{$p_serviceName}{'PROTOCOL'}) {
-        &General::log("BlockOutTraffic Error: Custom Service $p_serviceName 
does not exist");
+        &General::log("ERROR in puzzleFwRules: Custom Service $p_serviceName 
does not exist");
     }
     elsif ($custServices{$p_serviceName}{'PROTOCOL'} eq 'tcpudp') {
         $service_1 = "-p tcp $p_srcPort 
$custServices{$p_serviceName}{'PORT_IPT'}";
@@ -1452,7 +1466,7 @@
 
     if ($p_addressType eq 'custom') {
         unless (defined $custAddresses{$p_addressName}{'ADDRESS'}) {
-            &General::log("BlockOutTraffic Error: Custom Address 
$p_addressName does not exist");
+            &General::log("ERROR in puzzleFwRules: Custom Address 
$p_addressName does not exist");
             return ();
         }
 

Modified: ipcop/trunk/updates/2.0.3/ROOTFILES.i486-2.0.3
===================================================================
--- ipcop/trunk/updates/2.0.3/ROOTFILES.i486-2.0.3      2012-01-23 07:36:15 UTC 
(rev 6254)
+++ ipcop/trunk/updates/2.0.3/ROOTFILES.i486-2.0.3      2012-01-23 21:08:19 UTC 
(rev 6255)
@@ -18,6 +18,7 @@
 /usr/lib/ipcop/scheduler-lib.pl
 /usr/local/bin/blacklistupdate.pl
 /usr/local/bin/makesquidconf.pl
+/usr/local/bin/puzzleFwRules.pl
 /usr/local/bin/restartsquid
 /usr/local/bin/scheduler.pl
 /usr/local/bin/upgrade.sh

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Ipcop-svn mailing list
Ipcop-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipcop-svn

Reply via email to