aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpencer Baugh <sbaugh@catern.com>2018-01-14 21:20:22 -0500
committerSpencer Baugh <sbaugh@catern.com>2018-01-26 22:05:16 +0000
commit746f8aed86a990a6a8277cd2596f83166a73d718 (patch)
tree2cbc55482ad7933856f12b380716156bf060db95 /src
parent0c95776c3efdc63c4b957823d4e51d851a64ed84 (diff)
remote_store: register for NIX_REMOTE=unix://path
This allows overriding the socket path so the daemon may be listening at an arbitrary Unix domain socket location. Fixes #1800
Diffstat (limited to 'src')
-rw-r--r--src/libstore/remote-store.cc26
-rw-r--r--src/libstore/remote-store.hh2
2 files changed, 26 insertions, 2 deletions
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index 77b41b6bf..8f0b65557 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -78,9 +78,22 @@ UDSRemoteStore::UDSRemoteStore(const Params & params)
}
+UDSRemoteStore::UDSRemoteStore(std::string socket_path, const Params & params)
+ : Store(params)
+ , LocalFSStore(params)
+ , RemoteStore(params)
+ , path(socket_path)
+{
+}
+
+
std::string UDSRemoteStore::getUri()
{
- return "daemon";
+ if (path) {
+ return std::string("unix://") + *path;
+ } else {
+ return "daemon";
+ }
}
@@ -98,7 +111,7 @@ ref<RemoteStore::Connection> UDSRemoteStore::openConnection()
throw SysError("cannot create Unix domain socket");
closeOnExec(conn->fd.get());
- string socketPath = settings.nixDaemonSocketFile;
+ string socketPath = path ? *path : settings.nixDaemonSocketFile;
struct sockaddr_un addr;
addr.sun_family = AF_UNIX;
@@ -721,5 +734,14 @@ void RemoteStore::Connection::processStderr(Sink * sink, Source * source)
}
}
+static std::string uriScheme = "unix://";
+
+static RegisterStoreImplementation regStore([](
+ const std::string & uri, const Store::Params & params)
+ -> std::shared_ptr<Store>
+{
+ if (std::string(uri, 0, uriScheme.size()) != uriScheme) return 0;
+ return std::make_shared<UDSRemoteStore>(std::string(uri, uriScheme.size()), params);
+});
}
diff --git a/src/libstore/remote-store.hh b/src/libstore/remote-store.hh
index 30c6beae6..7f36e2064 100644
--- a/src/libstore/remote-store.hh
+++ b/src/libstore/remote-store.hh
@@ -134,6 +134,7 @@ class UDSRemoteStore : public LocalFSStore, public RemoteStore
public:
UDSRemoteStore(const Params & params);
+ UDSRemoteStore(std::string path, const Params & params);
std::string getUri() override;
@@ -145,6 +146,7 @@ private:
};
ref<RemoteStore::Connection> openConnection() override;
+ std::experimental::optional<std::string> path;
};