diff --git a/lib/puppet/provider/file/posix.rb b/lib/puppet/provider/file/posix.rb index 6cbf98e9a..415a5af40 100644 --- a/lib/puppet/provider/file/posix.rb +++ b/lib/puppet/provider/file/posix.rb @@ -1,99 +1,99 @@ Puppet::Type.type(:file).provide :posix do desc "Uses POSIX functionality to manage file's users and rights." confine :feature => :posix include Puppet::Util::POSIX include Puppet::Util::Warnings require 'etc' def id2name(id) return id.to_s if id.is_a?(Symbol) return nil if id > Puppet[:maximum_uid].to_i begin user = Etc.getpwuid(id) rescue TypeError return nil rescue ArgumentError return nil end if user.uid == "" return nil else return user.name end end - def insync?(current, should) + def is_owner_insync?(current, should) return true unless should should.each do |value| if value =~ /^\d+$/ uid = Integer(value) elsif value.is_a?(String) fail "Could not find user #{value}" unless uid = uid(value) else uid = value end return true if uid == current end unless Puppet.features.root? warnonce "Cannot manage ownership unless running as root" return true end false end # Determine if the user is valid, and if so, return the UID def validuser?(value) Integer(value) rescue uid(value) || false end def retrieve(resource) unless stat = resource.stat(false) return :absent end currentvalue = stat.uid # On OS X, files that are owned by -2 get returned as really # large UIDs instead of negative ones. This isn't a Ruby bug, # it's an OS X bug, since it shows up in perl, too. if currentvalue > Puppet[:maximum_uid].to_i self.warning "Apparently using negative UID (#{currentvalue}) on a platform that does not consistently handle them" currentvalue = :silly end currentvalue end def sync(path, links, should) # Set our method appropriately, depending on links. if links == :manage method = :lchown else method = :chown end uid = nil should.each do |user| break if uid = validuser?(user) end raise Puppet::Error, "Could not find user(s) #{should.join(",")}" unless uid begin File.send(method, uid, nil, path) rescue => detail raise Puppet::Error, "Failed to set owner to '#{uid}': #{detail}" end :file_changed end end diff --git a/lib/puppet/provider/file/win32.rb b/lib/puppet/provider/file/win32.rb index 8ead69a89..23aa491dc 100644 --- a/lib/puppet/provider/file/win32.rb +++ b/lib/puppet/provider/file/win32.rb @@ -1,74 +1,74 @@ Puppet::Type.type(:file).provide :microsoft_windows do desc "Uses Microsoft Windows functionality to manage file's users and rights." confine :feature => :microsoft_windows include Puppet::Util::Warnings require 'sys/admin' if Puppet.features.microsoft_windows? def id2name(id) return id.to_s if id.is_a?(Symbol) return nil if id > Puppet[:maximum_uid].to_i # should translate ID numbers to usernames id end - def insync?(current, should) + def is_owner_insync?(current, should) return true unless should should.each do |value| if value =~ /^\d+$/ uid = Integer(value) elsif value.is_a?(String) fail "Could not find user #{value}" unless uid = uid(value) else uid = value end return true if uid == current end unless Puppet.features.root? warnonce "Cannot manage ownership unless running as root" return true end false end # Determine if the user is valid, and if so, return the UID def validuser?(value) info "Is '#{value}' a valid user?" return 0 begin number = Integer(value) return number rescue ArgumentError number = nil end (number = uid(value)) && number end def retrieve(resource) unless stat = resource.stat(false) return :absent end currentvalue = stat.uid # On OS X, files that are owned by -2 get returned as really # large UIDs instead of negative ones. This isn't a Ruby bug, # it's an OS X bug, since it shows up in perl, too. if currentvalue > Puppet[:maximum_uid].to_i self.warning "Apparently using negative UID (#{currentvalue}) on a platform that does not consistently handle them" currentvalue = :silly end currentvalue end def sync(path, links, should) info("should set '%s'%%owner to '%s'" % [path, should]) end end diff --git a/lib/puppet/type/file/owner.rb b/lib/puppet/type/file/owner.rb index d473da20e..483cc7fce 100755 --- a/lib/puppet/type/file/owner.rb +++ b/lib/puppet/type/file/owner.rb @@ -1,52 +1,52 @@ module Puppet Puppet::Type.type(:file).newproperty(:owner) do desc "To whom the file should belong. Argument can be user name or user ID." @event = :file_changed def insync?(current) - provider.insync?(current, @should) + provider.is_owner_insync?(current, @should) end # We want to print names, not numbers def is_to_s(currentvalue) provider.id2name(currentvalue) || currentvalue end def should_to_s(newvalue = @should) case newvalue when Symbol newvalue.to_s when Integer provider.id2name(newvalue) || newvalue when String newvalue else raise Puppet::DevError, "Invalid uid type #{newvalue.class}(#{newvalue})" end end def retrieve if self.should @should = @should.collect do |val| unless val.is_a?(Integer) if tmp = provider.validuser?(val) val = tmp else raise "Could not find user #{val}" end else val end end end provider.retrieve(@resource) end def sync provider.sync(resource[:path], resource[:links], @should) end end end