summaryrefslogtreecommitdiffstats
path: root/spec/unit
diff options
context:
space:
mode:
authorMarkus Roberts <Markus@reality.com>2010-04-28 15:39:39 -0700
committerJames Turnbull <james@lovedthanlost.net>2010-05-02 16:47:23 +1000
commitce233aa2a511bf6818f28c226144ec5b05a468ee (patch)
tree102ec5d463a268d90a067930d4b6f8c5446a7d7e /spec/unit
parent6739bab16e3126ccba13f025a4b47d38f15c1f67 (diff)
Write ssh_authorized_keys as user
This is a targeted fix to the issue of permissions when writing ssh authorized key files by 1) requiring that an existing users be specified on the resource and 2) doing the write as that user. It's based on Michael DeHaan's initial implementation of Luke's idea, but with a number of simplifications (mostly by testing necessary conditions as early as possible so the code isn't cluttered up with a lot of checks).
Diffstat (limited to 'spec/unit')
-rwxr-xr-xspec/unit/provider/ssh_authorized_key/parsed.rb47
1 files changed, 29 insertions, 18 deletions
diff --git a/spec/unit/provider/ssh_authorized_key/parsed.rb b/spec/unit/provider/ssh_authorized_key/parsed.rb
index d5c66d7b0..fc3f55044 100755
--- a/spec/unit/provider/ssh_authorized_key/parsed.rb
+++ b/spec/unit/provider/ssh_authorized_key/parsed.rb
@@ -15,6 +15,9 @@ describe provider_class do
before :each do
@sshauthkey_class = Puppet::Type.type(:ssh_authorized_key)
@provider = @sshauthkey_class.provider(:parsed)
+ @keyfile = File.join(tmpdir, 'authorized_keys')
+ @user = 'random_bob'
+ Puppet::Util.stubs(:uid).with(@user).returns 12345
end
after :each do
@@ -23,22 +26,23 @@ describe provider_class do
def mkkey(args)
fakeresource = fakeresource(:ssh_authorized_key, args[:name])
+ fakeresource.stubs(:should).with(:user).returns @user
+ fakeresource.stubs(:should).with(:target).returns @keyfile
key = @provider.new(fakeresource)
args.each do |p,v|
key.send(p.to_s + "=", v)
end
- return key
+ key
end
def genkey(key)
@provider.stubs(:filetype).returns(Puppet::Util::FileType::FileTypeRam)
- file = @provider.default_target
-
+ File.stubs(:chown)
+ File.stubs(:chmod)
key.flush
- text = @provider.target_object(file).read
- return text
+ @provider.target_object(@keyfile).read
end
PuppetTest.fakedata("data/providers/ssh_authorized_key/parsed").each { |file|
@@ -147,20 +151,35 @@ describe provider_class do
# but mocha objects strenuously to stubbing File.expand_path
# so I'm left with using nobody.
@dir = File.expand_path("~nobody/.ssh")
- end
+ end
- it "should create the directory" do
+ it "should create the directory if it doesn't exist" do
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
+ it "should not create or chown the directory if it already exist" do
+ File.stubs(:exist?).with(@dir).returns false
+ Dir.expects(:mkdir).never
+ @provider.flush
+ end
+
+ it "should chown the directory to the user if it creates it" do
+ File.stubs(:exist?).with(@dir).returns false
+ Dir.stubs(:mkdir).with(@dir,0700)
uid = Puppet::Util.uid("nobody")
File.expects(:chown).with(uid, nil, @dir)
@provider.flush
end
+ it "should not create or chown the directory if it already exist" do
+ File.stubs(:exist?).with(@dir).returns false
+ Dir.expects(:mkdir).never
+ File.expects(:chown).never
+ @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"))
@@ -179,17 +198,9 @@ describe provider_class do
@resource.stubs(:should).with(:target).returns("/tmp/.ssh_dir/place_to_put_authorized_keys")
end
- it "should make the directory" do
- 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_dir/place_to_put_authorized_keys")
- @provider.flush
+ it "should raise an error" do
+ proc { @provider.flush }.should raise_error
end
end
-
end
end