mirror of
https://github.com/NixOS/nix
synced 2025-07-04 15:31:47 +02:00
Make SSHMaster::startCommand
work on an args list
This avoids split-on-whitespace errors: - No more `bash -c` needed - No more `shellEscape` needed - `remote-program` ssh store setting also cleanly supports args (e.g. `nix daemon`) - `ssh` uses `--` to separate args for SSH from args for the command to run. and will help with Hydra dedup. Some code taken from #6628. Co-Authored-By: Alexander Bantyev <balsoft@balsoft.ru>
This commit is contained in:
parent
74534829f2
commit
b71673109c
5 changed files with 36 additions and 19 deletions
|
@ -52,7 +52,8 @@ bool SSHMaster::isMasterRunning() {
|
|||
return res.first == 0;
|
||||
}
|
||||
|
||||
std::unique_ptr<SSHMaster::Connection> SSHMaster::startCommand(const std::string & command)
|
||||
std::unique_ptr<SSHMaster::Connection> SSHMaster::startCommand(
|
||||
Strings && command, Strings && extraSshArgs)
|
||||
{
|
||||
Path socketPath = startMaster();
|
||||
|
||||
|
@ -84,18 +85,19 @@ std::unique_ptr<SSHMaster::Connection> SSHMaster::startCommand(const std::string
|
|||
|
||||
Strings args;
|
||||
|
||||
if (fakeSSH) {
|
||||
args = { "bash", "-c" };
|
||||
} else {
|
||||
if (!fakeSSH) {
|
||||
args = { "ssh", host.c_str(), "-x" };
|
||||
addCommonSSHOpts(args);
|
||||
if (socketPath != "")
|
||||
args.insert(args.end(), {"-S", socketPath});
|
||||
if (verbosity >= lvlChatty)
|
||||
args.push_back("-v");
|
||||
args.splice(args.end(), std::move(extraSshArgs));
|
||||
args.push_back("--");
|
||||
}
|
||||
|
||||
args.push_back(command);
|
||||
args.splice(args.end(), std::move(command));
|
||||
|
||||
execvp(args.begin()->c_str(), stringsToCharPtrs(args).data());
|
||||
|
||||
// could not exec ssh/bash
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue