[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, master, updated. debian/0.24.7-1-98-gf19c0e5

James Turnbull james at lovedthanlost.net
Wed Apr 8 21:48:25 UTC 2009


The following commit has been merged in the master branch:
commit 8a671e528e2d024f19c22e0381c3dc135d32884b
Author: Francois Deppierraz <francois.deppierraz at camptocamp.com>
Date:   Fri Nov 28 15:12:30 2008 +0100

    Fix Bug #1629
    
    A refactoring of ssh_authorized_key parsed provider was needed and tests
    were improved. flush method has been split for clarity.

diff --git a/lib/puppet/provider/ssh_authorized_key/parsed.rb b/lib/puppet/provider/ssh_authorized_key/parsed.rb
index 77af58e..5604ba3 100644
--- a/lib/puppet/provider/ssh_authorized_key/parsed.rb
+++ b/lib/puppet/provider/ssh_authorized_key/parsed.rb
@@ -40,25 +40,55 @@ Puppet::Type.type(:ssh_authorized_key).provide(:parsed,
         # This was done in the type class but path expansion was failing for
         # not yet existing users, the only workaround I found was to move that
         # in the provider.
-        if user = @resource.should(:user)
-            target = File.expand_path("~%s/.ssh/authorized_keys" % user)
-            @property_hash[:target] = target
-            @resource[:target] = target
-        end
+        @resource[:target] = target
 
         super
     end
 
+    def target
+        if user
+            File.expand_path("~%s/.ssh/authorized_keys" % user)
+        elsif target = @resource.should(:target)
+            target
+        end
+    end
+
+    def user
+        @resource.should(:user)
+    end
+
+    def dir_perm
+        # Determine correct permission for created directory and file
+        # we can afford more restrictive permissions when the user is known
+        if target
+            if user
+                0700
+            else
+                0755
+            end
+        end
+    end
+
+    def file_perm
+        if target
+            if user
+                0600
+            else
+                0644
+            end
+        end
+    end
+
     def flush
         # As path expansion had to be moved in the provider, we cannot generate new file
         # resources and thus have to chown and chmod here. It smells hackish.
-        
+
         # Create target's parent directory if nonexistant
-        if target = @property_hash[:target]
-            dir = File.dirname(@property_hash[:target])
+        if target
+            dir = File.dirname(target)
             if not File.exist? dir
                 Puppet.debug("Creating directory %s which did not exist" % dir)
-                Dir.mkdir(dir, 0700)
+                Dir.mkdir(dir, dir_perm)
             end
         end
 
@@ -66,9 +96,19 @@ Puppet::Type.type(:ssh_authorized_key).provide(:parsed,
         super
 
         # Ensure correct permissions
-        if target and user = @property_hash[:user]
-            File.chown(Puppet::Util.uid(user), nil, dir)
-            File.chown(Puppet::Util.uid(user), nil, @property_hash[:target])
+        if target and user
+            uid = Puppet::Util.uid(user)
+
+            if uid
+                File.chown(uid, nil, dir)
+                File.chown(uid, nil, target)
+            else
+                raise Puppet::Error, "Specified user does not exist"
+            end
+        end
+
+        if target
+            File.chmod(file_perm, target)
         end
     end
 
diff --git a/spec/unit/provider/ssh_authorized_key/parsed.rb b/spec/unit/provider/ssh_authorized_key/parsed.rb
index 21f30f9..73d6235 100755
--- a/spec/unit/provider/ssh_authorized_key/parsed.rb
+++ b/spec/unit/provider/ssh_authorized_key/parsed.rb
@@ -100,3 +100,67 @@ describe provider_class do
         @provider.parse_options(optionstr).should == options
     end
 end
+
+describe provider_class do
+    before :each do
+        @resource = stub("resource", :name => "foo")
+        @resource.stubs(:[]).returns "foo"
+        @provider = provider_class.new(@resource)
+    end
+
+    describe "when flushing" do
+        before :each do
+            # Stub file and directory operations
+            Dir.stubs(:mkdir)
+            File.stubs(:chmod)
+            File.stubs(:chown)
+        end
+
+        describe "and a user has been specified" do
+            before :each do
+                @resource.stubs(:should).with(:user).returns "nobody"
+                @resource.stubs(:should).with(:target).returns nil
+           end
+
+            it "should create the directory" do
+                Dir.expects(:mkdir).with(File.expand_path("~nobody/.ssh"), 0700)
+                @provider.flush
+            end
+
+            it "should chown the directory to the user" do
+                uid = Puppet::Util.uid("nobody")
+                File.expects(:chown).with(uid, nil, File.expand_path("~nobody/.ssh"))
+                @provider.flush
+            end
+
+            it "should chown the key file to the user" do
+                uid = Puppet::Util.uid("nobody")
+                File.expects(:chown).with(uid, nil, File.expand_path("~nobody/.ssh/authorized_keys"))
+                @provider.flush
+            end
+
+            it "should chmod the key file to 0600" do
+                File.chmod(0600, File.expand_path("~nobody/.ssh/authorized_keys"))
+                @provider.flush
+            end
+        end
+
+        describe "and a target has been specified" do
+            before :each do
+                @resource.stubs(:should).with(:user).returns nil
+                @resource.stubs(:should).with(:target).returns "/tmp/.ssh/authorized_keys"
+            end
+
+            it "should make the directory" do
+                Dir.expects(:mkdir).with("/tmp/.ssh", 0755)
+                @provider.flush
+            end
+
+            it "should chmod the key file to 0644" do
+                File.expects(:chmod).with(0644, "/tmp/.ssh/authorized_keys")
+                @provider.flush
+            end
+        end
+
+    end
+end

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list