未验证 提交 227b8148 编辑于 作者: Caleb Xu's avatar Caleb Xu
浏览文件

system_command: redact secrets in stdout/stderr

We already redact secrets when printing the command-line invocation
itself. Make sure that stdout/stderr doesn't leak secrets either.
上级 df2ded4e
......@@ -53,10 +53,10 @@ class SystemCommand
each_output_line do |type, line|
case type
when :stdout
$stdout << line if print_stdout?
$stdout << redact_secrets(line, @secrets) if print_stdout?
@output << [:stdout, line]
when :stderr
$stderr << line if print_stderr?
$stderr << redact_secrets(line, @secrets) if print_stderr?
@output << [:stderr, line]
end
end
......
......@@ -282,6 +282,30 @@ describe SystemCommand do
end
end
context "when running a process that prints secrets" do
it "does not leak the secrets" do
redacted_msg = /#{Regexp.escape("username:******")}/
expect {
described_class.run! "echo",
args: %w[username:hunter2],
verbose: true,
print_stdout: true,
secrets: %w[hunter2]
}.to output(redacted_msg).to_stdout
end
it "does not leak the secrets set by environment" do
redacted_msg = /#{Regexp.escape("username:******")}/
expect {
ENV["PASSWORD"] = "hunter2"
described_class.run! "echo",
args: %w[username:hunter2],
print_stdout: true,
verbose: true
}.to output(redacted_msg).to_stdout
end
end
context "when a `SIGINT` handler is set in the parent process" do
it "is not interrupted" do
start_time = Time.now
......
支持 Markdown
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册