Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/src/Progmasoft/Runner/Options.cpp
diff options
context:
space:
mode:
authorLeitwolf112026-11-05 18:30:13 +0300
committerLeitwolf112026-11-05 18:30:13 +0300
commit89b4769c35986444a0297ad0806a584c7181c85c (patch)
tree2ec3dcb30828ef3749c503eb58e401b918beae7e /src/Progmasoft/Runner/Options.cpp
parent268698be92962247a21a86dda4de2d4267adcf8f (diff)
downloadcatch3-89b4769c35986444a0297ad0806a584c7181c85c.tar.gz
Withhold secret-looking variables from the processes the runner starts
Workers and the other processes the runner starts copied its whole environment, tokens and passwords included. ChildProcess::Start now leaves out every variable whose name contains, in any case, TOKEN, SECRET, PASSWORD, PASSWD, CREDENTIAL, API_KEY, APIKEY, PRIVATE_KEY or ACCESS_KEY (IsSecretVariable), unless ChildOptions::keptEnvironment names it; names compare without case on Windows. --pass-env=NAME, repeatable, and "pass-env" in catch3.json keep a variable for the tests. The runner itself still starts with the whole environment, so code that runs before the first worker sees it; docs/progmasoft-runner.md says so. A runner test starts the shell's environment listing with a secret and a plain variable set, sees only the plain one, and sees the secret once it is kept.
Diffstat (limited to 'src/Progmasoft/Runner/Options.cpp')
-rw-r--r--src/Progmasoft/Runner/Options.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/Progmasoft/Runner/Options.cpp b/src/Progmasoft/Runner/Options.cpp
index 383ed68d..13cf4be7 100644
--- a/src/Progmasoft/Runner/Options.cpp
+++ b/src/Progmasoft/Runner/Options.cpp
@@ -361,6 +361,17 @@ namespace Progmasoft::Catch3::Runner
options.isolate = true;
return Status::Ok();
}},
+ {"pass-env",
+ '\0',
+ Takes::kValue,
+ "NAME",
+ "Running",
+ "give the tests the variable NAME, which they do not get "
+ "because its name looks like a secret (repeatable)",
+ [](Options &options, const std::optional<std::string> &value) {
+ options.passedEnvironment.push_back(*value);
+ return Status::Ok();
+ }},
{"timeout",
'\0',
Takes::kValue,