[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. puppet-0.24.5-rc3-1456-g2f0b1e5

James Turnbull james at lovedthanlost.net
Tue Oct 27 17:06:06 UTC 2009


The following commit has been merged in the upstream branch:
commit b4bcfe9106c43855fbb4d1d147945ddb0e08ab34
Author: Markus Roberts <Markus at reality.com>
Date:   Tue Oct 20 19:52:50 2009 -0700

    Fix for #2736, target doesn't work for ssh_authorized_keys
    
    There were a number of problems here (duplicated code, meaningless
    tests, etc.) but the core was that the last definition of target
    ignored the provided value if there was also a user specified.
    
    Signed-off-by: Markus Roberts <Markus at reality.com>

diff --git a/lib/puppet/provider/ssh_authorized_key/parsed.rb b/lib/puppet/provider/ssh_authorized_key/parsed.rb
index 6df7f8a..28a68b3 100644
--- a/lib/puppet/provider/ssh_authorized_key/parsed.rb
+++ b/lib/puppet/provider/ssh_authorized_key/parsed.rb
@@ -36,14 +36,6 @@ Puppet::Type.type(:ssh_authorized_key).provide(:parsed,
         :rts      => /^\s+/,
         :match    => /^(?:(.+) )?(\d+) (\d+) (\d+)(?: (.+))?$/
 
-    def target
-        @resource.should(:target)
-    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
@@ -67,39 +59,13 @@ Puppet::Type.type(:ssh_authorized_key).provide(:parsed,
     end
 
     def target
-        if user
-            File.expand_path("~%s/.ssh/authorized_keys" % user)
-        elsif target = @resource.should(:target)
-            target
-        end
+        @resource.should(:target) || File.expand_path("~%s/.ssh/authorized_keys" % user)
     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.
diff --git a/spec/unit/provider/ssh_authorized_key/parsed.rb b/spec/unit/provider/ssh_authorized_key/parsed.rb
index 0f32a6f..ade738b 100755
--- a/spec/unit/provider/ssh_authorized_key/parsed.rb
+++ b/spec/unit/provider/ssh_authorized_key/parsed.rb
@@ -95,85 +95,61 @@ describe provider_class do
             File.stubs(:chown)
         end
 
-        describe "and a user has been specified" do
+        describe "and both a user and a target have been specified" do
             before :each do
-                @resource.stubs(:should).with(:user).returns "nobody"
-                target = File.expand_path("~nobody/.ssh/authorized_keys")
+                Puppet::Util.stubs(:uid).with("random_bob").returns 12345
+                @resource.stubs(:should).with(:user).returns "random_bob"
+                target = "/tmp/.ssh_dir/place_to_put_authorized_keys"
                 @resource.stubs(:should).with(:target).returns target
            end
 
             it "should create the directory" do
-                Dir.expects(:mkdir).with(File.expand_path("~nobody/.ssh"), 0700)
+                File.stubs(:exist?).with("/tmp/.ssh_dir").returns false
+                Dir.expects(:mkdir).with("/tmp/.ssh_dir", 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"))
+                uid = Puppet::Util.uid("random_bob")
+                File.expects(:chown).with(uid, nil, "/tmp/.ssh_dir")
                 @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"))
+                uid = Puppet::Util.uid("random_bob")
+                File.expects(:chown).with(uid, nil, "/tmp/.ssh_dir/place_to_put_authorized_keys")
                 @provider.flush
             end
 
             it "should chmod the key file to 0600" do
-                File.expects(:chmod).with(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")
+                File.expects(:chmod).with(0600, "/tmp/.ssh_dir/place_to_put_authorized_keys")
                 @provider.flush
             end
         end
 
-    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
+        describe "and a user has been specified with no target" do
             before :each do
                 @resource.stubs(:should).with(:user).returns "nobody"
                 @resource.stubs(:should).with(:target).returns nil
+                # 
+                # I'd like to use random_bob here and something like
+                #
+                #    File.stubs(:expand_path).with("~random_bob/.ssh").returns "/users/r/random_bob/.ssh"
+                #
+                # but mocha objects strenuously to stubbing File.expand_path
+                # so I'm left with using nobody.
+                @dir = File.expand_path("~nobody/.ssh")
            end
 
             it "should create the directory" do
-                Dir.expects(:mkdir).with(File.expand_path("~nobody/.ssh"), 0700)
+                File.stubs(:exist?).with(@dir).returns false
+                Dir.expects(:mkdir).with(@dir,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"))
+                File.expects(:chown).with(uid, nil, @dir)
                 @provider.flush
             end
 
@@ -189,19 +165,20 @@ describe provider_class do
             end
         end
 
-        describe "and a target has been specified" do
+        describe "and a target has been specified with no user" do
             before :each do
                 @resource.stubs(:should).with(:user).returns nil
-                @resource.stubs(:should).with(:target).returns "/tmp/.ssh/authorized_keys"
+                @resource.stubs(:should).with(:target).returns("/tmp/.ssh_dir/place_to_put_authorized_keys")
             end
 
             it "should make the directory" do
-                Dir.expects(:mkdir).with("/tmp/.ssh", 0755)
+                File.stubs(:exist?).with("/tmp/.ssh_dir").returns false
+                Dir.expects(:mkdir).with("/tmp/.ssh_dir", 0755)
                 @provider.flush
             end
 
             it "should chmod the key file to 0644" do
-                File.expects(:chmod).with(0644, "/tmp/.ssh/authorized_keys")
+                File.expects(:chmod).with(0644, "/tmp/.ssh_dir/place_to_put_authorized_keys")
                 @provider.flush
             end
         end

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list