Programming:
- Grep for 'XXX' comments and fix

- Link order is incorrect for some systems using Kerberos 4 and AFS. Result
is multiple inclusion of DES symbols.

- Integrate contrib/mdoc2man.pl so platforms which only have the troff 
  'an' macros can have readable manpages.

- Write a test program that calls stat() to search for EGD/PRNGd socket
  rather than use the (non-portable) "test -S". 

- Replacement for setproctitle() - HP-UX support only currently

- Handle changing passwords for the non-PAM expired password case

- Improve PAM support (a pam_lastlog module will cause sshd to exit)
  and maybe support alternate forms of authenications like OPIE via
  pam?

- Rework PAM ChallengeResponseAuthentication
 - Use kbdint request packet with 0 prompts for informational messages
 - Use different PAM service name for kbdint vs regular auth (suggest from
   Solar Designer)
 - Ability to select which ChallengeResponseAuthentications may be used
   and order to try them in e.g. "ChallengeResponseAuthentication skey, pam"

- Complete Tru64 SIA support

- Finish integrating kernel-level auditing code for IRIX and SOLARIS
  (Gilbert.r.loomis@saic.com)

- sftp-server:  Rework to step down to 32bit ints if the platform
  lacks 'long long' == 64bit (Notable SCO w/ SCO compiler)

- Linux hangs for 20 seconds when you do "sleep 20&exit".  All current
  solutions break scp or leaves processes hanging around after the ssh
  connection has ended.  It seems to be linked to two things.  One
  select() under Linux is not as nice as others, and two the children
  of the shell are not killed on exiting the shell. Redhat have an excellent
  description of this in their RPM package.

- Build an automated test suite

- Verify that It's safe to enable NGROUPS_MAX under NeXTStep for
  groupaccess features. (mouring@eviladmin.org)

- 64-bit builds on HP-UX 11.X (stevesk@pobox.com):
  - utmp/wtmp get corrupted (something in loginrec?)
  - no 64-bit vhangup(); ptmx systems shouldn't need this
  - can't build with PAM (no 64-bit libpam yet)

Documentation:
- More and better

- Install FAQ?

- General FAQ on S/Key, TIS, RSA, RSA2, DSA, etc and suggestions on when it
  would be best to use them.  

- Create a Documentation/ directory?

Clean up configure/makefiles:
- Clean up configure.in - There are a few double #defined variables
  left to do.  HAVE_LOGIN is one of them.  Consider NOT looking for
  information in wtmpx or utmpx or any of that stuff if it's not detected
  from the start

- Fails to compile when cross compile.
  (vinschen@redhat.com)

- Replace the whole u_intXX_t evilness in acconfig.h with something better???

- Consider splitting the u_intXX_t test for sys/bitype.h  into seperate test
  to allow people to (right/wrongfully) link against Bind directly.

Packaging:
- Solaris: Update packaging scripts and build new sysv startup scripts
  Ideally the package metadata should be generated by autoconf.
  (gilbert.r.loomis@saic.com)

- HP-UX: Provide DEPOT package scripts.
  (gilbert.r.loomis@saic.com)

$Id: TODO,v 1.39 2001/03/21 00:12:55 djm Exp $
