# File lib/puppet/util/suidmanager.rb, line 50
50:   def asuser(new_uid=nil, new_gid=nil)
51:     return yield if Puppet.features.microsoft_windows? or !root?
52: 
53:     # We set both because some programs like to drop privs, i.e. bash.
54:     old_uid, old_gid = self.uid, self.gid
55:     old_euid, old_egid = self.euid, self.egid
56:     old_groups = self.groups
57:     begin
58:       self.egid = convert_xid :gid, new_gid if new_gid
59:       self.initgroups(convert_xid(:uid, new_uid)) if new_uid
60:       self.euid = convert_xid :uid, new_uid if new_uid
61: 
62:       yield
63:     ensure
64:       self.euid, self.egid = old_euid, old_egid
65:       self.groups = old_groups
66:     end
67:   end