diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-07-25T16·02+0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-07-25T16·02+0200 |
commit | 67937907ca7e90bc8fe3019d3c4d6436a8eba7ed (patch) | |
tree | 0a06763ab72b6bb6704675ee6a35d001a29b2dc1 | |
parent | 71a20d4d95ad40060857d5da6b813f437267fbb2 (diff) |
nix-daemon: Pass on the user's $SSH_AUTH_SOCK to the SSH substituter
-rw-r--r-- | src/download-via-ssh/download-via-ssh.cc | 5 | ||||
-rw-r--r-- | src/libstore/globals.cc | 8 | ||||
-rw-r--r-- | src/libstore/globals.hh | 2 | ||||
-rw-r--r-- | src/libstore/remote-store.cc | 2 |
4 files changed, 17 insertions, 0 deletions
diff --git a/src/download-via-ssh/download-via-ssh.cc b/src/download-via-ssh/download-via-ssh.cc index 0fa089724d7f..466233c7a5e5 100644 --- a/src/download-via-ssh/download-via-ssh.cc +++ b/src/download-via-ssh/download-via-ssh.cc @@ -101,6 +101,11 @@ void run(Strings args) std::cout << std::endl; + /* Pass on the location of the daemon client's SSH authentication + socket. */ + string sshAuthSock = settings.get("ssh-auth-sock"); + if (sshAuthSock != "") setenv("SSH_AUTH_SOCK", sshAuthSock.c_str(), 1); + string host = settings.sshSubstituterHosts.front(); std::pair<FdSink, FdSource> pipes = connect(host); diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc index 82f3e952a0b5..e9fe0beca4ef 100644 --- a/src/libstore/globals.cc +++ b/src/libstore/globals.cc @@ -122,6 +122,14 @@ void Settings::set(const string & name, const string & value) } +string Settings::get(const string & name, const string & def) +{ + auto i = settings.find(name); + if (i == settings.end()) return def; + return i->second; +} + + void Settings::update() { get(tryFallback, "build-fallback"); diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index f1748336fdac..d16969c9e010 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -21,6 +21,8 @@ struct Settings { void set(const string & name, const string & value); + string get(const string & name, const string & def = ""); + void update(); string pack(); diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc index b3967bb2418f..7c51f395aae2 100644 --- a/src/libstore/remote-store.cc +++ b/src/libstore/remote-store.cc @@ -163,6 +163,8 @@ void RemoteStore::setOptions() if (GET_PROTOCOL_MINOR(daemonVersion) >= 12) { Settings::SettingsMap overrides = settings.getOverrides(); + if (overrides["ssh-auth-sock"] == "") + overrides["ssh-auth-sock"] = getEnv("SSH_AUTH_SOCK"); writeInt(overrides.size(), to); foreach (Settings::SettingsMap::iterator, i, overrides) { writeString(i->first, to); |