Escape the docker registry username and password
Fixes: https://github.com/basecamp/kamal/issues/278
This commit is contained in:
@@ -2,7 +2,10 @@ class Kamal::Commands::Registry < Kamal::Commands::Base
|
|||||||
delegate :registry, to: :config
|
delegate :registry, to: :config
|
||||||
|
|
||||||
def login
|
def login
|
||||||
docker :login, registry["server"], "-u", sensitive(lookup("username")), "-p", sensitive(lookup("password"))
|
docker :login,
|
||||||
|
registry["server"],
|
||||||
|
"-u", sensitive(Kamal::Utils.escape_shell_value(lookup("username"))),
|
||||||
|
"-p", sensitive(Kamal::Utils.escape_shell_value(lookup("password")))
|
||||||
end
|
end
|
||||||
|
|
||||||
def logout
|
def logout
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ class CommandsRegistryTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "registry login" do
|
test "registry login" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker login hub.docker.com -u dhh -p secret",
|
"docker login hub.docker.com -u \"dhh\" -p \"secret\"",
|
||||||
@registry.login.join(" ")
|
@registry.login.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -24,7 +24,18 @@ class CommandsRegistryTest < ActiveSupport::TestCase
|
|||||||
@config[:registry]["password"] = [ "KAMAL_REGISTRY_PASSWORD" ]
|
@config[:registry]["password"] = [ "KAMAL_REGISTRY_PASSWORD" ]
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker login hub.docker.com -u dhh -p more-secret",
|
"docker login hub.docker.com -u \"dhh\" -p \"more-secret\"",
|
||||||
|
@registry.login.join(" ")
|
||||||
|
ensure
|
||||||
|
ENV.delete("KAMAL_REGISTRY_PASSWORD")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "registry login escape password" do
|
||||||
|
ENV["KAMAL_REGISTRY_PASSWORD"] = "more-secret'\""
|
||||||
|
@config[:registry]["password"] = [ "KAMAL_REGISTRY_PASSWORD" ]
|
||||||
|
|
||||||
|
assert_equal \
|
||||||
|
"docker login hub.docker.com -u \"dhh\" -p \"more-secret'\\\"\"",
|
||||||
@registry.login.join(" ")
|
@registry.login.join(" ")
|
||||||
ensure
|
ensure
|
||||||
ENV.delete("KAMAL_REGISTRY_PASSWORD")
|
ENV.delete("KAMAL_REGISTRY_PASSWORD")
|
||||||
@@ -35,7 +46,7 @@ class CommandsRegistryTest < ActiveSupport::TestCase
|
|||||||
@config[:registry]["username"] = [ "KAMAL_REGISTRY_USERNAME" ]
|
@config[:registry]["username"] = [ "KAMAL_REGISTRY_USERNAME" ]
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker login hub.docker.com -u also-secret -p secret",
|
"docker login hub.docker.com -u \"also-secret\" -p \"secret\"",
|
||||||
@registry.login.join(" ")
|
@registry.login.join(" ")
|
||||||
ensure
|
ensure
|
||||||
ENV.delete("KAMAL_REGISTRY_USERNAME")
|
ENV.delete("KAMAL_REGISTRY_USERNAME")
|
||||||
|
|||||||
Reference in New Issue
Block a user