[2/5] ids-functions.pl: Allow "5" download attempts for each provider before fail.

Message ID 20220322194059.3030-2-stefan.schantl@ipfire.org
State Dropped
Headers
Series [1/5] ids-functions.pl: Drop downloader code for sourcefire based ruleset. |

Commit Message

Stefan Schantl March 22, 2022, 7:40 p.m. UTC
  Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
---
 config/cfgroot/ids-functions.pl | 38 ++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 10 deletions(-)
  

Patch

diff --git a/config/cfgroot/ids-functions.pl b/config/cfgroot/ids-functions.pl
index eb276030b..c8bc52b1b 100644
--- a/config/cfgroot/ids-functions.pl
+++ b/config/cfgroot/ids-functions.pl
@@ -256,6 +256,10 @@  sub downloadruleset ($) {
 	# If no provider is given default to "all".
 	$provider //= 'all';
 
+	# The amount of download attempts before giving up and
+	# logging an error.
+	my $max_dl_attempts = 5;
+
 	# Hash to store the providers and access id's, for which rules should be downloaded.
 	my %sheduled_providers = ();
 
@@ -364,19 +368,33 @@  sub downloadruleset ($) {
 		# Pass the requested url to the downloader.
 		my $request = HTTP::Request->new(GET => $url);
 
-		# Perform the request and save the output into the tmpfile.
-		my $response = $downloader->request($request, $tmpfile);
+		my $dl_attempt = 1;
+		my $response;
 
-		# Check if there was any error.
-		unless ($response->is_success) {
-			# Obtain error.
-			my $error = $response->content;
+		# Download and retry on failure.
+		while ($dl_attempt <= $max_dl_attempts) {
+			# Perform the request and save the output into the tmpfile.
+			$response = $downloader->request($request, $tmpfile);
 
-			# Log error message.
-			&_log_to_syslog("Unable to download the ruleset. \($error\)");
+			# Check if the download was successfull.
+			if($response->is_success) {
+				# Break loop.
+				last;
 
-			# Return "1" - false.
-			return 1;
+			# Check if we ran out of download re-tries.
+			} elsif ($dl_attempt eq $max_dl_attempts) {
+				# Obtain error.
+				my $error = $response->content;
+
+				# Log error message.
+				&_log_to_syslog("Unable to download the ruleset. \($error\)");
+
+				# Return "1" - false.
+				return 1;
+			}
+
+			# Increase download attempt counter.
+			$dl_attempt++;
 		}
 
 		# Obtain the connection headers.