Large File Support has been updated internally to use newer APIs, rather than the transitional API.
You can now specify an IP address for binding the local end of sockets. Useful if you need connections to originate from a specific IP on the system.
Bug fixed where binding an ephemeral port number in a specified range (rare) may not have used all available retries for binding.
Local writes now "retry" when the write returns less than the full number of bytes specified, and will call write() again to write out the remaining bytes. This bug is very rare since local write almost always write out the full number of bytes. This bug may have been limited to a particular type of filesystem.
Using a higher resolution timer on Windows, so that the timer no longer wraps over after a month.
The minimum version of Windows that the source code will now compile on is Windows 2000, although with a little tweaking you could compile for Windows NT 4 again.
Compatibility fix for Mac OS X when compiling from source to build universal binaries (Thanks, Toshi NAGATA)
Compatibility fix for FreeBSD, where a connection attempt may have failed with "Operation now in progress."
Fixed a bug where the global firewall pref files were not read if the user's home directory was the root directory.
Using MFMT command to set remote timestamps, if available, in preference to SITE UTIME or MDTM.
New configure flag, --enable-ssp, will turn on stack smashing protection (if available by compiler) by adding to CFLAGS.
Host, user, and pass fields have been increased in size.
Bug fixed where the firewall preference files were ignored for the root user.
Ncftpls now has a "-Z" option that will disable doing the actual directory listing. This is useful for use with the "-Y" option to send a raw FTP command without doing a listing.
Fixed an assertion failure in NcFTP's "help" command that appeared in a 2008-08-09 release.
PASV mode will now be retried, in case of a transient failure. (Thanks, Steven Frank).
The directory listing parser now can recognize dates in the format of YYYY-mm-dd HH:MM[:SS].
Fixed feature detection for WS_FTP servers.
Workaround bug in REST on WS_FTP 6.0 (Thanks, Dan Nelson).
Fixed a problem where doing a get on a remote file that did not exist, but a file by the same name existed locally, would err out but truncate the local file anyway.
Fix for ncftpget on Windows to write in binary to stdout when needed (Thanks, Michael Langguth).
HOME, END, and DEL keys may work on more terminal types (Thanks, Anton Khramov).
You can now type just ".." or the absolute path of a directory in the ncftp command shell to "cd" to the directory (Thanks, Anton Khramov).
Added command aliases "mv" and "ll" which alias to "rename" and "dir" respectively (Thanks, Anton Khramov).
ncftpbatch now has an -L option to specify the name of a log file to write progress meter output to. Combined with "tail -f", this can be used to monitor a batch file transfer in progress.
On Mac OS X, the configure script will now try to build universal binaries by default. If you don't want that, pass --disable-universal to configure.
The default connect timeout has been reduced from 30 to 10 seconds to reflect the increase in the typical user's network speed.
Now a little more tolerant of FTP servers who send their internal network IP addresses in their PASV response. When this is detected, it will be ignored and the data connection will connect to the same IP that is used for the control connection.
Resuming of uploads can now work for servers that do not support REST + STOR. The APPE command will be used instead.
Fixed problem with Resume All [R!] in ncftp, which was just appending to subsequent files rather than resuming them. (Thanks, Terry Brown)
ncftpput for version 3.2.0 did not work correctly when both -f and -c/-C were used. This has now been fixed. In addition, the host command line argument is optional when the config file specifies the host.
Various small fixes.
Fixed problem where ncftpbatch may requeue downloads when the local file was the same as the remote file.
ncftpls has been enhanced so that using the new -m option will have it try a machine-readable list command. These commands need to be implemented on the remote server for it to work.
ncftpls can now try to attempt to filter the files with a wildcard with the new -i option. For this option to work, this functionality must be properly implemented in the FTP server software.
ncftpls can also now behave similar to /usr/bin/find, with the new -g option. When invoked with -gg, it appends a slash to directory pathnames so you can distinguish files from directories.
Fixed a problem with ASCII translation where a CR+LF may not have been converted to the local text EOLN format if the CR+LF was split over an internal block boundary. The ASCII translation code has been rewritten so it is also more tolerant of malformatted text, such as CR+CR+LF end-of-lines.
You can now edit remote files, thanks to <jess AT thrysoee.dk>. The new "edit" command downloads to a temporary file, runs your $EDITOR, and uploads any changes back to the remote server. Naturally this requires both read and write permission on the remote server.
Handling "~" in paths a little better. Try to expand it to the remote home directory for remote commands, and the local home directory for local commands.
Progress meters now output to stderr. This eliminates a problem when using ncftpput with "-c" mode, which would result in a corrupted file.
More careful about trimming the $HOME/.ncftp/log file so it does not get too small.
You can now resume uploads when uploading into a temporary file (e.g. ncftpput's -S and -T options for using a temporary suffix or prefix).
The utility programs' "-X" option has been enhanced so it will automatically translate some /usr/bin/ftp commands into the raw RFC 959 FTP protcool commands that are required for this feature.
Fixes for Cygwin.
Some fixes for largefile support on Windows.
You can now resume transfers in ASCII mode, rather than just binary.
Fixed a problem with recursive uploads for Windows.
Opening a site with a bookmark no longer assumes that the server's software has the same configuration (i.e. if it did not support SIZE before, it now checks for SIZE each time rather than assuming each time the site is opened that the server does not support SIZE).
You can now use an empty password if your user account does not have a password.
Fixed a problem in the "ls" implementation for international month names.
Fixed a bug where Type of Service socket options were being set with IPPROTO_TCP instead of IPPROTO_IP.
Renamed internal library function getline() to gl_getline() to avoid namespace collision with glibc.
Renamed internal library function Duration() to FTPDuration() to avoid namespace collision on Mac OS X.
Recognize additional error response codes to SITE UTIME, to prevent using it if the server doesn't support it.
If the server does not support setting timestamps in MDTM, quit trying it if it fails the first time.
Do not allow control characters such as NUL, CR, LF in FTP URLs, to avoid command injection as described by Albert Puigsech Galicia <ripe AT 7a69ezine.org>.
Fixed a problem where a timed-out transfer may have been detected but still locked up the process (Thanks, IWAI, Masaharu).
Ncftpget and ncftpput now accept a "-C" parameter which is similar to the "-c" option (ftp "cat" mode), where stdin (stdout) is not used and the filename is specified as a parameter instead. This is useful if you don't want to specify a password on the command line.
Ncftpput now allows the "-m" option in conjunction with the "-c" or "-C" options.
Small compatibility fixes for Mac OS X, Solaris 10, Linux.
A fix for some DNS resolution problems on Linux.
Ncftpget, ncftpput, and ncftpls now try to erase the arguments to the -u/-p/-j (user, password, account) options so they do not show in a "ps" command (Thanks, Konstantin Gavrilenko).
Recognize broken IBM mainframe FTP servers and work around them.
Working around a problem with ProFTPD 1.2.9 and later which would cause recursive downloads to fail.
Fixed a bug where ncftpput in recursive mode could lock up if you used a trailing slash on the directory to upload.
For the malicious server problem that was addressed in 3.1.5, enhanced the fix for better compatibility with mainframe FTP servers.
Ncftpget, ncftpput, and ncftpls, and ncftp's open command now accept an additional advanced option (-o) which lets you do things like disable NcFTP's use of SITE UTIME, FEAT, HELP SITE, etc.
Several HP-UX 10 compatibility bugs fixed (Thanks, Laurent FAILLIE).
A couple of looping problems with ncftpbatch fixed (Thanks, George Goffe).
Bug fixed with the upload socket buffer not being set (Thanks, ybobble).
The utility programs now accept "-" for the config file name used with "-f" to denote standard input (Thanks, Jeremy Monin).
Bug fixed with ncftpput when using both -c and -A (Thanks, Ken Woodmansee).
Support for boldface text in Windows version (Thanks, Adam Gates).
Fixed a memory leak introduced in 3.1.6.
Fixed problem where it was assumed that daylight saving's time occurred at the same time each year for all timezones.
Bug fixed with running a shell escape.
Ncftpget now uses passive-with-fall-back-to-port mode like ncftpput and ncftpls.
Problem fixed with "ls -a" where occasionally a row with ".." and another file would be omitted.
Ncftpbatch now uses the UTC timezone for spool files.
The configure script can now detect when the config.cache file has been improperly recycled from a machine with a different OS.
The Windows version now uses the USERPROFILE environment variable, if it was set, as the location of the user's home directory.
Recognize broken DG/UX servers and work around them.
Fixed an important bug that was causing socket leaks on Windows.
Added support for GCC 3.4 precompiled headers.
Aborting transfers is now more robust.
Re-fixed a problem where high ASCII characters at the NcFTP prompt could cause it to exit.
Bug fixed where timeouts may not have worked.
To the improved ASCII handling from 3.1.5, added another case where we workaround files sent by a buggy FTP server implementation whose files have CR+CR+LF end-of-lines.
More fixes related to the above, as well as few other fixes from Martin Storsj.
Bug fixed where an upload filename could have been limited to 127 characters.
Firewall exception hosts are no longer case sensitive.
Bug fixed in ncftpput's "-c" option so it works with the "-f" option (Thanks, ITO Tsuyoshi).
Ncftpbatch will now try to temporarily skip a failing host in the current run (Thanks, Eric Engstrom).
Bug fixed where a several minute delay would be incurred if you tried to transfer a file that did not exist.
For the malicious server problem that was addressed in 3.1.5, enhanced the fix for better compatibility with Serv-U and WS_FTP servers.
Problem fixed where a malicious or trojaned FTP server could send back pathnames with directories different from the directory requested. For example, if you did: cd /pub ; get *.zip the malicious server could send back a pathname like ../../../some/other/dir/filename.here rather than pathnames such as filename.zip and trick NcFTP into writing into a different local pathname if your user privileges had permission to write it.
Bug fixed where cd messages from remote server were not being displayed.
It's now possible to capture the output of the progress reports from ncftpget/put by redirecting descriptor(s) to a file. Previous releases required a "tty" to enable progress reports.
Compatibility fixes for AIX, Linux, Mac OS X, IRIX 6.2 and SunOS 4.
Be less pedantic about incorrectly formatted multi-line responses.
Bug fixed where NcFTP could hang at exit.
For ASCII transfers, try harder to handle non-native end-of-line formats.
Bug fixed in Win32 port which could cause NcFTP to mis-parse output from Roxen FTP servers.
We now try to have ncftpbatch leave a core file for debugging if it exits with SIGSEGV, SIGBUS, or SIGILL.
Fixed(?) an elusive bug which had been present for the past few versions which could cause ncftpbatch to infinite loop or sleep too long.
New configure flag, --disable-ccdv.
Compatibility fixes for C++ and Linux.
Fixed a socket leak and a crash on Win32.
A few minor fixes for firewall logins (Thanks, Jochen Schnapka).
By default, proxy connections for PORT are no longer allowed. This is mostly an extra security precaution, to eliminate cases where someone could hijack a data connection by connecting to us after we issue PORT but before the server could connect to us.
ncftpls now accepts a "-R" flag which is equivalent to "-x -lR".
Bugs fixed in configure script for our "--with-*" arguments (Thanks, David Kaelbling).
A few new firewalls (permutations of type 1). (Thanks, Felix Buenemann)
Bug fixed on Solaris where a socket could be left in non-blocking mode.
Ls parsing is now more forgiving of weird /bin/ls implementations (AIX).
Be more lenient on broken server implementations which include extra blank lines in the control connection conversation.
Fix for ncftpget which was exiting with code 3 if URL mode was used and the file already existed.
Fix for resume prompts which in some cases was printing dates in the format like "Sun Feb 20:02:15 CST 2002" instead of "Sun Feb 24 20:02:15 CST 2002". (I.e. the day of the month was missing.)
Compatibility fixes for IRIX 5.x and AIX 4.2.x.
Compatibility fixes for Cygwin (Thanks, Charles Wilson <cwilson AT ece.gatech.edu>).
Some extra debugging information is now logged to the trace logs.
When running the Windows bookmark editor in standalone mode, the program may not have launched NcFTP correctly with the selected bookmark (Thanks, Jochen.Erwied AT mbs-software.de).
A fix for the local hostname detection code which could result with only the first character of the domain appended, rather than the entire domain (Thanks, Bernhard Sadlowski <sadlowsk AT mathematik.uni-bielefeld.de>).
Another bug fixed in local hostname detection where looking up the host by IP address was not done correctly.
Fixed a few portability problems on HP-UX 10.20 which were introduced in 3.1.0.
Fixed bug with readdir_r usage on Solaris, which could cause crashes when doing "put -R", among other things.
On Linux, use gethostbyname2_r() to specify that we only want IPv4 addresses returned.
Reversing behavior from 3.1.0 where we did a shutdown() on the half of the socket that wasn't used. We suspect this was causing some firewalls and routers to panic and assume the whole connection was to be closed.
Bug fixed where an unresolvable hostname caused a pointless connection attempt which would fail.
Shell utilities now print an error message when incompatible flags are used in conjunction with "-b" or "-c".
A few fixes for ncftpbatch.
Numerous fixes for SOCKS5.
Fixed bugs with our use of gethostbyname_r/addr_r on Linux.
Fixed bugs with our implementation of stat64() on Windows, which caused problems when querying information about local directories.
Source distributions now include install-sh again.
Bug fixed with Win32 version of ncftpbookmarks, which could look in $HOME/.ncftp rather than $HOME/ncftp. Many Win32 users weren't affected, since the HOME environment variable is not always set.
ACCT is now always sent if the server requests it and you're going through the firewall.
Bug fixed where puts could delay a few seconds unnecessarily after the file had been sent.
Bug fixed where passwords were saved if you chose to autosave bookmarks. NcFTP also makes an effort to avoid saving passwords in the history and trace files if you foolishly use passwords on your command lines.
Bug fixed on Win32 port where putting a file that did not exist could cause a crash.
The "-r" (recursive) flag is back for "bgget" and "bgput". We now spool the directory by creating individual spool files for each file in the directory, which should increase reliability and usability of this feature.
The binary packages should be a bit leaner, since ncftpls wasn't getting stripped.
Library optimizations should result in less unneeded code included with programs that use the libraries. The binaries should be smaller as a result.
Recursive uploading has been substantially reworked. "put -R" should now work better, especially on the Win32 port. Arbitrary pathname sizes have also been removed, so directory trees should only be limited by available memory and stack space.
Huge number of lint fixes. NcFTP now compiles cleanly on several platforms even with extra warning options enabled.
Large number of internal changes to the configure scripts.
Using my cool hack, "ccdv", in Makefiles. Originally this became a necessity since some platforms could have $CFLAGS 4 or 5 lines long! Besides streamlining the build process so that lint warnings can easily be spotted, the builds are pleasing to the eye with ANSI color if your $TERM supports it.
Fixed bug where Win32 $HOME bug fixed for 3.0.4 wasn't fixed for ncftpbookmarks.
Fixes for large file support for the Win32 port.
Bugs fixed in Win32 port of ncftpbatch.
A few bug fixes for getline.
The default ASCII extensions list no longer include ".sh", since Sun apparently distributes the JDK as a shell script with binary data appended.
Workaround new "feature" of glibc which defines printf as a macro if gcc is version 2.97 or later.
Bug fixed from 3.0.3 that caused ^Z (suspend) to quit ncftp when it was brought back to the foreground.
Bug fixed where large file support (LFS) was disabled on most systems.
New "ncftpspooler" utility program (actually a hard link to "ncftpbatch") serves as a "Global batch FTP job processor daemon."
The utility program ncftpget now has a "-c" flag like ncftpput has.
Utility programs can now accept more than one -W/-X/-Y option, if multiple commands are needed.
When changing directories, programs will try to change to the full path first, then fall back to using "change one subdir at a time" mode.
Bug fixed where using the "delete local file after upload" option and the "upload into temp file, then rename" option, the local file would get deleted anyway if the rename failed.
Compatibility fixes for HP-UX.
Internal limits increased to handle longer command lines and more parameters.
Improvement to the reliability of the Win32 version by using the _snprintf and _vsnprintf functions rather than sprintf and vsprintf.
A few more tweaks for MS-DOS pathname compatibility.
A tweak for better compatibility with Microsoft IIS.
A few tweaks for Cygwin support.
Fixes for --sysconfdir configure option courtesy of Christian Wiesgerber.
SOCKS5 is back in, but we don't support it.
Improved Y2K bug detection in remote servers.
Changed naming format for bgget/put spool files. The contents are now documented; see the ncftpspooler man page.
Bug fixed in Win32 port which used $HOME rather than $HOME/ncftp as the UNIX equivalent of the $HOME/.ncftp directory. Since most folks won't have a $HOME environment variable on Win32, you'll probably not notice the change.
Preference options can now be "file" completed on the command line with the set/show/prefs commands.
NcFTP directory changes are now always one subdirectory at a time, for better portability on remote servers with non-UNIX filesystems.
NcFTP tries to maintain the current directory itself, like /bin/ksh and Bash do, which means that symlinks remain part of the current working directory when possible. For example, on ftp.freesoftware.com if your current directory is /pub and you "cd linux", NcFTP will use /pub/linux as the current directory, even though the canonical directory on the server is /.0/linux. This is also useful for things like Linux's Kernel.org mirrors, so if you bgget a kernel.tar.gz file the "virtual" current directory is used rather than a specific-machine's layout.
Mac OS X support added. No Mac or Aqua specific features yet.
NcFTP now has an option to automatically use ASCII mode for transfers if the file's extension corresponds to a textual data file type.
Using homegrown gl_getpass in place of getpass() and getpassphrase for all platforms, not just Windows..
Incorporating a few getline suggestions from Ken Cox.
Configuration tweaks for Cygwin port.
Removed some arbitrary buffer size limits.
Lint fixes.
Curses configuration fixes for HP-UX.
Shell utilities now have a "-bb" flag which is just like "-b" only the job is submitted only (and no ncftpbatch is spawned).
More problems fixed with interaction with Windows FTP servers.
Better compatibility with non-standard extensions to the FTP which allow for TCP Large Windows (specifically, SITE BUFSIZE).
Win32 port had a bug which leaked file handles.
Miscellaneous Win32 port fixes.
Changed default anonymous password to NcFTP@, since no one really cares any more about using a real e-mail address.
Bug fixed where some types of servers' features might not be queried.
Fixed some inconsistencies with the -a and -A flags among NcFTP and the shell utilities. "-a" is now ASCII mode across the board, and "-A" is the flag to use for append mode (which not many people use anyway).
Bug fixed where the flag for delete after upload (-DD) was being ignored.
You can now do "set yes-i-know-about-NcFTPd yes" from a NcFTP prompt to get it to quit plugging NcFTPd every 7th time you run the program.
Like the system-wide /etc/ncftp.firewall and /etc/ncftp.firewall.fixed files for global preferences, there is now the equivalent for regular preference files (/etc/ncftp.prefs_v3 and /etc/ncftp.prefs_v3.fixed).
The ncftpbatch spool files now support some additional options for sending additional FTP commands. The options are called "pre-command", "post-command", and "per-file-command". This is useful if you need to send some odd SITE command before transfer, for example.
Similarly, ncftpget and ncftpput have new -W/-X/-Y switches so you can send pre/each/post commands. (i.e. "-W SITE MY_WEIRD_IBM_MAINFRAME_OPTION").
Bug fixed where NcFTP was not taking advantage of re-using a currently open host when exiting and launching ncftpbatch. If you bgget a file from within NcFTP, then exit while the host is still connected, ncftpbatch is supposed to inherit that existing context without having to reopen the host.
When using a URL with ncftpget, you can do "-a" to have it use ASCII. Prior versions forced to you use the little-known URL syntax to specify ASCII mode (btw, example of that is "ftp://ftp.foo.com/pub/README.TXT;a")
Bug fixed where our handling of the TCP_NODELAY option was not getting enabled.
A few tweaks for C++ compatibility.
Fixed bug introduced in 3.0.1 which stripped off the leading slash for the directory parameter of ncftpget and ncftpput.
Problem where NcFTP would not timeout a hung data transfer fixed.
Improved support for large files (> 2 GB).
Increased some internal buffers to handle longer response lines.
Pagers are now enabled on the Win32 port.
Format bug in quote and site commands fixed.
Possibly fix problem with Solaris 2.5 complaining about "pollable event."
Win32 port bug fixed where NcFTP was not stripping off the quotation marks on your HOME or NCFTPDIR environment variable.
Fixed bug where your firewall information could be ignored.
Utilities now accept a "-j" flag for an account (ACCT) if you need to use that in addition to a USER and PASSword.
License has been changed.
ncftpput has been changed to cd to the destination directory on the remote host before storing files. In addition, it does it one subdirectory node at a time, like URL mode does for ncftpget.
Bug fixed where the "ncftpbookmarks --dimensions-terse" hack could be closed and generate a SIGPIPE which caused it to exit uncleanly, and possibly leave the terminal state hosed.
Added a snippet from Felix von Leitner <leitner AT fefe.de> to get the terminal width fairly painlessly, so the aforementioned hack should not be necessary in many cases.
Dtterm and vt220 added to the short list of vt100ish term types.
Win32 version bug fixed where ncftpbookmarks was not honoring the HOME enviornment variable, instead writing data to the install directory under Program Files.
Win32 version now uses Wise installer instead of InstallShield.
New "redial-delay" preference setting, so you can easily set it and forget it rather than doing "-r 30" on each open.
NcFTP's "file exists" prompt now includes options to apply the same action to all files in the batch. This should alleviate concerns by users who didn't want to babysit NcFTP through a large batch of files which exist locally.
Work around Y2K bug in old wu-ftpd servers.
Work around broken Novell 5.00 ftp servers.
Fixed a getline problem where entering a character with the high-bit set would cause NcFTP to exit.
NcFTP now no longer complains when you redirect a file into it as stdin.
NcFTP's getline now recognizes alternate escape sequences for the arrow keys.
NcFTP now allows a user to cancel an mget at the "file exists" prompt.
Continue redialing if the server returns a bad user reply, since some servers do their "too many users logged in check" at that time.
Try harder to display remote connect banner.
Fixed bug in remote mkdir which would fail if the subdirectory was in the root directory.
A few small memory leaks plugged.
Try to remove extraneous slashes from paths when possible, since Win32 doesn't like them.
Win32 version tries harder to sleep the actual number of seconds requested even if means busy waiting, since Sleep() may return immediately if the system has nothing else to do.
Win32 version now checks for a HOME or NCFTPDIR environment variable.
Win32 version of ncftpbookmarks no longer locks up when trying to send a bookmark back to NcFTP.
The firewall password no longer echoes to the screen on the Win32 version.
NcFTP tries harder to get the actual screen width so that getline can use the whole line for input. ncftpbookmarks has to be built and installed where NcFTP can find it for this ugly hack to work.
NcFTP now sends your anonymous password to batch jobs, rather than having NcFTPBatch compute a default value.
Shell utilities now default to PASV-then-PORT mode like NcFTP does, rather than use PORT only.
NcFTPGet and Put are now better about reporting a server error, rather than simply printing the worthless "could not start data transfer" message.
Getline now handles emacs ^W sequence.