Subject: CVS commit: src/libexec/ftpd
To: None <source-changes@NetBSD.org>
From: Luke Mewburn <lukem@netbsd.org>
List: source-changes
Date: 08/09/2004 12:56:48
Module Name: src
Committed By: lukem
Date: Mon Aug 9 12:56:48 UTC 2004
Modified Files:
src/libexec/ftpd: cmds.c conf.c extern.h ftpcmd.y ftpd.c logutmp.c
logwtmp.c popen.c version.h
Log Message:
Fixes from (or inspired by) OpenBSD:
* Fix yacc parser error recovery so that setjmp(3)/longjmp(3) is unnecessary.
* Fix SIGURG handler to set an urgflag that's later tested, rather than
abusing setjmp(3)/longjmp(3).
* Use "volatile sig_atomic_t" as the type of variables modified by sig handlers.
* Use sigaction(3) instead of signal(3) to set the signal handlers.
* Only set the main SIGALRM handler once. If we need to change it,
cache the old handler and restore appropriately...
* Remove a bunch of signal races by improving the signal handlers.
* Fix memory leak with 'ESPV ALL'.
My stuff:
* Clean up the debug message in reply(); use vsnprintf(3) instead of vsyslog(3).
* Rework parsing of OOB commands to _not_ use the yacc parser, since the
latter isn't reentrant and the hacks to work around that are ugly.
We now examine urgflag at appropriate locations and call handleoobcmd()
if it's set. Since the only OOB commands we currently implement are
ABOR and STAT, this isn't an issue. (I also can't find the reference in
RFC2228 where MIC, CONF & ENC are OOB-only commands. Go figure.)
I could clean up the is_oob stuff some more, but the remaining stuff
in ftpcmd.y is harmless and it's unnecessary churn right this moment.
To generate a diff of this commit:
cvs rdiff -r1.22 -r1.23 src/libexec/ftpd/cmds.c
cvs rdiff -r1.51 -r1.52 src/libexec/ftpd/conf.c
cvs rdiff -r1.49 -r1.50 src/libexec/ftpd/extern.h
cvs rdiff -r1.79 -r1.80 src/libexec/ftpd/ftpcmd.y
cvs rdiff -r1.157 -r1.158 src/libexec/ftpd/ftpd.c
cvs rdiff -r1.7 -r1.8 src/libexec/ftpd/logutmp.c
cvs rdiff -r1.21 -r1.22 src/libexec/ftpd/logwtmp.c
cvs rdiff -r1.29 -r1.30 src/libexec/ftpd/popen.c
cvs rdiff -r1.56 -r1.57 src/libexec/ftpd/version.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.