Provided by: tcllib_1.15-dfsg-2_all bug

NAME

       ftpd - Tcl FTP server implementation

SYNOPSIS

       package require Tcl  8.3

       package require ftpd  ?1.2.6?

       ::ftpd::server ?myaddr?

       ::ftpd::config ?option value? ?option value ...?

       fsCmd append path

       fsCmd delete path channel

       fsCmd dlist path style channel

       fsCmd exists path

       fsCmd mkdir path channel

       fsCmd mtime path channel

       fsCmd permissions path

       fsCmd rename path newpath channel

       fsCmd retr path

       fsCmd rmdir path channel

       fsCmd size path channel

       fsCmd store path

_________________________________________________________________

DESCRIPTION

       The  ftpd  package  provides  a  simple  Tcl-only  server  library for the FTP protocol as
       specified in RFC 959 (http://www.rfc-editor.org/rfc/rfc959.txt).  It works by listening on
       the  standard  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 name of the command to call as  the  callback.  The  option
              specifies   which  callback  should  be  configured.   See  section  CALLBACKS  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.

              -logCmd proc
                     Callback for log information generated by the FTP engine.

              -fsCmd proc
                     Callback to connect the engine to the filesystem it operates on.

              -closeCmd proc
                     Callback to be called when a connection is closed. This allows the embedding
                     application to perform its own cleanup operations.

              -xferDoneCmd proc
                     Callback for transfer completion notification. In other words, it is  called
                     whenever a transfer of data to or from the client has completed.

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  currently 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 permissions 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:

              fsCmd append path
                     The append subcommand receives the filename to append to as its argument. It
                     returns a writable tcl channel as its return value.

              fsCmd delete path channel
                     The delete subcommand receives the filename to  delete,  and  a  channel  to
                     write  to  as  its  two  arguments.   The  file specified is deleted and the
                     appropriate ftp message is written to the channel  that  is  passed  as  the
                     second argument.  The delete subcommand returns nothing.

              fsCmd dlist path style channel
                     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.

              fsCmd 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.

              fsCmd mkdir path channel
                     The mkdir subcommand receives the path  of  a  directory  to  create  and  a
                     channel  to write to as its two arguments.  The mkdir subcommand creates the
                     specified directory if necessary and possible.  The  mkdir  subcommand  then
                     prints the appropriate success or failure message to the channel.  The mkdir
                     subcommand returns nothing.

              fsCmd mtime path channel
                     The mtime subcommand receives the path of a file to check the modify time on
                     and a channel 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 subcommand returns
                     nothing.

              fsCmd permissions path
                     The permissions subcommand receives the path  of  a  file  to  retrieve  the
                     permissions   of.    The  permissions  subcommand  returns  the  octal  file
                     permissions of the specified file.  The file is expected to exist.

              fsCmd rename path newpath channel
                     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.

              fsCmd 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.

              fsCmd rmdir path channel
                     The  rmdir  subcommand  receives  the  path  of  a directory to remove and a
                     channel to write to as its two arguments.  The rmdir subcommand 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 nothing.

              fsCmd size path channel
                     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 specified path
                     is a file, otherwise an appropriate error code and message  are  printed  to
                     the channel.  The size subcommand returns nothing.

              fsCmd store path
                     The  store  subcommand  receives  the  path  of  a file to write as its only
                     argument.  The store subcommand returns a writable channel.

       closeCmd
              The closeCmd receives no arguments when it is invoked, and any return value it  may
              generate is discarded.

       xferDoneCmd sock sock2 file bytes filename err
              The  xferDoneCmd receives six arguments when invoked. These are, in this order, the
              channel handle of the control socket for the connection, the channel handle of  the
              data  socket  used  for  the  transfer  (already closed), the handle of the channel
              containing the transfered file, the number of bytes transfered,  the  path  of  the
              file  which was transfered, and a (possibly empty) error message.  Any return value
              it may generate is discarded.

VARIABLES

       ::ftpd::cwd
              The current working directory for a session when someone first connects to the FTPD
              or when the REIN ftp command is received.

       ::ftpd::contact
              The  e-mail  address  of  the  person that is the contact for the ftp server.  This
              address is printed out as part of the response to the FTP HELP command.

       ::ftpd::port
              The port that the ftp server should listen on.  If port is specified as  zero,  the
              operating  system  will  allocate  an  unused  port  for  use  as  a server socket;
              afterwards, the variable will contain the port number that was allocated.

       ::ftpd::welcome
              The message that is printed out when the user first connects to the ftp server.

       ::ftpd::CurrentSocket
              Accessible to all callbacks and all filesystem commands (which are a  special  form
              of  callback)  and  contains the handle of the socket channel which was active when
              the callback was invoked.

BUGS, IDEAS, FEEDBACK

       This document, and the package it describes,  will  undoubtedly  contain  bugs  and  other
       problems.    Please   report  such  in  the  category  ftpd  of  the  Tcllib  SF  Trackers
       [http://sourceforge.net/tracker/?group_id=12883].   Please  also  report  any  ideas   for
       enhancements you may have for either package and/or documentation.

KEYWORDS

       ftp, ftpd, ftpserver, rfc 959, services

CATEGORY

       Networking