(PUP-1459) Add support for root_home on OS X 10.9

getent does not exist on 10.9 so this commit uses
dscacheutil to query the homedir for the root user.
This commit is contained in:
William Van Hevelingen 2014-01-16 22:22:38 -08:00
parent e49d356fbf
commit fe676f0ac4
3 changed files with 41 additions and 9 deletions

View file

@ -17,3 +17,16 @@ end
Facter.add(:root_home) do
setcode { Facter::Util::RootHome.get_root_home }
end
Facter.add(:root_home) do
confine :kernel => :darwin
setcode do
str = Facter::Util::Resolution.exec("dscacheutil -q user -a name root")
hash = {}
str.split("\n").each do |pair|
key,value = pair.split(/:/)
hash[key] = value
end
hash['dir'].strip
end
end

8
spec/fixtures/dscacheutil/root vendored Normal file
View file

@ -0,0 +1,8 @@
name: root
password: *
uid: 0
gid: 0
dir: /var/root
shell: /bin/bash
gecos: rawr Root

View file

@ -20,15 +20,6 @@ describe Facter::Util::RootHome do
Facter::Util::RootHome.get_root_home.should == expected_root_home
end
end
context "macosx" do
let(:root_ent) { "root:*:0:0:System Administrator:/var/root:/bin/sh" }
let(:expected_root_home) { "/var/root" }
it "should return /var/root" do
Facter::Util::Resolution.expects(:exec).with("getent passwd root").returns(root_ent)
Facter::Util::RootHome.get_root_home.should == expected_root_home
end
end
context "windows" do
before :each do
Facter::Util::Resolution.expects(:exec).with("getent passwd root").returns(nil)
@ -38,3 +29,23 @@ describe Facter::Util::RootHome do
end
end
end
describe 'root_home', :type => :fact do
before { Facter.clear }
after { Facter.clear }
context "macosx" do
before do
Facter.fact(:kernel).stubs(:value).returns("Darwin")
Facter.fact(:osfamily).stubs(:value).returns("Darwin")
end
let(:expected_root_home) { "/var/root" }
sample_dscacheutil = File.read(fixtures('dscacheutil','root'))
it "should return /var/root" do
Facter::Util::Resolution.stubs(:exec).with("dscacheutil -q user -a name root").returns(sample_dscacheutil)
Facter.fact(:root_home).value.should == expected_root_home
end
end
end