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
|
; - GET-command: ftpd reports "Can't open FILENAME for reading" if
|
||||||
; file actually doesn't exist. This is confusing. Reporting
|
; file actually doesn't exist. This is confusing. Reporting
|
||||||
; "FILENAME does not exist" is much better.
|
; "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
|
(define-record session
|
||||||
control-input-port
|
control-input-port
|
||||||
|
@ -658,7 +655,7 @@
|
||||||
(register-reply! 500
|
(register-reply! 500
|
||||||
"No arguments. Not to worry---I'd ignore them anyway."))
|
"No arguments. Not to worry---I'd ignore them anyway."))
|
||||||
((string-ci=? "F" arg)
|
((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."))
|
(register-reply! 200 "Using file structure to transfer files."))
|
||||||
(else
|
(else
|
||||||
(log (syslog-level info) "file structure ~S is not supported (504)" arg)
|
(log (syslog-level info) "file structure ~S is not supported (504)" arg)
|
||||||
|
@ -1147,7 +1144,7 @@
|
||||||
|
|
||||||
; Version
|
; Version
|
||||||
|
|
||||||
(define *ftpd-version* "$Revision: 1.24 $")
|
(define *ftpd-version* "$Revision: 1.25 $")
|
||||||
|
|
||||||
(define (copy-port->port-binary input-port output-port)
|
(define (copy-port->port-binary input-port output-port)
|
||||||
(let ((buffer (make-string *window-size*)))
|
(let ((buffer (make-string *window-size*)))
|
||||||
|
|
Loading…
Reference in New Issue