diff options
-rw-r--r-- | configure.ac | 1 | ||||
-rwxr-xr-x | scripts/nix-http-export.cgi.in | 50 | ||||
-rw-r--r-- | scripts/nix-reduce-build.in | 2 | ||||
-rw-r--r-- | substitute.mk | 1 |
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" \ |