$OpenBSD: patch-lib_puppet_indirector_node_ldap_rb,v 1.3 2012/10/28 18:48:45 robert Exp $
--- lib/puppet/indirector/node/ldap.rb.orig	Sat Oct 20 06:57:51 2012
+++ lib/puppet/indirector/node/ldap.rb	Sun Oct 28 19:09:31 2012
@@ -1,3 +1,4 @@
+require 'facter'
 require 'puppet/node'
 require 'puppet/indirector/ldap'
 
@@ -29,6 +30,9 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
   def find(request)
     names = [request.key]
     names << request.key.sub(/\..+/, '') if request.key.include?(".") # we assume it's an fqdn
+
+    defnode = Puppet::Node::Facts.find(request.key).values['defnode']
+    names << defnode if defnode
     names << "default"
 
     node = nil
@@ -179,6 +183,14 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
     parent_info = name2hash(parent) || raise(Puppet::Error.new("Could not find parent node '#{parent}'"))
     information[:classes] += parent_info[:classes]
     parent_info[:parameters].each do |param, value|
+      if (param =~ /^puppet[^class].*$/)
+          if information[:parameters][param].kind_of? String
+              information[:parameters][param] = information[:parameters][param].split("\n")
+          end
+          if information[:parameters][param]
+              information[:parameters][param] += parent_info[:parameters][param].to_a
+          end
+      end
       # Specifically test for whether it's set, so false values are handled correctly.
       information[:parameters][param] = value unless information[:parameters].include?(param)
     end
