summary refs log tree commit diff
path: root/nix
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2018-04-21 04:57:29 -0400
committerMark H Weaver <mhw@netris.org>2018-04-21 05:02:52 -0400
commitc52872bfc418c6b2273f973dff8003ca9e062792 (patch)
tree4184a250e6d8363b3901aa2abe6910ff08ce08d4 /nix
parent65bb22796f854cbc3eae053a80b1d64365dad376 (diff)
parent3fe49e50153fec1dabac35e262a0888044f79aa6 (diff)
downloadguix-c52872bfc418c6b2273f973dff8003ca9e062792.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'nix')
-rw-r--r--nix/nix-daemon/nix-daemon.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/nix/nix-daemon/nix-daemon.cc b/nix/nix-daemon/nix-daemon.cc
index deb7003d7e..782e4acfc5 100644
--- a/nix/nix-daemon/nix-daemon.cc
+++ b/nix/nix-daemon/nix-daemon.cc
@@ -54,7 +54,9 @@ static FdSink to(STDOUT_FILENO);
 
 bool canSendStderr;
 
-
+/* This variable is used to keep track of whether a connection
+   comes from a host other than the host running guix-daemon. */
+static bool isRemoteConnection;
 
 /* This function is called anytime we want to write something to
    stderr.  If we're in a state where the protocol allows it (i.e.,
@@ -529,6 +531,11 @@ static void performOp(bool trusted, unsigned int clientVersion,
     }
 
     case wopCollectGarbage: {
+        if (isRemoteConnection) {
+            throw Error("Garbage collection is disabled for remote hosts.");
+            break;
+        }
+
         GCOptions options;
         options.action = (GCOptions::GCAction) readInt(from);
         options.pathsToDelete = readStorePaths<PathSet>(from);
@@ -934,6 +941,7 @@ static void acceptConnection(int fdSocket)
                    connection.  Setting these to -1 means: do not change.  */
                 settings.clientUid = clientUid;
 		settings.clientGid = clientGid;
+                isRemoteConnection = (remoteAddr.ss_family != AF_UNIX);
 
                 /* Handle the connection. */
                 from.fd = remote;