- - - - - - - - - - high priority - - - - - - - - - -

Got some shouldn't-happen errors:
    throttle sending count was negative!
    write - Bad address
This are probably not new bugs, but rather existing bugs now being
noticed and repaired due to the centralization of hc initialization.

Weird thing - when thttpd got its nightly SIGUSR1 at midnight to exit
and let the wrapper restart, it did exit and a new thttpd started,
but the new thttpd sort of half-exited immediately.  The script
thought it had exited, and therefore tried to start up another
new thttpd.  But the process still existed and still has port 80
bound, so the other new thttpds couldn't run.  And the stalled thttpd
was not serving requests.  If this happens again, use gdb to find
out what the stalled process is doing.

The error page generated for non-local referers should include the
original URL as an active link.

Does the initgroups() call work?  Or does it need to be moved to
before the chroot()?

Make open in mmc.c use O_NONBLOCK flag, to prevent DOS attack via
a named pipe?

Sites that clog with lots of TCP connections in CLOSING (not CLOSE_WAIT).
Related to throttling, and timers?

On A SIGUSR1, thttpd sometimes gives 'fdwatch - Bad file descriptor'
instead of the usual exit message.  Looks like we have to do any closes
in the main loop, and only set flags in the signal routines.  And once
we got a CPU-bound loop.

- - - - - - - - - - later - - - - - - - - - -

Got some non-local referer denials that look local:
    Jan 26 10:52:35 localhost thttpd[67766]: 165.248.247.131 non-local referer "/software/thttpd/bill.gif" "http://www.acme.com/software/thttpd/"
These apparently come from a very old browser:
    165.248.247.131 - - [26/Jan/2000:10:52:35 -0800] "GET /209.133.38.22/software/thttpd/bill.gif HTTP/1.0" 403 - "http://www.acme.com/software/thttpd/" "Mozilla/1.1N (Macintosh; I; 68K)"
This is due to the browser not sending a Host: header.  The fix is to take
the IP address returned by getsockname() and match it against a default IP
address computed at startup time.  If it matches, substitute in a default
hostname.

Document how symlinks interact with .htpasswd - authorization is checked
on the result of the symlink, and not the origin.

SIGHUP log re-opening doesn't work if you started as root.

Log on disconnect, not on transfer-start.

Add TCP_NODELAY, but after CGIs get spawned.

Add stat cache?  1 minute expiry?

Ifdef the un-close-on-exec CGI thing for Linux only.

Add hash table to mmap cache.

Try using shutdown(2) in lingering close.

Check whether phf can still syslog from within chroot (probably not).

Can we remove the "if ( errno == EINTR )" check on the select()?

Add keep-alives, via a new state in thttpd.c.

- - - - - - - - - - someday - - - - - - - - - -

The special world-permissions checking is probably bogus.  For one
thing, it doesn't handle restrictive permissions on parent directories
properly.  It should probably just go away.

redirect should interpret a path with a trailing / as /index.html

ssi should change $cwd to the source document's location.

Allow .throttle files in individual directories.

Log-digesting scripts.

Config web page.
    Common errors:
	Not realizing that -c overrides CGI_PATTERN instead of augmenting it.
	Using a directory name for the -c pattern.

Throttling web article.

- - - - - - - - - - 3.x - - - - - - - - - -

CServlets re-write.

- - - - - - - - - - general - - - - - - - - - -

Release process:
  - update version number in version.h README INSTALL and
    contrib/redhat-rpm/thttpd.spec
  - do an rcstreeinfo, and check in all files
  - make tar
  - mv it to ~/acmeweb/software/thttpd
  - update version number in ~/acmeweb/software/thttpd/thttpd.html
