X-Git-Url: http://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=file.sh;h=51ec245f2678602a12882d71d39173ff9acd98b1;hp=06f28d02f5640abfbfd560641348e8c8e8cd6e22;hb=06edc60b8c36f87e1ee3a63ada500ad59a26d1ea;hpb=595fbc514d410ccdd46a81b8736d3711ac1ca7fe diff --git a/file.sh b/file.sh index 06f28d0..51ec245 100755 --- a/file.sh +++ b/file.sh @@ -1,6 +1,6 @@ -#!/bin/zsh +#!/bin/sh -# Copyright 2016 - 2018 Paul Hänsch +# Copyright 2016 - 2019 Paul Hänsch # # This file is part of cgilite. # @@ -40,8 +40,8 @@ file_type(){ } FILE(){ - unset range file_size file_date http_date cachedate - file="$1" + local file file_size file_date http_date cachedate range mime + file="$1" mime="$2" if ! [ -f "$file" ]; then printf 'Content-Length: 0\r\nStatus: 404 Not Found\r\n\r\n' @@ -59,17 +59,17 @@ FILE(){ # Parse the allowable date formats from Section 3.3.1 of # https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html HEADER If-Modified-Since \ - | sed -r 's;^[^ ]+, ([0-9]{2}) (...) ([0-9]{4}) (..:..:..) GMT$;\3-\2-\1 \4;; + | sed -E 's;^[^ ]+, ([0-9]{2}) (...) ([0-9]{4}) (..:..:..) GMT$;\3-\2-\1 \4;; s;^[^ ]+, ([0-9]{2})-(...)-([789][0-9]) (..:..:..) GMT$;19\3-\2-\1 \4;; s;^[^ ]+, ([0-9]{2})-(...)-([0-6][0-9]) (..:..:..) GMT$;20\3-\2-\1 \4;; s;^[^ ]+ (...) ([0-9]{2}) (..:..:..) ([0-9]{4})$;\4-\1-\2 \3;; s;^[^ ]+ (...) ([0-9]) (..:..:..) ([0-9]{4})$;\4-\1-\2 \3;; s;Jan;01;; s;Feb;02;; s;Mar;03;; s;Apr;04;; s;May;05;; s;Jun;06;; s;Jul;07;; s;Aug;08;; s;Sep;09;; s;Oct;10;; s;Nov;11;; s;Dec;12;;' \ - | xargs -0 date +%s -ud 2>&- + | xargs -r0 date +%s -ud 2>&- )" - range="$(HEADER Range |sed -nr 's;^bytes=([0-9]+-[0-9]*|-[0-9]+)$;\1;p;q;')" + range="$(HEADER Range |sed -nE 's;^bytes=([0-9]+-[0-9]*|-[0-9]+)$;\1;p;q;')" case "$range" in *-) range="${range}$((file_size - 1))";; -*) [ ${range#-} -le $file_size ] \ @@ -91,7 +91,7 @@ FILE(){ Status "200 OK" \ Accept-Ranges bytes \ Last-Modified "$http_date" \ - Content-Type $(file_type "$file") \ + Content-Type "${mime:-$(file_type "$file")}" \ Content-Length $file_size printf '\r\n' @@ -102,14 +102,14 @@ FILE(){ Status "206 Partial Content" \ Accept-Ranges bytes \ Last-Modified "$http_date" \ - Content-Type $(file_type "$file") \ + Content-Type "${mime:-$(file_type "$file")}" \ Content-Range "bytes ${range}/${file_size}" \ Content-Length "$((${range#*-} - ${range%-*} + 1))" printf '\r\n' [ "$REQUEST_METHOD" != HEAD ] \ && tail -c+$((${range%-*} + 1)) "$file" \ - | head -c "$((${range#*-} - ${range%-*} + 1))" + | head -c "$((${range#*-} - ${range%-*} + 1))" elif [ "${range%-*}" -gt "${range#*-}" ]; then printf '%s: %s\r\n' \