shithub: riscv

Download patch

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://*){