65 lines
2.2 KiB
Scheme
65 lines
2.2 KiB
Scheme
;;; Scheme Untergrund Web Server -*- Scheme -*-
|
|
|
|
;;; This file is part of the Scheme Untergrund Networking package.
|
|
|
|
;;; Copyright (c) 1995 by Olin Shivers.
|
|
;;; For copyright information, see the file COPYING which comes with
|
|
;;; the distribution.
|
|
|
|
;;; This file contains a few example top-level request handlers and
|
|
;;; other useful fragments.
|
|
|
|
;;; - /h/<user>/<file-path> => serve <file-path> from ~user/public_html.
|
|
;;; - /seval You may POST Scheme code to this URL, and receive the output.
|
|
;;; - Otherwise, serve files from the standard HTTP demon repository.
|
|
|
|
(define rh1
|
|
(alist-path-dispatcher
|
|
`(("h" . ,(home-dir-handler "public_html" (make-file-directory-options)))
|
|
("seval" . ,seval-handler)
|
|
("cgi-bin" . ,(cgi-handler "/usr/local/etc/httpd/cgi-bin")))
|
|
(rooted-file-handler "/usr/local/etc/httpd/htdocs"
|
|
(make-file-directory-options))))
|
|
|
|
|
|
;;; Do a rough approximation of NCSA httpd server semantics:
|
|
;;; - /~shivers/... serves file ~shivers/public_html/...
|
|
;;; - /cgi-bin/<prog> passes control to script
|
|
;;; /usr/local/etc/httpd/cgi-bin/<prog>
|
|
;;; - Otherwise, just serve files out of the standard directory.
|
|
|
|
(define rh2
|
|
(alist-path-dispatcher
|
|
`(("cgi-bin" . ,(cgi-handler "/usr/local/etc/httpd/cgi-bin")))
|
|
(tilde-home-dir-handler "public_html"
|
|
(rooted-file-handler "/usr/local/etc/httpd/htdocs"
|
|
(make-file-directory-options))
|
|
(make-file-directory-options))))
|
|
|
|
;;; Greatest hits request handler.
|
|
|
|
(define rh3
|
|
(alist-path-dispatcher
|
|
`(("h" . ,(home-dir-handler "public_html"))
|
|
("seval" . ,seval-handler)
|
|
("cgi-bin" . ,(cgi-handler "/usr/local/etc/httpd/cgi-bin")))
|
|
(tilde-home-dir-handler "public_html"
|
|
(rooted-file-handler "/usr/local/etc/httpd/htdocs"
|
|
(make-file-directory-options))
|
|
(make-file-directory-options))))
|
|
|
|
|
|
|
|
;;; Crank up a server on port 8001, first resetting our identity to
|
|
;;; user "nobody". Initialise the request-invariant part of the CGI
|
|
;;; env before starting.
|
|
|
|
(define (httpd1)
|
|
(set-gid (->uid "nobody"))
|
|
(set-uid (->gid "nobody"))
|
|
(initialise-request-invariant-cgi-env)
|
|
(httpd (make-httpd-options with-request-handler rh3
|
|
with-port 8001
|
|
with-root-directory "/usr/local/etc/httpd/htdocs")))
|
|
|