summaryrefslogtreecommitdiffstats
path: root/lib/puppet.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet.rb')
-rw-r--r--lib/puppet.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/puppet.rb b/lib/puppet.rb
index bb1f0079a..8cd639eb3 100644
--- a/lib/puppet.rb
+++ b/lib/puppet.rb
@@ -160,6 +160,35 @@ module Puppet
end
end
+ def self.asuser(user)
+ # FIXME this should use our user object, since it already knows how
+ # to find users and such
+ require 'etc'
+
+ begin
+ obj = Etc.getpwnam(user)
+ rescue ArgumentError
+ raise Puppet::Error, "User %s not found"
+ end
+
+ uid = obj.uid
+
+ olduid = nil
+ if Process.uid == uid
+ olduid = Process.uid
+ Process.euid = uid
+ end
+
+ retval = yield
+
+
+ if olduid
+ Process.euid = olduid
+ end
+
+ return retval
+ end
+
def self.setdefault(param,value)
if value.is_a?(Array)
if value[0].is_a?(Symbol)