| 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 |
|
-
|