From d49c7b1de1121b2710470440290bf7b124a49376 Mon Sep 17 00:00:00 2001 From: Morgan Haskel Date: Wed, 7 Jan 2015 15:26:55 -0500 Subject: [PATCH] MODULES-1612 - sync set_mark README and provider already claimed ip6tables provider supported `mark` feature, but the code wasn't there. Fixes puppetlabs/puppetlabs-firewall#387 --- lib/puppet/provider/firewall/ip6tables.rb | 11 ++++++++- spec/acceptance/firewall_spec.rb | 28 +++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/lib/puppet/provider/firewall/ip6tables.rb b/lib/puppet/provider/firewall/ip6tables.rb index 442d527..209bc18 100644 --- a/lib/puppet/provider/firewall/ip6tables.rb +++ b/lib/puppet/provider/firewall/ip6tables.rb @@ -34,6 +34,14 @@ Puppet::Type.type(:firewall).provide :ip6tables, :parent => :iptables, :source = confine :kernel => :linux + ip6tables_version = Facter.fact('iptables_version').value + if (ip6tables_version and Puppet::Util::Package.versioncmp(ip6tables_version, '1.4.1') < 0) + mark_flag = '--set-mark' + else + mark_flag = '--set-xmark' + end + + def initialize(*args) if Facter.fact('ip6tables_version').value.match /1\.3\.\d/ raise ArgumentError, 'The ip6tables provider is not supported on version 1.3 of iptables' @@ -90,6 +98,7 @@ Puppet::Type.type(:firewall).provide :ip6tables, :parent => :iptables, :source = :rseconds => "--seconds", :rsource => "--rsource", :rttl => "--rttl", + :set_mark => mark_flag, :socket => "-m socket", :source => "-s", :sport => ["-m multiport --sports", "--sport"], @@ -161,7 +170,7 @@ Puppet::Type.type(:firewall).provide :ip6tables, :parent => :iptables, :source = :src_type, :socket, :pkttype, :name, :ipsec_dir, :ipsec_policy, :state, :ctstate, :icmp, :hop_limit, :limit, :burst, :recent, :rseconds, :reap, :rhitcount, :rttl, :rname, :rsource, :rdest, :jump, :todest, :tosource, - :toports, :log_level, :log_prefix, :reject, :connlimit_above, + :toports, :log_level, :log_prefix, :reject, :set_mark, :connlimit_above, :connlimit_mask, :connmark] end diff --git a/spec/acceptance/firewall_spec.rb b/spec/acceptance/firewall_spec.rb index d03ec59..138a6cf 100644 --- a/spec/acceptance/firewall_spec.rb +++ b/spec/acceptance/firewall_spec.rb @@ -1421,6 +1421,34 @@ describe 'firewall type', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfami end end + describe 'set_mark' do + context '0x3e8/0xffffffff' do + it 'applies' do + pp = <<-EOS + class { '::firewall': } + firewall { '611 - test': + ensure => present, + chain => 'OUTPUT', + proto => tcp, + port => '611', + jump => 'MARK', + table => 'mangle', + set_mark => '0x3e8/0xffffffff', + provider => 'ip6tables', + } + EOS + + apply_manifest(pp, :catch_failures => true) + end + + it 'should contain the rule' do + shell('ip6tables-save -t mangle') do |r| + expect(r.stdout).to match(/-A OUTPUT -p tcp -m multiport --ports 611 -m comment --comment "611 - test" -j MARK --set-xmark 0x3e8\/0xffffffff/) + end + end + end + end + # ip6tables only support addrtype on a limited set of platforms if default['platform'] =~ /el-7/ or default['platform'] =~ /debian-7/ or default['platform'] =~ /ubuntu-1404/ ['dst_type', 'src_type'].each do |type| -- 2.45.2