Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.

Commit 3be9ea1

Browse files
author
Sander van Harmelen
committed
Added a function for the cleanup of test chains so the cleanup commands can be called from several places where cleaning is needed. Partly based on pull request #18 which also adds extra cleanup code...
1 parent 0e16a8a commit 3be9ea1

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

providers/rule.rb

+13-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212

1313
if not node["simple_iptables"]["chains"][new_resource.table].include?(new_resource.chain)
1414
node.set["simple_iptables"]["chains"][new_resource.table] = node["simple_iptables"]["chains"][new_resource.table].dup << new_resource.chain unless ["PREROUTING", "INPUT", "FORWARD", "OUTPUT", "POSTROUTING"].include?(new_resource.chain)
15-
node.set["simple_iptables"]["rules"][new_resource.table] = node["simple_iptables"]["rules"][new_resource.table].dup << "-A #{new_resource.direction} --jump #{new_resource.chain}"
15+
unless new_resource.chain == new_resource.direction
16+
node.set["simple_iptables"]["rules"][new_resource.table] = node["simple_iptables"]["rules"][new_resource.table].dup << "-A #{new_resource.direction} --jump #{new_resource.chain}"
17+
end
1618
end
1719

1820
# Then apply the rules to the node
@@ -30,28 +32,35 @@
3032

3133
def test_rules(new_resource, rules)
3234
test_chains = ["_chef_lwrp_test1"]
35+
cleanup_test_chain(new_resource.table, test_chains.first)
3336
shell_out!("iptables --table #{new_resource.table} --new-chain #{test_chains.first}")
3437
begin
3538
rules.each do |rule|
3639
new_rule = rule_string(new_resource, rule, true)
3740
new_rule.gsub!("-A #{new_resource.chain}", "-A #{test_chains.first}")
3841

39-
# Test for jumps to chains that are not actually created on the system, but are already processed in the current recipe
42+
# Test for jumps to chains that are not actually created on the systemyet, but are already processed in the current recipe
4043
if node["simple_iptables"]["chains"][new_resource.table].include?(new_resource.jump)
4144
test_chains.push("_chef_lwrp_test2")
45+
cleanup_test_chain(new_resource.table, test_chains.last)
4246
shell_out!("iptables --table #{new_resource.table} --new-chain #{test_chains.last}")
4347
new_rule.gsub!("--jump #{new_resource.jump}", "--jump #{test_chains.last}")
4448
end
4549
shell_out!("iptables #{new_rule}")
4650
end
4751
ensure
4852
test_chains.each do |test_chain|
49-
shell_out("iptables --table #{new_resource.table} --flush #{test_chain}")
50-
shell_out("iptables --table #{new_resource.table} --delete-chain #{test_chain}")
53+
cleanup_test_chain(new_resource.table, test_chain)
5154
end
5255
end
5356
end
5457

58+
def cleanup_test_chain(table, chain)
59+
#always flush and remove first in case the previous run left it lying around. Ignore any return values.
60+
shell_out("iptables --table #{table} --flush #{chain}")
61+
shell_out("iptables --table #{table} --delete-chain #{chain}")
62+
end
63+
5564
def rule_string(new_resource, rule, include_table)
5665
jump = new_resource.jump ? "--jump #{new_resource.jump} " : ""
5766
table = include_table ? "--table #{new_resource.table} " : ""

0 commit comments

Comments
 (0)