ftpd.scm: corrected typo; ftpd.scm.doc: doc for ftpd.scm
This commit is contained in:
		
							parent
							
								
									3cc5d8c837
								
							
						
					
					
						commit
						a741498c59
					
				| 
						 | 
				
			
			@ -0,0 +1,178 @@
 | 
			
		|||
This file documents how to use the ftp-daemon ftpd
 | 
			
		||||
 | 
			
		||||
USAGE
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
Usage as a stand-alone daemon:
 | 
			
		||||
 | 
			
		||||
Start the daemon in a scsh (or with a script, see below) using
 | 
			
		||||
 | 
			
		||||
,config ,load modules.scm
 | 
			
		||||
,open ftpd
 | 
			
		||||
(ftpd <anonymous-home> [<port>])
 | 
			
		||||
 | 
			
		||||
(confirm open's question for opening the ftpd-structure)
 | 
			
		||||
where <anonymous-home> is the root-directory of the ftp-server and
 | 
			
		||||
<port> the port the server is listening to. Usage of relative paths in
 | 
			
		||||
<anonymous-home> is not encouraged. <port> defaults to 21.
 | 
			
		||||
 | 
			
		||||
For example
 | 
			
		||||
 | 
			
		||||
(ftpd (cwd) 8080)
 | 
			
		||||
 | 
			
		||||
starts the server with the current directory as anonymous home and
 | 
			
		||||
listening to port 8080.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Usage with the collaboration of a daemon like inetd:
 | 
			
		||||
 | 
			
		||||
Instead of FTPD, inetd uses FTPD-INETD, for example:
 | 
			
		||||
 | 
			
		||||
(ftpd-inetd (cwd))
 | 
			
		||||
 | 
			
		||||
starts the server with the current directory as anonymous home and
 | 
			
		||||
handling the connection (given from inetd) through the current input-
 | 
			
		||||
and output-ports.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Example
 | 
			
		||||
 | 
			
		||||
This is how archive.informatik.uni-tuebingen.de is called at the
 | 
			
		||||
university of Tuebingen:
 | 
			
		||||
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
/afs/informatik.uni-tuebingen.de/rs_aix43/scsh-0.6-alpha/bin/scsh <<EOF
 | 
			
		||||
,batch on
 | 
			
		||||
,config ,load modules.scm
 | 
			
		||||
,open ftpd
 | 
			
		||||
,open threads
 | 
			
		||||
(define (archive-ftpd args)
 | 
			
		||||
  (with-syslog-destination
 | 
			
		||||
   #f
 | 
			
		||||
   #f
 | 
			
		||||
   (syslog-facility local0)
 | 
			
		||||
   #f
 | 
			
		||||
   (lambda ()
 | 
			
		||||
     (ftpd "/afs/informatik.uni-tuebingen.de/data/archive/"))))
 | 
			
		||||
(dump-scsh-program archive-ftpd "archive-ftpd.image")
 | 
			
		||||
;; (dump-scsh "archive-ftpd.image")
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
Note, that the options for the syslog are set via With
 | 
			
		||||
WITH-SYSLOG-DESTINATION, a scsh-command. Here, the syslog-facility is
 | 
			
		||||
set to local0. See man syslog for further details on syslog.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SUPPORTED COMMANDS
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ftpd supports following commands according to RFC 959:
 | 
			
		||||
 | 
			
		||||
ABOR - abort connection
 | 
			
		||||
CDUP - move to parent directory
 | 
			
		||||
CWD  - move to specified directory (relative paths may be used)
 | 
			
		||||
DELE - delete file
 | 
			
		||||
LIST - list files in current directory (long format)
 | 
			
		||||
MDTM - deliver modification time of a regular file
 | 
			
		||||
MKD  - make directory
 | 
			
		||||
MODE - change mode (only stream mode (S) is supported)
 | 
			
		||||
NLST - list files in current directory (short format)
 | 
			
		||||
NOOP - do nothing
 | 
			
		||||
PASS - read in passphrase
 | 
			
		||||
PASV - change to passive mode
 | 
			
		||||
PORT - change connection port
 | 
			
		||||
PWD  - return name of working directory (print working directory)
 | 
			
		||||
QUIT - quit session
 | 
			
		||||
RETR - return file (GET)
 | 
			
		||||
RMD  - remove directory
 | 
			
		||||
RNFR - read in the name of a file to be renamed (use RNTO next)
 | 
			
		||||
RNTO - rename file mentioned before in a RNFR command
 | 
			
		||||
SIZE - return size of a regular file
 | 
			
		||||
STOR - store file (PUT)
 | 
			
		||||
STRU - change structure to transfer files
 | 
			
		||||
       (only the file structure is supported)
 | 
			
		||||
SYST - return system type
 | 
			
		||||
TYPE - change type (supported types: A = ascii mode, I, L8 = 8-bit
 | 
			
		||||
       binary  mode)
 | 
			
		||||
USER - login user (only anonymous logins allowed, use "anonymous" or
 | 
			
		||||
       "ftp" as user name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SYSLOG-MESSAGES
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
ftpd outputs a lot of syslog-messages. A syslog-message looks like
 | 
			
		||||
this:
 | 
			
		||||
 | 
			
		||||
Jul 24 18:34:52 axl ftpd: (thread 21) anonymous user login (230)
 | 
			
		||||
 | 
			
		||||
The log gives you following informations (including those delivered by
 | 
			
		||||
the syslog-daemon):
 | 
			
		||||
 | 
			
		||||
* the date and time the log was made (here: Jul 24 18:34:52)
 | 
			
		||||
* the machine the log was made on (here: axl)
 | 
			
		||||
* the program, that output the log (ftpd)
 | 
			
		||||
* the thread the message concerns (here thread 21)
 | 
			
		||||
  Each connection is linked with a thread, that handles the commands
 | 
			
		||||
  of this connection. When the thread is created, there is a log
 | 
			
		||||
  containing the remote address and the thread number, so in future 
 | 
			
		||||
  logs the thread number labels the connection. As at any given time 
 | 
			
		||||
  the thread number is unique, this is a bijection. (Note that the 
 | 
			
		||||
  thread numbers are not unique over a period of time).
 | 
			
		||||
* the log message (here: notification about an anonymous user login)
 | 
			
		||||
* the reply code returned by ftpd, if any (here: 230)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The Syslog-levels used:
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Overview:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
As NOTICE are logged:
 | 
			
		||||
 | 
			
		||||
* messages concerning CONNECTIONS
 | 
			
		||||
* the execution of the STOR command
 | 
			
		||||
* internal errors
 | 
			
		||||
* unix errors
 | 
			
		||||
* reaching of actually unreachable case branches
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
As INFO are logged:
 | 
			
		||||
 | 
			
		||||
* messages concerning all OTHER COMMANDS, including the RETR command
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
As DEBUG are logged:
 | 
			
		||||
 | 
			
		||||
* all other messages, including debug messages
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Details:
 | 
			
		||||
 | 
			
		||||
Messages concerning connections (establishing connection, connection
 | 
			
		||||
refused, closing connection due to timeout, etc.) are logged at
 | 
			
		||||
notice-level. 
 | 
			
		||||
 | 
			
		||||
The success of the STOR-command (PUT, i.e. somebody is putting
 | 
			
		||||
something on your server via ftp) is also logged at notice-level. In
 | 
			
		||||
fact, the log is made before the storing is started actually.
 | 
			
		||||
 | 
			
		||||
Internal errors, unix errors and the reaching of unreachable
 | 
			
		||||
case-branches are also logged at notice-level.
 | 
			
		||||
 | 
			
		||||
Messages concerning all other commands including the RETR-command
 | 
			
		||||
(GET) are logged at info-level.
 | 
			
		||||
 | 
			
		||||
All other messages including debugging-informations are logged at
 | 
			
		||||
debug-level. If you want to debug ftpd, put all the messages in one
 | 
			
		||||
single file, since the debug-messages may refer to messages of other
 | 
			
		||||
levels.
 | 
			
		||||
 | 
			
		||||
Success (as long as interesting) and failure of commands are logged at
 | 
			
		||||
info-level, except the success of the STOR-command, that is logged at
 | 
			
		||||
notice-level (as mentioned above).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								ftpd.scm
								
								
								
								
							
							
						
						
									
										11
									
								
								ftpd.scm
								
								
								
								
							| 
						 | 
				
			
			@ -16,11 +16,8 @@
 | 
			
		|||
; - GET-command: ftpd reports "Can't open FILENAME for reading" if
 | 
			
		||||
;   file actually doesn't exist. This is confusing. Reporting
 | 
			
		||||
;   "FILENAME does not exist" is much better.
 | 
			
		||||
; - logging: 
 | 
			
		||||
;   * improve syslog-levels (too much debug-messages?)  
 | 
			
		||||
;   * improve perfomance (values are often calculated twice: first
 | 
			
		||||
;     time for logging, second time for reporting
 | 
			
		||||
; BRNR: STOPPED at 836
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(define-record session
 | 
			
		||||
  control-input-port
 | 
			
		||||
| 
						 | 
				
			
			@ -658,7 +655,7 @@
 | 
			
		|||
    (register-reply! 500
 | 
			
		||||
		     "No arguments.  Not to worry---I'd ignore them anyway."))
 | 
			
		||||
   ((string-ci=? "F" arg)
 | 
			
		||||
    (log (syslog-level info) "(still) using file structure to tranfser files (200)")
 | 
			
		||||
    (log (syslog-level info) "(still) using file structure to transfer files (200)")
 | 
			
		||||
    (register-reply! 200 "Using file structure to transfer files."))
 | 
			
		||||
   (else
 | 
			
		||||
    (log (syslog-level info) "file structure ~S is not supported (504)" arg)
 | 
			
		||||
| 
						 | 
				
			
			@ -1147,7 +1144,7 @@
 | 
			
		|||
 | 
			
		||||
; Version
 | 
			
		||||
 | 
			
		||||
(define *ftpd-version* "$Revision: 1.24 $")
 | 
			
		||||
(define *ftpd-version* "$Revision: 1.25 $")
 | 
			
		||||
 | 
			
		||||
(define (copy-port->port-binary input-port output-port)
 | 
			
		||||
  (let ((buffer (make-string *window-size*)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue