diff options
author | Robert Speicher <robert@gitlab.com> | 2016-09-20 05:42:03 +0000 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2016-09-20 05:42:03 +0000 |
commit | 4722c45ea2e3a8503ab057f771ec7367215963a6 (patch) | |
tree | 287f57e697112fa42278667a6cda99c37650c76c /lib | |
parent | 791079e2abeef1d3ebeecc8157bfb02cfdf9b36d (diff) | |
parent | 67ec96e3e0ea9d25356ed3de0be12c0d92ed6d16 (diff) | |
download | gitlab-ce-4722c45ea2e3a8503ab057f771ec7367215963a6.tar.gz |
Merge branch 'strip-key-comments-for-gitlab-shell' into 'master'
Strip comments before sending keys to gitlab-shell
## Why was this MR needed?
https://gitlab.com/gitlab-org/gitlab-ce/issues/22167 encoding issues in comment text.
## What are the relevant issue numbers?
https://gitlab.com/gitlab-org/gitlab-ce/issues/22167
See merge request !6381
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/backend/shell.rb | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/gitlab/backend/shell.rb b/lib/gitlab/backend/shell.rb index c412249a01e..79eac66b364 100644 --- a/lib/gitlab/backend/shell.rb +++ b/lib/gitlab/backend/shell.rb @@ -6,7 +6,12 @@ module Gitlab KeyAdder = Struct.new(:io) do def add_key(id, key) - key.gsub!(/[[:space:]]+/, ' ').strip! + key = Gitlab::Shell.strip_key(key) + # Newline and tab are part of the 'protocol' used to transmit id+key to the other end + if key.include?("\t") || key.include?("\n") + raise Error.new("Invalid key: #{key.inspect}") + end + io.puts("#{id}\t#{key}") end end @@ -16,6 +21,10 @@ module Gitlab @version_required ||= File.read(Rails.root. join('GITLAB_SHELL_VERSION')).strip end + + def strip_key(key) + key.split(/ /)[0, 2].join(' ') + end end # Init new repository @@ -107,7 +116,7 @@ module Gitlab # def add_key(key_id, key_content) Gitlab::Utils.system_silent([gitlab_shell_keys_path, - 'add-key', key_id, key_content]) + 'add-key', key_id, self.class.strip_key(key_content)]) end # Batch-add keys to authorized_keys |