From 38384bd9521a42683d9ba33ac482993496c6f986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C5=A1o=20Stanovnik?= Date: Tue, 24 Mar 2015 10:55:31 +0100 Subject: [PATCH] The new fingerprint format wis incompatible with the previous regex. --- app/models/key.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/models/key.rb b/app/models/key.rb index 1c41f8b8d7a..480a16f9335 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -83,14 +83,14 @@ class Key < ActiveRecord::Base cmd_status = 0 cmd_output = '' + explicit_fingerprint_algorithm = false Tempfile.open('gitlab_key_file') do |file| file.puts key file.rewind - + # OpenSSH 6.8 introduces a new default output format for fingerprints. # Check the version and decide which command to use. version_output, version_status = popen(%W(ssh -V)) - explicit_fingerprint_algorithm = false if version_status.zero? out, _ = version_output.scan /.*?(\d)\.(\d).*?,/ major, minor = out[0], out[1] @@ -107,8 +107,15 @@ class Key < ActiveRecord::Base end if cmd_status.zero? - cmd_output.gsub /(\h{2}:)+\h{2}/ do |match| - self.fingerprint = match + if explicit_fingerprint_algorithm + cmd_output.gsub /(MD5:)(\h{2}:)+\h{2}/ do |match| + match.slice! /^MD5:/ + self.fingerprint = match + end + else + cmd_output.gsub /(\h{2}:)+\h{2}/ do |match| + self.fingerprint = match + end end end end