NAME
ftpd - Tcl FTP server implementation
SYNOPSIS
package require ftpd ?1.1?
::ftpd::server ?myaddr?
::ftpd::config ?option value? ?option value ...?
_________________________________________________________________
DESCRIPTION
The ftpd package provides a simple Tcl-only server library
for the FTP protocol. It works by listening on the stan
dard FTP socket. Most server errors are returned as error
messages with the appropriate code attached to them.
Since the server code for the ftp daemon is executed in
the event loop, it is possible that a bgerror will be
thrown on the server if there are problems with the code
in the module.
COMMANDS
::ftpd::server ?myaddr?
Open a listening socket to listen to and accept ftp
connections. myaddr is an optional argument.
myaddr is the domain-style name or numerical IP
address of the client-side network interface to use
for the connection.
::ftpd::config ?option value? ?option value ...?
The value is always the proc to call as the call
back. The option specifies which callback should
be configured. See the CALLBACKS section for
descriptions of the arguments and return values for
each of the callbacks.
-authIpCmd proc
Callback to authenticate new connections
based on the ip-address of the peer.
-authUsrCmd proc
Callback to authenticate new connections
based on the user logging in (and the users
password).
-authFileCmd proc
Callback to accept or deny a users access to
read and write to a specific path or file.
Callback for log information generated by
the FTP engine.
-fsCmd proc
Callback to connect the engine to the
filesystem it operates on.
CALLBACKS
authIpCmd callback
The authIpCmd receives the ip-address of the peer
attempting to connect to the ftp server as its
argument. It returns a 1 to allow users from the
specified IP to attempt to login and a 0 to reject
the login attempt from the specified IP.
authUsrCmd callback
The authUsrCmd receives the username and password
as its two arguments. It returns a 1 to accept the
attempted login to the ftpd and a 0 to reject the
attempted login.
authFileCmd callback
The authFileCmd receives the user (that is cur
rently logged in), the path or filename that is
about to be read or written, and read or write as
its three arguments. It returns a 1 to allow the
path or filename to be read or written, and a 0 to
reject the attempted read or write with a permis
sions error code.
logCmd callback
The logCmd receives a severity and a message as its
two arguments. The severities used within the ftpd
package are note, debug, and error. The logCmd
doesn't return anything.
fsCmd callback
The fsCmd receives a subcommand, a filename or
path, and optional additional arguments (depending
on the subcommand). The subcommands supported by
the fsCmd are:
append <path>
The append subcommand receives the filename
to append to as its argument. It returns a
writable tcl channel as its return value.
delete <path> <channel-to-write-to>
The delete subcommand receives the filename
to delete, and a channel to write to as its
two arguments. The file specified is
written to the channel that is passed as the
second argument. The delete subcommand
returns nothing.
dlist <path> <style> <channel-to-write-dir-list-to>
The dlist subcommand receives the path that
it should list the files that are in, the
style in which the files should be listed
which is either nlst or list, and a channel
to write to as its three arguments. The
files in the specified path are printed to
the specified channel one per line. If the
style is nlst only the name of the file is
printed to the channel. If the style is
list then the file permissions, number of
links to the file, the name of the user that
owns the file, the name of the group that
owns the file, the size (in bytes) of the
file, the modify time of the file, and the
filename are printed out to the channel in a
formatted space separated format. The dlist
subcommand returns nothing.
exists <path>
The exists subcommand receives the name of a
file to check the existence of as its only
argument. The exists subcommand returns a 1
if the path specified exists and the path is
not a directory.
mkdir <path> <channel-to-write-to>
The mkdir subcommand receives the path of a
directory to create and a channel to write
to as its two arguments. The mkdir subcom
mand creates the specified directory if nec
essary and possible. The mkdir subcommand
then prints the appropriate success or fail
ure message to the channel. The mkdir sub
command returns nothing.
mtime <path> <channel-to-write-mtime-to>
The mtime subcommand receives the path of a
file to check the modify time on and a chan
nel as its two arguments. If the file
exists the mtime is printed to the channel
in the proper FTP format, otherwise an
appropriate error message and code are
printed to the channel. The mtime subcom
mand returns nothing.
permissions <path>
The permissions subcommand receives the path
of a file to retrieve the permissions of.
file permissions of the specified file. The
file is expected to exist.
rename <path> <newpath> <channel-to-write-to>
The rename subcommand receives the path of
the current file, the new file path, and a
channel to write to as its three arguments.
The rename subcommand renames the current
file to the new file path if the path to the
new file exists, and then prints out the
appropriate message to the channel. If the
new file path doesn't exist the appropriate
error message is printed to the channel.
The rename subcommand returns nothing.
retr <path>
The retr subcommand receives the path of a
file to read as its only argument. The retr
subcommand returns a readable channel that
the specified file can be read from.
rmdir <path> <channel-to-write-to>
The rmdir subcommand receives the path of a
directory to remove and a channel to write
to as its two arguments. The rmdir subcom
mand removes the specified directory (if
possible) and prints the appropriate message
to the channel (which may be an error if the
specified directory does not exist or is not
empty). The rmdir subcommand returns noth
ing.
size <path> <channel-to-write-size-to>
The size subcommand receives the path of a
file to get the size (in bytes) of and a
channel to write to as its two arguments.
The size subcommand prints the appropriate
code and the size of the file if the speci
fied path is a file, otherwise an appropri
ate error code and message are printed to
the channel. The size subcommand returns
nothing.
store <path>
The store subcommand receives the path of a
file to write as its only argument. The
store subcommand returns a writable channel.
VARIABLES
::ftpd::cwd
The current working directory for a session when
ftp command is received.
::ftpd::contact
The e-mail address of the person that is the con
tact for the ftp server. This address is printed
out as part of the response to the FTP HELP com
mand.
::ftpd::port
The port that the ftp server should listen on.
::ftpd::welcome
The message that is printed out when the user first
connects to the ftp server.
KEYWORDS
ftpd, ftp, ftpserver, services, RFC 959
Man(1) output converted with
man2html