This document describes changes to MOVEit Freely, a 32-bit Windows command-line FTP client that supports secure FTP and passive mode. It is intended as a drop-in replacement for the ftp.exe that comes with Windows.
Add the -ports:low-high parameter. This rarely-used parameter allows you to control the TCP port numbers used on the client side of data connections.
Add the -pfxpwfile parameter.
Fix a problem in which the -pfxfile:filename parameter did not work with the dir
command.
Add the -pfxfile:filename and -pfxpw:password parameters, to support reading client certificates directly from files.
Recompile as version 4.5.
Interpret lines starting with # as comments. Do not display a prompt when reading comments or blanks lines from a script.
Fix a problem introduced in 4.0.0.0, in which MOVEit Freely would abruptly exit or otherwise return errors when uploading an uncompressible file to MOVEit DMZ FTP.
Use a more modern installer. The new setup program looks different, but acts similarly to previous versions.
Recompile as version 3.4.0.0.
Add the undocumented sleep nsecs
command.
Add the encryption methods "-e:on-ccc", "-e:tls-c-ccc", and "-e:implicit-ccc". These are like the existing "-e:on", "-e:tls-c", and "-e:implicit", but they issue the CCC command after login. This causes the rest of the control connection session to be unencrypted, while encrypting any data connections. The motivation for this feature is to allow firewalls to inspect and rewrite PORT commands and PASV responses, to account for IP address mapping. Without this feature, if you are using encrypted sessions with some firewalls, you might have to use the -natpasv or -natact:ip command-line options.
Fix an AUTH TLS compatibility issue with Sterling Commerce's Connect:Enterprise product. It appears that the bug may actually be in Connect:Enterprise, but a recent change to MOVEit Freely introduced the incompatibility.
Change the program's icon.
Recompile MOVEit Freely in preparation for the full release of version 3.3.
Recompile MOVEit Freely in preparation for the beta release of version 3.3.
If there is a problem getting a directory listing in passive mode, also display the port number in the error message.
When MOVEit Freely cannot establish an SSL connection, issue a different error message if the reason is related to client certificates.
When getting a directory listing in passive mode, if there is a problem with the data connection, display both the connection-related error and the response from the server. Also display the IP address being used, and the message "Check firewall rules. Also, if IP address listed above is unexpected, use '-natpasv' option".
Compile the SSL library into MOVEit Freely, so that the UTSecureLayer.dll file is no longer required.
Fix an SSL problem when connecting to certain versions of the ProFtpd server.
Implement the rmdir command.
Fix a minor bug which affected sessions with invalid client certificates. MOVEit Freely would incorrectly claim that it had connected successfully, only to give an error when sending the first command.
Make a few trivial changes to the help you get via ftps /?.
Implement two new command-line parameters to provide a "client NAT" capability:
The -natact:ipaddr parameter tells MOVEit Freely to tell the FTP server, in active mode, to connect to MOVEit Freely on IP address "ipaddr" rather than the client's actual IP address. In order to use this parameter, you must know an address by which the server can access your PC.
The -natpasv parameter tells MOVEit Freely to ignore the IP address specified by the FTP server when the FTP server tells Freely to make a data connection in passive mode. Instead, when this parameter is specified, MOVEit Freely will connect to the IP address that it used to make the control connection.
When echoing server commands to the console (e.g., due to the -d option), do not echo the password. Instead, say "PASS (hidden)".
Also, change the self-extracting install to run MISetup.exe rather than Setup.exe. Sometimes customers have remnants of installations of other products on their systems, and this can cause the MOVEit Freely extractor to run the wrong setup.
After connecting to a secure FTP server, send the PBSZ 0
command just before the PROT
P
command. Though most secure FTP servers do not require this, it
is part of the proposed standard.
Fix a bug in the mget and mdelete commands: if the user did not specify a filemask, Freely would prompt for one, but then ignore it. As a result all files in the current directory would be selected, not just the ones matching the mask.
Do not allow "md" to be interpreted as "mdelete", even though it is a unique initial substring. This prevents tragedy for users who think that "md" stands for "make directory".
When reading a password, don't backspace past the prompt.
Perform the PROT and Lumps handling whether or not we get a password prommpt. This becomes important as DMZ supports client certs. Change Copyright to 2001-2005.
If there's an error appending, display a message. Add a build for linking with UTSecureLayerStatic. This was an attempt to investigate a problem whereby MOVEit Freely running under Windows XP is unable to append, even though it can put. I was never able to figure this out.
Fix a problem which could cause active mode transfers to fail to create a data connection if there were many ports open.
Fix a bug which could cause FTPS to throw an access violation if the FTP server's response to a PASV command was invalid.
Recompile as version 3.1.0.0.
Flush output after every print to console.
Use the Connect Timeout as a Receive Timeout on the control connection.
Changed the return value for command errors to 3 since 2 was already in use.
Fixed a byte count problem with resume mode.
Fixed Dundas FTP bug that ignored the data timeout on active-mode get.
A new parameter, -resume, causes all get and put (including mget/mput) to try to resume if the file exists.
Fixed to use a 64-bit number for the transfer size.
Freely will now return an errorcode of 2 if any of the commands returned an error.
This includes 4xx and 5xx responses to FTP dialog commands as well as syntax and
file errors determined by the client itself.
A new parameter, -quiterror,
makes Freely exit on any command that gets an error.
This includes 4xx and 5xx responses to FTP dialog commands as well as syntax and
file errors determined by the client itself.
ftps -? now displays version in the usage:
MOVEit Freely 3.0.8.1 - Secure FTP Client http://www.stdnet.com/moveitfreely Usage: FTPS [args] [hostname [port]] ...
Fixed a problem with mput and mget which could cause subsequent transfers to fail once one of the files in the group failed.
When you open a connection with the open command, the port number now defaults to the port implied by the command line parameters. So,
ftps -e:implicit open ftp.mycorp.netnow causes the open to be to port 990, as implied by -e:implicit.
Implemented an optional second argument to the "dir" and "ls" commands. A command like dir *.rpt out.txt will send the directory listing to the file out.txt rather than to the console.
Fixed a typo in the word "Communications".
Fixed a typo in the word "verification" in the UTSecureLayer.dll library.
Recompiled 2.7.6.1 with a new version number for the 3.0 release.
Addressed a problem that occurs when running the program under Windows 9x before the DSCLIENT.exe install has been run. The program gave an exception instead of a nice error message. (Recall that under Windows 95/98, DSCLIENT is required for MOVEit Freely to run.)
Enhanced the install program so that under Windows 9x, a line is added to AUTOEXEC.BAT placing MOVEit Freely in the path.
Added support for SSL client certificates, via two new command-line parameters:
Relabeled 2.6.3 as 2.7.0 for release.
Implement the append command.
Fix UTSecureLayer.dll to work more reliably when used on Windows XP.
Don't send a SYST command to check the capabilities of the FTP server unless we are in secure mode. This works around problems with certain firewalls that explicitly block the SYST command and cause the session to hang.
Remove documentation of the -cc command-line parameter. This parameter was unnecessary. However, the parameter is still implemented.
Implement a command-line parameter to suppress checking of the control connection. This is an obscure parameter needed for only a few unusual FTP servers.
Implement command-line parameters to specify an initial username and password.
Also, the -t:data_timeout_secs parameter now also applies to the amount of time to wait for the server to connect back (on a non-passive data port). The default is 120 seconds. Previously, the amount of time to wait for the server to connect back was always 15 seconds.
Accommodate a certain buggy brand of FTP server by allowing the responses from NLST to be delimited by just LF rather than CR LF as called for by the FTP standard. This fixes the mget command on those FTP servers.
Default to port 990 if -e:implicit has been specified.
Fix a problem with UTSecureLayer.dll which could cause the program to abort during a GET under certain rare instances. This was observed only with the Sterling Software FTP server under AIX.
Fix a problem in which directory listings on non-passive secure connections would be truncated to 0 bytes.
Use a new version of the secure communications DLL, which fixes a program abort when connecting to a server that does SSL negotiation incorrectly. (This was a rare occurrence, since nearly all secure FTP servers do negotiation correctly.)
Improve the program's ability to deal with slow connections by adding timeout-related enhancements. Previously, the program would timeout a connection attempt after 30 seconds, and also would timeout a data connection if no data was sent or received for 30 seconds. Now the default data connection timeout has changed to 120 seconds. Also, both of these timeout parameters can be specified on the command line:
-c:connect_timeout_secs
specifies the
connect timeout in seconds. This is the amount of time that the
program will wait for a successful connection to the server. The
default is 30 seconds.Add support for file integrity checking. This is a transfer mode that compresses files on-the-fly, and checks a file checksum to ensure that the file was transferred successfully. This mode is selected automatically when transferring to/from a MOVEit DMZ FTP server; it is not available with other types of servers.
Change the put command so that if only one argument is specified, the destination file is computed differently. If there is a pathname in the argument, strip it off. This fixes the problem in which the command put c:\tmp\myfile.txt did not work because the remote FTP server got the name "c:\tmp\myfile.txt" rather than "myfile.txt".
Fix a problem in which mput sent 0-length files if the mask contained a directory name; e.g., c:\tmp\k*.jpg.
When running on Windows 9x, do not timeout when draining the control connection between commands.
Change the installation program to detect if we are installing on Windows 95 or Windows 98. If so, warn about the need to have IE 5.01 and Directory Services Client installed, and set the security provider key in the registry.
When doing a directory listing, be sure to temporarily set the transfer mode to ASCII. Otherwise, directory listings on UNIX server could be garbled, resulting in the failure of mget and similar commands.
Implement the mdelete command.
Display an error message if a transfer fails.
Fix a long-standing minor problem with the get command in passive mode. This command attempted to check the return code from the server before opening a data connection. This was not compatible with all FTP servers, and resulted in hangs to certain FTP servers. Also, enhance the code to drain the return code from the server in the case of a failed get or dir command.
When parsing command arguments for certain commands, recognize two consecutive embedded double-quote marks as a single double-quote mark. For instance, get "my"".""txt" fetches the file my"."txt.
Make a minor change to TLS-P encryption mode: If -e:tls-p is specified but the server will not accept AUTH TLS-P, try AUTH TLS-C. If that is accepted, send a PROT P command when the user logs in.
This allows the program to work with a wider range of secure FTP servers.
Support two additional modes of encryption: TLS-C, which by default encrypts the control connection but not data, and implicit, which encrypts control and data without the use of an AUTH command. Implicit mode is usually used with an FTP server running at port 990. The -e command-line parameter has been enhanced to support the syntax -e:encmode where encmode is:
encmode | Meaning |
---|---|
off |
is the default--no encryption. |
tls-p or on |
encrypts both control and data w/ AUTH TLS-P. |
tls-c |
encrypts only control connection with the AUTH TLS-C
command. Encryption of the data connection can be changed during the
session with the prot command.
prot p sets data connections to be protected (encrypted); |
implicit |
encrypts both connections without the use of an AUTH command; usually to port 990. |
Implement the mkdir command.
Implement the -a command-line parameter, which starts FTPS in passive mode. By default, the program is in active mode. As before, this can be changed during a session with the passive command.
Change the quote command so that it will accept multiple arguments in a way more compatible with Microsoft's client. Previously, the quote command required double quotes surrounding the arguments if there was a space in the arguments. This was incompatible with Microsoft's FTP client. In other words, previously you had to use a command like:
quote "FAM DISK"
but now you can use:
quote FAM DISK
Change the put command to check to make sure that a file exists before trying to send it. Previously, a zero-byte file was sent if the local file did not exist.
Allow arguments to be surrounded by double-quotes ("). This allows you to get and put files whose names contain spaces. It is also more compatible with the Microsoft ftp.exe.
Fix an access violation which occurred when the FTP server returned an empty list in response to "dir".
This was the first fully-supported external release.