]> git.plutz.net Git - cgilite/blobdiff - cgilite.sh
auto recognize inetd mode, enabling use with busybox nc -ll
[cgilite] / cgilite.sh
index 9f2eedc179227a21247578990955dcea1bb4befc..cac905ff6ace8ae929572c5ec8a9e69afbca54ad 100755 (executable)
@@ -30,7 +30,7 @@ HEADER(){
   # referencing HTTP_* environment variables.
   if [ -n "${cgilite_headers+x}" ]; then
     printf %s "$cgilite_headers" \
-    | sed -rn 's;^'"${1}"': ([^\r]+)\r?$;\1;ip;q;'
+    | sed -rn 's;^'"${1}"': ([^\r]+)\r?$;\1;i; tX; d; :X;p;q;'
   else
     eval "printf %s \"\$HTTP_$(printf %s "${1}" |tr a-z A-Z |tr -c A-Z _)\""
   fi
@@ -49,7 +49,9 @@ HEX_DECODE(){
   ')"
 }
 
-if [ "$1" = '--inetd' -a -z "$REQUEST_METHOD" ]; then
+if [ -z "$REQUEST_METHOD" -a -z "$SERVER_PROTOCOL" ]; then
+  # no webserver variables means we are running via inetd / ncat
+  # so use builtin web server
   REMOTE_ADDR="${TCPREMOTEIP:-$NCAT_REMOTE_ADDR}"
   SERVER_NAME="${TCPLOCALIP:-$NCAT_LOCAL_ADDR}"
   SERVER_PORT="${TCPLOCALPORT:-$NCAT_LOCAL_PORT}"
@@ -60,13 +62,11 @@ if [ "$1" = '--inetd' -a -z "$REQUEST_METHOD" ]; then
   cgilite_headers="$(sed -u '/^\r\?$/q')"
 
   HTTP_CONTENT_LENGTH="$(HEADER Content-Length |grep -xE '[0-9]+')"
-  HTTP_COOKIE="$(HEADER Cookie)"
 
   export REMOTE_ADDR SERVER_NAME SERVER_PORT REQUEST_METHOD REQUEST_URI SERVER_PROTOCOL \
-         PATH_INFO QUERY_STRING HTTP_CONTENT_LENGTH HTTP_COOKIE
+         PATH_INFO QUERY_STRING HTTP_CONTENT_LENGTH
 
-  . "$0" |sed '1{s;^Status: ;HTTP/1.0 ;; t; iHTTP/1.0 200 OK\r
-             }'
+  . "$0" |sed '1{s;^Status: ;HTTP/1.0 ;; t; s;^;HTTP/1.0 200 OK\r\n;;}'
   exit $?
 fi