mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-15 13:32:59 +02:00
ids-functions.pl: Merge same named rulefiles during extract.
In case a rulestarball contains several same-named rulefiles they have been overwritten each time and so only contained the content from the last extracted one. Now the content of those files will be merged by appending the content to the first extracted one for each time. Fixes #12792. Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
committed by
Michael Tremer
parent
6e2c8f4818
commit
9106bfca42
@@ -572,8 +572,38 @@ sub extractruleset ($) {
|
||||
next;
|
||||
}
|
||||
|
||||
# Extract the file to the temporary directory.
|
||||
$tar->extract_file("$packed_file", "$destination");
|
||||
# Check if the destination file exists.
|
||||
unless(-e "$destination") {
|
||||
# Extract the file to the temporary directory.
|
||||
$tar->extract_file("$packed_file", "$destination");
|
||||
} else {
|
||||
# Load perl module to deal with temporary files.
|
||||
use File::Temp;
|
||||
|
||||
# Generate temporary file name, located in the temporary rules directory and a suffix of ".tmp".
|
||||
my $tmp = File::Temp->new( SUFFIX => ".tmp", DIR => "$tmp_rules_directory", UNLINK => 0 );
|
||||
my $tmpfile = $tmp->filename();
|
||||
|
||||
# Extract the file to the new temporary file name.
|
||||
$tar->extract_file("$packed_file", "$tmpfile");
|
||||
|
||||
# Open the the existing file.
|
||||
open(DESTFILE, ">>", "$destination") or die "Could not open $destination. $!\n";
|
||||
open(TMPFILE, "<", "$tmpfile") or die "Could not open $tmpfile. $!\n";
|
||||
|
||||
# Loop through the content of the temporary file.
|
||||
while (<TMPFILE>) {
|
||||
# Append the content line by line to the destination file.
|
||||
print DESTFILE "$_";
|
||||
}
|
||||
|
||||
# Close the file handles.
|
||||
close(TMPFILE);
|
||||
close(DESTFILE);
|
||||
|
||||
# Remove the temporary file.
|
||||
unlink("$tmpfile");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user