From 772cb15e78bce035cc4799f2e153bdf97e06a2c1 Mon Sep 17 00:00:00 2001 From: Chris Butler Date: Mon, 30 Jan 2017 16:19:22 +0000 Subject: [PATCH] Add code to map between group names and GIDs --- lib/puppet/type/firewall.rb | 39 +++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/lib/puppet/type/firewall.rb b/lib/puppet/type/firewall.rb index a0de965..1208f92 100644 --- a/lib/puppet/type/firewall.rb +++ b/lib/puppet/type/firewall.rb @@ -845,6 +845,45 @@ Puppet::Type.newtype(:firewall) do only, as iptables does not accept multiple gid in a single statement. EOS + def insync?(is) + require 'etc' + + # The following code allow us to take into consideration unix mappings + # between string group names and GIDs (integers). We also need to ignore + # spaces as they are irrelevant with respect to rule sync. + + # Remove whitespace + is = is.gsub(/\s+/,'') + should = @should.first.to_s.gsub(/\s+/,'') + + # Keep track of negation, but remove the '!' + is_negate = '' + should_negate = '' + if is.start_with?('!') + is = is.gsub(/^!/,'') + is_negate = '!' + end + if should.start_with?('!') + should = should.gsub(/^!/,'') + should_negate = '!' + end + + # If 'should' contains anything other than digits, + # we assume that we have to do a lookup to convert + # to UID + unless should[/[0-9]+/] == should + should = Etc.getgrnam(should).gid + end + + # If 'is' contains anything other than digits, + # we assume that we have to do a lookup to convert + # to UID + unless is[/[0-9]+/] == is + is = Etc.getgrnam(is).gid + end + + return "#{is_negate}#{is}" == "#{should_negate}#{should}" + end end # match mark -- 2.45.2