summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/config.rb8
-rw-r--r--lib/puppet/parser/ast/hostclass.rb2
-rw-r--r--lib/puppet/parser/interpreter.rb2
-rw-r--r--lib/puppet/parser/scope.rb12
-rw-r--r--lib/puppet/util.rb7
5 files changed, 21 insertions, 10 deletions
diff --git a/lib/puppet/config.rb b/lib/puppet/config.rb
index 303c45ed9..5519138fd 100644
--- a/lib/puppet/config.rb
+++ b/lib/puppet/config.rb
@@ -545,7 +545,13 @@ Generated on #{Time.now}.
raise ArgumentError, "Default %s is not a file" % default
end
- Puppet::Util.asuser(obj.owner, obj.group) do
+ chown = nil
+ if Process.uid == 0
+ chown = [obj.owner, obj.group]
+ else
+ chown = [nil, nil]
+ end
+ Puppet::Util.asuser(*chown) do
mode = obj.mode || 0640
if args.empty?
diff --git a/lib/puppet/parser/ast/hostclass.rb b/lib/puppet/parser/ast/hostclass.rb
index 3952cd4dc..503802b93 100644
--- a/lib/puppet/parser/ast/hostclass.rb
+++ b/lib/puppet/parser/ast/hostclass.rb
@@ -48,7 +48,7 @@ class Puppet::Parser::AST
# Set the mark after we evaluate, so we don't record it but
# then encounter an error
- scope.setclass(self.object_id)
+ scope.setclass(self.object_id, @type)
return retval
end
diff --git a/lib/puppet/parser/interpreter.rb b/lib/puppet/parser/interpreter.rb
index c432e39a8..4f5f1f69a 100644
--- a/lib/puppet/parser/interpreter.rb
+++ b/lib/puppet/parser/interpreter.rb
@@ -77,8 +77,6 @@ module Puppet
# Create our parser object
parsefiles
-
- evaluate
end
# Connect to the LDAP Server
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
index 76fb1703e..6e945adb4 100644
--- a/lib/puppet/parser/scope.rb
+++ b/lib/puppet/parser/scope.rb
@@ -214,7 +214,7 @@ module Puppet
unless defined? @classtable
raise Puppet::DevError, "Scope did not receive class table"
end
- return @classtable.keys
+ return @classtable.values
end
# Yield each child scope in turn
@@ -590,11 +590,11 @@ module Puppet
# Look up a given class. This enables us to make sure classes are
# singletons
- def lookupclass(klass)
+ def lookupclass(klassid)
unless defined? @classtable
raise Puppet::DevError, "Scope did not receive class table"
end
- return @classtable[klass]
+ return @classtable[klassid]
end
# Collect all of the defaults set at any higher scopes.
@@ -730,11 +730,11 @@ module Puppet
# that gets inherited from the nodescope down, rather than a global
# hash. We store the object ID, not class name, so that we
# can support multiple unrelated classes with the same name.
- def setclass(id)
+ def setclass(id, name)
if self.nodescope? or self.topscope?
- @classtable[id] = true
+ @classtable[id] = name
else
- @parent.setclass(id)
+ @parent.setclass(id, name)
end
end
diff --git a/lib/puppet/util.rb b/lib/puppet/util.rb
index 1d4515b3d..e842ffd3f 100644
--- a/lib/puppet/util.rb
+++ b/lib/puppet/util.rb
@@ -16,6 +16,13 @@ module Util
olduid = nil
oldgid = nil
+ # If they're running as a normal user, then just execute as that same
+ # user.
+ unless Process.uid == 0
+ yield
+ return
+ end
+
begin
# the groupid, if we got passed a group
# The gid has to be changed first, because, well, otherwise we won't