diff --git a/rc/bin/rc-httpd/handlers/authorize b/rc/bin/rc-httpd/handlers/authorize new file mode 100755 index 000000000..ea4db3ef7 --- /dev/null +++ b/rc/bin/rc-httpd/handlers/authorize @@ -0,0 +1,6 @@ +#!/bin/rc +if(~ $REMOTE_USER ''){ + extra_headers=($extra_headers 'WWW-Authenticate: Basic realm="'$"SERVER_NAME'"') + error 401 + exit +} diff --git a/rc/bin/rc-httpd/handlers/cgi b/rc/bin/rc-httpd/handlers/cgi index 96707630c..574cd13c3 100755 --- a/rc/bin/rc-httpd/handlers/cgi +++ b/rc/bin/rc-httpd/handlers/cgi @@ -4,7 +4,7 @@ fn filter_headers{ 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}'} diff --git a/rc/bin/rc-httpd/handlers/error b/rc/bin/rc-httpd/handlers/error index e38d41f01..282d8706c 100755 --- a/rc/bin/rc-httpd/handlers/error +++ b/rc/bin/rc-httpd/handlers/error @@ -19,6 +19,11 @@ fn do_error{ ' } +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.' diff --git a/rc/bin/rc-httpd/rc-httpd b/rc/bin/rc-httpd/rc-httpd index e2a64948c..bb3fac94f 100755 --- a/rc/bin/rc-httpd/rc-httpd +++ b/rc/bin/rc-httpd/rc-httpd @@ -54,9 +54,13 @@ while(~ $"done false){ 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://*){