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