/usr/share/common-lisp/source/modlisp/base.lisp is in cl-modlisp 0.6-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10; Package: modlisp -*-
;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;;
;;;; Name:          base.lisp
;;;; Purpose:       Utility functions for modlisp package
;;;; Programmer:    Kevin M. Rosenberg
;;;; Date Started:  Dec 2002
;;;;
;;;; $Id: base.lisp 7061 2003-09-07 06:34:45Z kevin $
;;;; *************************************************************************
(in-package #:modlisp)
(defun modlisp-start (&key (port +default-modlisp-port+)
			   (processor 'demo-modlisp-command-processor)
			   (processor-args nil)
			   (catch-errors t)
			   timeout
			   number-fixed-workers
			   remote-host-checker)
  (let* ((server (make-instance 'ml-server
		   :processor processor
		   :processor-args processor-args
		   :port port))
	 (listener (make-instance 'listener :port port
				  :base-name "modlisp"			 
				  :function 'modlisp-command-issuer
				  :function-args (list server)
				  :format :text
				  :wait nil
				  :catch-errors catch-errors
				  :timeout timeout
				  :number-fixed-workers number-fixed-workers
				  :remote-host-checker remote-host-checker)))
    (setf (listener server) listener)
    (init/listener listener :start)
    (setf *ml-server* server)
    server))
(defun modlisp-stop (server)
  (init/listener (listener server) :stop)
  (setf (listener server) nil)
  server)
(defun modlisp-stop-all ()
  (stop-all/listener))
;; Internal functions
(defun modlisp-command-issuer (*modlisp-socket* server)
  "generates commands from modlisp, issues commands to processor-fun"
  (unwind-protect
       (progn
	 (let ((*number-worker-requests* 0)
	       (*close-modlisp-socket* t)
	       (*ml-server* server))
	   (do ((command (read-modlisp-command) (read-modlisp-command)))
	       ((null command))
	     (apply (processor server) command (processor-args server))
	     (finish-output *modlisp-socket*)
	     (incf *number-worker-requests*)
	     (incf *number-server-requests*)
	     (when *close-modlisp-socket*
	       (return)))))
    (close-active-socket *modlisp-socket*)))
  
(defun header-value (header key)
  "Returns the value of a modlisp header"
  (cdr (assoc key header :test #'eq)))
(defun read-modlisp-command ()
  (ignore-errors
    (let* ((header (read-modlisp-header))
	   (content-length (header-value header :content-length))
	   (content (when content-length 
		      (make-string
		       (parse-integer content-length :junk-allowed t)))))
	  (when content
	    (read-sequence content *modlisp-socket*)
	    (push (cons :posted-content content) header))
	  header)))
(defun read-modlisp-line ()
  (kmrcl:string-right-trim-one-char
   #\return
   (read-line *modlisp-socket* nil nil)))      
(defun read-modlisp-header ()
  (loop for key = (read-modlisp-line)
      while (and key (string-not-equal key "end"))
      for value = (read-modlisp-line)
      collect (cons (ensure-keyword key) value)))
(defun write-header-line (key value)
  (write-string (string key) *modlisp-socket*)
  (write-char #\NewLine *modlisp-socket*)
  (write-string value *modlisp-socket*)
  (write-char #\NewLine *modlisp-socket*))
 |