Alun Jones WFTPD 1.9 Documentation 1910 Westmead 3702 Houston TX 77077, USA WFTPD Windows FTP Daemon Version 1.95 For Winsock v1.1 Self-congratulatory Introduction Welcome to WFTPD, and many thanks for caring to read the documentation. For those of you new to Internet terminology, FTP is a standard communication protocol to enable file transfer (hence its name, deriving from File Transfer Protocol). A 1Daemon is a program that sits in the background waiting to serve other applications. It is commonly also referred to as a server. This program is an attempt to provide most of the functionality associated with this protocol. Since the program is still in development, and does not hold all the features defined in the standards document for FTP, it may not be suitable for all purposes. It is, however, suitable for a great many purposes that occur commonly amongst users of FTP programs. This program has certain advantages over many of the commercial implementations. The first, and most obvious, is its cost. If you can accept certain limitations that I have placed on the software, the cost may be nothing, since you are not forced to send me money to use this software. A registration fee of $15 is suggested, and the benefits of sending in your registration include: Automatic notification of any new versions Lifting of all restrictions on the shareware version (only five transfers per session, and impolite greeting and farewell messages) A warm, fuzzy feeling The likelihood that I will be sufficiently interested to produce a new version More of a say in determining new features Instructions on registering are included in the file REGISTER.TXT, as well as at the end of this file. Other advantages over commercial implementations include that this program has been written from scratch to be compatible with the Winsock specification, rather than any particular implementation. This gives it a greater chance of working with those winsock stacks that fully comply with the Winsock v1.1 specification. The program has been written solely with Windows in mind, and is not a port of anyone else's implementation. This allows it to be more efficient in the Windows environment. Well, enough sales talk, and on with actually documenting this program. Documentation begins here! WFTPD can only be run on top of a winsock v1.1 compliant TCP/IP stack. It has been used by many people on a variety of different stacks. It seems to work very well on top of the shareware Trumpet Winsock available from most ftp sites and shareware archives as TWSK10A.ZIP. The current beta version, 24, works a lot better for this program. If on starting WFTPD, you receive an error "Cannot Find WINSOCK.DLL", or a similar message to say that Windows cannot find the WFTPD executable, this is because a Winsock compliant stack has not been installed correctly on your system. As a shareware application, WFTPD has no warranty, either express or implied, about its suitability for any purpose. Support is not guaranteed, nor are future updates. The program is offered on an as-is basis to any users, and the author and distributors of this program are not liable for any damage or loss caused by the use, misuse, abuse or talking-moose of this program. Similarly, the author and distributors are not liable for any damage or loss caused by any portion of this code or documentation, no matter how poorly written. WFTPD is distributed through shareware archives as one executable, one help file, and a few ancillary files, of which this is one. To run the program, all that is required is the executable, although you may wish to keep the help file around for those moments where you have forgotten what you read in this document. The help file should be kept in the same directory as the executable. As with so many other windows programs, WFTPD creates a file with the extension ".INI" in the windows directory. (If you run the program as "WFTPD.EXE", the INI file will be "WFTPD.INI") It is not necessary to edit anything in this file directly, since all operations are accessible from menu options. It is advised that you NOT edit the INI file in normal operation, since there is a certain amount of validation of your input that is done when entering items through the menus. The menu structure has been designed to be as intuitive as possible, while still providing the required functionality. The menus are outlined individually below: File Menu From this menu, all the file operations are performed. The two file options are "Open Log" and "Close Log". These options define whether any enabled logging information (q.v.) will be output to a file, and which file this information is output to. Any currently open log file's name is displayed on the title bar of the application. If the application is closed (exited) while a log file is open, that file will be reopened on re-starting the application. If a log file already has any contents, the new logging messages will be appended. For this reason, it is advisable to make a regular investigation of your log files to ensure that they have not grown too large. There used to be another option on this menu, "Greedy" - this was for a feature that has been superceded by a better internal loop for send/receive. The final command on the File Menu is the Exit command, which closes down the program. It is important on some Winsock stacks to close this program down BEFORE exiting Windows, since there is currently a bug that leaves a 'listener' process active for ftp, which means that should you re-enter windows without restarting your TCP/IP stack (often requiring a reboot), you will not be able to start ANY ftp servers, and incoming ftp requests will get lost. I view this as a bug in the underlying TCP/IP implementation of the relevant Winsock stacks, since when Windows closes down, they should close down all TCP/IP connections that were activated under Windows. (The Winsock spec touches on this issue) Edit Menu The only option here, Copy, has been greyed out - this is reserved for future expansion, to allow you to copy parts of the on-screen log information to the clipboard. Basically, I haven't been able to get around to writing the code for this part! View Menu This has one option, "Status Bar". This toggles the display of the status bar on the bottom line of the screen display, which will contain a on-line description of whatever command is currently highlighted on any menu. Logging Menu This is where decisions are made as to whether logging is performed, and what information is logged. The first option, "Logging On", enables the logging of items checked below the separator, and provides a quick method of turning on or off all log information. "Clear Screen" clears the window of all on-screen logging. This is a non-reversable process. Underneath the separator (the horizontal line) are the options describing what information gets logged. "Gets" enables logging of any transfer FROM the WFTPD system. "Puts" enables logging of transfers in the other direction. "Logins" enables a log of every non-anonymous user who connects to your system, and "Anonymous" enables logging of the anonymous connections. "Commands" enables logging of all other commands issued by connected FTP clients. The last, and perhaps most dangerous, option is "Winsock Calls". This is included solely to aid in the isolation of faults between WFTPD and your Winsock stack. Since the Winsock specification is relatively new, there are some areas where the writers of Winsock stacks may not have got it 'right', and some areas where they are not necessarily 'wrong', but disagree with the interpretation I make of the winsock spec. If you enable this option, every call to the Winsock stack will be logged, along with an error code. An error code of 0 means no error, and on any "[signal]" line, the error number is the type of signal received. The only other error number to be expected is 10035, which means that the transfer of data blocked - this is a normal condition for any network connection. Any other error condition may need investigation. Message Menu This controls various messages that users see. The first two items, "Greeting" and "Farewell", will put up dialogs to allow you to enter up to 20 line messages to be displayed on entry into, and exit from, the WFTPD system. In the unregistered shareware version, these dialogs come up, but may NOT be edited. I apologise if the message seems rude to you, but please don't be a self-righteous ninny about it - I have had several people complain that they cannot reasonably test the program with these messages in. I believe this argument is phoney - if you are testing the software, I would hope that $15 is a drop in the ocean compared to the cost of your (and your testers') time, and I would also hope that if you have other people connecting into your 'test' site, it should be no problem to inform them that this message is due to your testing an unregistered shareware product. The third item on this menu, "MESSAGE.FTP" is a toggle that enables messages to be displayed on each change of directory. If this option is enabled, and the user changes directory into one with a file called "MESSAGE.FTP", the text inside this file is sent to the user along with the notification of his new directory. My advice is to keep this message brief, since many people have only twenty line terminals, and may not be able to pause, or scroll back. Any text can appear in these files, and also in the Greeting and Farewell dialogs. You do not need to prepend each line with any special text, as in some other ftp server implementations - the server handles this for you. Security Menu This implements a rather limited subset of the security available on more powerful ftp daemons. Currently only three items are enabled - the fourth, greyed, item "Rights" is reserved for a later version of WFTPD, and will allow you to specify which users can write from, read to, or list, which directories. The first item, "General" allows you to set the miscellaneous global switches (i.e. not specific to particular users) that involve security - enabling/disabling security, allowing/denying anonymous access, and limiting the maximum number of users that can log in to your server. The next item, "User/Password", brings up the "User Security Settings" dialog. It is on this dialog that users are defined. To define a new user, simply enter the user's login name in the "User name" box; next, if you wish to, you may define a password and home directory for this user. When entering a password, the password must be typed exactly the same in both the Password and Verify boxes. Since you cannot see what you are typing, the "Add/Update" button is greyed out whenever the text in the two boxes does not exactly match. The user's entry is only added to the INI file on pressing the Add/Update button while that user's name is in the User Name box. On pressing the Add/Alter button, the following settings are stored: User Name, Password, Home Directory, and the "Restrict To Home" option's value. The "Restrict To Home" checkbox will, if checked, require that this user only be allowed access to his home directory and below. All users will be placed in their Home Directory when they first log in. The last button, "Delete" will remove the currently selected user name entry from your INI file. The third item in the Security main menu is "Host/Net". This was a new feature to 1.9, and may still be a trifle flakey. The idea is to either allow you to deny access to particular sites which cause you problems, or to allow only particular sites to connect, and to deny all other sites from connecting. The default setting (allow / deny) is indicated in the "Default Action" box. To specifically allow or deny a particular host or network, you may enter an IP address mask in the "Host Address" box. This mask is a set of four values, separated by dots. These values are either decimal numbers in the range 0-254, or asterisks. An asterisk in any particular part will allow the address to match all values in that position. For instance, if you wanted to flag all local connections through the "loopback" interface, you might enter "127.*.*.*" here. When a connection is received, the default action is noted, and then the address of the incoming site is matched against those host address masks whose specific action goes against the default action. If a match is found, then the specific action is performed, otherwise the default action is. As with the User/Password screen, the setting for any "Host address" is only saved on clicking the Add/Update button, which only becomes solid on entering a valid host mask. The Delete button removes the entry for the host address displayed. As might be expected, the Default Action is saved on closing the dialog box. Help Menu The Index option pulls up the help file for WFTPD (if it can be found), and points to the contents page. This may be worth exploring for hints on how the software may be used. The "Registering" option brings up a help page with information on how to register - see "Registering the Software" below for more details. The Using Help option gives you some Windows Help about using Windows Help. The About option displays a short copyright message, and may be used to find out whether you are running a registered, or unregistered, version, which version you are running, and what date it was built on. An additional button is displayed at the bottom of the About Dialog, which in the unregistered version asks "How Do I Register?", and in the registered version asks "How Do I Contact The Author?". On pressing this button, the help file is again searched for, and the page on contacting the author, or registering the software, is displayed. Registering the Software What will registering the software get you? A brand spanking new registered copy of the executable and all documentation (just in case you lost your documentation, or it was updated recently). Also, the registered version has the following limits removed - a maximum of five file transfers per login session - no editing of the Greeting and Farewell messages allowed. Unlike previous versions, orders will not be accepted without order forms - I need the information that is on them, and it's a real problem chasing people down to find the information that they forgot to put in the post-it note attached to their cheque! The order form can be printed from the help file - if you are using WFTPD, choose the "Registering" option under the "Help" menu - if you are not currently using WFTPD, run WFTPD.HLP, and select the contents item "How To Register the Program or Contact the Author". Full instructions are included on this page, along with two items to choose from, depending on whether you require a regular mail delivery, or an internet delivery of the software. Regular mail delivery of upgrades, or the original program, costs $5 in addition to the $15 for registering the software. Be very careful if sending cash - cheques or money orders are far safer, and should be made out to "Alun Jones". There is no "WFTPD Software Inc", or any such name (although one day, who knows?). If an internet-reachable e-mail address is included with your order, you will be added to a mailing list of all registered users of WFTPD, which will allow me to notify you of any future upgrades, or troubleshooting techniques and tips. If you provide me with an internet e-mail address or an internet ftp site on which to deposit the registered copy (so long as it is not a public archive site!), you will be sent free upgrades whenever they are available. A clarification on "public access" - no matter how much you plead, I will not place the registered copy of this program onto a server through the "anonymous" account - many people tell me that it's safe because "only a couple of people use this machine" - I have no way of knowing if this is true or not, and so I take the safe route. Source code to the program is not distributed with the registered or unregistered version of this software - it cost me a lot of time to develop this program, and so it costs mucho dinero to get the source code out of me. Site licences are generally offered at a rate of $500 for each block of 100 users. If this is not suited to your situation, make me an offer and we can haggle. Be warned that my haggling may consist of repeatedly droning "$500 for each block of 100 users". But be hopeful that I may decide your offer is good. I would prefer if all payments are made in US Dollars. These are easy for me to cash, and are often reasonably easy for foreigners to lay their hands on. In a pinch, I will accept European currency cheques, so long as the amount includes a certain increase to allow for the money-changers to have their rake. For instance, I have been asking people in England to send me 15 pounds sterling. Finally And finally, may I remind you that the address for all communication to me is Alun Jones, 1910 Westmead 3702, Houston TX 77077 USA. The previously quoted address of 12919 Whittington 1104A is an apartment that I am moving from on April 2nd 1994. All mail to that address should be forwarded to my new address, but it is probably not wise to trust in that too much. Also, my email address has changed from "alun@wst.com" to "alun@neosoft.com" - this reflects the fact that WFTPD is a private venture of mine, and has no connection to my employers. I would like to thank a whole bunch of people who have helped me with this product, particularly: Fred Whiteside, of Beame & Whiteside, without whom I would have screwed up the User/Password security. Bob Quinn, of FTP Software Inc, for clarifying many of the points of the Winsock spec, and for generally being very informative on the Winsock programming mailing lists. All the staff of FTP Software Inc, for sending me a developer's edition of PC/TCP version 2.3, which I have regrettably not yet had the time to install. Peter Tattam, of Trumpet Software International, for developing perhaps the definitive shareware winsock implementation. All the developers of winsock stacks, without whom my program would be useless. All the writers of the winsock v1.1 specification, for providing a most useful and simple environment for programming TCP/IP network applications. Anyone who has ever given me encouragement and constructive criticism concerning WFTPD, in particular those who wrapped their comments in cheques. My mother, my father and the entire academy of motion picture arts (sorry, couldn't resist that - this was originally written on the night after the Oscars) _______________________________ 1The term "Daemon" refers to an invisible servants - unlike "demons", a daemon is neither intrinsically good nor evil, it does only what it is told.