Another patch for ill-behaving firewalls.
[oftpd.git] / ChangeLog
1 2007-03-26  Werner Koch  <wk@g10code.com>
2
3         * src/telnet_session.c (do_telnet_session_print): Add argument S0
4         to act as a prefix.
5         (telnet_session_println_with_prefix): New.
6         (telnet_session_print_with_prefix): New.
7         * src/ftp_session.c: Use the new function.  Allow for CRLF
8         terminated readme files.  Again for some ill behaving firewalls.
9
10 2007-03-23  Werner Koch  <wk@g10code.com>
11
12         * configure.ac: Set version to 0.3.7-wk4.
13
14         * src/telnet_session.c (telnet_session_print): Factor code out
15         to ..
16         (do_telnet_session_print): .. new.  Add additional argument S2.
17         (telnet_session_println): Change to use the new fucntion.  This is
18         required so that we use just one write for the common case that
19         the CRLF fits into the same buffer.  Some firewalls have problems
20         with receiving an FTP command without the CRLF in one [acket and
21         the CRLF in the next one.
22
23 2007-02-08  Werner Koch  <wk@g10code.com>
24
25         * src/oftpd.c (main): s/PACKAGE/PACKAGE_NAME/
26         s/VERSION/PACKAGE_VERSION/.
27
28         * configure.in: Renamed to configure.ac and converted to modern
29         style.
30         * acconfig.h: Removed.
31
32 2007-02-08  Marcus Brinkmann  <marcus@g10code.de>
33
34         * src/telnet_session.c: Include <pthread.h>.
35         (process_data): Enable cancellation.
36         * src/ftp_session.c (netscape_hack): Likewise.
37         (send_readme, do_list, do_nlst): Use cancellation cleanup handler.
38         (set_pasv): Release socket_fd before invoking reply() in case of
39         failure.
40         (open_connection): Likewise.
41         (do_pasv): Close outstanding passive port before invoking reply().
42         (do_lpsv): Likewise.
43         (do_epsv): Likewise.
44         * src/file_list.c: Always include <pthread.h>.
45         (fdprintf): Bump buffer size to PATH_MAX + 3.  Enable cancellation
46         while writing.
47         * src/ftp_listener.c (connection_handler): Do not use asynchronous
48         cancellation.  Disable cancellation until further notice.
49
50 2007-02-06  Marcus Brinkmann  <marcus@g10code.de>
51
52         * configure.in (AC_CHECK_HEADERS): Check for sys/sendfile.h.
53         * src/file_list.c (file_nlst): Remove unused variable HIDDEN.
54         * src/ftp_session.c [HAVE_SYS_SENDFILE_H]: Include
55         <sys/sendfile.h>.
56         (do_user, do_pass): Remove unused variable addr_port.
57         (do_eprt): Remove unused variable HOST_PORT.
58         (do_retr): Remove unused variable host_port.  Adjust format output
59         parameter for timespec members, cast these to the format type.
60         [!HAVE_FREEBSD_SENDFILE]: Do not define otherwise unused variable
61         AMT_SENT.
62         * src/ftp_listener.c (addr2string) [!INET6]: Do not define
63         variables ERROR and ADDR to suppress compiler warning.
64         (addr_to_string): Replace with prototype for addr2string.
65         * src/oftpd.c: Remove extra argument EXE_NAME in syslog
66         invocation.
67         (my_syslog_fd): Remove unused global variable.
68         * src/daemon_assert.c: Include <stdlib.h>.
69
70 2006-03-09  Werner Koch  <wk@g10code.de>
71
72         * configure.in: Define ERRBUF_SIZE.
73
74         * src/oftpd.c: Add option --version.
75
76 2005-04-30  Werner Koch  <wk@g10code.de>
77
78         Bumped version to 0.3.7-wk1.
79
80         * src/file_list.c (file_nlst, file_list): Fixed the paranoia test for
81         overlong directories.
82
83 2005-04-30  Werner Koch  <wk@g10code.de>
84
85         Ported patches from Shane Kerr's 0.3.7 release:
86         
87         * configure.in: Disabled support for sendfile() on FreeBSD.  It
88         appears to me that there's a bug in the sendfile() user-level
89         library.  I would welcome advice from any FreeBSD developer
90         wishing to set me straight.  
91
92         * src/ftp_session.c (do_size): Changed SIZE command to return
93         error for directories.
94         * src/file_list.c: #ifdef wrap GLOB_ABORTED for really old gcc
95         compilers (Slackware or older installations).
96         (skip_ls_options): Add code to skip command line options that are
97         intended for "ls".
98
99 2004-01-12  Werner Koch  <wk@gnupg.org>
100
101         * src/ftp_listener.c (connection_acceptor): Don't increase the
102         error counter for EMFILE conditions but sleep a few seconds.
103
104 2003-08-13  Werner Koch  <wk@gnupg.org>
105
106         * src/oftpd.c (reopen_syslog_hack): Removed.
107         (init_syslog_hack): Removed.  That was a whole stupid thing by me
108         as I didn'd realized that we are running chroot and so the
109         /dev/log socket could not be reopened by libc.
110         (main): Print a warning if there is no /dev directory below the
111         chroot.
112
113         * src/file_list.c (file_nlst,file_list): Don't list "/dev".
114         * src/ftp_session.c (change_dir, do_retr)
115         (do_size, do_mdtm): Likewise.
116
117 2003-08-12  Werner Koch  <wk@gnupg.org>
118
119         * src/oftpd.c (reopen_syslog_hack): Simply comparing the fd is not
120         enough due to race conditions.  So always check whether the syslog
121         fd is still bound to a unix domain socket.
122
123 2003-08-09  Werner Koch  <wk@gnupg.org>
124
125         * src/oftpd.c (main): Give LOG_FACILITY file scope.
126         (init_syslog_hack): New
127         (reopen_syslog_hack): New.
128         * src/ftp_session.c (set_pasv, open_connection): Insert
129         reopen_syslog_hack calls.
130         * src/ftp_listener.c (connection_acceptor, ftp_listener_init): Ditto.
131         * src/ftp_session.c (open_connection): Ditto.
132         
133         * src/file_list.c: As an extra safeguard check the provided
134         dir_len.
135         (file_nlst): Ditto.
136         (fdprintf): Extra paranoid safeguard for buggy vsnprintfs.
137
138 2003-05-22  Werner Koch  <wk@gnupg.org>
139
140         * src/ftp_command.c (parse_offset): Fixed offset checking.
141
142         * configure.in (AC_CHECK_SIZEOF): Add tests for off_t,
143         unsigned long and unsigned long long. 
144
145 2003-05-06  Werner Koch  <wk@gnupg.org>
146
147         * src/ftp_session.c (do_lprt): Do not set the port after emitting
148         an error.  Fixes an assertion failure in ip_equal.
149
150 2003-05-05  Werner Koch  <wk@gnupg.org>
151
152 - New option -r, --pasv-range to limit the range for passive ports to
153   specific firewall rules.
154
155 2001-05-28, Shane Kerr <shane@time-travellers.org>
156 - Version 0.3.6 released.
157 - Beat FreeBSD into submission.  Now compiles (and runs!) on FreeBSD
158   out of the box.
159
160 2001-05-11, Shane Kerr <shane@time-travellers.org>
161 - Changed REST to only work for IMAGE (i.e. binary) mode.
162 - Added the SIZE command.
163 - Added the MDTM (modification time) command.
164
165 2001-04-20, Shane Kerr <shane@time-travellers.org>
166 - Moved SIGPIPE ignore to run even in --nodetach mode.  Needed to avoid
167   unwanted signals on TCP disconnects.
168
169 2001-04-19, Shane Kerr <shane@time-travellers.org>
170 - Added more logging: all client messages are logged with address and
171   port, and all server responses are also logged.  This occurs at DEBUG
172   level, as it is probably not normally of interest.
173
174 2001-04-18, Shane Kerr <shane@time-travellers.org>
175 - Version 0.3.5 released.
176 - Changed resume code to reset offset to 0 after each file transfer.
177 - Set accept() socket to NONBLOCK to insure the listener doesn't get
178   stuck waiting for a connection.  This is documented in the NOTES
179   section for the accept() call in Linux.
180 - Added sendfile() support on Linux systems.
181
182 2001-04-14, Shane Kerr <shane@time-travellers.org>
183 - Fixed a bug caused by parsing EPRT commands.  The server doesn't
184   actually allow these commands, but it bravely attempts to parse them
185   anyway.  A special shout out to Anders Nordby for finding this.  The
186   error caused the server to terminate on an assert() fail, which is
187   good because no server corruption happened, but it's bad because the
188   server terminated without any indication.  Therefore....
189 - Changed most assert() calls to daemon_assert() calls.  These terminate
190   the application as before, but log to syslog and STDERR.
191 - Added ability to run as a non-daemon process.  This will allow the
192   server to be started from init, for instance.
193 - Added support for SIGTERM and SIGINT.  If one of these is received,
194   then the server closes the port 21 socket - meaning that it will
195   accept no further connections.  When all existing connections have
196   closed, then the server exits.  A new server may be started before
197   this occurs, to handle new connections.  This allows very short
198   downtimes:
199       # killall oftpd; sleep 1; /etc/init.d/oftpd start
200   This will result in a 1 second period of time where no new connections
201   are accepted, with no existing connections closed.  It's probably best
202   to wait for this second, to allow the signal time to arrive.  :)
203
204 2001-04-08, Shane Kerr <shane@time-travellers.org>
205 - Changed check for '/' in path - was improperly allowing escaped '/'
206   characters through the check!
207 - Set TCP_NODELAY flag on socket - much reduced latency on control
208   channel for high-speed connections.
209 - New and improved init script from Eric Jensen.
210
211 2001-04-07, Anders Nordby <anders@fix.no>
212 - FreeBSD port.
213
214 2001-04-03, Shane Kerr <shane@time-travellers.org>
215 - Version 0.3.4 released.
216 - Changed FTP listener code to attempt to continue processing when
217   formerly fatal errors occur.
218 - Added man page.
219 - Added Red Hat init script donated by Eric Jensen to release.
220
221 2001-03-28, Shane Kerr <shane@time-travellers.org>
222 - Version 0.3.3 released.
223 - Use IP address and port of the control connection port for default
224   Data Transfer Port, as defined by RFC 959.  Note that the default
225   server process DTP is never used in oftpd, but that's not a problem as
226   I read the RFC.
227 - Use config.h
228
229 2001-03-27, Matthew Danish <mdanish@andrew.cmu.edu>
230 - configure.in and af_portability.h fixes to allow compilation on
231   systems with both RFC 2553 and XNET formats
232
233 2001-03-27, Shane Kerr <shane@time-travellers.org>
234 - Fixed bug where wrong server address was used on initalization of
235   ftp_server class.  Passive probably didn't work in the 0.3.x series
236   for IPv4!
237
238 2001-03-26, Shane Kerr <shane@time-travellers.org>
239 - Version 0.3.2 released.
240 - Minor additions for better error reporting on error creating threads
241   in listener, as well as checking success on setgid() and setuid().  I
242   can't believe I wasn't!!!
243 - Set syslog() to use FTP_DAEMON
244
245 2001-03-23, Shane Kerr <shane@time-travellers.org>
246 - Fixed configure bug on Debian systems.  Special thanks to Matthew
247   Danish for helping me on this one.
248
249 2001-03-20, Matthew Danish <mdanish@andrew.cmu.edu>
250 - Clean up parsing of FTP address in ftp_listener.c
251 - Added options to specify interface and maximum number of client
252   connections at startup.
253 - Added --long-style command-line options.
254
255 2001-03-21, Shane Kerr <shane@time-travellers.org>
256 - The "Spring Fever" edition, version 0.3.1 released.
257
258   Added workaround for the evil glob() denial-of-service attack.  I
259   chose the simple method of preventing file listing with both path
260   separator and wildcards.  Either is okay, but not both.  I don't
261   expect this to cause problems with legitimate use, but I could be
262   wrong.  It was much simpler than my other thought.  :)
263
264   Changed code so that ECONNABORTED and ECONNRESET errors don't increase
265   the error count.  This is to prevent a malicious client from taking a
266   server down by sending a large number of connection requests that it
267   then aborts.
268
269   Integrated code from Matthew Danish <mdanish@andrew.cmu.edu> that
270   allows the user to specify the port to use from the command line.
271   Thanks!
272
273   Warnings from 0.3.0 still apply.  Use with caution.  Spring is in the
274   air, after all.
275
276 2001-03-20, Shane Kerr <shane@time-travellers.org>
277 - Version 0.3.0 released.  This is almost guaranteed not to work, as
278   I've not tested it with clients that support the new features.  But I
279   decided that after a year, I wasn't living up to the "release early,
280   release often" motto of open source.
281
282   In addition to working in the changes since the last release, I've
283   done:
284
285   o removed free list from ftp_listener; simple is better
286   o use a random port rather than incrememting sequence; useful for
287     preventing classes of data hijacking attacks
288
289   There is a potential DOS attack against all versions, see the BUGS
290   file.  This will be fixed ASAP (hopefully tomorrow).
291
292 2001-02-22, Matthew Danish <mdanish@andrew.cmu.edu>
293 - Fix for missing <sys/types.h> check in configure.in
294
295 2000-12-13, Mauro Tortonesi <mauro@ferrara.linux.it>
296 - Added IPv6 support (EPRT & EPSV - RFC2428)
297 - Added LPRT and LPSV support (RFC1639)
298
299 2000-08-25, Shane Kerr <shane@time-travellers.org>
300 - Fixed telnet module to properly handle telnet escape sequences (since
301   no clients actually use this, it wasn't really a problem)
302
303 2000-06-01, Shane Kerr <shane@time-travellers.org>
304 - Beau Kuiper, author of muddleftpd, sent me a fix for the Netscape
305   timing bug.  Thanks!!!
306
307 2000-04-03, Shane Kerr <shane@time-travellers.org>
308 - Version 0.2.0 released
309
310 2000-03-30, Shane Kerr <shane@time-travellers.org>
311 - Changed README send to only send on directory change if you actually
312   change to a different directory.  That is, "CWD ." does not send a
313   README file.  The reason for this is that many clients perform a 
314   "CWD /" as soon as it connects, which cause the README to be sent
315   twice - yuck!
316 - Added missing check for closed file descriptor in write_fully().
317 - Converted use of FILE pointers to file descriptors.  This wasn't done
318   in the most efficient possible method (i.e. with buffers), but it does
319   remove the maximum FILE limitation from the server.
320
321 2000-03-29, Shane Kerr <shane@time-travellers.org>
322 - Added -D_REENTRANT flag to compile options.
323 - Added an error data type to return details about errors that occur 
324   in module initialization.
325 - Changed telnet module to never drop characters on outbound, even if
326   we have a ton of DO and WILL commands from the other end.
327
328 2000-03-27, Shane Kerr <shane@time-travellers.org>
329 - Fixed bug in telnet code when sending "" string.
330 - Now sends README to client if file is in directory on connect
331   or directory change.
332 - Simplified watchdog a bit by adding pointer to watchdog in the
333   watched structure.
334 - Wrapped invariant() methods with #ifndef NDEBUG so they won't
335   get compiled in non-debug code (in case there's ever a 
336   non-debug version)
337
338 2000-03-22, Shane Kerr <shane@time-travellers.org>
339 - Changed NLST and LIST to silently drop a file specification that
340   starts with a '-'.  This will ignore attempts to pass an argument
341   to "ls" that some clients try - it probably won't do what they 
342   expect, but at least they'll get a list of files.
343
344 2000-03-19, Shane Kerr <shane@time-travellers.org>
345 - Set file descriptors 0, 1, and 2 to go to "/dev/null", so that
346   any error messages sent by, say, the kernel don't accidentally
347   go to a user.
348 - Changed watchdog to have a single thread to watch all connections, 
349   rather than a thread per connection.  This is considerably more
350   complex, but effectively doubles the number of connections that
351   can be supported (due to thread limits).
352
353 2000-03-16, Shane Kerr <shane@time-travellers.org>
354 - Added support for REST command.  (Note that this is *not* the REST
355   exactly as described by RFC.  The REST in the RFC only applies to
356   block or compressed mode transfer, which oftpd does not currently
357   support.  However, it appears that Unix systems interpret the 
358   parameter to the REST command as the offset into the file to resume
359   from.
360
361 2000-03-13, Shane Kerr <shane@time-travellers.org>
362 - Version 0.1.3 released
363
364 2000-03-12, Shane Kerr <shane@time-travellers.org>
365 - Fixed bug when connection limit reached
366 - Fixed bug when attempt to bind() an already bound port
367
368 2000-03-12, Shane Kerr <shane@time-travellers.org>
369 - Version 0.1.2 released
370
371 2000-03-11, Shane Kerr <shane@time-travellers.org>
372 - Move configuration values into oftpd.h
373 - Wrap source to 80 columns
374 - Fix pthread_create() error check (code had incorrectly used errno
375   rather than the return of pthread_create() to determine error)
376 - Fix threads to run in detached mode (when appropriate)
377 - Solaris port completed
378 - Support for STOR added (reply with 553 error)
379 - Added free list for per-thread information structures.
380