]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
(#12357) Fix root_home fact on Windows
authorJeff McCune <jeff@puppetlabs.com>
Tue, 28 Feb 2012 19:01:15 +0000 (11:01 -0800)
committerJeff McCune <jeff@puppetlabs.com>
Mon, 5 Mar 2012 23:22:06 +0000 (15:22 -0800)
Without this patch the root_home fact fails on windows.  This patch
fixes the problem by only calling methods on the object returned by the
`getent passwd root` command if the object evaluates to true.

Because there is no root account on Windows the code block simply
returns `nil` which makes the Facter fact undefined on Windows
platforms.

The root cause of the failure is that we always expected the command to
succeed and return something useful, and it may not on all supported
platforms.

lib/facter/root_home.rb
spec/unit/facter/root_home_spec.rb

index 61fcf3966b735fe9f455e3bd6e82f8457d0c03fa..8249f7d0256c458485b79229a4775e2011de574d 100644 (file)
@@ -7,7 +7,9 @@ module Facter::Util::RootHome
   def get_root_home
     root_ent = Facter::Util::Resolution.exec("getent passwd root")
     # The home directory is the sixth element in the passwd entry
-    root_ent.split(":")[5]
+    # If the platform doesn't have getent, root_ent will be nil and we should
+    # return it straight away.
+    root_ent && root_ent.split(":")[5]
   end
   end
 end
index 8946d9deecab65940cc2b7e456fec8d1082c6981..ce80684caeeef48fbbd31ce4713771ca8bc7e5b6 100644 (file)
@@ -30,13 +30,11 @@ describe Facter::Util::RootHome do
     end
   end
   context "windows" do
-    let(:root_ent) { "FIXME TBD on Windows" }
-    let(:expected_root_home) { "FIXME TBD on Windows" }
-
-    it "should return FIXME TBD on windows" do
-      pending "FIXME: TBD on windows"
-      Facter::Util::Resolution.expects(:exec).with("getent passwd root").returns(root_ent)
-      Facter::Util::RootHome.get_root_home.should == expected_root_home
+    before :each do
+      Facter::Util::Resolution.expects(:exec).with("getent passwd root").returns(nil)
+    end
+    it "should be nil on windows" do
+      Facter::Util::RootHome.get_root_home.should be_nil
     end
   end
 end