Re-design: don't need to fork-per-connection.

"
#Disconnecting
#Connected
"
shouldn't it say "#Connecting" in there?

softseek lists old version of dwun and says it's under the GNU GPL. (It's under
an MIT-style license).


ping doesn't return 0 for success on all systems.

managed to get two dwunprepend and tail's to still be running simultaneously

report error if close() or fclose fails
~ somewhat done

Answer "why not diald?" on dwun.sourceforge.net.

We should wait for pre_commandon to exit before running commandon.
->must first be sure everyone has added a & to scripts that we shouldn't wait
for.
[see state.c, WAIT_FOR_PRE_COMMANDON]

Make parse.h stuff dynamically allocated (linked lists), and allow to be
configured from rcfile.
 	->make rcfile parser much more powerful.
	->http://www.enjoy.ne.jp/~gm/program/parsecfg/

Register port 5540 with IANA.

Re-implement "fatal admin". We will need to say something other than
"#Connect failed" so that clients don't disconnect. (How about
"#Connecting paused" and instruct admin to send a site-specific message to
the users).

PACKAGING
---------

Put dwun{getgroup,log,prepend} in /usr/lib/dwun. (libexec?)

Get deb included in debian main.
  ->will have to register binaries without manpages as bugs and then
  uncomment dh_undocumented in debian/rules.
  ->Is /var/run/dwunlog.pid okay?

Get RPM into distros.
Send FreeBSD ports report in.

Check RPM runlevels and priorities.

RPM doesn't identify /usr/doc stuff as "%doc"umentation.

BUGS
----

May not be able to getopt twice (main.c) with SunOS? (Unconfirmed). Symptoms
would be after a RESTART, command-line arguments are messed up.

Possible race condition where we can get "#Connect failed" printed twice in
a row. (When "redials 0" is used and we receive a SIGINT and immediately
reconnect).
[can no longer reproduce]

'set -m' in dwunlog in FreeBSD sh causes 
"sh: can't access tty; job control turned off" error. Apart from that, script
works in that shell.

onconnect/ondisconnect document/remove 1024 character command limit. 
->shell probably has similar limit anyway.

IDEAS
-----

* option for only n connections per username.
* option to use authfile read-only.
* make ISDN work better (with redialing etc.)
* with fatal commandon error, we may set all to disconnected before tail sends 
stuff to %%con. (So users miss the reason for the fatal error). (Note that even
if we send message to %%all, most clients will abort when they see "#Connect
failed" and won't wait for any future messages).


* allow different ports along with multiple binds. 
e.g. "bind 127.0.0.1:8000 192.168.1.1:5540"
* dwunlog to have multiple patterns (e.g. match lines with both "pppd[", 
"chat[").
* investigate ptrdiff_t for difference between two pointers (portability)
(socket.c)
* real sessions? (multiple connections with multiple modems)

On "#Connect failed" with many clients, we will run many on_disconnect's.
->need to re-implement "fatal admin".
[It is unlikely that a large number of clients would all decide to connect at
the same time and then get "#Connect failed"].

MS_INVALIDATE for mmap for when disk-image changed. Would also need to update
authfile->len and lock access to the authfile.

Documentation:
	* dwunlog requires job control /bin/sh.
	* check that ISDN instructions work.

Reliability:
	* write regression tests.
	* reconnect if commandon has been running for n seconds without us
	receiving a signal.

Misc:
	* implement -r in dwunmakeauth.
	* clean up pipe_msg_buf by having variable arguments.
	[size_t datalen, char *data]
	* with "fatal user" new users should have to issue CONNECT twice to 
	force a redial (not practical given that the clients always close the
	connection before CONNECT'ing again).
	* pass a number instead of a string for username. We can remove the
	username length limit this way. [or just use the variable arg thing]

Security:
	* encrypt passwords when sent across the network.
	->how APOP does it. (RFC1939 for APOP, RFC1321 for MD5).
	* (get/set)rlimit max core file size to 0 [only in child.c?]
	  (you should be running dwun under a username that can't create files
	  anyway if you're concerned about core-file security).
	* dwunmakeauth could test against cracklib.
