]> git.sesse.net Git - betaftpd/blob - doc/CHANGES-0.0.8
Initial revision
[betaftpd] / doc / CHANGES-0.0.8
1 Complete list of all changes from 0.0.7 to 0.0.8, encompassing 17 prerelases:
2
3 - Support for not running as root. This implies using its own database of
4   rights and users. Give --enable-nonroot to configure to enable it. Users
5   running BetaFTPD as root are not affected by this support in any way.
6   BetaFTPD is still small with this feature, expect about 1 kB (6%) extra
7   for database routines and hooks in the main code. 
8
9   This is still very experimental. Do not expect this to be better until
10   _at least_ 0.0.9.
11 - Fixed a segfaulting bug. (Freeing a malloc'ed pointer that had been
12   incremented obviously wasn't a very good idea...)
13 - Some autoconf checks (fixes) for libc5.
14 - Now shows the sticky bit in directory listings.
15 - Cleaned up error cleanup :-)
16 - Some changes to compile better under Debian GNU/Linux. A .deb-file was
17   ready, but due to lost access of a Debian-system, this was discontinued :-(
18 - BetaFTPD will now try to install itself (wow! (not)) in the same directory
19   as the file called `ftpd', if you have that file.
20 - A little better checking for uid (at configure time).
21 - Support for non-Linux platforms! (For now, SunOS 5.5/SVR4 only. If this
22   is name confusion, sorry, but the machine belongs to the University
23   of Oslo, where I don't study, but still have a shell account...) These
24   changes should help out a _lot_ when it comes to general portability.
25   (Every single system header file BetaFTPD uses is now checked for. Didn't
26   have stdio.h? I didn't guess so either... :-) I could probably have used
27   AC_HEADER_STDC, but I decided to be on the safe side.)
28
29   Still, sadly, only Linux is really supported and working.
30 - Added README.platforms file.
31 - Gave the version its own name, like Samba does :-)
32 - If you have mmap() (it is not strictly needed, but a _lot_ of code
33   needed was only in place if you used mmap, and I decided to leave it
34   that way), BetaFTPD will no longer generate temporary files for directory
35   listings, but generate them in-place in memory.
36 - Completely restructured the internal listing functions, to make them more
37   standards-compliant and smaller. (-l and -F flags now supported, but not
38   -R.)
39 - Implemented the APPE command, on user request.
40 - Minor speedups (and I do mean minor).
41 - The Makefile now uses CFLAGS in linking as well.
42 - Make an EXIT command (must be manually enabled -- NEVER use it on a
43   production machine, ANYONE will be able to halt your server!) to stop
44   the server -- useful for profiling, which requires an exit() to generate
45   profile data. (Be aware that gmon.out will be where the server last did
46   a chdir() to, though. In a debugging server, you'll know where that is
47   anyway...)
48 - Fixed a segfaulting bug in handling select() errors. The most common case
49   for this was at loads around 30-40 megabytes/sec :-)
50 - Fullscreen mode now looks OK for those with more than 80 columns too.
51 - Fixed some -pedantic warnings.
52 - Made mwrite() a function instead of just a #define (well, it's still a
53   define, but code is now shared), to save 30-40 bytes (and perhaps a
54   tiny bit of speed as well) :-)
55 - strip-exec now has a warning. In addition, it gives -D__OPTIMIZE_SIZE__
56   to keep glibc2 (libc6) from adding some inlines. It also kills
57   -fomit-frame-pointer. So now strip-exec gives a 20 kB executable instead
58   of 21 kB (one extra kB goes to new functionality) :-)
59 - Now strips out any non-ASCII chars from the commands (not any parameters),
60   to fix the ABOR problems.
61 - Documentation changes. 
62 - MDTM and SIZE commands do no longer need read access (this is one of the
63   benefits of some modularization in the code). This is more in line with
64   other FTP servers' behaviour.
65 - Commented all the functions in cmds.c and ftpd.c, to make it easier to get
66   into the code.
67 - Implemented the DELE, MKD, RMD, ABOR, REIN, ACCT, HELP and STAT commands. Note
68   that ABOR was previously noted as `fully RFC compliant', but due to an
69   error, it was not included until now.
70 - Added makefile dependencies.
71 - `make clean' and `make distclean' now also cleans up after `strip-exec'.
72 - NOOP can now be executed without the user being logged in.
73 - Fixed an autoconf bug, where --enable-shadow could sometimes be mistaken
74   for --enable-nonroot.
75 - Fixed a stupid performance bug, which hit in on systems with slightly
76   lower MTUs than 1500 (actually some with 1500 as well) -- I was telling
77   the kernel _not_ to delay, and thus ended up sending out 12-byte packets
78   and other stupidness. BetaFTPD now uses TCP_CORK when available (read:
79   Linux 2.2.x and up, perhaps some 2.1.x kernels as well), which actually
80   makes it _better_ than wu-ftpd and most other implementations out there
81   (I believe those who use sendfile() also get this done right). BIG thanks
82   to Alan Cox for informing me of this flag, and to the rest of the
83   linux-kernel mailing list for being generally helpful.
84 - Fixed some bugs in getting the filesystem block size: Any value over 4096
85   would have segfaulted (rather unlikely on most systems). Any blocksize
86   over 4096 is now simply set to 4096. This value is customizable, by
87   changing MAX_BLOCK_SIZE in ftpd.h.
88 - accept() error handling should be more persistent now, before trying to
89   recreate the server socket.
90 - server_sock is now non-blocking, just in case.
91 - Changes (and ideas for changes) by Beau Kuiper <ekuiperba@cc.curtin.edu.au>:
92   Fixed an overflow bug (I'm unsure if this was exploitable or not), BetaFTPD
93   can now handle non-DES crypt()s and a minor optimization was made.
94 - Fixed a bug where listing would fail after uploading.
95 - A minor fix for fullscreen mode.
96 - non-DES crypt() is actually _working_ now (I hope)...
97 - Memory savings (and slight performance improvements) for non-fullscreen mode
98   (thanks to Ryan Cumming <bodnar42@bodnar42.dhs.org>).
99 - ASCII mode added, once again thanks to Beau Kuiper <ekuiperba@cc.curtin.edu.au>.
100 - SIZE is now disabled for ASCII mode, as the standards say we can't do an
101   estimate.
102 - Fixes for 64-bit platforms.
103 - A patch for authentication, saving a few bytes per connection and removing crypt()
104   DES/non-DES problems for ever, by Beau Kuiper (I think you've got his e-mail
105   address by now...).
106 - More ftpext compliant REST code, together with some duplicate code removal.
107 - BetaFTPD no longer crashes if /usr/adm doesn't exist, and xferlog support
108   is enabled. Also, it will try /var/log before /usr/adm.
109 - Added CREDITS file.
110 - The entire do_download function was rewritten, which resulted in a much
111   smaller and simpler function. In the process, some bugs were also fixed.
112 - Fixed a bug, where nonroot users couldn't use PORT...
113 - Added a debugging version of the TRAP_ERROR macro.
114 - SO_LINGER is no longer set at all. This removes a major performance problem.
115 - fd -2 is no longer attempted closed.
116 - Sockets are now only checked for timeouts every minute (at most), which
117   can reduce spent CPU time a lot (with 200 clients connected, it used to
118   need 70-80% of the total CPU time for BetaFTPD, now it is close to zero).
119 - Closes fd 0 on startup.
120 - Now doesn't hang if fd 0 is assigned to server_sock (aaaaaaaargh).
121 - Linux sendfile() support (only for mmap()-able machines -- I don't think
122   any machine has sendfile() but not mmap()). Other systems will be added
123   later.
124 - More FreeBSD fixes. sendfile() _soon_ works on FreeBSD :-)
125 - Nonroot fixes.
126 - The reading of the control connection is now done with one syscall (recv)
127   instead of three (recv, ioctl, recv).
128 - More do_openfile() fixes, for lynx.
129 - The PASV socket is now set in listening mode _before_ announcing its
130   address and port number.
131 - Moved all documentation (except README) into a separate doc/ directory.
132 - The internal lister now prints years more according to POSIX (dates older
133   than 6 months or in the future are printed with years instead of
134   timestamps -- IMHO this is unneccessary, but it's nice to do the same
135   thing as GNU ls).
136 - ascii.h is now included (you could still compile ASCII support without
137   it, it just fixes some warnings) in the distribution.
138 - The internal ls now can cache the listings (--enable-dcache to configure).
139   Please see the README file for some problems that still exist. This
140   option requires quite a bit of code (1028 bytes compiled, on my
141   system), and some RAM for the directory listings and support structure.
142   I think, however, that the increased performance is worth it.
143 - The 64-bit check is dropped in favour of a simple truncate. Sorry, you
144   can't list files >2GB correctly anymore ;-)
145 - BetaFTPD can now use poll() if you have it. This removes the old 1024-
146   socket limit, as well as reducing the code size by 496 bytes (on my
147   system).
148 - Many bugfixes and cleanups, by Dan Kegel (see CREDITS).
149 - Internal changes -- no more ugly `late freeing'.
150 - If you don't have list access and try to list, `permission denied' is
151   printed instead of the previous error message being repeated. (This is
152   actually a workaround for glob()'s weird error handling.)
153 - Uploading no longer gives weird permissions on the uploaded files.
154 - Listing a symbolic link now gives the attributes (especially size) of the
155   file itself, not the link. This is /bin/ls-incompatible, but can be useful
156   anyways, especially when it comes to anonymous FTP. (I can't think of any
157   real-life situations where it would break anything either.)
158 - You can no longer give a negative number to REST. (Thanks to Marten
159   <martbo@dds.nl> for bringing this bug to my attention.)
160 - Fixed a possible bug in the internal listing code, triggered only if listing
161   a file with a 16-character username.
162 - If a file in a directory can't be stat()'ed, the internal ls will continue
163   instead of just returning.
164 - #ifdef'ed out some recursion-specific code, since the internal ls doesn't
165   support recursion as a whole.
166 - Added renaming support. (Whee! Almost full RFC1123 compliance!)
167 - Changed all copyright strings to say `1999-2000' (well, it only got to
168   May 2000 before I remembered it...) instead of just `1999'.
169 - Changed the timeout value from a hardcoded number into a #define'd constant
170   in ftpd.h.
171 - Even more recursive-listing code-outcommenting...
172 - Much of the linked list code is now reused, which saves 60-70 bytes and
173   increases code simplicity. A very positive side effect is that the dcache now
174   uses the same, bug-fixed linked list code as connections and file transfers.
175 - Fixed a few warnings in the configure program, and some in BetaFTPD itself.
176 - The poll() version now also closes standard input on startup (previously only the
177   select() version did).
178 - The code for accepting new clients has been moved into its own function.
179 - A new option, --enable-message, makes the server show info about README files,
180   as well as printing any .message or welcome.msg files that may be available.
181   (This is a quite standard function in other ftpds.)
182 - Fixed a bug that made shadow passwords not working at all (AGAIN!). Thanks
183   to Thor Bernhardsen <oscar@comports.com> for notifying me of this bug. 
184 - The server didn't clean up connections properly on all errors -- fixed. This
185   led to all sorts of problems. Thanks to Andre Luiz dos Santos
186   <andre@netvision.com.br> for bringing this bug (and others, in fact, most of
187   those fixed in 0.0.8pre14 and 0.0.8pre15) to my attention.
188 - Fixed a compilation bug on machines without GLOB_NOMATCH defined.
189 - Fixed more ABOR bugs.
190 - Made a simple FTP server test suite (not included, since it's really not good 
191   enough to live its own life as a standalone product), used in testing.
192 - Fixed a bug where multiple successful PORTs or PASVs would leave stale, unused
193   file descriptors that would never be cleaned up. (Well, previously multiple
194   PORTs wouldn't work at all -- again, thanks to Andre for mentioning this.)
195 - Sometimes, when using poll(), the highest-numbered fd would not be checked at
196   all, leaving a client just waiting for a reply.
197 - More RFC-compliant MKD handling.
198 - Removed a non-used variable (port_allocated) from ftpd.h. Also fixed some code
199   in cmd_pass() that could overwrite the last byte in that variable.
200 - Fixed a fatal PORT bug (I have no clue at all how this could have gone unnoticed --
201   that bug must have been there since 0.0.1, but probably not exposed until now
202   due to other smaller bugs (?)).
203 - BetaFTPD writes only to the logfile if it already exists now -- this is so you
204   can use --enable-xferlog and not create an xferlog file until you really need
205   logging. Thanks to kromJx <kromJx@crosswinds.net> for the idea.
206 - BetaFTPD now listens on port 21.
207 - Uploading mode made quicker, by eliminating a syscall. Uploading should be
208   optimal with respect to syscalls now (only a poll/select, a recv and a write
209   per loop iteration). This also reduces the code size by a few bytes.
210 - More improvements to upload code. Data received in an upload now goes to a
211   static buffer (which also has been shrunk) instead of to the stack.