From 58418009693fc43c895c210d11e3ad1b18c3222c Mon Sep 17 00:00:00 2001 From: Stefan Schantl Date: Wed, 2 Mar 2022 20:43:05 +0100 Subject: [PATCH] rules.pl: Autodetect ipset db file to restore. This commit allows the ipset_restore() function to auto-detect which set file needs to be restored. Currently it is limitated to country codes only, because we currently does not support anything else. Signed-off-by: Stefan Schantl --- config/firewall/rules.pl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl index b12764d187..b8c602538b 100644 --- a/config/firewall/rules.pl +++ b/config/firewall/rules.pl @@ -945,8 +945,9 @@ sub ipset_get_sets () { sub ipset_restore ($) { my ($set) = @_; - my $file_prefix = "ipset4"; - my $db_file = "$Location::Functions::ipset_db_directory/$set.$file_prefix"; + # Empty variable to store the db file, which should be + # restored by ipset. + my $db_file; # Check if the set already has been loaded. if($ipset_loaded_sets{$set}) { @@ -954,6 +955,15 @@ sub ipset_restore ($) { return; } + # Check if the given set name is a country code. + if($set ~~ @locations) { + # Libloc adds "ipset4" as prefix to all exported IPv4 data. + my $file_prefix = "ipset4"; + + # Generate full path and filename for the ipset db file to restore. + $db_file = "$Location::Functions::ipset_db_directory/$set.$file_prefix"; + } + # Check if the generated file exists. if (-f $db_file) { # Run ipset and restore the given set. -- 2.39.5