summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ebtables-save.in19
1 files changed, 16 insertions, 3 deletions
diff --git a/ebtables-save.in b/ebtables-save.in
index 17924a2..4438050 100644
--- a/ebtables-save.in
+++ b/ebtables-save.in
@@ -7,11 +7,14 @@
# It can be used to store active configuration to /etc/sysconfig/ebtables
use strict;
+use POSIX qw(strftime);
my $table;
my $ebtables = "@sbindir@/ebtables";
my $cnt = "";
-my $version = "1.0";
+my $version = "1.1";
my $table_name;
+my $modulesfh;
+my @tables;
# ========================================================
# Process filter table
@@ -50,11 +53,21 @@ sub process_table {
# ========================================================
unless (-x $ebtables) { exit -1 };
-print "# Generated by ebtables-save v$version (legacy) on " . `date`;
+
+open $modulesfh, '<', '/proc/modules' or die "Failed to open /proc/modules: $!";
+while( my $line = <$modulesfh>) {
+ if($line =~ /^ebtable_([^ ]+)/) {
+ push @tables, $1;
+ }
+}
+close $modulesfh;
+
+printf("# Generated by ebtables-save v$version (legacy) on %s\n", strftime("%a %FT%TZ", gmtime));
if (defined($ENV{'EBTABLES_SAVE_COUNTER'}) && $ENV{'EBTABLES_SAVE_COUNTER'} eq "yes") {
$cnt = "--Lc";
}
-foreach $table_name (split("\n", `grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//`)) {
+
+foreach $table_name (@tables) {
$table =`$ebtables -t $table_name -L $cnt`;
unless ($? == 0) { print $table; exit -1 };
&process_table($table);