about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--configure.ac1
-rwxr-xr-xscripts/nix-http-export.cgi.in50
-rw-r--r--scripts/nix-reduce-build.in2
-rw-r--r--substitute.mk1
4 files changed, 53 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index f12ac0c486d4..fd96c65f2c52 100644
--- a/configure.ac
+++ b/configure.ac
@@ -136,6 +136,7 @@ NEED_PROG(perl, perl)
 NEED_PROG(tar, tar)
 AC_PATH_PROG(dot, dot)
 AC_PATH_PROG(dblatex, dblatex)
+AC_PATH_PROG(gzip, gzip)
 
 AC_PATH_PROG(openssl_prog, openssl, openssl) # if not found, call openssl in $PATH
 AC_SUBST(openssl_prog)
diff --git a/scripts/nix-http-export.cgi.in b/scripts/nix-http-export.cgi.in
new file mode 100755
index 000000000000..89df8b1446cf
--- /dev/null
+++ b/scripts/nix-http-export.cgi.in
@@ -0,0 +1,50 @@
+#! /bin/sh
+
+export HOME=/tmp
+export NIX_REMOTE=daemon
+
+TMP_DIR="${TMP_DIR:-/tmp/nix-export}"
+
+@coreutils@/mkdir -p "$TMP_DIR" || true
+@coreutils@/chmod a+r "$TMP_DIR"
+
+needed_path="?$QUERY_STRING"
+needed_path="${needed_path#*[?&]needed_path=}"
+needed_path="${needed_path%%&*}"
+#needed_path="$(echo $needed_path  | ./unhttp)"
+needed_path="$(echo $needed_path  | sed -e 's/%2B/+/g; s/%3D/=/g')"
+
+echo needed_path: "$needed_path" >&2
+
+NIX_STORE="${NIX_STORE:-/nix/store}"
+
+echo NIX_STORE: "${NIX_STORE}" >&2
+
+full_path="${NIX_STORE}"/"$needed_path"
+
+if [ "$needed_path" != "${needed_path%.drv}" ]; then
+	echo "Status: 403 You should create the derivation file yourself"
+	echo "Content-Type: text/plain"
+	echo
+	echo "Refusing to disclose derivation contents"
+	exit
+fi
+
+if [ -e "$full_path" ]; then
+	if ! [ -e nix-export/"$needed_path".nar.gz ]; then
+		@bindir@/nix-store --export "$full_path" | @gzip@ > "$TMP_DIR"/"$needed_path".nar.gz
+		@coreutils@/ln -fs  "$TMP_DIR"/"$needed_path".nar.gz nix-export/"$needed_path".nar.gz 
+	fi;
+	echo "Status: 301 Moved"
+	echo "Location: nix-export/"$needed_path".nar.gz"
+	echo
+else 
+	echo "Status: 404 No such path found"
+	echo "Content-Type: text/plain"
+	echo
+	echo "Path not found:"
+	echo "$needed_path"
+	echo "checked:"
+	echo "$full_path"
+fi
+
diff --git a/scripts/nix-reduce-build.in b/scripts/nix-reduce-build.in
index 7e546aa60fbb..f9cb5012b45b 100644
--- a/scripts/nix-reduce-build.in
+++ b/scripts/nix-reduce-build.in
@@ -65,7 +65,7 @@ for i in "$@"; do
 		done;
 	elif [ "$i" != "$httpHost" ] || [ "$i" != "$httpsHost" ]; then
 		cat needed-paths | while read; do
-			curl -L "$i${REPLY##*/}" | gunzip | nix-store --import;
+			curl ${BAD_CERTIFICATE:+-k} -L "$i${REPLY##*/}" | gunzip | nix-store --import;
 		done;
 	fi;
 	mv needed-paths wanted-paths;
diff --git a/substitute.mk b/substitute.mk
index ed60c53a89a6..ae11ce2b31f6 100644
--- a/substitute.mk
+++ b/substitute.mk
@@ -17,6 +17,7 @@
 	 -e "s^@perl\@^$(perl)^g" \
 	 -e "s^@coreutils\@^$(coreutils)^g" \
 	 -e "s^@tar\@^$(tar)^g" \
+	 -e "s^@gzip\@^$(gzip)^g" \
 	 -e "s^@tr\@^$(tr)^g" \
 	 -e "s^@dot\@^$(dot)^g" \
 	 -e "s^@xmllint\@^$(xmllint)^g" \