]> git.ipfire.org Git - people/stevee/guardian.git/blobdiff - guardian
Add README file.
[people/stevee/guardian.git] / guardian
index 3e6128f955d75c9bb81a3236801b22775e5e1bbc..0facdc696245abb3ee814e90c496caab75ec3675 100644 (file)
--- a/guardian
+++ b/guardian
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2015  IPFire Development Team                                 #
+# Copyright (C) 2015-2016  IPFire Development Team                            #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -333,6 +333,7 @@ sub SignalHandler {
        $SIG{TERM} = \&Shutdown;
        $SIG{QUIT} = \&Shutdown;
        $SIG{HUP} = \&Reload;
+       $SIG{USR1} = \&ReloadIgnoreList;
 }
 
 #
@@ -394,10 +395,8 @@ sub Reload () {
        # Update logger object in mainsettings hash.
        $mainsettings{Logger} = $logger;
 
-       # Update ignore list, if one has been specified.
-       if (exists($mainsettings{IgnoreFile})) {
-               &Guardian::Events::GenerateIgnoreList($mainsettings{IgnoreFile});
-       }
+       # Update ignore list.
+       &ReloadIgnoreList();
 
        # Re-generate hash of monitored files.
        %monitored_files = &Guardian::Base::GenerateMonitoredFiles(\%mainsettings, \%monitored_files);
@@ -406,6 +405,68 @@ sub Reload () {
        &StartWorkers();
 }
 
+#
+## ReloadIgnoreList function.
+#
+## This function will be called if the signal handler recieves a "SIGUSR1" signal,
+## or the reload-ignore-list command will be sent via the socket connection. It just
+## performs a simple check if an ignore file has been configured and calls the responsible
+## function on the events module.
+#
+sub ReloadIgnoreList () {
+       # Update ignore list, if an ignorefile has been specified.
+       if (exists($mainsettings{IgnoreFile})) {
+               # Log reload of the ignore list.
+               $logger->Log("info", "Reloading ignore list...");
+
+               # Call responsible function from the events module.
+               &Guardian::Events::GenerateIgnoreList($mainsettings{IgnoreFile});
+       }
+}
+
+#
+## Logrotate function.
+#
+## This function only get called when the logrotate command will be sent via
+## the socket connection. It is responsible for validating and altering the current
+## curser positions of the monitored files and stopping/starting the worker threads.
+#
+sub Logrotate () {
+       # Stop all running workers.
+       &StopWorkers();
+
+       {
+       # Lock shared hash.
+       lock(%file_positions);
+
+       # Loop through the hash which contains the current
+       # file positions.
+       foreach my $file (keys(%file_positions)) {
+               # Obtain stored value from hash.
+               my $stored_position = $file_positions{$file};
+
+               # Call function to get the current position.
+               my $current_position = &Guardian::Base::GetFileposition($file);
+
+               # Compare if the current position still matches
+               # the stored one.
+               if ($current_position ne $stored_position) {
+                       # Update to the new position, because
+                       # they has changed during file rotation.
+                       $file_positions{$file} = $current_position;
+
+                       # Log notice about rotated file.
+                       $logger->Log("debug", "$file have been rotated - Using new file position.");
+               }
+       }
+
+       # After this bracket, the lock of the hash will be released.
+       }
+
+       # Restart all worker threads.
+       &StartWorkers();
+}
+
 #
 ## Shutdown function.
 #