CHANGES: Document bug fix
[tftp-hpa.git] / CHANGES
blob6df0d97b1f6c99f49d65e9ff80aa7b847f0e21e1
1 Changes in 5.1:
2         Add -P option to write a PID file.  Patch by Ferenc Wagner.
4         Bounce the syslog socket in standalone mode, in case the
5         syslog daemon has been restarted.  Patch by Ferenc Wagner.
7         Build fixes.
9         Fix handling of block number wraparound after a successful
10         options negotiation.
12         Fix a buffer overflow in option parsing.
15 Changes in 5.0:
16         Try to on platforms with getaddrinfo() without AI_ADDRCONFIG or
17         AI_CANONNAME.
19         Implement the "rollover" option, for clients which want block
20         number to rollover to anything other than zero.
22         Correctly disable PMTU in standalone mode.  Patch by Florian
23         Lohoff.
26 Changes in 0.49:
27         Add IPv6 support.  Patch by Karsten Keil.
29         Support systems with editline instead of readline.
31         Support long options in the server.
34 Changes in 0.48:
35         Unbreak -l -s in the server, which was broken in 0.47.
38 Changes in 0.47:
39         Add -L option to the server to run standalone without
40         detaching from the shell.
42         Parallel make fix.
45 Changes in 0.46:
46         Minor portability improvements.
49 Changes in 0.45:
50         Add -l (literal) option to the client, to override the special
51         treatment of the colon (:) character as a hostname separator.
54 Changes in 0.44:
55         Allow the client to specify a range of local port numbers,
56         just like the server can.
58         Fix sending SIGHUP to update the regular expression table.
61 Changes in 0.43:
62         Fix double-free error on ^c in client.
64         Try to deal with clients that send TFTP requests to broadcasts
65         (apparently some recent Sun boxes do this instead of using the
66         address told by DHCP.  Bad Sun!  Bad Sun!)
68         Portability fixes.
71 Changes in 0.42:
72         Try to disable path MTU discovery for TFTP connections (it's
73         useless anyway.)
75         Add a hack to allow the admin to specify a range of local port
76         numbers to use.
78         Fix local IP number handling on systems which present
79         IP_RECVDSTADDR in recvmsg().
82 Changes in 0.41:
83         Fix bug by which patterns of the form \U\1 weren't converted
84         correctly.
87 Changes in 0.40.1:
88         Solaris build fix.
91 Changes in 0.40:
92         Fix bug which would cause "r" remapping rules to be
93         incorrectly rejected.
96 Changes in 0.39:
97         Support Perl-style \U...\E and \L...\E, as well as allow
98         matching rules to be inverted (execute if rule *doesn't*
99         match.)
101         Fix a timeout bug.
103         Add an RPM spec file.
106 Changes in 0.38:
107         Portability fixes.
110 Changes in 0.37:
111         Fix a pathology where a client sending ACKs for the wrong
112         packet can prevent proper retransmission.
115 Changes in 0.36:
116         Portability fixes.
119 Changes in 0.35:
120         Add an option to control the maximum value of blksize
121         negotiated.
123         Removed workaround for obsolete Cygwin problem.
125         Don't use getopt() -- the -c option doesn't work correctly
126         since it depends on the ordering of arguments and options.  It
127         is now possible to do:
129         tftp -m binary hostname -c get filename
131         This was previous possible by doing:
133         tftp -m binary -c get hostname:filename
135         ... but it seemed that was counterintuitive to people.
137         Somewhat improved configure scripts.
140 Changes in 0.34:
141         Additional Solaris gcc compiler bug workarounds; these
142         actually make the code somewhat cleaner.
143         
145 Changes in 0.33:
146         Even better error messages.
148         Work around a suspect Solaris gcc bug.
150         Configuration fix: readline needs termcap.
152         Support running the tftp client from the command line.  For
153         example:
155                 tftp -m binary -c get hostname:file
158 Changes in 0.32:
159         Better error messages; including the capability to send a
160         custom error message to the client when hitting an "a" rule in
161         a remapping table.
164 Changes in 0.31:
165         Put in a check to make sure xinetd (in particular) doesn't
166         pass us an IPv6 socket.
168         Fix some problems related to timeout negotiation.
170         Allow the user to set the default timeout speed.
173 Changes in 0.30:
174         (Hopefully) better timeout algorithm.
176         Add a "utimeout" option; like "timeout" but in microseconds.
178         Change the log level of client-side errors to LOG_WARNING.
180         autoconf portability improvements.
182         Minor bugfixes.
185 Changes in 0.29:
186         Posixly correctness.
188         Now compiles and runs on Win32 systems using Cygwin
189         (http://www.cygwin.com/).
190         (<http://www.cygwin.com/>).
192         Fixed a bug which could cause a standalone server to exit with
193         a "recvfrom: Interrupted system call" log message if signals
194         arrive at a particularly inopportune moment.
196         Fix a macro substitution bug (thanks to Richard Nyberg.)
199 Changes in 0.28:
200         Fix stupid one-liner bug which broke standalone mode (-l).
203 Changes in 0.27:
204         Make the Digital Unix 4.0F platform work again.  Thanks to
205         Alan Sundell for helping out with this platform!
207         Make the AIX 4.3 platform work again.  Thanks to Josef Siemes
208         for helping out with this platform!
210         Allow replacement patterns to include the IP address of the
211         requesting host (\i).
213         Allow relying on Unix permissions rather than o+r magic if the
214         -p option is specified.  As part of this, set all groups if
215         initgroups() is specified on the platform.
217         Clean up race conditions inherited from the BSD source base.
220 Changes in 0.26:
221         Fix the configuration process so tftpd doesn't end up
222         depending on readline, which apparently could happen on some
223         platforms before.
225         Make parallel builds (make -j) work correctly.
227         Improve parsing of the "connect" command in the tftp client.
229         Add a -V option to both tftp and tftpd to print the version
230         number on stdout and immediately exit.
232         Add a -v option to tftp to start out in verbose mode.
233         
234         Rewrite the man pages using standard "man" troff macros.
236         Enable the (limited) use of readline on systems which don't
237         have readline/history.h.
239         Support compiling under MacOS X with fink (see
240         <http://fink.sourceforge.net/>).  Thanks for Justin Hallett
241         and Eric Eslinger for their help in getting this working!
244 Changes in 0.25:
245         Fixed Sorcerer's Apprentice bug in both the client and the
246         server.  These bugs were inherited from the original BSD code.
249 Changes in 0.24:
250         Fix bugs in both client and server dealing with block number
251         wraparound, usually manifesting themselves as failure to
252         handle files over 32 MB in size.
254         Officially make the client a part of the tftp-hpa project.
257 Changes in 0.23:
258         Correct memory overwrite bug in the tftp client when compiled
259         with readline.
262 Changes in 0.22:
263         Even more portability improvements: FreeBSD and
264         Tru64/Digital Unix.
266         Fix tsize option on systems on which off_t is "long long".
268         Support large files on systems which need _LARGE_FILE_BITS or
269         similar.
271         Some source cleanups; change to autoconf 2.52.
273         Add support for readline command-line editing in tftp.
276 Changes in 0.21:
277         Support running in standalone mode, without inetd.
279         Even more portability improvements.  Now known to compile and
280         run on Linux, Solaris 5, 5.1, 6, 7 and 8, and AIX.  Reports of
281         success or failure on other modern systems always appreciated.
283         Clean and modernize some really ugly old code.
285         Fix a potential illegal memory access when running in "totally
286         insecure mode" - no -s, no directories listed.
289 Changes in 0.20:
290         Portability improvements.  Now known to compile and run on
291         Solaris 8.
294 Changes in 0.19:
295         Fork before performing tcpwrappers check.
297         Don't rely on nonstandard bsd_signal() function, instead
298         require that the platform has sigaction().  This is 2001,
299         after all.  This may resolve some potential portability
300         problems.
302         Log a message if memory allocation fails, instead of dying
303         silently.
305         Clean up the main dispatch loop.
307         Use <sysexits.h> for exit codes, if it exists.
309         Add support for debugging remapping rulefiles; if logging with
310         -vvv tftpd will log all rules actions.
312         Correct the error code issued by an "abort" rule.
315 Changes in 0.18:
316         Support (almost) arbitrary filename remappings via regular
317         expression-based rulesets.
319         Added -v option for more verbose logging.
322 Changes in 0.17:
324         Add support for tcpwrapper checking (/etc/hosts.allow;
325         /etc/hosts.deny) in tftpd.
327         Compile correctly on glibc 2.1.2.
329         Add -u option to specify the user id to run as (default
330         "nobody".)
332         Operate in "daemon mode" as long as we keep getting requests.
333         This should speed up handling large amounts of requests at
334         once, as can happen when a client starts up, and avoids inetd
335         misconfiguration problems.
336         
338 Changes in 0.16:
340         Correct massive lossage from 0.15: apparently 0.15 was based
341         on an out-of-date CVS repository, somehow.
343         Fix for ACKs in TFTP PUT; patch by Roger Venning.
346 Changes in 0.15:
348         If the operating system allows, try to obtain the local
349         address used for the request packet, and reply using the same
350         local IP address.  Some embedded TFTP clients are (probably
351         incorrectly) picky about this.
354 Changes in 0.14:
356         Hacks to signal handling to avoid "zombie servers."
359 Changes in 0.13:
361         Added the non-standard option "blksize2".  The "blksize"
362         option is limited in its usability, since TFTP is designed to
363         be implemented in a ROM, and ROM code might find it painful to
364         deal with packets that don't meet certain alignment
365         restrictions.
367         The "blksize2" option tells the server that the block size
368         must be a power of 2 to be usable to the client.  The server
369         SHALL respond with a block size that is a power of two, up to
370         a maximum of 32768, or reject the option.  Furthermore, the
371         server SHALL grant a block size that is no smaller than 512
372         bytes unless the client explicitly requested a smaller block
373         size.  If the client request both options, the server MAY
374         accept one or the other, but not both.  At some point I will
375         probably write up an IETF draft for this option.
378 General information on the tftp-hpa series:
380 The core software was taken from OpenBSD (CVS source as of
381 1999-09-21).  I believe this was the most secure source base available
382 at the time I obtained this code, and it included support for the -s
383 and -c options.
385 The un-BSD-ized Makefiles and a lot of the configure macros were taken
386 from netkit-tftp-0.10 by David Holland; I also followed this example
387 and modernized the code style throughout.
389 Patches by Markus Gutschke and Gero Kuhlmann were the basis for the
390 option negotiation as well as the "blksize" and "tsize" option
391 support, although I made a fair amount of mostly stylistic changes to
392 their code.
394 Adding the -r option (disable a specific option), the "timeout"
395 option, converting to using autoconf for setup, and any additions
396 listed in the Changes list above, has all been my own code, as are any
397 bugs introduced in the merge.