diff --git a/web-server/start-surflet-server b/web-server/start-surflet-server index 4898de8..97f2bc6 100755 --- a/web-server/start-surflet-server +++ b/web-server/start-surflet-server @@ -11,10 +11,8 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - httpd-make-options httpd-basic-handlers httpd-file-directory-handlers -; cgi-server -; seval-handler -; rman-gateway -; info-gateway + httpd-cgi-handlers + httpd-seval-handlers surflet-handler surflet-handler/options let-opt @@ -29,6 +27,7 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - (format #f "Usage: start-surflet-server [-h DIR | --htdocs-dir=DIR] [-s DIR | --surflet-dir=DIR] + [--cgi-bin-dir=DIR] [-i DIR | --images-dir=DIR] [-p NUM | --port=NUM] [-l FILE | --log-file-name=FILE] [-r NUM | --requests=NUM] [--help] @@ -36,14 +35,14 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - with htdocs-dir directory of html files (default: root/htdocs) surflet-dir directory of SUrflet files (default: root/surflets) + cgi-bin-dir directory of cgi files (default: root/cgi-bin) images-dir directory of images files (default: root/img) port port server is listening to (default: 8080) log-file-name directory where to store the logfile in CLF (default: /tmp/httpd.log) requests maximal amount of simultaneous requests (default 5) --help show this help - - NOTE: This is the SUrflet-server. It does not support cgi-bin.~%")) +")) (define (display-usage) (display (usage) (current-error-port)) @@ -83,6 +82,9 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - (surflet-dir-option (option '(#\s "surflet-dir") #t #f (absolute-file-option-proc 'surflet-dir))) + (cgi-bin-dir-option + (option '(#\c "cgi-bin-dir") #t #f + (absolute-file-option-proc 'cgi-bin-dir))) (images-dir-option (option '(#\i "images-dir") #t #f (absolute-file-option-proc 'images-dir))) @@ -101,6 +103,7 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - (display-usage))))) (args-fold arg-list (list htdocs-dir-option surflet-dir-option + cgi-bin-dir-option images-dir-option port-option log-file-name-option requests-option help-option) @@ -128,34 +131,38 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - (main `(main ,@(car args))) (main '(main)))) + (define (become-nobody-if-root) + (cond ((zero? (user-uid)) + (set-gid (->gid "nobody")) + (set-uid (->uid "nobody"))))) + (define (main args) (with-cwd (file-name-directory (car args)) (let* ((default-options `((htdocs-dir . ,(absolute-file-name "root/htdocs")) (surflet-dir . ,(absolute-file-name "root/surflets")) + (cgi-bin-dir . ,(absolute-file-name "root/cgi-bin")) (images-dir . ,(absolute-file-name "root/img")) - (port . 8008) + (port . 8080) (log-file-name . "/tmp/httpd.log") (requests . 5))) (options (make-options-from-args (cdr args) default-options))) - (cond ((zero? (user-uid)) - (set-gid (->gid "nobody")) - (set-uid (->uid "nobody")))) (format #t "Going to run SUrflet server with: htdocs-dir: ~a surflet-dir: ~a + cgi-bin-dir: ~a images-dir: ~a port: ~a log-file-name: ~a a maximum of ~a simultaneous requests, syslogging activated, and home-dir-handler (public_html) activated. - NOTE: This is the SUrflet server. It does not support cgi. " (lookup-option options 'htdocs-dir) (lookup-option options 'surflet-dir) + (lookup-option options 'cgi-bin-dir) (lookup-option options 'images-dir) (lookup-option options 'port) (lookup-option options 'log-file-name) @@ -168,6 +175,7 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - with-simultaneous-requests (lookup-option options 'requests) with-syslog? #t with-log-file (lookup-option options 'log-file-name) + with-post-bind-thunk become-nobody-if-root ;; The following settings are made to avoid dns lookups. with-reported-port (lookup-option options 'port) with-fqdn "localhost" @@ -175,7 +183,8 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - with-request-handler (alist-path-dispatcher (list - (cons "h" (home-dir-handler "public_html")) + (cons "cgi-bin" (cgi-handler (lookup-option options 'cgi-bin-dir))) + (cons "seval" seval-handler) (cons "source" (rooted-file-or-directory-handler (lookup-option options 'surflet-dir) (with-file-name->content-type @@ -189,8 +198,9 @@ exec scsh -lel SSAX-4.9/load.scm -lel sunet-2.1/load.scm -dm -o surflet-server - (cons "surflet" (surflet-handler (with-surflet-path (lookup-option options 'surflet-dir))))) - (rooted-file-or-directory-handler - (lookup-option options 'htdocs-dir)))))))) + (tilde-home-dir-handler "public_html" + (rooted-file-or-directory-handler + (lookup-option options 'htdocs-dir))))))))) )) ;; EOF