Handle SSH keys that have multiple spaces between each marker

Notice what happens when a user adds a key with a space in between:

```
irb(main):004:0> 'ssh-rsa  foobar'.split(/ /)
=> ["ssh-rsa", "", "foobar"]
```

This would cause gitlab-shell to receive a blank argument for the actual
key, leading to users unable to login.
This commit is contained in:
Stan Hu 2017-04-04 23:09:04 -07:00
parent ced322c5f6
commit 54849afc6c
3 changed files with 14 additions and 1 deletions

View File

@ -0,0 +1,4 @@
---
title: Handle SSH keys that have multiple spaces between each marker
merge_request:
author:

View File

@ -35,7 +35,7 @@ module Gitlab
end
def strip_key(key)
key.split(/ /)[0, 2].join(' ')
key.split(/[ ]+/)[0, 2].join(' ')
end
private

View File

@ -69,6 +69,15 @@ describe Gitlab::Shell, lib: true do
expect(io).to have_received(:puts).with("key-42\tssh-rsa foo")
end
it 'handles multiple spaces in the key' do
io = spy(:io)
adder = described_class.new(io)
adder.add_key('key-42', "ssh-rsa foo")
expect(io).to have_received(:puts).with("key-42\tssh-rsa foo")
end
it 'raises an exception if the key contains a tab' do
expect do
described_class.new(StringIO.new).add_key('key-42', "ssh-rsa\tfoobar")