OSDN Git Service

Merge pull request #1617 from dosire/reject-ssh-keys-that-break-gitolite
authorValeriy Sizov <vsv2711@gmail.com>
Wed, 3 Oct 2012 10:18:08 +0000 (03:18 -0700)
committerValeriy Sizov <vsv2711@gmail.com>
Wed, 3 Oct 2012 10:18:08 +0000 (03:18 -0700)
Reject ssh keys that break gitolite

1  2 
app/models/key.rb
spec/factories.rb
spec/models/key_spec.rb

@@@ -28,9 -32,24 +28,24 @@@ class Key < ActiveRecord::Bas
      end
    end
  
+   def fingerprintable_key
+     return true unless key # Don't test if there is no key.
+     # `ssh-keygen -lf /dev/stdin <<< "#{key}"` errors with: redirection unexpected
+     file = Tempfile.new('key_file')
+     begin
+       file.puts key
+       file.rewind
+       fingerprint_output = `ssh-keygen -lf #{file.path} 2>&1` # Catch stderr.
+     ensure
+       file.close
+       file.unlink # deletes the temp file
+     end
+     errors.add(:key, "can't be fingerprinted") if fingerprint_output.match("failed")
+   end
    def set_identifier
      if is_deploy_key
 -      self.identifier = "deploy_" + Digest::MD5.hexdigest(key)
 +      self.identifier = "deploy_#{Digest::MD5.hexdigest(key)}"
      else
        self.identifier = "#{user.identifier}_#{Time.now.to_i}"
      end
Simple merge
Simple merge