0001-Support-supplementary-groups.patch

support for supplementary groups - Till Maas, 05/15/2009 09:48 am

Download (2.8 kB)

b/lib/puppet/util.rb
58 58
            end
59 59
            unless Puppet::Util::SUIDManager.uid == user
60 60
                begin
61
                    Puppet::Util::SUIDManager.initgroups(user)
61 62
                    Puppet::Util::SUIDManager.uid = user 
62 63
                    Puppet::Util::SUIDManager.euid = user 
63
                rescue
64
                    $stderr.puts "could not change to user %s" % user
64
                rescue => detail
65
                    $stderr.puts "could not change to user %s: %s" % [user, detail]
65 66
                    exit(74)
66 67
                end
67 68
            end
b/lib/puppet/util/suidmanager.rb
7 7
    extend Forwardable
8 8

  
9 9
    to_delegate_to_process = [ :euid=, :euid, :egid=, :egid,
10
                               :uid=, :uid, :gid=, :gid ]
10
                               :uid=, :uid, :gid=, :gid, :groups=, :groups ]
11 11

  
12 12
    to_delegate_to_process.each do |method|
13 13
        def_delegator Process, method
......
26 26
        # We set both because some programs like to drop privs, i.e. bash.
27 27
        old_uid, old_gid = self.uid, self.gid
28 28
        old_euid, old_egid = self.euid, self.egid
29
        old_groups = self.groups
29 30
        begin
30 31
            self.egid = convert_xid :gid, new_gid if new_gid
32
            self.initgroups(convert_xid(:uid, new_uid)) if new_uid
31 33
            self.euid = convert_xid :uid, new_uid if new_uid
32 34
  
33 35
            yield
34 36
        ensure
35 37
            self.euid, self.egid = old_euid, old_egid
38
            self.groups = old_groups
36 39
        end
37 40
    end
38 41
    module_function :asuser
......
49 52
    end
50 53
    module_function :convert_xid
51 54

  
55
    # Initialize supplementary groups
56
    def initgroups(user)
57
        require 'etc'
58
        Process.initgroups(Etc.getpwuid(user).name, Process.gid)
59
    end
60
    module_function :initgroups
52 61

  
53 62
    def run_and_capture(command, new_uid=nil, new_gid=nil)
54 63
        output = Puppet::Util.execute(command, :failonfail => false, :uid => new_uid, :gid => new_gid)
55
-