From 9bff7ad7287dafff1e06f3c3db6a5ec295d7c152 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 11 Jun 2007 11:36:22 +0000 Subject: * Check against creation of GC roots in the store. Those roots don't work, because findRoots() stops when it encounters a symlink to the store. And of course the store is supposed to be read-only. --- src/libstore/gc.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/libstore/gc.cc') diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc index e04e9c1071cb..2ad52d8bf4ea 100644 --- a/src/libstore/gc.cc +++ b/src/libstore/gc.cc @@ -97,6 +97,11 @@ Path addPermRoot(const Path & _storePath, const Path & _gcRoot, Path gcRoot(canonPath(_gcRoot)); assertStorePath(storePath); + if (isInStore(gcRoot)) + throw Error(format( + "creating a garbage collector root (%1%) in the Nix store is forbidden " + "(are you running nix-build inside the store?)") % gcRoot); + if (indirect) { createSymlink(gcRoot, storePath, true); store->addIndirectRoot(gcRoot); @@ -114,7 +119,6 @@ Path addPermRoot(const Path & _storePath, const Path & _gcRoot, } createSymlink(gcRoot, storePath, false); - } /* Check that the root can be found by the garbage collector. */ -- cgit 1.4.1