diff options
Diffstat (limited to 'puppet-0.24.8-supplementary-groups.patch')
-rw-r--r-- | puppet-0.24.8-supplementary-groups.patch | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/puppet-0.24.8-supplementary-groups.patch b/puppet-0.24.8-supplementary-groups.patch new file mode 100644 index 0000000..42687da --- /dev/null +++ b/puppet-0.24.8-supplementary-groups.patch @@ -0,0 +1,74 @@ +From 2a401c6897af3abbc27dfaaf162556745267d6b2 Mon Sep 17 00:00:00 2001 +From: Jeroen van Meeuwen (Fedora Unity) <kanarip@fedoraunity.org> +Date: Wed, 24 Jun 2009 15:30:19 +0200 +Subject: [PATCH/puppet 2/6] Support supplementary groups (Till Maas) + +--- + lib/puppet/util.rb | 5 +++-- + lib/puppet/util/suidmanager.rb | 11 ++++++++++- + 2 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/lib/puppet/util.rb b/lib/puppet/util.rb +index f8a8721..51a2a16 100644 +--- a/lib/puppet/util.rb ++++ b/lib/puppet/util.rb +@@ -58,10 +58,11 @@ module Util + end + unless Puppet::Util::SUIDManager.uid == user + begin ++ Puppet::Util::SUIDManager.initgroups(user) + Puppet::Util::SUIDManager.uid = user + Puppet::Util::SUIDManager.euid = user +- rescue +- $stderr.puts "could not change to user %s" % user ++ rescue => detail ++ $stderr.puts "could not change to user %s: %s" % [user, detail] + exit(74) + end + end +diff --git a/lib/puppet/util/suidmanager.rb b/lib/puppet/util/suidmanager.rb +index b071dca..9f6e3b6 100644 +--- a/lib/puppet/util/suidmanager.rb ++++ b/lib/puppet/util/suidmanager.rb +@@ -7,7 +7,7 @@ module Puppet::Util::SUIDManager + extend Forwardable + + to_delegate_to_process = [ :euid=, :euid, :egid=, :egid, +- :uid=, :uid, :gid=, :gid ] ++ :uid=, :uid, :gid=, :gid, :groups=, :groups ] + + to_delegate_to_process.each do |method| + def_delegator Process, method +@@ -26,13 +26,16 @@ module Puppet::Util::SUIDManager + # We set both because some programs like to drop privs, i.e. bash. + old_uid, old_gid = self.uid, self.gid + old_euid, old_egid = self.euid, self.egid ++ old_groups = self.groups + begin + self.egid = convert_xid :gid, new_gid if new_gid ++ self.initgroups(convert_xid(:uid, new_uid)) if new_uid + self.euid = convert_xid :uid, new_uid if new_uid + + yield + ensure + self.euid, self.egid = old_euid, old_egid ++ self.groups = old_groups + end + end + module_function :asuser +@@ -49,6 +52,12 @@ module Puppet::Util::SUIDManager + end + module_function :convert_xid + ++ # Initialize supplementary groups ++ def initgroups(user) ++ require 'etc' ++ Process.initgroups(Etc.getpwuid(user).name, Process.gid) ++ end ++ module_function :initgroups + + def run_and_capture(command, new_uid=nil, new_gid=nil) + output = Puppet::Util.execute(command, :failonfail => false, :uid => new_uid, :gid => new_gid) +-- +1.6.3.3 + |