diff --git a/.hgignore b/.hgignore
index 40a66ca..f9cadd9 100644
--- a/.hgignore
+++ b/.hgignore
@@ -1,2 +1,3 @@
syntax: glob
+etc/initrc.local
sites/?*/
diff --git a/README b/README
index 7bc2e8b..cc93507 100644
--- a/README
+++ b/README
@@ -14,7 +14,7 @@ Installation
Requirements:
* An http server that can handle CGIs
-* Plan 9 from User Space: http://plan9.us - Or 9base-5 or later: http://tools.suckless.org/9base
+* Plan 9 from User Space: http://swtch.com/plan9port - Or 9base-tip: http://tools.suckless.org/9base
Note: Werc by default expects the Plan 9 tools to be installed under
/usr/local/plan9/bin/, if you have installed them elsewhere you will need to
@@ -46,7 +46,7 @@ For general configuration options copy etc/initrc to etc/initrc.local and
customize it as needed. Site (and directory) specific options can be set in a
sites/example.com/_werc/config file inside the site's directory. To customize
templates and included files you can store your own version of the files in
-lib/ under sites/example.com/_werc/lib
+lib/ under sites/example.com/_werc/lib.
The source tree for the werc website is included under sites/werc.cat-v.org as
an example, feel free to use it as a template for your own site.
@@ -58,21 +58,17 @@ http://werc.cat-v.org/docs/
Contact
-------
-For comments, suggestions, bug reports or patches join the werc9 list in
-google groups: http://groups.google.com/group/werc9 or the irc channel #cat-v
-in irc.freenode.org
+For comments, suggestions, bug reports or patches join the werc mailing list
+at: http://werc.cat-v.org or the irc channel #cat-v in irc.freenode.org
If you have a public website that uses werc I would love to hear about it and
get feedback about you experience setting it up.
-If you want to be notified of new releases see the News section of the website
-or use Freshmeat: http://freshmeat.net/projects/werc/
-
Thanks
------
-Garbeam, Kris Maglione, sqweek, soul9, mycroftiv, maht, yiyus and many others
-for their ideas, patches, testing and other contributions.
+Garbeam, Kris Maglione, sqweek, soul9, mycroftiv, maht, yiyus, cinap_lenrek,
+khm and many others for their ideas, patches, testing and other contributions.
License
diff --git a/apps/blagh/app.rc b/apps/blagh/app.rc
index 71bcef6..33f7123 100644
--- a/apps/blagh/app.rc
+++ b/apps/blagh/app.rc
@@ -26,7 +26,7 @@ fn blagh_init {
if(check_user $conf_blog_editors) {
editor_mode=on
if(~ $"post_arg_date '')
- post_date=`{/bin/date +%F|sed 's,-,/,g'}
+ post_date=`{date -i|sed 's,-,/,g'} # date -i is 9front/9base only
if not
post_date=$post_arg_date
ll_add handlers_bar_left echo 'Make a new post'
diff --git a/apps/blagh/atom.tpl b/apps/blagh/atom.tpl
index 7bf32c6..ec9c862 100644
--- a/apps/blagh/atom.tpl
+++ b/apps/blagh/atom.tpl
@@ -5,18 +5,18 @@
fn statpost {
f = $1
- updated = `{/bin/date --rfc-3339'=seconds' -r $f |tr ' ' 'T'}
+ updated = `{date -t `{mtime $f | awk '{print $1}'}} # date -t is 9front/9base only
post_uri=$base_url^`{cleanname `{echo $f | sed -e 's!^'$sitedir'!!'}}^'/'
title=`{read $f/index.md}
# Not used: date=`{/bin/date -Rd `{basename $f |sed 's/(^[0-9\-]*).*/\1/; s/-[0-9]$//'}}
# TODO: use mtime(1) and ls(1) instead of lunix's stat(1)
- stat=`{stat -c '%Y %U' $f}
+ #stat=`{stat -c '%Y %U' $f}
#mdate=`{/bin/date -Rd `{mtime $f|awk '{print $1}' }} # Not used because it is unreliable
- by=$stat(2)
+ by=`{ls -m $f | sed 's/^\[//g; s/].*$//g' >[2]/dev/null}
#ifs=() { summary=`{cat $f/index.md | crop_text 1024 ... | $formatter } }
ifs=() { summary=`{cat $f/index.md | strip_title_from_md_file | ifs=$difs {$formatter} } }
}
-updated = `{/bin/date --rfc-3339'=seconds' |sed 's/ /T/'}
+updated = `{date -t} # date -t is 9front/9base only
%}
My proposal has been accepted for RubyConf 2008. Because of the presence of Ruby implementers, this is going to be a bit challenging as it will likely turn into two talks at once. One sharing experiences with fellow developers concerning things they may need to watch out for, and another with language designers about the impact of their changes. It also is likely to be true, as it was at OSCON, that there will be members of the audience who know way more about this subject than I do.
-I had originally requested a slot on Saturday. My current slot requires me to shave a day off of ApacheCon. I’ve again asked that the slot be changed, but even if it doesn’t move, I can manage this. At least we are only talking about a short hop from New Orleans to Orlando.
- -Alf Eaton: Aside: if you’re reading a Planet that contains HubLog, those posts will all jump to the top - sorry! (I wish Planets dealt better with small updates so I didn’t have to worry about it).
-I don’t know what publishing software you use, but I see you provide an Atom feed, and Planet 2.0 and Venus both implement atom:updated as specified in RFC 4287.
- -Alf Eaton: Aside: if you’re reading a Planet that contains HubLog, those posts will all jump to the top - sorry! (I wish Planets dealt better with small updates so I didn’t have to worry about it).
-I don’t know what publishing software you use, but I see you provide an Atom feed, and Planet 2.0 and Venus both implement atom:updated as specified in RFC 4287.
-More specifically, if you have a minor update and leave the updated date alone, the posts will not jump to the top. The next release of WordPress, for example, will contain the necessary hooks for a plugin to provide a simple checkbox for indicating that the change constitutes a minor edit.
- -Now that I have my weblog looking reasonably consistent between Gecko and WebKit based browsers, I’ve taken another look at Opera. Opera doesn’t have support for border-radius, but does have support for background images in SVG, which can be used to provide the same effect. My Nav Bar on my test site now employs this technique, and it requires two separate images: 039 on CCD and CCD on FFF.
-Frankly, my first reaction to this was mixed. The pluses for SVG in CSS is that it doesn’t require either adjusting your markup or JavaScript to achieve these effects, a desirable characteristic that generally the other techniques don’t share.
- -Now that I have my weblog looking reasonably consistent between Gecko and WebKit based browsers, I’ve taken another look at Opera. Opera doesn’t have support for border-radius, but does have support for background images in SVG, which can be used to provide the same effect. My Nav Bar on my test site now employs this technique, and it requires two separate images: 039 on CCD and CCD on FFF.
-Meanwhile, Robert O’Callahan has been exploring other ways to integrate these technologies.
- --%{ - -wman_page_gen $wman_page_file - -%} +% wman_page_gen $wman_page_filediff --git a/apps/wman/page_list.tpl b/apps/wman/page_list.tpl old mode 100644 new mode 100755 index b98600d..bebf853 --- a/apps/wman/page_list.tpl +++ b/apps/wman/page_list.tpl @@ -1,11 +1,8 @@ -% d=`{wman_get_section_desc $wman_cat} -
"hrsize($6)" | " + print ""$7" | " + print ""$8" | " + print ""$9" | " + $1="" ; $2="" ; $3="" ; $4="" ; $5="" ; $6="" ; $7="" ; $8="" ; $9="" + sub("^ *?", "") + print ""$0" | " + print "
" + print " | "$7" | " + print ""$8" | " + print ""$9" | " + $1="" ; $2="" ; $3="" ; $4="" ; $5="" ; $6="" ; $7="" ; $8="" ; $9="" + sub("^ *?", "") + print ""$0"/ | " + print "
rc-httpd at' $SERVER_NAME '' + echo ' + + + ' +} + +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.' +} + +fn 500{ + do_error '500 Internal Server Error' \ + 'The server has encountered an internal misconfiguration and is unable to satisfy your request.' +} + +fn 503{ + do_error '503 Forbidden' \ + 'You do not have permission to access '^$"location^' on this server.' +} + +do_log $1 +$1 diff --git a/bin/contrib/rc-httpd/handlers/redirect b/bin/contrib/rc-httpd/handlers/redirect new file mode 100755 index 0000000..e223091 --- /dev/null +++ b/bin/contrib/rc-httpd/handlers/redirect @@ -0,0 +1,30 @@ +#!/bin/rc +if(~ $#2 0){ + error 500 + exit +} +switch($1){ +case perm* + do_log 301 + echo 'HTTP/1.1 301 Moved Permanently'^$cr +case temp* + do_log 302 + echo 'HTTP/1.1 302 Moved Temporarily'^$cr +case seeother + do_log 303 + echo 'HTTP/1.1 303 See Other'^$cr +case * + error 500 + exit +} +echo 'Location: ' ^ $2 ^ $cr +emit_extra_headers +echo 'Content-type: text/html'^$cr +echo $cr +echo '
' +if(~ $#3 0) + echo 'Browser did not accept redirect.' +if not + echo $3 +echo 'Click here' +echo '' diff --git a/bin/contrib/rc-httpd/handlers/serve-static b/bin/contrib/rc-httpd/handlers/serve-static new file mode 100755 index 0000000..8c2ada5 --- /dev/null +++ b/bin/contrib/rc-httpd/handlers/serve-static @@ -0,0 +1,43 @@ +#!/bin/rc +full_path=`{echo $"FS_ROOT^$"PATH_INFO | urlencode -d} +full_path=$"full_path +if(~ $full_path */) + error 503 +if(test -d $full_path){ + redirect perm $"location^'/' \ + 'URL not quite right, and browser did not accept redirect.' + exit +} +if(! test -e $full_path){ + error 404 + exit +} +if(! test -r $full_path){ + error 503 + exit +} +do_log 200 +switch($full_path){ +case *.html *.htm + type=text/html +case *.css + type=text/css +case *.txt + type='text/plain; charset=utf-8' +case *.jpg *.jpeg + type=image/jpeg +case *.gif + type=image/gif +case *.png + type=image/png +case * + type=`{file -m $full_path} +} +max_age=3600 # 1 hour +echo 'HTTP/1.1 200 OK'^$cr +emit_extra_headers +echo 'Content-type: '^$type^'; charset=utf-8'^$cr +echo 'Content-length: '^`{ls -l $full_path | awk '{print $6}'} +echo 'Cache-control: max-age='^$max_age^$cr +echo $cr +exec cat $full_path diff --git a/bin/contrib/rc-httpd/handlers/static-or-cgi b/bin/contrib/rc-httpd/handlers/static-or-cgi new file mode 100755 index 0000000..4d8a2d4 --- /dev/null +++ b/bin/contrib/rc-httpd/handlers/static-or-cgi @@ -0,0 +1,14 @@ +#!/bin/rc +cgiargs=$* + +fn error{ + if(~ $1 404) + exec cgi $cgiargs + if not + $rc_httpd_dir/handlers/error $1 +} + +if(~ $location */) + exec cgi $cgiargs +if not + exec serve-static diff --git a/bin/contrib/rc-httpd/handlers/static-or-index b/bin/contrib/rc-httpd/handlers/static-or-index new file mode 100755 index 0000000..f0904f8 --- /dev/null +++ b/bin/contrib/rc-httpd/handlers/static-or-index @@ -0,0 +1,5 @@ +#!/bin/rc +if(~ $PATH_INFO */) + exec dir-index $params +if not + exec serve-static diff --git a/bin/contrib/rc-httpd/rc-httpd b/bin/contrib/rc-httpd/rc-httpd new file mode 100755 index 0000000..bd9dc78 --- /dev/null +++ b/bin/contrib/rc-httpd/rc-httpd @@ -0,0 +1,101 @@ +#!/bin/rc +rc_httpd_dir=/rc/bin/rc-httpd +path=(/bin $rc_httpd_dir/handlers) +cgi_path=/bin +SERVER_PORT=80 # default for CGI scripts, may be overridden by the Host header +extra_headers='Server: rc-httpd' +cr= + +fn do_log{ + echo `{date} :: $SERVER_NAME :: $request :: \ + $HTTP_USER_AGENT :: $1 :: $HTTP_REFERER >[1=2] +} + +fn emit_extra_headers{ + for(header in $extra_headers) + echo $"header^$cr +} + +fn getline{ read | sed 's/'^$"cr^'$//g' } + +fn terminate{ + echo `{date} connection terminated >[1=2] + exit terminate +} + +fn trim_input{ read -c $CONTENT_LENGTH } + +request=`{getline} +if(~ $#request 0) + terminate +REQUEST_METHOD=$request(1) +REQUEST_URI=$request(2) +reqlines='' +HTTP_COOKIE='' +REMOTE_USER='' +done=false +chunked=no +while(~ $"done false){ + line=`{getline} + if(~ $#line 0) + done=true + reqlines=$"reqlines$"line' +' + h=`{echo $line | awk '{print tolower($1)}'} + switch($h){ + case '' + done=true + case host: + SERVER_NAME=$line(2) + case referer: + HTTP_REFERER=$line(2) + case user-agent: + 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)} + case transfer-encoding: + ~ $line(2) chunked && chunked=yes + } +} +if(~ $REQUEST_URI *://* //*){ + SERVER_NAME=`{echo $REQUEST_URI | sed ' + s;^[^:]+:;; + s;^//([^/]+).*;\1;'} + REQUEST_URI=`{echo $REQUEST_URI | sed ' + s;^[^:]+:;; + s;^//[^/]+/?;/;'} +} +QUERY_STRING=`{echo $REQUEST_URI | sed 's;[^?]*\??;;'} +params=`{echo $QUERY_STRING | sed 's;\+; ;g'} +location=`{echo $REQUEST_URI | sed 's;\?.*;;'} +location=`{echo $location | sed ' + s;[^/]+/\.\./;/;g + s;/\./;/;g + s;//+;/;g +'} +SERVER_NAME=`{echo $SERVER_NAME | sed 's;^(\[[^\]]+\]|[^:]+)\:([0-9]+)$;\1 \2;'} +if(~ $#SERVER_NAME 2){ + SERVER_PORT=$SERVER_NAME(2) + SERVER_NAME=$SERVER_NAME(1) +} +if(~ $REQUEST_METHOD (PUT POST)){ + if(! ~ $"CONTENT_LENGTH '') + trim_input | exec $rc_httpd_dir/select-handler + if not{ + if(~ $chunked yes){ + echo 'HTTP/1.1 411 Length required'^$cr + echo $cr + exit + } + exec $rc_httpd_dir/select-handler + } +} +if not + . $rc_httpd_dir/select-handler diff --git a/bin/contrib/rc-httpd/select-handler b/bin/contrib/rc-httpd/select-handler new file mode 100755 index 0000000..f955f48 --- /dev/null +++ b/bin/contrib/rc-httpd/select-handler @@ -0,0 +1,177 @@ +#!/bin/rc +# 2016-02-01T19:31:03-0500 +rfork n +fn do_error{ + do_log $1 + echo 'HTTP/1.1 '^$1^$cr + emit_extra_headers + echo 'Content-type: text/html'^$cr + echo $cr + echo ' + +rc-httpd at' $SERVER_NAME '' + echo ' + + + ' +} + +fn http_redirect { + if(~ $1 http://* https://*) + t=$1 + if not if(~ $1 /*) + t=$"base_url^$1 + if not + t=$"base_url^$"req_path^$1 + exec /bin/echo 'Status: '^$2^' +Location: '^$t^' + +' + exit +} + +fn okstatic{ + full_path=`{echo $"FS_ROOT^$"PATH_INFO | urlencode -d} + full_path=$"full_path + if(~ $full_path */) + error 503 + if(test -d $full_path){ + redirect perm $"location^'/' \ + 'URL not quite right, and browser did not accept redirect.' + exit + } + if(! test -e $full_path){ + error 404 + exit + } + if(! test -r $full_path){ + error 503 + exit + } + do_log 200 + type='text/plain' + max_age=3600 # 1 hour + echo 'HTTP/1.1 200 OK'^$cr + emit_extra_headers + echo 'Content-type: '^$type^'; charset=utf-8'^$cr + echo 'Content-length: '^`{ls -l $full_path | awk '{print $6}'} + echo 'Cache-control: max-age='^$max_age^$cr + echo $cr + exec cat $full_path +} + +# surprise! +if(~ $HTTP_REFERER *hiphopstan.com/forum* *slax.*/forum*){ + PATH_INFO=$location + FS_ROOT=/usr/sl/www/werc/sites/hotlink + exec static-or-index +} +if(~ $HTTP_REFERER 'http://okturing.com/index.rc?start=100' || {~ $SERVER_NAME okturing.com && ~ $location /index.rc} || ~ $location /qemu/plan9.flp.gz){ + do_error '402 PAYMENT REQUIRED' + exit +} +if(~ $location /*/wp-admin* /wiki/index.php* /wp/wp-admin* /wp-config* /wp-content/* wp-login.php* /admin.php* /index.php/admin* /phpinfo.php* /phpMyAdmin/* /phpMyAdmin-2/* /*xmlrpc.php){ + do_error '402 PAYMENT REQUIRED' + exit +} + +# build environment and namespace +SERVER_NAME=`{echo $SERVER_NAME | sed 's/^www\.//g'} + +if(~ $location *~nis*) + location=`{echo $location | sed 's/\/\~nis/\/_nis/g'} + +if(~ $SERVER_NAME 9front.org){ + bind /usr/sl/plan9front /usr/sl/www/werc/sites/9front.org/9front + bind /usr/sl/www/werc/sites/9front.org/_werc/pub/style.css /usr/sl/www/werc/pub/style/style.css + bind /usr/sl/www/werc/sites/plan9.stanleylieber.com/src /usr/sl/www/werc/sites/9front.org/extra + aux/stub -d /usr/sl/www/werc/sites/9front.org/extra/rc + bind /usr/sl/www/werc/sites/plan9.stanleylieber.com/rc /usr/sl/www/werc/sites/9front.org/extra/rc + bind /usr/sl/www/werc/sites/bell-labs.co/9front/iso /usr/sl/www/werc/sites/9front.org/iso + bind /usr/sl/www/werc/sites/plan9.stanleylieber.com/pkg /usr/sl/www/werc/sites/9front.org/pkg + if(~ $location /who/*){ + for(i in Aram aiju alvaro cinap_lenrek eekee erik joy kenji lf94 martian67 mveety rminnich sl) + bind /usr/sl/www/werc/sites/9front.org/$i /usr/sl/www/werc/sites/9front.org/who/$i/index.txt + } + aux/stub /usr/sl/www/werc/sites/9front.org/9front.torrent + bind /usr/sl/www/werc/sites/bell-labs.co/9front/iso/9front-5048.e16a172bcae6.iso.bz2.torrent /usr/sl/www/werc/sites/9front.org/9front.torrent + if(~ $location /list.html) + location=/lists.html +} +if(~ $SERVER_NAME bugs.9front.org){ + bind /usr/sl/www/werc/sites/bugs.9front.org/_werc/pub/style.css /usr/sl/www/werc/pub/style/style.css + bind -a /usr/bugs /usr/sl/www/werc/sites/bugs.9front.org + if(~ $location /closed/[a-z0-9]* /open/[a-z0-9]*){ + d=`{basename -d $location} + aux/stub /usr/sl/www/werc/sites/bugs.9front.org^$d^/index.md + bind /usr/bugs^$d^/readme /usr/sl/www/werc/sites/bugs.9front.org^$d^/index.md + } +} +if(~ $SERVER_NAME fqa.9front.org){ + #location=`{echo $"location | sed 's/^(fqa|appendix).*\.html$//g'} +} +if(~ $SERVER_NAME lists.9front.org){ + for(i in 9atom 9changes 9fans 9front 9front-bugs 9front-commits 9front-sysinfo 9nag acme-sac cat-v cypherpunks dlr harvey harvey-commits harvey-issues inferno nix plan9port-dev sam-fans sierra31 skunk-works tscm-l tuhs werc www-html www-talk www-vrml) + bind /mail/box/$i/mbox /usr/sl/www/werc/sites/lists.9front.org/$i +} +if(~ $SERVER_NAME wiki.9front.org) + bind /usr/sl/www/werc/sites/wiki.9front.org/_werc/pub/style.css /usr/sl/www/werc/pub/style/style.css +if(~ $SERVER_NAME golang.cat-v.org) + bind /usr/sl/www/werc/sites/go-lang.cat-v.org /usr/sl/www/werc/sites/golang.cat-v.org +if(~ $SERVER_NAME plan9.stanleylieber.com){ + bind /usr/sl/www/werc/sites/plan9.stanleylieber.com/_werc/pub/style.css /usr/sl/www/werc/pub/style/style.css + bind /mail/lib /usr/sl/www/werc/sites/plan9.stanleylieber.com/mail/lib + bind /sys/lib/dist/mail/lib/names.local /usr/sl/www/werc/sites/plan9.stanleylieber.com/mail/lib/names.local + bind /rc/bin/service.crazy/tcp587 /usr/sl/www/werc/sites/plan9.stanleylieber.com/mail/service/tcp587 + bind /rc/bin/service.crazy/tcp993 /usr/sl/www/werc/sites/plan9.stanleylieber.com/mail/service/tcp993 + bind /rc/bin/rc-httpd/select-handler /usr/sl/www/werc/sites/plan9.stanleylieber.com/rc-httpd/select-handler + bind /rc/bin/service.crazy/tcp80 /usr/sl/www/werc/sites/plan9.stanleylieber.com/rc-httpd/tcp80 + bind /rc/bin/service.crazy/tcp443 /usr/sl/www/werc/sites/plan9.stanleylieber.com/rc-httpd/tcp443 +} + +# route requests +if(~ $SERVER_NAME okturing.com && ~ $location /src/*/body){ + PATH_INFO=$location + FS_ROOT=/usr/sl/www/werc/sites/okturing.com + okstatic +} +if not if(~ $SERVER_NAME emma.stanleylieber.com fqa.* gl.* iawtp.com ln.* lists.* mold.dk nm.* nsacom.net osuny.co.uk osx.* ph.* pop.* pp.* qualitycountrylyrics.com ragnarok.* tcasey.* tip.9front.org tn.* ur.* volksutils.com weekly.9front.org zeroxpark.com || ~ $location /cbz/* /favicon.ico /img/* /pdf/* /src/* /txt/*){ + PATH_INFO=$location + FS_ROOT=/usr/sl/www/werc/sites/$SERVER_NAME + exec static-or-index +} +if not if(~ $SERVER_NAME *bell-labs.co){ + bind -a /usr/sl/www/werc/sites/9front.org/who /usr/sl/www/werc/sites/bell-labs.co/who + PATH_INFO=$location + FS_ROOT=/usr/sl/www/werc/sites/bell-labs.co + exec static-or-index +} +if not if(~ $SERVER_NAME ttr.inri.net){ + PATH_INFO=$location + FS_ROOT=/usr/sl/t + exec static-or-index +} +if not if(~ $SERVER_NAME vr.stanleylieber.com){ + if(~ $location / /bin/* /etc/* /*htaccess /*htpasswd /index.rc* /lib/* /stats/*){ + PATH_INFO=$location + FS_ROOT=/usr/sl/www/werc/sites/vr.stanleylieber.com + exec cgi /usr/sl/www/werc/sites/vr.stanleylieber.com/index.rc $* + } + if not{ + PATH_INFO=$location + FS_ROOT=/usr/sl/www/werc/sites/vr.stanleylieber.com + exec static-or-index + } +} +if not if(~ $SERVER_NAME *){ + PATH_INFO=$location + FS_ROOT=/usr/sl/www/werc/sites/$SERVER_NAME + exec static-or-cgi /usr/sl/www/werc/bin/werc.rc +} +if not + error 503 diff --git a/bin/contrib/urldecode.awk b/bin/contrib/urldecode.awk index bfebd21..bd791e3 100755 --- a/bin/contrib/urldecode.awk +++ b/bin/contrib/urldecode.awk @@ -1,4 +1,4 @@ -#!/usr/bin/awk -f +#!/bin/awk -f BEGIN { hextab ["0"] = 0; hextab ["8"] = 8; hextab ["1"] = 1; hextab ["9"] = 9; diff --git a/bin/contrib/urlencode.awk b/bin/contrib/urlencode.awk old mode 100644 new mode 100755 diff --git a/bin/contrib/webserver.rc b/bin/contrib/webserver.rc old mode 100644 new mode 100755 diff --git a/bin/corehandlers.rc b/bin/corehandlers.rc old mode 100644 new mode 100755 index 9cc957b..294b1a7 --- a/bin/corehandlers.rc +++ b/bin/corehandlers.rc @@ -75,9 +75,9 @@ fn dir_listing_handler { d=`{basename -d $1} if(~ $#d 0) d='/' - echo $d|sed 's,.*//,,g; s,/$,,; s,/, / ,g; s/[\-_]/ /g; s,.*,