ref: 8ef66ca21218af00181bf78f37a5ede0238a7fa1
parent: 060e69b15aae22ca9fcf9d9e7970bd2d611544f3
author: cinap_lenrek <[email protected]>
date: Fri Mar 13 21:02:43 EDT 2015
rc-httpd: support for http basic authentication, fix cgi support to work with hgweb.cgi
--- /dev/null
+++ b/rc/bin/rc-httpd/handlers/authorize
@@ -1,0 +1,6 @@
+#!/bin/rc
+if(~ $REMOTE_USER ''){
+ extra_headers=($extra_headers 'WWW-Authenticate: Basic realm="'$"SERVER_NAME'"')
+ error 401
+ exit
+}
--- a/rc/bin/rc-httpd/handlers/cgi
+++ b/rc/bin/rc-httpd/handlers/cgi
@@ -4,7 +4,7 @@
lines=''
done=false
while(~ $done false){
- line=`{read}
+ line=`{getline}
head=`{echo $line | awk '{print tolower($1)}'}
if(~ $head status:*){
tmp=`{echo $line | awk '{$1="" ; print}'}
--- a/rc/bin/rc-httpd/handlers/error
+++ b/rc/bin/rc-httpd/handlers/error
@@ -19,6 +19,11 @@
'
}
+fn 401{
+ do_error '401 Unauthorized' \
+ 'The requested path '^$"location^' requires authorization.'
+}
+
fn 404{
do_error '404 Not Found' \
'The requested path '^$"location^' was not found on this server.'
--- a/rc/bin/rc-httpd/rc-httpd
+++ b/rc/bin/rc-httpd/rc-httpd
@@ -54,9 +54,13 @@
HTTP_USER_AGENT=`{echo $line | sed 's;[^:]+:[ ]+;;'}
case content-length:
CONTENT_LENGTH=$line(2)
+ case content-type:
+ CONTENT_TYPE=$line(2)
case cookie:
cookie=`{echo $line | sed 's;^[^:]+:[ ]*;;'}
HTTP_COOKIE=$"HTTP_COOKIE^$"cookie^'; '
+ case authorization:
+ REMOTE_USER=`{auth/httpauth $line(3)}
}
}
if(~ $REQUEST_URI http://*){