tftpd: implement the "rollover" option
[tftp-hpa.git] / CHANGES
blob9909cd3ed4c68907100b33f7480a0918ede3882e
1 Changes in 5.0:
2         Try to on platforms with getaddrinfo() without AI_ADDRCONFIG or
3         AI_CANONNAME.
6 Changes in 0.49:
7         Add IPv6 support.  Patch by Karsten Keil.
9         Support systems with editline instead of readline.
11         Support long options in the server.
14 Changes in 0.48:
15         Unbreak -l -s in the server, which was broken in 0.47.
18 Changes in 0.47:
19         Add -L option to the server to run standalone without
20         detaching from the shell.
22         Parallel make fix.
25 Changes in 0.46:
26         Minor portability improvements.
29 Changes in 0.45:
30         Add -l (literal) option to the client, to override the special
31         treatment of the colon (:) character as a hostname separator.
34 Changes in 0.44:
35         Allow the client to specify a range of local port numbers,
36         just like the server can.
38         Fix sending SIGHUP to update the regular expression table.
41 Changes in 0.43:
42         Fix double-free error on ^c in client.
44         Try to deal with clients that send TFTP requests to broadcasts
45         (apparently some recent Sun boxes do this instead of using the
46         address told by DHCP.  Bad Sun!  Bad Sun!)
48         Portability fixes.
51 Changes in 0.42:
52         Try to disable path MTU discovery for TFTP connections (it's
53         useless anyway.)
55         Add a hack to allow the admin to specify a range of local port
56         numbers to use.
58         Fix local IP number handling on systems which present
59         IP_RECVDSTADDR in recvmsg().
62 Changes in 0.41:
63         Fix bug by which patterns of the form \U\1 weren't converted
64         correctly.
67 Changes in 0.40.1:
68         Solaris build fix.
71 Changes in 0.40:
72         Fix bug which would cause "r" remapping rules to be
73         incorrectly rejected.
76 Changes in 0.39:
77         Support Perl-style \U...\E and \L...\E, as well as allow
78         matching rules to be inverted (execute if rule *doesn't*
79         match.)
81         Fix a timeout bug.
83         Add an RPM spec file.
86 Changes in 0.38:
87         Portability fixes.
90 Changes in 0.37:
91         Fix a pathology where a client sending ACKs for the wrong
92         packet can prevent proper retransmission.
95 Changes in 0.36:
96         Portability fixes.
99 Changes in 0.35:
100         Add an option to control the maximum value of blksize
101         negotiated.
103         Removed workaround for obsolete Cygwin problem.
105         Don't use getopt() -- the -c option doesn't work correctly
106         since it depends on the ordering of arguments and options.  It
107         is now possible to do:
109         tftp -m binary hostname -c get filename
111         This was previous possible by doing:
113         tftp -m binary -c get hostname:filename
115         ... but it seemed that was counterintuitive to people.
117         Somewhat improved configure scripts.
120 Changes in 0.34:
121         Additional Solaris gcc compiler bug workarounds; these
122         actually make the code somewhat cleaner.
123         
125 Changes in 0.33:
126         Even better error messages.
128         Work around a suspect Solaris gcc bug.
130         Configuration fix: readline needs termcap.
132         Support running the tftp client from the command line.  For
133         example:
135                 tftp -m binary -c get hostname:file
138 Changes in 0.32:
139         Better error messages; including the capability to send a
140         custom error message to the client when hitting an "a" rule in
141         a remapping table.
144 Changes in 0.31:
145         Put in a check to make sure xinetd (in particular) doesn't
146         pass us an IPv6 socket.
148         Fix some problems related to timeout negotiation.
150         Allow the user to set the default timeout speed.
153 Changes in 0.30:
154         (Hopefully) better timeout algorithm.
156         Add a "utimeout" option; like "timeout" but in microseconds.
158         Change the log level of client-side errors to LOG_WARNING.
160         autoconf portability improvements.
162         Minor bugfixes.
165 Changes in 0.29:
166         Posixly correctness.
168         Now compiles and runs on Win32 systems using Cygwin
169         (http://www.cygwin.com/).
170         (<http://www.cygwin.com/>).
172         Fixed a bug which could cause a standalone server to exit with
173         a "recvfrom: Interrupted system call" log message if signals
174         arrive at a particularly inopportune moment.
176         Fix a macro substitution bug (thanks to Richard Nyberg.)
179 Changes in 0.28:
180         Fix stupid one-liner bug which broke standalone mode (-l).
183 Changes in 0.27:
184         Make the Digital Unix 4.0F platform work again.  Thanks to
185         Alan Sundell for helping out with this platform!
187         Make the AIX 4.3 platform work again.  Thanks to Josef Siemes
188         for helping out with this platform!
190         Allow replacement patterns to include the IP address of the
191         requesting host (\i).
193         Allow relying on Unix permissions rather than o+r magic if the
194         -p option is specified.  As part of this, set all groups if
195         initgroups() is specified on the platform.
197         Clean up race conditions inherited from the BSD source base.
200 Changes in 0.26:
201         Fix the configuration process so tftpd doesn't end up
202         depending on readline, which apparently could happen on some
203         platforms before.
205         Make parallel builds (make -j) work correctly.
207         Improve parsing of the "connect" command in the tftp client.
209         Add a -V option to both tftp and tftpd to print the version
210         number on stdout and immediately exit.
212         Add a -v option to tftp to start out in verbose mode.
213         
214         Rewrite the man pages using standard "man" troff macros.
216         Enable the (limited) use of readline on systems which don't
217         have readline/history.h.
219         Support compiling under MacOS X with fink (see
220         <http://fink.sourceforge.net/>).  Thanks for Justin Hallett
221         and Eric Eslinger for their help in getting this working!
224 Changes in 0.25:
225         Fixed Sorcerer's Apprentice bug in both the client and the
226         server.  These bugs were inherited from the original BSD code.
229 Changes in 0.24:
230         Fix bugs in both client and server dealing with block number
231         wraparound, usually manifesting themselves as failure to
232         handle files over 32 MB in size.
234         Officially make the client a part of the tftp-hpa project.
237 Changes in 0.23:
238         Correct memory overwrite bug in the tftp client when compiled
239         with readline.
242 Changes in 0.22:
243         Even more portability improvements: FreeBSD and
244         Tru64/Digital Unix.
246         Fix tsize option on systems on which off_t is "long long".
248         Support large files on systems which need _LARGE_FILE_BITS or
249         similar.
251         Some source cleanups; change to autoconf 2.52.
253         Add support for readline command-line editing in tftp.
256 Changes in 0.21:
257         Support running in standalone mode, without inetd.
259         Even more portability improvements.  Now known to compile and
260         run on Linux, Solaris 5, 5.1, 6, 7 and 8, and AIX.  Reports of
261         success or failure on other modern systems always appreciated.
263         Clean and modernize some really ugly old code.
265         Fix a potential illegal memory access when running in "totally
266         insecure mode" - no -s, no directories listed.
269 Changes in 0.20:
270         Portability improvements.  Now known to compile and run on
271         Solaris 8.
274 Changes in 0.19:
275         Fork before performing tcpwrappers check.
277         Don't rely on nonstandard bsd_signal() function, instead
278         require that the platform has sigaction().  This is 2001,
279         after all.  This may resolve some potential portability
280         problems.
282         Log a message if memory allocation fails, instead of dying
283         silently.
285         Clean up the main dispatch loop.
287         Use <sysexits.h> for exit codes, if it exists.
289         Add support for debugging remapping rulefiles; if logging with
290         -vvv tftpd will log all rules actions.
292         Correct the error code issued by an "abort" rule.
295 Changes in 0.18:
296         Support (almost) arbitrary filename remappings via regular
297         expression-based rulesets.
299         Added -v option for more verbose logging.
302 Changes in 0.17:
304         Add support for tcpwrapper checking (/etc/hosts.allow;
305         /etc/hosts.deny) in tftpd.
307         Compile correctly on glibc 2.1.2.
309         Add -u option to specify the user id to run as (default
310         "nobody".)
312         Operate in "daemon mode" as long as we keep getting requests.
313         This should speed up handling large amounts of requests at
314         once, as can happen when a client starts up, and avoids inetd
315         misconfiguration problems.
316         
318 Changes in 0.16:
320         Correct massive lossage from 0.15: apparently 0.15 was based
321         on an out-of-date CVS repository, somehow.
323         Fix for ACKs in TFTP PUT; patch by Roger Venning.
326 Changes in 0.15:
328         If the operating system allows, try to obtain the local
329         address used for the request packet, and reply using the same
330         local IP address.  Some embedded TFTP clients are (probably
331         incorrectly) picky about this.
334 Changes in 0.14:
336         Hacks to signal handling to avoid "zombie servers."
339 Changes in 0.13:
341         Added the non-standard option "blksize2".  The "blksize"
342         option is limited in its usability, since TFTP is designed to
343         be implemented in a ROM, and ROM code might find it painful to
344         deal with packets that don't meet certain alignment
345         restrictions.
347         The "blksize2" option tells the server that the block size
348         must be a power of 2 to be usable to the client.  The server
349         SHALL respond with a block size that is a power of two, up to
350         a maximum of 32768, or reject the option.  Furthermore, the
351         server SHALL grant a block size that is no smaller than 512
352         bytes unless the client explicitly requested a smaller block
353         size.  If the client request both options, the server MAY
354         accept one or the other, but not both.  At some point I will
355         probably write up an IETF draft for this option.
358 General information on the tftp-hpa series:
360 The core software was taken from OpenBSD (CVS source as of
361 1999-09-21).  I believe this was the most secure source base available
362 at the time I obtained this code, and it included support for the -s
363 and -c options.
365 The un-BSD-ized Makefiles and a lot of the configure macros were taken
366 from netkit-tftp-0.10 by David Holland; I also followed this example
367 and modernized the code style throughout.
369 Patches by Markus Gutschke and Gero Kuhlmann were the basis for the
370 option negotiation as well as the "blksize" and "tsize" option
371 support, although I made a fair amount of mostly stylistic changes to
372 their code.
374 Adding the -r option (disable a specific option), the "timeout"
375 option, converting to using autoconf for setup, and any additions
376 listed in the Changes list above, has all been my own code, as are any
377 bugs introduced in the merge.