|
12 | 12 |
|
13 | 13 | if not node["simple_iptables"]["chains"][new_resource.table].include?(new_resource.chain)
|
14 | 14 | 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 |
16 | 18 | end
|
17 | 19 |
|
18 | 20 | # Then apply the rules to the node
|
|
30 | 32 |
|
31 | 33 | def test_rules(new_resource, rules)
|
32 | 34 | test_chains = ["_chef_lwrp_test1"]
|
| 35 | + cleanup_test_chain(new_resource.table, test_chains.first) |
33 | 36 | shell_out!("iptables --table #{new_resource.table} --new-chain #{test_chains.first}")
|
34 | 37 | begin
|
35 | 38 | rules.each do |rule|
|
36 | 39 | new_rule = rule_string(new_resource, rule, true)
|
37 | 40 | new_rule.gsub!("-A #{new_resource.chain}", "-A #{test_chains.first}")
|
38 | 41 |
|
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 |
40 | 43 | if node["simple_iptables"]["chains"][new_resource.table].include?(new_resource.jump)
|
41 | 44 | test_chains.push("_chef_lwrp_test2")
|
| 45 | + cleanup_test_chain(new_resource.table, test_chains.last) |
42 | 46 | shell_out!("iptables --table #{new_resource.table} --new-chain #{test_chains.last}")
|
43 | 47 | new_rule.gsub!("--jump #{new_resource.jump}", "--jump #{test_chains.last}")
|
44 | 48 | end
|
45 | 49 | shell_out!("iptables #{new_rule}")
|
46 | 50 | end
|
47 | 51 | ensure
|
48 | 52 | 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) |
51 | 54 | end
|
52 | 55 | end
|
53 | 56 | end
|
54 | 57 |
|
| 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 | + |
55 | 64 | def rule_string(new_resource, rule, include_table)
|
56 | 65 | jump = new_resource.jump ? "--jump #{new_resource.jump} " : ""
|
57 | 66 | table = include_table ? "--table #{new_resource.table} " : ""
|
|
0 commit comments