;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for System version 123.272 ;;; Reason: ;;; Fix (chaos:disallow-connection?) to not reject the connection if keyword ;;; is :notify. Generalize sufficiently to allow both (telnet-server-function) ;;; and (eval-server-function) to use it. ;;; Written 11-May-88 16:08:16 by pld (Peter L. DeWolf) at site Gigamos Cambridge ;;; while running on Azathoth from band 3 ;;; with Experimental System 123.270, Experimental Local-File 73.5, Experimental FILE-Server 22.5, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.2, Experimental Lambda-Diag 15.0, Experimental Tape 22.4, microcode 1756, SDU Boot Tape 3.14, SDU ROM 8, the old ones. ; From modified file DJ: L.NETWORK.CHAOS; CHSAUX.LISP#398 at 11-May-88 16:20:10 #8R CHAOS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "CHAOS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; CHAOS; CHSAUX  " (DEFUN DISALLOW-CONNECTION? (WHAT CONN FASCISM-LEVEL) "Return a string explaining why someone can't use the server, or NIL if its allowed." (COND ((MEMQ NIL FASCISM-LEVEL) ;Server always unavailable (FORMAT NIL "Fascism at this site prevents the usage of the ~A server." WHAT)) ((AND (MEMQ :REJECT-UNWANTED FASCISM-LEVEL) ;Special check available.... (UNWANTED-CONNECTION-P CONN)) (UNWANTED-CONNECTION-REJECTION-STRING WHAT CONN)) ((MEMQ :NOT-LOGGED-IN FASCISM-LEVEL) ;Server available if not logged in... (UNLESS (SYS:MEMBER-EQUAL USER-ID '(NIL "")) (FORMAT NIL "This machine is in use by ~A, try again later." USER-ID))) ((MEMQ :NOTIFY FASCISM-LEVEL) ;Server available after Notification (PROCESS-RUN-FUNCTION "Notify" 'TV:NOTIFY NIL "Attempt to use ~A server by the user at ~A" WHAT (HOST-SHORT-NAME (FOREIGN-ADDRESS CONN))) (PROCESS-ALLOW-SCHEDULE) NIL) ((MEMQ T FASCISM-LEVEL) ;Server always available NIL) (T (FORMAT NIL "Unknown rejection: ~A" (set-difference fascism-level '(:reject-unwanted :not-logged-in)))))) )) ; From modified file DJ: L.NETWORK.CHAOS; CHSAUX.LISP#398 at 11-May-88 16:20:44 #8R CHAOS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "CHAOS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; CHAOS; CHSAUX  " (DEFUNP EVAL-SERVER-FUNCTION (&AUX CONN) (SETQ CONN (LISTEN "EVAL")) (LET ((LOSE (DISALLOW-CONNECTION? "EVAL" CONN (LIST EVAL-SERVER-ON :NOT-LOGGED-IN :REJECT-UNWANTED)))) (WHEN LOSE (REJECT CONN LOSE) (RETURN-FROM EVAL-SERVER-FUNCTION NIL))) (ACCEPT CONN) (PUSH CONN EVAL-SERVER-CONNECTIONS) (SEND TV:WHO-LINE-FILE-STATE-SHEET :ADD-SERVER CONN "EVAL") (CATCH-ERROR (WITH-OPEN-STREAM (STREAM (MAKE-STREAM CONN :ASCII-TRANSLATION T)) ;; Flush any number of telnet negotiations. (We only understand the simplest kind). (DO-FOREVER (LET ((CH (TYI STREAM))) (IF (= CH #o377) (PROGN (TYI STREAM) (TYI STREAM)) (RETURN (SEND STREAM :UNTYI CH))))) (DO ((*TERMINAL-IO* STREAM) (INPUT)) (NIL) (AND (EQ (SETQ INPUT (READ STREAM 'QUIT)) 'QUIT) (RETURN NIL)) (CATCH-ERROR (PRIN1 (MULTIPLE-VALUE-LIST (EVAL INPUT))) T) (WRITE-CHAR #/NEWLINE STREAM) (SEND STREAM :FORCE-OUTPUT))) NIL)) )) ; From modified file DJ: L.NETWORK.CHAOS; CHSAUX.LISP#398 at 11-May-88 16:20:52 #8R CHAOS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "CHAOS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; CHAOS; CHSAUX  " (DEFUN TELNET-SERVER-FUNCTION (&AUX CONN) (SETQ CONN (LISTEN "TELNET")) (LET ((LOSE (DISALLOW-CONNECTION? "TELNET" CONN (LIST TELNET-SERVER-ON :REJECT-UNWANTED)))) (WHEN LOSE (REJECT CONN LOSE) (RETURN-FROM TELNET-SERVER-FUNCTION NIL))) (ACCEPT CONN) (PUSH CONN EVAL-SERVER-CONNECTIONS) (SEND TV:WHO-LINE-FILE-STATE-SHEET :ADD-SERVER CONN "TELNET") (CATCH-ERROR (WITH-OPEN-STREAM (REMOTE (MAKE-STREAM CONN :ASCII-TRANSLATION T)) (PRINT-HERALD REMOTE) (FORMAT REMOTE "~&Telnet server here, hit to begin~%") (SEND REMOTE :FORCE-OUTPUT) (TELNET-SERVER-NEGOTIATIONS REMOTE) (SI:LISP-TOP-LEVEL1 (MAKE-TELNET-ECHOING-STREAM REMOTE))) NIL)) ))