Package: ferm
Version: 2.5.1-1
Severity: normal

Running "ferm --remote --slow" produces iptables rules in different
orders on different runs. This makes it difficult to compare outputs
for regression testing, version control, etc.

For example, on two successive runs this input produced the following
output:
        table filter {
            chain INPUT policy DROP;
            chain FORWARD policy DROP;
            chain OUTPUT policy ACCEPT;
        }

run #1
        iptables -t filter -P OUTPUT ACCEPT
        iptables -t filter -P FORWARD ACCEPT
        iptables -t filter -P INPUT ACCEPT
        iptables -t filter -F
        iptables -t filter -X
        iptables -t filter -P FORWARD DROP
        iptables -t filter -P INPUT DROP
run #2
        iptables -t filter -P INPUT ACCEPT
        iptables -t filter -P FORWARD ACCEPT
        iptables -t filter -P OUTPUT ACCEPT
        iptables -t filter -F
        iptables -t filter -X
        iptables -t filter -P INPUT DROP
        iptables -t filter -P FORWARD DROP

I think this behavior comes from Perl's randomized hash tables and the use of 
        while (my ($chain, $chain_info) = each %{$table_info->{chains}}) { ... }
constructs.  Changing these to loops over sorted keys should fix the problem.

Reply via email to