20050201
 - (dtucker) [log.c] Bug #973: force log_init() to open syslog, since on some
   platforms syslog will revert to its default values.  This may result in
   messages from external libraries (eg libwrap) being sent to a different
   facility.
 - (dtucker) [sshd_config.5] Bug #701: remove warning about
   keyboard-interactive since this is no longer the case.

20050124
 - (dtucker) OpenBSD CVS Sync
   - otto@cvs.openbsd.org 2005/01/21 08:32:02
     [auth-passwd.c sshd.c]
     Warn in advance for password and account expiry; initialize loginmsg
     buffer earlier and clear it after privsep fork. ok and help dtucker@
     markus@
   - dtucker@cvs.openbsd.org 2005/01/22 08:17:59
     [auth.c]
     Log source of connections denied by AllowUsers, DenyUsers, AllowGroups and
     DenyGroups.  bz #909, ok djm@
   - djm@cvs.openbsd.org 2005/01/23 10:18:12
     [cipher.c]
     config option "Ciphers" should be case-sensitive; ok dtucker@
   - dtucker@cvs.openbsd.org 2005/01/24 10:22:06
     [scp.c sftp.c]
     Have scp and sftp wait for the spawned ssh to exit before they exit
     themselves.  This prevents ssh from being unable to restore terminal
     modes (not normally a problem on OpenBSD but common with -Portable
     on POSIX platforms).  From peak at argo.troja.mff.cuni.cz (bz#950);
     ok djm@ markus@
   - dtucker@cvs.openbsd.org 2005/01/24 10:29:06
     [moduli]
     Import new moduli; requested by deraadt@ a week ago
   - dtucker@cvs.openbsd.org 2005/01/24 11:47:13
     [auth-passwd.c]
     #if -> #ifdef so builds without HAVE_LOGIN_CAP work too; ok djm@ otto@

20050120
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/12/23 17:35:48
     [session.c]
     check for NULL; from mpech
   - markus@cvs.openbsd.org 2004/12/23 17:38:07
     [ssh-keygen.c]
     leak; from mpech
   - djm@cvs.openbsd.org 2004/12/23 23:11:00
     [servconf.c servconf.h sshd.c sshd_config sshd_config.5]
     bz #898: support AddressFamily in sshd_config. from
     peak@argo.troja.mff.cuni.cz; ok deraadt@
   - markus@cvs.openbsd.org 2005/01/05 08:51:32
     [sshconnect.c]
     remove dead code, log connect() failures with level error, ok djm@
   - jmc@cvs.openbsd.org 2005/01/08 00:41:19
     [sshd_config.5]
     `login'(n) -> `log in'(v);
   - dtucker@cvs.openbsd.org 2005/01/17 03:25:46
     [moduli.c]
     Correct spelling: SCHNOOR->SCHNORR; ok djm@
   - dtucker@cvs.openbsd.org 2005/01/17 22:48:39
     [sshd.c]
     Make debugging output continue after reexec; ok djm@
   - dtucker@cvs.openbsd.org 2005/01/19 13:11:47
     [auth-bsdauth.c auth2-chall.c]
     Have keyboard-interactive code call the drivers even for responses for
     invalid logins.  This allows the drivers themselves to decide how to
     handle them and prevent leaking information where possible.  Existing
     behaviour for bsdauth is maintained by checking authctxt->valid in the
     bsdauth driver.  Note that any third-party kbdint drivers will now need
     to be able to handle responses for invalid logins.  ok markus@
   - djm@cvs.openbsd.org 2004/12/22 02:13:19
     [cipher-ctr.c cipher.c]
     remove fallback AES support for old OpenSSL, as OpenBSD has had it for
     many years now; ok deraadt@
     (Id sync only: Portable will continue to support older OpenSSLs)
 - (dtucker) [auth-pam.c] Bug #971: Prevent leaking information about user
   existence via keyboard-interactive/pam, in conjunction with previous
   auth2-chall.c change; with Colin Watson and djm.
 - (dtucker) [loginrec.h] Bug #952: Increase size of username field to 128
   bytes to prevent errors from login_init_entry() when the username is
   exactly 64 bytes(!) long.  From brhamon at cisco.com, ok djm@
 - (dtucker) [auth-chall.c auth.h auth2-chall.c] Bug #936: Remove pam from
   the list of available kbdint devices if UsePAM=no.  ok djm@

20050118
 - (dtucker) [INSTALL Makefile.in configure.ac survey.sh.in] Implement
   "make survey" and "make send-survey".  This will provide data on the
   configure parameters, platform and platform features to the development
   team, which will allow (among other things) better targetting of testing.
   It's entirely voluntary and is off be default. ok djm@
 - (dtucker) [survey.sh.in] Remove any blank lines from the output of
   ccver-v and ccver-V.

20041220
 - (dtucker) [ssh-rand-helper.c] Fall back to command-based seeding if reading
   from prngd is enabled at compile time but fails at run time, eg because
   prngd is not running.  Note that if you have prngd running when OpenSSH is
   built, OpenSSL will consider itself internally seeded and rand-helper won't
   be built at all unless explicitly enabled via --with-rand-helper.  ok djm@
 - (dtucker) [regress/rekey.sh] Touch datafile before filling with dd, since
   on some wacky platforms (eg old AIXes), dd will refuse to create an output
   file if it doesn't exist.

20041213
 - (dtucker) [contrib/findssh.sh] Clean up on interrupt; from
   amarendra.godbole at ge com.

20041211
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/12/06 16:00:43
     [bufaux.c]
     use 0x00 not \0 since buf[] is a bignum
   - fgsch@cvs.openbsd.org 2004/12/10 03:10:42
     [sftp.c]
     - fix globbed ls for paths the same lenght as the globbed path when
       we have a unique matching.
     - fix globbed ls in case of a directory when we have a unique matching.
     - as a side effect, if the path does not exist error (used to silently
       ignore).
     - don't do extra do_lstat() if we only have one matching file.
     djm@ ok
   - dtucker@cvs.openbsd.org 2004/12/11 01:48:56
     [auth-rsa.c auth2-pubkey.c authfile.c misc.c misc.h]
     Fix debug call in error path of authorized_keys processing and fix related
     warnings; ok djm@

20041208
 - (tim) [configure.ac] Comment some non obvious platforms in the
 target-specific case statement. Suggested and OK by dtucker@

20041207
 - (dtucker) [regress/scp.sh] Use portable-friendly $DIFFOPTs in new test.

20041206
 - (dtucker) [TODO WARNING.RNG] Update to reflect current reality.  ok djm@
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/11/25 22:22:14
     [sftp-client.c sftp.c]
     leak; from mpech
   - jmc@cvs.openbsd.org 2004/11/29 00:05:17
     [sftp.1]
     missing full stop;
   - djm@cvs.openbsd.org 2004/11/29 07:41:24
     [sftp-client.h sftp.c]
     Some small fixes from moritz@jodeit.org. ok deraadt@
   - jaredy@cvs.openbsd.org 2004/12/05 23:55:07
     [sftp.1]
     - explain that patterns can be used as arguments in get/put/ls/etc
       commands (prodded by Michael Knudsen)
     - describe ls flags as a list
     - other minor improvements
     ok jmc, djm
   - dtucker@cvs.openbsd.org 2004/12/06 11:41:03
     [auth-rsa.c auth2-pubkey.c authfile.c misc.c misc.h ssh.h sshd.8]
     Discard over-length authorized_keys entries rather than complaining when
     they don't decode.  bz #884, with & ok djm@
 - (dtucker) OpenBSD CVS Sync (regress/)
   - djm@cvs.openbsd.org 2004/06/26 06:16:07
     [reexec.sh]
     don't change the name of the copied sshd for the reexec fallback test,
     makes life simpler for portable
   - dtucker@cvs.openbsd.org 2004/07/08 12:59:35
     [scp.sh]
     Regress test for bz #863 (scp double-error), requires $SUDO.  ok markus@
   - david@cvs.openbsd.org 2004/07/09 19:45:43
     [Makefile]
     add a missing CLEANFILES used in the re-exec test
   - djm@cvs.openbsd.org 2004/10/08 02:01:50
     [reexec.sh]
     shrink and tidy; ok dtucker@
   - djm@cvs.openbsd.org 2004/10/29 23:59:22
     [Makefile added brokenkeys.sh]
     regression test for handling of corrupt keys in authorized_keys file
   - djm@cvs.openbsd.org 2004/11/07 00:32:41
     [multiplex.sh]
     regression tests for new multiplex commands
   - dtucker@cvs.openbsd.org 2004/11/25 09:39:27
     [test-exec.sh]
     Remove obsolete RhostsAuthentication from test config; ok markus@
   - dtucker@cvs.openbsd.org 2004/12/06 10:49:56
     [test-exec.sh]
     Check if TEST_SSH_SSHD is a full path to sshd before searching; ok markus@

20041203
 - (dtucker) OpenBSD CVS Sync
   - jmc@cvs.openbsd.org 2004/11/07 17:42:36
     [ssh.1]
     options sort, and whitespace;
   - jmc@cvs.openbsd.org 2004/11/07 17:57:30
     [ssh.c]
     usage():
     - add -O
     - sync -S w/ manpage
     - remove -h
 - (dtucker) [auth1.c auth2.c] If the user successfully authenticates but is
   subsequently denied by the PAM auth stack, send the PAM message to the
   user via packet_disconnect (Protocol 1) or userauth_banner (Protocol 2).
   ok djm@

20041107
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/11/05 12:19:56
     [sftp.c]
     command editing and history support via libedit; ok markus@
     thanks to hshoexer@ and many testers on tech@ too
   - djm@cvs.openbsd.org 2004/11/07 00:01:46
     [clientloop.c clientloop.h ssh.1 ssh.c]
     add basic control of a running multiplex master connection; including the
     ability to check its status and request it to exit; ok markus@
 - (dtucker) [INSTALL Makefile.in configure.ac] Add --with-libedit configure
   option and supporting makefile bits and documentation.

20041105
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/08/30 09:18:08
     [LICENCE]
     s/keygen/keyscan/
   - jmc@cvs.openbsd.org 2004/08/30 21:22:49
     [ssh-add.1 ssh.1]
     .Xsession -> .xsession;
     originally from a pr from f at obiit dot org, but missed by myself;
     ok markus@ matthieu@
   - djm@cvs.openbsd.org 2004/09/07 23:41:30
     [clientloop.c ssh.c]
     cleanup multiplex control socket on SIGHUP too, spotted by sturm@
     ok markus@ deraadt@
   - deraadt@cvs.openbsd.org 2004/09/15 00:46:01
     [ssh.c]
     /* fallthrough */ is something a programmer understands.  But
     /* FALLTHROUGH */ is also understood by lint, so that is better.
   - jaredy@cvs.openbsd.org 2004/09/15 03:25:41
     [sshd_config.5]
     mention PrintLastLog only prints last login time for interactive
     sessions, like PrintMotd mentions.
     From Michael Knudsen, with wording changed slightly to match the
     PrintMotd description.
     ok djm
   - mickey@cvs.openbsd.org 2004/09/15 18:42:27
     [sshd.c]
     use less doubles in daemons; markus@ ok
   - deraadt@cvs.openbsd.org 2004/09/15 18:46:04
     [scp.c]
     scratch that do { } while (0) wrapper in this case
   - djm@cvs.openbsd.org 2004/09/23 13:00:04
     [ssh.c]
     correctly honour -n in multiplex client mode; spotted by sturm@ ok markus@
   - djm@cvs.openbsd.org 2004/09/25 03:45:14
     [sshd.c]
     these printf args are no longer double; ok deraadt@ markus@
   - djm@cvs.openbsd.org 2004/10/07 10:10:24
     [scp.1 sftp.1 ssh.1 ssh_config.5]
     document KbdInteractiveDevices; ok markus@
   - djm@cvs.openbsd.org 2004/10/07 10:12:36
     [ssh-agent.c]
     don't unlink agent socket when bind() fails, spotted by rich AT
     rich-paul.net, ok markus@
   - markus@cvs.openbsd.org 2004/10/20 11:48:53
     [packet.c ssh1.h]
     disconnect for invalid (out of range) message types.
   - djm@cvs.openbsd.org 2004/10/29 21:47:15
     [channels.c channels.h clientloop.c]
     fix some window size change bugs for multiplexed connections: windows sizes
     were not being updated if they had changed after ~^Z suspends and SIGWINCH
     was not being processed unless the first connection had requested a tty;
     ok markus
   - djm@cvs.openbsd.org 2004/10/29 22:53:56
     [clientloop.c misc.h readpass.c ssh-agent.c]
     factor out common permission-asking code to separate function; ok markus@
   - djm@cvs.openbsd.org 2004/10/29 23:56:17
     [bufaux.c bufaux.h buffer.c buffer.h]
     introduce a new buffer API that returns an error rather than fatal()ing
     when presented with bad data; ok markus@
   - djm@cvs.openbsd.org 2004/10/29 23:57:05
     [key.c]
     use new buffer API to avoid fatal errors on corrupt keys in authorized_keys
     files; ok markus@

20041102
 - (dtucker) [configure.ac includes.h] Bug #947: Fix compile error on HP-UX
   10.x by testing for conflicts in shadow.h and undef'ing _INCLUDE__STDC__
   only if a conflict is detected.

20041019
 - (dtucker) [uidswap.c] Don't test dropping of gids for the root user or
   on Cygwin.  Cygwin parts from vinschen at redhat com; ok djm@

20041016
 - (djm) [auth-pam.c] snprintf->strl*, fix server message length calculations;
   ok dtucker@

20041006
 - (dtucker) [README.privsep] Bug #939: update info about HP-UX Trusted Mode
   and other PAM platforms.
 - (dtucker) [monitor_mm.c openbsd-compat/xmmap.c] Bug #940: cast constants
   to void * to appease picky compilers (eg Tru64's "cc -std1").

20040930
 - (dtucker) [configure.ac] Set AC_PACKAGE_NAME.  ok djm@

20040923
 - (dtucker) [openbsd-compat/bsd-snprintf.c] Previous change was off by one,
   which could have caused the justification to be wrong.  ok djm@

20040921
 - (dtucker) [openbsd-compat/bsd-snprintf.c] Check for max length too.
   ok djm@
 - (dtucker) [contrib/cygwin/ssh-host-config] Update to match current Cygwin
   install process.  Patch from vinschen at redhat.com.

20040912
 - (djm) [loginrec.c] Start KNF and tidy up of this long-neglected file.
   No change in resultant binary
 - (djm) [loginrec.c] __func__ifiy
 - (djm) [loginrec.c] xmalloc
 - (djm) [ssh.c sshd.c version.h] Don't divulge portable version in protocol
   banner. Suggested by deraadt@, ok mouring@, dtucker@
 - (dtucker) [configure.ac] Fix incorrect quoting and tests for cross-compile.
   Partly by & ok djm@.

20040911
 - (djm) [ssh-agent.c] unifdef some cygwin code; ok dtucker@
 - (dtucker) [auth-pam.c auth-pam.h session.c] Bug #890: Send output from
   failing PAM session modules to user then exit, similar to the way
   /etc/nologin is handled.  ok djm@
 - (dtucker) [auth-pam.c] Relocate sshpam_store_conv(), no code change.
 - (djm) [auth2-kbdint.c auth2-none.c  auth2-passwd.c auth2-pubkey.c] 
   Make cygwin code more consistent with that which surrounds it
 - (dtucker) [auth-pam.c auth.h auth2-none.c auth2.c monitor.c monitor_wrap.c]
   Bug #892: Send messages from failing PAM account modules to the client via
   SSH2_MSG_USERAUTH_BANNER messages.  Note that this will not happen with
   SSH2 kbdint authentication, which need to be dealt with separately.  ok djm@
 - (dtucker) [session.c] Bug #927: make .hushlogin silent again.  ok djm@
 - (dtucker) [configure.ac] Bug #321: Add cross-compile support to configure.
   Parts by chua at ayrnetworks.com, astrand at lysator.liu.se and me.  ok djm@
 - (dtucker) [auth-krb5.c] Bug #922: Pass KRB5CCNAME to PAM.  From deengert
   at anl.gov, ok djm@

20040830
 - (dtucker) [session.c openbsd-compat/bsd-cygwin_util.{c,h}] Bug #915: only
   copy required environment variables on Cygwin.  Patch from vinschen at
   redhat.com, ok djm@
 - (dtucker) [regress/Makefile] Clean scp-ssh-wrapper.scp too.  Patch from
   vinschen at redhat.com.
 - (dtucker) [Makefile.in contrib/ssh-copy-id] Bug #894: Improve portability
   of shell constructs.  Patch from cjwatson at debian.org.

20040829
 - (dtucker) [openbsd-compat/getrrsetbyname.c] Prevent getrrsetbyname from
   failing with NOMEMORY if no sigs are returned and malloc(0) returns NULL.
   From Martin.Kraemer at Fujitsu-Siemens.com; ok djm@
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/08/23 11:48:09
     [authfile.c]
     fix error path, spotted by Martin.Kraemer AT Fujitsu-Siemens.com; ok markus
   - djm@cvs.openbsd.org 2004/08/23 11:48:47
     [channels.c]
     typo, spotted by Martin.Kraemer AT Fujitsu-Siemens.com; ok markus
   - dtucker@cvs.openbsd.org 2004/08/23 14:26:38
     [ssh-keysign.c ssh.c]
     Use permanently_set_uid() in ssh and ssh-keysign for consistency, matches
     change in Portable; ok markus@ (CVS ID sync only)
   - dtucker@cvs.openbsd.org 2004/08/23 14:29:23
     [ssh-keysign.c]
     Remove duplicate getuid(), suggested by & ok markus@
   - markus@cvs.openbsd.org 2004/08/26 16:00:55
     [ssh.1 sshd.8]
     get rid of references to rhosts authentication; with jmc@
   - djm@cvs.openbsd.org 2004/08/28 01:01:48
     [sshd.c]
     don't erroneously close stdin for !reexec case, from Dave Johnson;
     ok markus@
 - (dtucker) [configure.ac] Include sys/stream.h in sys/ptms.h header check,
   fixes configure warning on Solaris reported by wknox at mitre.org.
 - (dtucker) [regress/multiplex.sh] Skip test on platforms that do not
   support FD passing since multiplex requires it.  Noted by tim@
 - (dtucker) [regress/dynamic-forward.sh] Allow time for connections to be torn
   down, needed on some platforms, should be harmless on others.  Patch from
   jason at devrandom.org.
 - (dtucker) [regress/scp.sh] Make this work on Cygwin too, which doesn't like
   files ending in .exe that aren't binaries; patch from vinschen at redhat.com.
 - (dtucker) [Makefile.in] Get regress/Makefile symlink right for out-of-tree
   builds too, from vinschen at redhat.com.
 - (dtucker) [regress/agent-ptrace.sh] Skip ptrace test on OSF1/DUnix/Tru64
   too; patch from cmadams at hiwaay.net.
 - (dtucker) [configure.ac] Replace non-portable echo \n with extra echo.
 - (dtucker) [openbsd-compat/port-aix.c] Bug #712: Explicitly check for
   accounts with authentication configs that sshd can't support (ie
   SYSTEM=NONE and AUTH1=something).

20040828
 - (dtucker) [openbsd-compat/mktemp.c] Remove superfluous Cygwin #ifdef; from
   vinschen at redhat.com.

20040823
 - (djm) [ssh-rand-helper.c] Typo. Found by 
   Martin.Kraemer AT Fujitsu-Siemens.com
 - (djm) [loginrec.c] Typo and bad args in error messages; Spotted by 
   Martin.Kraemer AT Fujitsu-Siemens.com

20040817
 - (dtucker) [regress/README.regress] Note compatibility issues with GNU head.
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/08/16 08:17:01
     [version.h]
     3.9
 - (djm) Crank RPM spec version numbers
 - (djm) Release 3.9p1

20040816
 - (dtucker) [acconfig.h auth-pam.c configure.ac] Set real uid to non-root
   to convince Solaris PAM to honour password complexity rules.  ok djm@

20040815
 - (dtucker) [Makefile.in ssh-keysign.c ssh.c] Use permanently_set_uid() since
   it does the right thing on all platforms.  ok djm@
 - (djm) [acconfig.h configure.ac openbsd-compat/Makefile.in 
   openbsd-compat/bsd-closefrom.c openbsd-compat/bsd-misc.c 
   openbsd-compat/bsd-misc.h openbsd-compat/openbsd-compat.h] Use smarter 
   closefrom() replacement from sudo; ok dtucker@
 - (djm) [loginrec.c] Check that seek succeeded here too; ok dtucker
 - (dtucker) [Makefile.in] Fix typo.

20040814
 - (dtucker) [auth-krb5.c gss-serv-krb5.c openbsd-compat/xmmap.c]
   Explicitly set umask for mkstemp; ok djm@
 - (dtucker) [includes.h] Undef _INCLUDE__STDC__ on HP-UX, otherwise
   prot.h and shadow.h provide conflicting declarations of getspnam.  ok djm@
 - (dtucker) [loginrec.c openbsd-compat/port-aix.c openbsd-compat/port-aix.h]
   Plug AIX login recording into login_write so logins will be recorded for
   all auth types.

20040813
 - (dtucker) [openbsd-compat/bsd-misc.c] Typo in #ifdef; from vinschen at
   redhat.com
- (dtucker) OpenBSD CVS Sync
   - avsm@cvs.openbsd.org 2004/08/11 21:43:05
     [channels.c channels.h clientloop.c misc.c misc.h serverloop.c ssh-agent.c]
     some signed/unsigned int comparison cleanups; markus@ ok
   - avsm@cvs.openbsd.org 2004/08/11 21:44:32
     [authfd.c scp.c ssh-keyscan.c]
     use atomicio instead of homegrown equivalents or read/write.
     markus@ ok
   - djm@cvs.openbsd.org 2004/08/12 09:18:24
     [sshlogin.c]
     typo in error message, spotted by moritz AT jodeit.org (Id sync only)
   - jakob@cvs.openbsd.org 2004/08/12 21:41:13
     [ssh-keygen.1 ssh.1]
     improve SSHFP documentation; ok deraadt@
   - jmc@cvs.openbsd.org 2004/08/13 00:01:43
     [ssh-keygen.1]
     kill whitespace at eol;
   - djm@cvs.openbsd.org 2004/08/13 02:51:48
     [monitor_fdpass.c]
     extra check for no message case; ok markus, deraadt, hshoexer, henning
   - dtucker@cvs.openbsd.org 2004/08/13 11:09:24
     [servconf.c]
     Fix line numbers off-by-one in error messages, from tortay at cc.in2p3.fr
     ok markus@, djm@

20040812
 - (dtucker) [sshd.c] Remove duplicate variable imported during sync.
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/07/28 08:56:22
     [sshd.c]
     call setsid() _before_ re-exec
   - markus@cvs.openbsd.org 2004/07/28 09:40:29
     [auth.c auth1.c auth2.c cipher.c cipher.h key.c session.c ssh.c
     sshconnect1.c]
     more s/illegal/invalid/
   - djm@cvs.openbsd.org 2004/08/04 10:37:52
     [dh.c]
     return group14 when no primes found - fixes hang on empty /etc/moduli;
     ok markus@
   - dtucker@cvs.openbsd.org 2004/08/11 11:09:54
     [servconf.c]
     Fix minor leak; "looks right" deraadt@
   - dtucker@cvs.openbsd.org 2004/08/11 11:50:09
     [sshd.c]
     Don't try to close startup_pipe if it's not open; ok djm@
   - djm@cvs.openbsd.org 2004/08/11 11:59:22
     [sshlogin.c]
     check that lseek went were we told it to; ok markus@
     (Id sync only, but similar changes are needed in loginrec.c)
   - djm@cvs.openbsd.org 2004/08/11 12:01:16
     [sshlogin.c]
     make store_lastlog_message() static to appease -Wall; ok markus
 - (dtucker) [sshd.c] Clear loginmsg in postauth monitor, prevents doubling
    messages generated before the postauth privsep split.

20040720
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/07/21 08:56:12
     [auth.c]
     s/Illegal user/Invalid user/; many requests; ok djm, millert, niklas,
     miod, ...
   - djm@cvs.openbsd.org 2004/07/21 10:33:31
     [auth1.c auth2.c]
     bz#899: Don't display invalid usernames in setproctitle
     from peak AT argo.troja.mff.cuni.cz; ok markus@
   - djm@cvs.openbsd.org 2004/07/21 10:36:23
     [gss-serv-krb5.c]
     fix function declaration
   - djm@cvs.openbsd.org 2004/07/21 11:51:29
     [canohost.c]
     bz#902: cache remote port so we don't fatal() in auth_log when remote
     connection goes away quickly. from peak AT argo.troja.mff.cuni.cz;
     ok markus@
 - (djm) [auth-pam.c] Portable parts of bz#899: Don't display invalid 
   usernames in setproctitle from peak AT argo.troja.mff.cuni.cz;

20040720
 - (djm) [log.c] bz #111: Escape more control characters when sending data 
   to syslog; from peak AT argo.troja.mff.cuni.cz
 - (djm) [contrib/redhat/sshd.pam] bz #903: Remove redundant entries; from 
   peak AT argo.troja.mff.cuni.cz
 - (djm) [regress/README.regress] Remove caveat regarding TCP wrappers, now
   that sshd is fixed to behave better; suggested by tim

20040719
 - (djm) [openbsd-compat/bsd-arc4random.c] Discard early keystream, like OpenBSD
   ok dtucker@
 - (djm) [auth-pam.c] Avoid use of xstrdup and friends in conversation function,
   instead return PAM_CONV_ERR, avoiding another path to fatal(); ok dtucker@
 - (tim) [configure.ac] updwtmpx() on OpenServer seems to add duplicate entry.
   Report by rac AT tenzing.org

20040717
 - (dtucker) [logintest.c scp.c sftp-server.c sftp.c ssh-add.c ssh-agent.c
   ssh-keygen.c ssh-keyscan.c ssh-keysign.c ssh-rand-helper.c ssh.c sshd.c
   openbsd-compat/bsd-misc.c] Move "char *__progname" to bsd-misc.c.  Reduces
   diff vs OpenBSD; ok mouring@, tested by tim@ too.
 - (dtucker) OpenBSD CVS Sync
   - deraadt@cvs.openbsd.org 2004/07/11 17:48:47
     [channels.c cipher.c clientloop.c clientloop.h compat.h moduli.c
     readconf.c nchan.c pathnames.h progressmeter.c readconf.h servconf.c
     session.c sftp-client.c sftp.c ssh-agent.1 ssh-keygen.c ssh.c ssh1.h
     sshd.c ttymodes.h]
     spaces
   - brad@cvs.openbsd.org 2004/07/12 23:34:25
     [ssh-keyscan.1]
     Fix incorrect macro, .I -> .Em
     From: Eric S. Raymond <esr at thyrsus dot com>
     ok jmc@
   - dtucker@cvs.openbsd.org 2004/07/17 05:31:41
     [monitor.c monitor_wrap.c session.c session.h sshd.c sshlogin.c]
     Move "Last logged in at.." message generation to the monitor, right
     before recording the new login.  Fixes missing lastlog message when
     /var/log/lastlog is not world-readable and incorrect datestamp when
     multiple sessions are used (bz #463);  much assistance & ok markus@

20040711
 - (dtucker) [auth-pam.c] Check for zero from waitpid() too, which allows
   the monitor to properly clean up the PAM thread (Debian bug #252676).

20040709
 - (tim) [contrib/cygwin/README] add minires-devel requirement. Patch from
   vinschen AT redhat.com

20040708
 - (dtucker) OpenBSD CVS Sync
   - dtucker@cvs.openbsd.org 2004/07/03 05:11:33
     [sshlogin.c] (RCSID sync only, the corresponding code is not in Portable)
     Use '\0' not 0 for string; ok djm@, deraadt@
   - dtucker@cvs.openbsd.org 2004/07/03 11:02:25
     [monitor_wrap.c]
     Put s/key functions inside #ifdef SKEY same as monitor.c,
     from des@freebsd via bz #330, ok markus@
   - dtucker@cvs.openbsd.org 2004/07/08 12:47:21
     [scp.c]
     Prevent scp from skipping the file following a double-error.
     bz #863, ok markus@

20040702
 - (dtucker) [mdoc2man.awk] Teach it to ignore .Bk -words, reported by
   strube at physik3.gwdg.de a long time ago.

20040701
 - (dtucker) [session.c] Call display_loginmsg again after do_pam_session.
   Ensures messages from PAM modules are displayed when privsep=no.
 - (dtucker) [auth-pam.c] Bug #705: Make arguments match PAM specs, fixes
   warnings on compliant platforms.  From paul.a.bolton at bt.com.  ok djm@
 - (dtucker) [auth-pam.c] Bug #559 (last piece): Pass DISALLOW_NULL_AUTHTOK
   to pam_authenticate for challenge-response auth too.  Originally from
   fcusack at fcusack.com, ok djm@
 - (tim) [buildpkg.sh.in] Add $REV to bump the package revision within
   the same version. Handle the case where someone uses --with-privsep-user=
   and the user name does not match the group name. ok dtucker@

20040630
 - (dtucker) [auth-pam.c] Check for buggy PAM modules that return a NULL
   appdata_ptr to the conversation function.  ok djm@
 - (djm) OpenBSD CVS Sync
   - jmc@cvs.openbsd.org 2004/06/26 09:03:21
     [ssh.1]
     - remove double word
     - rearrange .Bk to keep SYNOPSIS nice
     - -M before -m in options description
   - jmc@cvs.openbsd.org 2004/06/26 09:11:14
     [ssh_config.5]
     punctuation and grammar fixes. also, keep the options in order.
   - jmc@cvs.openbsd.org 2004/06/26 09:14:40
     [sshd_config.5]
     new sentence, new line;
   - avsm@cvs.openbsd.org 2004/06/26 20:07:16
     [sshd.c]
     initialise some fd variables to -1, djm@ ok
   - djm@cvs.openbsd.org 2004/06/30 08:36:59
     [session.c]
     unbreak TTY break, diagnosed by darren AT dazwin.com; ok markus@

20040627
 - (tim) update README files.
 - (dtucker) [mdoc2man.awk] Bug #883: correctly recognise .Pa and .Ev macros.
 - (dtucker) [regress/README.regress] Document new variables.
 - (dtucker) [acconfig.h configure.ac sftp-server.c] Bug #823: add sftp
   rename handling for Linux which returns EPERM for link() on (at least some)
   filesystems that do not support hard links.  sftp-server will fall back to
   stat+rename() in such cases.
 - (dtucker) [openbsd-compat/port-aix.c] Missing __func__.

20040626
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/06/25 18:43:36
     [sshd.c]
     fix broken fd handling in the re-exec fallback path, particularly when
     /dev/crypto is in use; ok deraadt@ markus@
   - djm@cvs.openbsd.org 2004/06/25 23:21:38
     [sftp.c]
     bz #875: fix bad escape char error message; reported by f_mohr AT yahoo.de

20040625
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/06/24 19:30:54
     [servconf.c servconf.h sshd.c]
     re-exec sshd on accept(); initial work, final debugging and ok markus@
   - djm@cvs.openbsd.org 2004/06/25 01:16:09
     [sshd.c]
     only perform tcp wrappers checks when the incoming connection is on a
     socket.  silences useless warnings from regress tests that use
     proxycommand="sshd -i".  prompted by david@ ok markus@
   - djm@cvs.openbsd.org 2004/06/24 19:32:00
     [regress/Makefile regress/test-exec.sh, added regress/reexec.sh]
     regress test for re-exec corner cases
   - djm@cvs.openbsd.org 2004/06/25 01:25:12
     [regress/test-exec.sh]
     clean reexec-specific junk out of text-exec.sh and simplify; idea markus@
   - dtucker@cvs.openbsd.org 2004/06/25 05:38:48
     [sftp-server.c]
     Fall back to stat+rename if filesystem doesn't doesn't support hard
     links.  bz#823, ok djm@
 - (dtucker) [configure.ac openbsd-compat/misc.c [openbsd-compat/misc.h]
   Add closefrom() for platforms that don't have it.
 - (dtucker) [sshd.c] add line missing from reexec sync.

20040623
 - (dtucker) [auth1.c] Ensure do_pam_account is called for Protocol 1
   connections with empty passwords.  Patch from davidwu at nbttech.com,
   ok djm@
 - (dtucker) OpenBSD CVS Sync
   - dtucker@cvs.openbsd.org 2004/06/22 22:42:02
     [regress/envpass.sh]
     Add quoting for test -z; ok markus@
   - dtucker@cvs.openbsd.org 2004/06/22 22:45:52
     [regress/test-exec.sh]
     Add TEST_SSH_SSHD_CONFOPTS and TEST_SSH_SSH_CONFOPTS to allow adding
     arbitary options to sshd_config and ssh_config during tests.  ok markus@
   - dtucker@cvs.openbsd.org 2004/06/22 22:55:56
     [regress/dynamic-forward.sh regress/test-exec.sh]
     Allow setting of port for regress from TEST_SSH_PORT variable; ok markus@
   - mouring@cvs.openbsd.org 2004/06/23 00:39:38
     [rijndael.c]
     -Wshadow fix up s/encrypt/do_encrypt/.  OK djm@, markus@
   - dtucker@cvs.openbsd.org 2004/06/23 14:31:01
     [ssh.c]
     Fix counting in master/slave when passing environment variables; ok djm@
 - (dtucker) [cipher.c] encrypt->do_encrypt inside SSH_OLD_EVP to match
   -Wshadow change.
 - (bal) [Makefile.in] Remove opensshd.init on 'make distclean'
 - (dtucker) [auth.c openbsd-compat/port-aix.c openbsd-compat/port-aix.h]
   Move loginrestrictions test to port-aix.c, replace with a generic hook.
 - (tim) [regress/try-ciphers.sh] "if ! some_command" is not portable.
 - (bal) [contrib/README] Removed "mdoc2man.pl" reference and added
   reference to "findssl.sh"

20040622
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/06/20 17:36:59
     [ssh.c]
     filter passed env vars at slave in connection sharing case; ok markus@
   - djm@cvs.openbsd.org 2004/06/20 18:53:39
     [sftp.c]
     make "ls -l" listings print user/group names, add "ls -n" to show uid/gid
     (like /bin/ls); idea & ok markus@
   - djm@cvs.openbsd.org 2004/06/20 19:28:12
     [sftp.1]
     mention new -n flag
   - avsm@cvs.openbsd.org 2004/06/21 17:36:31
     [auth-rsa.c auth2-gss.c auth2-pubkey.c authfile.c canohost.c channels.c
     cipher.c dns.c kex.c monitor.c monitor_fdpass.c monitor_wrap.c
     monitor_wrap.h nchan.c packet.c progressmeter.c scp.c sftp-server.c sftp.c
     ssh-gss.h ssh-keygen.c ssh.c sshconnect.c sshconnect1.c sshlogin.c
     sshpty.c]
     make ssh -Wshadow clean, no functional changes
     markus@ ok
   - djm@cvs.openbsd.org 2004/06/21 17:53:03
     [session.c]
     fix fd leak for multiple subsystem connections; with markus@
   - djm@cvs.openbsd.org 2004/06/21 22:02:58
     [log.h]
     mark fatal and cleanup exit as __dead; ok markus@
   - djm@cvs.openbsd.org 2004/06/21 22:04:50
     [sftp.c]
     introduce sorting for ls, same options as /bin/ls; ok markus@
   - djm@cvs.openbsd.org 2004/06/21 22:30:45
     [sftp.c]
     prefix ls option flags with LS_
   - djm@cvs.openbsd.org 2004/06/21 22:41:31
     [sftp.1]
     document sort options
   - djm@cvs.openbsd.org 2004/06/22 01:16:39
     [sftp.c]
     don't show .files by default in ls, add -a option to turn them back on;
     ok markus
   - markus@cvs.openbsd.org 2004/06/22 03:12:13
     [regress/envpass.sh regress/multiplex.sh]
     more portable env passing tests
   - dtucker@cvs.openbsd.org 2004/06/22 05:05:45
     [monitor.c monitor_wrap.c]
     Change login->username, will prevent -Wshadow errors in Portable;
     ok markus@
 - (dtucker) [monitor.c] Fix Portable-specific -Wshadow warnings on "socket".
 - (dtucker) [defines.h] Define __dead if not already defined.
 - (bal) [auth-passwd.c auth1.c] Clean up unused variables.

20040620
 - (tim) [configure.ac Makefile.in] Only change TEST_SHELL on broken platforms.

20040619
 - (dtucker) [auth-pam.c] Don't use PAM namespace for
    pam_password_change_required either.
 - (tim) [configure.ac buildpkg.sh.in contrib/solaris/README] move opensshd
   init script to top level directory.  Add opensshd.init.in.
   Remove contrib/solaris/buildpkg.sh, contrib/solaris/opensshd.in

20040618
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/06/17 14:52:48
     [clientloop.c clientloop.h ssh.c]
     support environment passing over shared connections; ok markus@
   - djm@cvs.openbsd.org 2004/06/17 15:10:14
     [clientloop.c misc.h readconf.c readpass.c ssh.c ssh_config.5]
     Add option for confirmation (ControlMaster=ask) via ssh-askpass before 
     opening shared connections; ok markus@
   - djm@cvs.openbsd.org 2004/06/17 14:53:27
     [regress/multiplex.sh]
     shared connection env passing regress test
 - (dtucker) [regress/README.regress] Add detail on how to run a single
   test from the top-level Makefile.
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/06/17 23:56:57
     [ssh.1 ssh.c]
     sync usage() and SYNPOSIS with connection sharing changes
   - dtucker@cvs.openbsd.org 2004/06/18 06:13:25
     [sftp.c]
     Use execvp instead of execv so sftp -S ssh works.  "makes sense" markus@
   - dtucker@cvs.openbsd.org 2004/06/18 06:15:51
     [multiplex.sh]
     Use -S for scp/sftp to force the use of the ssh being tested.
     ok djm@,markus@
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/06/18 10:40:19
     [ssh.c]
     delay signal handler setup until we have finished talking to the master.
     allow interrupting of setup (e.g. if master is stuck); ok markus@
   - markus@cvs.openbsd.org 2004/06/18 10:55:43
     [ssh.1 ssh.c]
     trim synopsis for -S, allow -S and -oControlMaster, -MM means 'ask';
     ok djm
   - djm@cvs.openbsd.org 2004/06/18 11:11:54
     [channels.c clientloop.c]
     Don't explode in clientloop when we receive a bogus channel id, but
     also don't generate them to begin with; ok markus@

20040617
 - (dtucker) [regress/scp.sh] diff -N is not portable (but needed for some
   platforms), so test if diff understands it.  Pointed out by tim@, ok djm@
 - (dtucker) OpenBSD CVS Sync regress/
   - dtucker@cvs.openbsd.org 2004/06/17 05:51:59
     [regress/multiplex.sh]
     Remove datafile between and after tests, kill sshd rather than wait;
     ok djm@
   - dtucker@cvs.openbsd.org 2004/06/17 06:00:05
     [regress/multiplex.sh]
     Use DATA and COPY for test data rather than hard-coded paths; ok djm@
   - dtucker@cvs.openbsd.org 2004/06/17 06:19:06
     [regress/multiplex.sh]
     Add small description of failing test to failure message; ok djm@
 - (dtucker) [regress/multiplex.sh] add EXEEXT for those platforms that need
   it.
 - (dtucker) [regress/multiplex.sh] Increase sleep time to 120 sec (60 is not
   enough for slow systems, especially if they don't have a kernel RNG).

20040616
 - (dtucker) [openbsd-compat/port-aix.c] Expand whitespace -> tabs. No
   code changes.
 - (dtucker) OpenBSD CVS Sync regress/
   - djm@cvs.openbsd.org 2004/04/27 09:47:30
     [regress/Makefile regress/test-exec.sh, added regress/envpass.sh]
     regress test for environment passing, SendEnv & AcceptEnv options;
     ok markus@
   - dtucker@cvs.openbsd.org 2004/06/13 13:51:02
     [regress/Makefile regress/test-exec.sh, added regress/scp-ssh-wrapper.sh
     regress/scp.sh]
     Add scp regression test; with & ok markus@
   - djm@cvs.openbsd.org 2004/06/13 15:04:08
     [regress/Makefile regress/test-exec.sh, added regress/envpass.sh]
     regress test for client multiplexing; ok markus@
   - djm@cvs.openbsd.org 2004/06/13 15:16:54
     [regress/test-exec.sh]
     remove duplicate setting of $SCP; spotted by markus@
   - dtucker@cvs.openbsd.org 2004/06/16 13:15:09
     [regress/scp.sh]
     Make scp -r tests use diff -rN not cmp (which won't do dirs.  ok markus@
   - dtucker@cvs.openbsd.org 2004/06/16 13:16:40
     [regress/multiplex.sh]
     Silence multiplex sftp and scp tests.  ok markus@
 - (dtucker) [regress/test-exec.sh]
   Move Portable-only StrictModes to top of list to make syncs easier.
 - (dtucker) [regress/README.regress]
   Add $TEST_SHELL to readme.

20040615
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/05/26 08:59:57
     [sftp.c]
     exit -> _exit in forked child on error; from andrushock AT korovino.net
   - markus@cvs.openbsd.org 2004/05/26 23:02:39
     [channels.c]
     missing freeaddrinfo; Andrey Matveev
   - dtucker@cvs.openbsd.org 2004/05/27 00:50:13
     [readconf.c]
     Kill dead code after fatal(); ok djm@
   - dtucker@cvs.openbsd.org 2004/06/01 14:20:45
     [auth2-chall.c]
     Remove redundant #include; ok markus@
   - pedro@cvs.openbsd.org 2004/06/03 12:22:20
     [sftp-client.c sftp.c]
     initialize pointers, ok markus@
   - djm@cvs.openbsd.org 2004/06/13 12:53:24
     [dh.c dh.h kex.c kex.h kexdhc.c kexdhs.c monitor.c myproposal.h] 
     [ssh-keyscan.c sshconnect2.c sshd.c]
     implement diffie-hellman-group14-sha1 kex method (trivial extension to
     existing diffie-hellman-group1-sha1); ok markus@
   - dtucker@cvs.openbsd.org 2004/06/13 14:01:42
     [ssh.1 ssh_config.5 sshd_config.5]
     List supported ciphers in man pages, tidy up ssh -c;
     "looks fine" jmc@, ok markus@
   - djm@cvs.openbsd.org 2004/06/13 15:03:02
     [channels.c channels.h clientloop.c clientloop.h includes.h readconf.c] 
     [readconf.h scp.1 sftp.1 ssh.1 ssh.c ssh_config.5]
     implement session multiplexing in the client (the server has supported 
     this since 2.0); ok markus@
   - djm@cvs.openbsd.org 2004/06/14 01:44:39
     [channels.c clientloop.c misc.c misc.h packet.c ssh-agent.c ssh-keyscan.c]
     [sshd.c]
     set_nonblock() instead of fnctl(...,O_NONBLOCK); "looks sane" deraadt@
   - djm@cvs.openbsd.org 2004/06/15 05:45:04
     [clientloop.c]
     missed one unset_nonblock; spotted by Tim Rice
 - (djm) Fix Makefile.in for connection sharing changes
 - (djm) [ssh.c] Use separate var for address length

20040603
 - (dtucker) [auth-pam.c] Don't use pam_* namespace for sshd's PAM functions.
   ok djm@

20040601
 - (djm) [auth-pam.c] Add copyright for local changes

20040530
 - (dtucker) [auth-pam.c auth-pam.h auth-passwd.c] Bug #874: Re-add PAM 
   support for PasswordAuthentication=yes.  ok djm@
 - (dtucker) [auth-pam.c] Use an invalid password for root if
   PermitRootLogin != yes or the login is invalid, to prevent leaking
   information.  Based on Openwall's owl-always-auth patch.  ok djm@
 - (tim) [configure.ac Makefile.in] Add support for "make package" ok djm@
 - (tim) [buildpkg.sh.in] New file. A more flexible version of
   contrib/solaris/buildpkg.sh used for "make package".
 - (tim) [buildpkg.sh.in] Last minute fix didn't make it in the .in file.

20040527
 - (dtucker) [contrib/caldera/openssh.spec contrib/redhat/openssh.spec
   contrib/README CREDITS INSTALL] Bug #873: Correct URLs for x11-ssh-askpass
   and Jim Knoble's email address , from Jim himself.

20040524
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/05/19 12:17:33
     [sftp-client.c sftp.c]
     gracefully abort transfers on receipt of SIGINT, also ignore SIGINT while
     waiting for a command; ok markus@
   - dtucker@cvs.openbsd.org 2004/05/20 10:58:05
     [clientloop.c]
     Trivial type fix 0 -> '\0'; ok markus@
   - markus@cvs.openbsd.org 2004/05/21 08:43:03
     [kex.h moduli.c tildexpand.c]
     add prototypes for -Wall; ok djm
   - djm@cvs.openbsd.org 2004/05/21 11:33:11
     [channels.c channels.h clientloop.c serverloop.c ssh.1]
     bz #756: add support for the cancel-tcpip-forward request for the server
     and the client (through the ~C commandline). reported by z3p AT
     twistedmatrix.com; ok markus@
   - djm@cvs.openbsd.org 2004/05/22 06:32:12
     [clientloop.c ssh.1]
     use '-h' for help in ~C commandline instead of '-?'; inspired by jmc@
   - jmc@cvs.openbsd.org 2004/05/22 16:01:05
     [ssh.1]
     kill whitespace at eol;
   - dtucker@cvs.openbsd.org 2004/05/23 23:59:53
     [auth.c auth.h auth1.c auth2.c servconf.c servconf.h sshd_config
     sshd_config.5]
     Add MaxAuthTries sshd config option; ok markus@
 - (dtucker) [auth-pam.c] Bug #839: Ensure that pam authentication "thread"
   is terminated if the privsep slave exits during keyboard-interactive
   authentication.  ok djm@
 - (dtucker) [sshd.c] Fix typo in comment.

20040523
 - (djm) [sshd_config] Explain consequences of UsePAM=yes a little better in 
   sshd_config; ok dtucker@
 - (djm) [configure.ac] Warn if the system has no known way of figuring out 
   which user is on the other end of a Unix domain socket; ok dtucker@
 - (bal) [openbsd-compat/sys-queue.h] Reintroduce machinary to handle
   old/broken/incomplete <sys/queue.h>.

20040513
 - (dtucker) [configure.ac] Bug #867: Additional tests for res_query in
   libresolv, fixes problems detecting it on some platforms
   (eg Linux/x86-64).  From Kurt Roeckx via Debian, ok mouring@
 - (dtucker) OpenBSD CVS Sync
   - jmc@cvs.openbsd.org 2004/05/04 18:36:07
     [scp.1]
     SendEnv here too;
   - jmc@cvs.openbsd.org 2004/05/06 11:24:23
     [ssh_config.5]
     typo from John Cosimano (PR 3770);
   - deraadt@cvs.openbsd.org 2004/05/08 00:01:37
     [auth.c clientloop.c misc.h servconf.c ssh.c sshpty.h sshtty.c
     tildexpand.c], removed: sshtty.h tildexpand.h
     make two tiny header files go away; djm ok
   - djm@cvs.openbsd.org 2004/05/08 00:21:31
     [clientloop.c misc.h readpass.c scard.c ssh-add.c ssh-agent.c ssh-keygen.c
     sshconnect.c sshconnect1.c sshconnect2.c] removed: readpass.h
     kill a tiny header; ok deraadt@
   - djm@cvs.openbsd.org 2004/05/09 00:06:47
     [moduli.c ssh-keygen.c] removed: moduli.h
     zap another tiny header; ok deraadt@
   - djm@cvs.openbsd.org 2004/05/09 01:19:28
     [OVERVIEW auth-rsa.c auth1.c kex.c monitor.c session.c sshconnect1.c
     sshd.c] removed: mpaux.c mpaux.h
     kill some more tiny files; ok deraadt@
   - djm@cvs.openbsd.org 2004/05/09 01:26:48
     [kex.c]
     don't overwrite what we are trying to compute
   - deraadt@cvs.openbsd.org 2004/05/11 19:01:43
     [auth.c auth2-none.c authfile.c channels.c monitor.c monitor_mm.c
     packet.c packet.h progressmeter.c session.c openbsd-compat/xmmap.c]
     improve some code lint did not like; djm millert ok
   - dtucker@cvs.openbsd.org 2004/05/13 02:47:50
     [ssh-agent.1]
     Add examples to ssh-agent.1, bz#481 from Ralf Hauser; ok deraadt@
 - (dtucker) [sshd.8] Bug #843: Add warning about PasswordAuthentication to
   UsePAM section.  Parts from djm@ and jmc@.
 - (dtucker) [auth-pam.c scard-opensc.c] Tinderbox says auth-pam.c uses
   readpass.h, grep says scard-opensc.c does too.  Replace with misc.h.
 - (dtucker) [openbsd-compat/getrrsetbyname.c] Check that HAVE_DECL_H_ERROR
   is defined before using.
 - (dtucker) [openbsd-compat/getrrsetbyname.c] Fix typo too: HAVE_DECL_H_ERROR
   -> HAVE_DECL_H_ERRNO.

20040502
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/04/22 11:56:57
     [moduli.c]
     Bugzilla #850: Sophie Germain is the correct name of the French
     mathematician, "Sophie Germaine" isn't; from Luc.Maisonobe@c-s.fr
   - djm@cvs.openbsd.org 2004/04/27 09:46:37
     [readconf.c readconf.h servconf.c servconf.h session.c session.h ssh.c
     ssh_config.5 sshd_config.5]
     bz #815: implement ability to pass specified environment variables from
     the client to the server; ok markus@
   - djm@cvs.openbsd.org 2004/04/28 05:17:10
     [ssh_config.5 sshd_config.5]
     manpage fixes in envpass stuff from Brian Poole (raj AT cerias.purdue.edu)
   - jmc@cvs.openbsd.org 2004/04/28 07:02:56
     [sshd_config.5]
     remove unnecessary .Pp;
   - jmc@cvs.openbsd.org 2004/04/28 07:13:42
     [sftp.1 ssh.1]
     add SendEnv to -o list;
   - dtucker@cvs.openbsd.org 2004/05/02 11:54:31
     [sshd.8]
     Man page grammar fix (bz #858), from damerell at chiark.greenend.org.uk
     via Debian; ok djm@
   - dtucker@cvs.openbsd.org 2004/05/02 11:57:52
     [ssh.1]
     ConnectionTimeout -> ConnectTimeout, from m.a.ellis at ncl.ac.uk via
     Debian.  ok djm@
   - dtucker@cvs.openbsd.org 2004/05/02 23:02:17
     [sftp.1]
     ConnectionTimeout -> ConnectTimeout here too, pointed out by jmc@
   - dtucker@cvs.openbsd.org 2004/05/02 23:17:51
     [scp.1]
     ConnectionTimeout -> ConnectTimeout for scp.1 too.

20040423
 - (dtucker) [configure.ac openbsd-compat/getrrsetbyname.c] Declare h_errno
   as extern int if not already declared.  Fixes compile errors on old SCO
   platforms.  ok tim@
 - (dtucker) [README.platform] List prereqs for building on Cygwin.

20040421
 - (djm) Update config.guess and config.sub to autoconf-2.59 versions; ok tim@

20040420
 - (djm) OpenBSD CVS Sync
   - henning@cvs.openbsd.org 2004/04/08 16:08:21
     [sshconnect2.c]
     swap the last two parameters to TAILQ_FOREACH_REVERSE. matches what
     FreeBSD and NetBSD do.
     ok millert@ mcbride@ markus@ ho@, checked to not affect ports by naddy@
   - djm@cvs.openbsd.org 2004/04/18 23:10:26
     [readconf.c readconf.h ssh-keysign.c ssh.c]
     perform strict ownership and modes checks for ~/.ssh/config files, 
     as these can be used to execute arbitrary programs; ok markus@
     NB. ssh will now exit when it detects a config with poor permissions
   - djm@cvs.openbsd.org 2004/04/19 13:02:40
     [ssh.1 ssh_config.5]
     document strict permission checks on ~/.ssh/config; prompted by, 
     with & ok jmc@
   - jmc@cvs.openbsd.org 2004/04/19 16:12:14
     [ssh_config.5]
     kill whitespace at eol;
   - djm@cvs.openbsd.org 2004/04/19 21:51:49
     [ssh.c]
     fix idiot typo that i introduced in my last commit;
     spotted by cschneid AT cschneid.com
 - (djm) [openbsd-compat/sys-queue.h] Sync with OpenBSD, needed for 
   above change
 - (djm) [configure.ac] Check whether libroken is required when building 
   with Heimdal

20040419
 - (dtucker) OpenBSD CVS Sync
   - dtucker@cvs.openbsd.org 2004/02/29 22:04:45
     [regress/login-timeout.sh]
     Use sudo when restarting daemon during test.  ok markus@
   - dtucker@cvs.openbsd.org 2004/03/08 10:17:12
     [regress/login-timeout.sh]
     Missing OBJ, from tim@.  ok markus@ (Already fixed, ID sync only)
   - djm@cvs.openbsd.org 2004/03/30 12:41:56
     [sftp-client.c]
     sync comment with reality
   - djm@cvs.openbsd.org 2004/03/31 21:58:47
     [canohost.c]
     don't skip ip options check when UseDNS=no; ok markus@ (ID sync only)
   - markus@cvs.openbsd.org 2004/04/01 12:19:57
     [scp.c]
     limit trust between local and remote rcp/scp process,
     noticed by lcamtuf; ok deraadt@, djm@

20040418
 - (dtucker) [auth-pam.c] Log username and source host for failed PAM
   authentication attempts.  With & ok djm@
 - (djm) [openbsd-compat/bsd-cygwin_util.c] Recent versions of Cygwin allow
   change of user context without a password, so relax auth method 
   restrictions; from vinschen AT redhat.com; ok dtucker@

20040416
 - (dtucker) [regress/sftp-cmds.sh] Skip quoting test on Cygwin, since
   FAT/NTFS does not permit quotes in filenames.  From vinschen at redhat.com
 - (djm) [auth-krb5.c auth.h session.c] Explicitly refer to Kerberos ccache 
   file using FILE: method, fixes problems on Mac OSX.
   Patch from simon@sxw.org.uk; ok dtucker@
 - (tim) [configure.ac] Set SETEUID_BREAKS_SETUID, BROKEN_SETREUID and
   BROKEN_SETREGID for SCO OpenServer 3

20040412
 - (dtucker) [sshd_config.5] Add PermitRootLogin without-password warning
   from bug #701 (text from jfh at cise.ufl.edu).
 - (dtucker) [acconfig.h configure.ac defines.h] Bug #673: check for 4-arg
   skeychallenge(), eg on NetBSD.  ok mouring@
 - (dtucker) [auth-skey.c defines.h monitor.c] Make skeychallenge explicitly
   4-arg, with compatibility for 3-arg versions.  From djm@, ok me.
 - (djm) [configure.ac] Fix detection of libwrap on OpenBSD; ok dtucker@

20040408
 - (dtucker) [loginrec.c] Use UT_LINESIZE if available, prevents truncating
   pty name on Linux 2.6.x systems.  Patch from jpe at eisenmenger.org.
 - (bal) [monitor.c monitor_wrap.c] Second try.  Put the zlib.h headers
   back and #undef TARGET_OS_MAC instead.  (Bug report pending with Apple)
 - (dtucker) [defines.h loginrec.c] Define UT_LINESIZE if not defined and
   simplify loginrec.c.  ok tim@
 - (bal) [monitor.c monitor_wrap.c] Ok.. Last time.  Promise.  Tim suggested
   limiting scope and dtucker@ agreed.

20040407
 - (dtucker) [session.c] Flush stdout after displaying loginmsg.  From
   f_mohr at yahoo.de.
 - (bal) [acconfig.h auth-krb5.c configure.ac gss-serv-krb5.c] Check to see
   if Krb5 library exports krb5_init_etc() since some OSes (like MacOS/X)
   are starting to restrict it as internal since it is not needed by
   developers any more. (Patch based on Apple tree)
 - (bal) [monitor.c monitor_wrap.c] monitor_wrap.c] moved zlib.h higher since 
   krb5 on MacOS/X conflicts.  There may be a better solution, but this will 
   work for now.

20040406
 - (dtucker) [acconfig.h configure.ac defines.h] Bug #820: don't use
   updwtmpx() on IRIX since it seems to clobber utmp.  ok djm@
 - (dtucker) [configure.ac] Bug #816, #748 (again): Attempt to detect
   broken getaddrinfo and friends on HP-UX.  ok djm@

20040330
 - (dtucker) [configure.ac] Bug #811: Use "!" for LOCKED_PASSWD_PREFIX on
   Linuxes, since that's what many use.  ok djm@
 - (dtucker) [auth-pam.c] rename the_authctxt to sshpam_authctxt in auth-pam.c
   to reduce potential confusion with the one in sshd.c.  ok djm@
 - (djm) Bug #825: Fix ip_options_check() for mapped IPv4/IPv6 connection; 
   with & ok dtucker@

20040327
 - (dtucker) [session.c] Bug #817: Clear loginmsg after fork to prevent
   duplicate login messages for mutli-session logins.  ok djm@

20040322
 - (djm) [sshd.c] Drop supplemental groups if started as root
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/03/09 22:11:05
     [ssh.c]
     increase x11 cookie lifetime to 20 minutes; ok djm
   - markus@cvs.openbsd.org 2004/03/10 09:45:06
     [ssh.c]
     trim usage to match ssh(1) and look more like unix. ok djm@
   - markus@cvs.openbsd.org 2004/03/11 08:36:26
     [sshd.c]
     trim usage; ok deraadt
   - markus@cvs.openbsd.org 2004/03/11 10:21:17
     [ssh.c sshd.c]
     ssh, sshd: sync version output, ok djm
   - markus@cvs.openbsd.org 2004/03/20 10:40:59
     [version.h]
     3.8.1
 - (djm) Crank RPM spec versions

20040311
 - (djm) [configure.ac] Add standard license to configure.ac; ok ben, dtucker

20040310
 - (dtucker) [openbsd-compat/fake-rfc2553.h] Bug #812: #undef getaddrinfo
   before redefining it, silences warnings on Tru64.

20040308
 - (dtucker) [sshd.c] Back out rev 1.270 as it caused problems on some
   platforms (eg SCO, HP-UX) with logging in the wrong TZ.  ok djm@
 - (dtucker) [configure.ac sshd.c openbsd-compat/bsd-misc.h
   openbsd-compat/setenv.c] Unset KRB5CCNAME on AIX to prevent it from being
   inherited by the child.  ok djm@
 - (dtucker) [auth-pam.c auth-pam.h auth1.c auth2.c monitor.c monitor_wrap.c
   monitor_wrap.h] Bug #808: Ensure force_pwchange is correctly initialized
   even if keyboard-interactive is not used by the client.  Prevents 
   segfaults in some cases where the user's password is expired (note this 
   is not considered a security exposure).  ok djm@
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/03/03 06:47:52
     [sshd.c]
     change proctiltle after accept(2); ok henning, deraadt, djm
   - djm@cvs.openbsd.org 2004/03/03 09:30:42
     [sftp-client.c]
     Don't print duplicate messages when progressmeter is off
     Spotted by job317 AT mailvault.com; ok markus@
   - djm@cvs.openbsd.org 2004/03/03 09:31:20
     [sftp.c]
     Fix initialisation of progress meter; ok markus@
   - markus@cvs.openbsd.org 2004/03/05 10:53:58
     [readconf.c readconf.h scp.1 sftp.1 ssh.1 ssh_config.5 sshconnect2.c]
     add IdentitiesOnly; ok djm@, pb@
   - djm@cvs.openbsd.org 2004/03/08 09:38:05
     [ssh-keyscan.c]
     explicitly initialise remote_major and remote_minor.
     from cjwatson AT debian.org; ok markus@
   - dtucker@cvs.openbsd.org 2004/03/08 10:18:57
     [sshd_config.5]
     Document KerberosGetAFSToken;  ok markus@
 - (tim) [regress/README.regress] Document ssh-rand-helper issue. ok bal

20040307
 - (tim) [regress/login-timeout.sh] fix building outside of source tree.

20040304
 - (dtucker) [auth-pam.c] Don't try to export PAM when compiled with
   -DUSE_POSIX_THREADS.  From antoine.verheijen at ualbert ca.  ok djm@
 - (dtucker) [auth-pam.c] Reset signal status when starting pam auth thread,
   prevent hanging during PAM keyboard-interactive authentications.  ok djm@
 - (dtucker) [auth-passwd.c auth-sia.c auth-sia.h defines.h
   openbsd-compat/xcrypt.c] Bug #802: Fix build error on Tru64 when
   configured --with-osfsia.  ok djm@

20040303
 - (djm) [configure.ac ssh-agent.c] Use prctl to prevent ptrace on ssh-agent
   ok dtucker  

20040229
 - (tim) [configure.ac] Put back bits mistakenly removed from Rev 1.188

20040229
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/02/25 00:22:45
     [sshd.c]
     typo in comment
   - dtucker@cvs.openbsd.org 2004/02/27 22:42:47
     [dh.c]
     Prevent sshd from sending DH groups with a primitive generator of zero or
     one, even if they are listed in /etc/moduli.  ok markus@
   - dtucker@cvs.openbsd.org 2004/02/27 22:44:56
     [dh.c]
     Make /etc/moduli line buffer big enough for 8kbit primes, in case anyone
     ever uses one.  ok markus@
   - dtucker@cvs.openbsd.org 2004/02/27 22:49:27
     [dh.c]
     Reset bit counter at the right time, fixes debug output in the case where
     the DH group is rejected.  ok markus@
   - dtucker@cvs.openbsd.org 2004/02/17 08:23:20
     [regress/Makefile regress/login-timeout.sh]
     Add regression test for LoginGraceTime; ok markus@
   - markus@cvs.openbsd.org 2004/02/24 16:56:30
     [regress/test-exec.sh]
     allow arguments in ${TEST_SSH_XXX}
   - markus@cvs.openbsd.org 2004/02/24 17:06:52
     [regress/ssh-com-client.sh regress/ssh-com-keygen.sh
     regress/ssh-com-sftp.sh regress/ssh-com.sh]
     test against recent ssh.com releases
   - dtucker@cvs.openbsd.org 2004/02/28 12:16:57
     [regress/dynamic-forward.sh]
     Make dynamic-forward understand nc's new output.  ok markus@
   - dtucker@cvs.openbsd.org 2004/02/28 13:44:45
     [regress/try-ciphers.sh]
     Test acss too; ok markus@
 - (dtucker) [regress/try-ciphers.sh] Skip acss if not compiled in (eg if we
   built with openssl < 0.9.7)

20040226
 - (bal) KNF our sshlogin.c even if the code looks nothing like upstream
   code due to diversity issues.

20040225
 - (djm) Trim ChangeLog 
 - (djm) Don't specify path to PAM modules in Redhat sshd.pam; from Fedora

20040224
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/02/19 21:15:04
     [sftp-server.c]
     switch to new license.template
   - markus@cvs.openbsd.org 2004/02/23 12:02:33
     [sshd.c]
     backout revision 1.279; set listen socket to non-block; ok henning.
   - markus@cvs.openbsd.org 2004/02/23 15:12:46
     [bufaux.c]
     encode 0 correctly in buffer_put_bignum2; noted by Mikulas Patocka
     and drop support for negative BNs; ok otto@
   - markus@cvs.openbsd.org 2004/02/23 15:16:46
     [version.h]
     enter 3.8
 - (dtucker) [configure.ac gss-serv-krb5.c ssh-gss.h] Define GSSAPI when found
   with krb5-config, hunt down gssapi.h and friends.  Based partially on patch
   from deengert at anl.gov.  ok djm@
 - (djm) [groupaccess.c uidswap.c] Bug #787: Size group arrays at runtime 
   using sysconf() if available Based on patches from 
   holger AT van-lengerich.de and openssh_bugzilla AT hockin.org
 - (dtucker) [uidswap.c] Minor KNF.  ok djm@
 - (tim) [openbsd-compat/getrrsetbyname.c] Make gcc 2.7.2.3 happy.  ok djm@
 - (djm) Crank RPM spec versions
 - (dtucker) [README] Add pointer to release notes.  ok djm@
 - (dtucker) {README.platform] Add platform-specific notes.
 - (tim) [configure.ac] SCO3 needs -lcrypt_i for -lprot
 - (djm) Release 3.8p1

20040223
 - (dtucker) [session.c] Bug #789: Only make setcred call for !privsep in the
   non-interactive path.  ok djm@

20040222
 - (dtucker) [auth-shadow.c auth.c auth.h] Move shadow account expiry test
   to auth-shadow.c, no functional change.  ok djm@
 - (dtucker) [auth-shadow.c auth.h] Provide warnings of impending account or
   password expiry.  ok djm@
 - (dtucker) [auth-passwd.c] Only check password expiry once.  Prevents
   multiple warnings if a wrong password is entered.
 - (dtucker) [configure.ac] Apply krb5-config --libs fix to non-gssapi path
   too.

20040220
 - (djm) [openbsd-compat/setproctitle.c] fix comments; from grange@

20040218
 - (dtucker) [configure.ac] Handle case where krb5-config --libs returns a
   path with a "-" in it.  From Sergio.Gelato at astro.su.se.
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/02/17 07:17:29
     [sftp-glob.c sftp.c]
     Remove useless headers; ok deraadt@
   - djm@cvs.openbsd.org 2004/02/17 11:03:08
     [sftp.c]
     sftp.c and sftp-int.c, together at last; ok markus@
   - jmc@cvs.openbsd.org 2004/02/17 19:35:21
     [sshd_config.5]
     remove cruft left over from RhostsAuthentication removal;
     ok markus@
 - (djm) [log.c] Correct use of HAVE_OPENLOG_R
 - (djm) [log.c] Tighten openlog_r tests

20040217
 - (djm) Simplify the license on code I have written. No code changes.
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/02/17 05:39:51
     [sftp-client.c sftp-client.h sftp-glob.c sftp-glob.h sftp-int.c]
     [sftp-int.h sftp.c]
     switch to license.template for code written by me (belated, I know...)
 - (djm) Bug #698: Specify FILE: for KRB5CCNAME; patch from 
   stadal@suse.cz and simon@sxw.org.uk
 - (dtucker) [auth-pam.c] Tidy up PAM debugging.  ok djm@
 - (dtucker) [auth-pam.c] Store output from pam_session and pam_setcred for
   display after login.  Should fix problems like pam_motd not displaying
   anything, noticed by cjwatson at debian.org.  ok djm@

20040212
 - (tim) [Makefile.in regress/sftp-badcmds.sh regress/test-exec.sh]
   Portablity fixes. Data sftp transfers needs to be world readable. Some
   older shells hang on while loops when  doing sh -n some_script. OK dtucker@
 - (tim) [configure.ac] Make sure -lcrypto is before -lsocket for sco3.
   ok mouring@

20040211
 - (dtucker) [auth-passwd.c auth-shadow.c] Only enable shadow expiry check
   if HAS_SHADOW_EXPIRY is set.
 - (tim) [configure.ac] Fix comment to match code changes in ver 1.117

20040210
 - (dtucker) [auth-passwd.c auth.h openbsd-compat/port-aix.c
   openbsd-compat/port-aix.h] Bug #14: Use do_pwchange to support AIX's
   native password expiry.
 - (dtucker) [LICENCE Makefile.in auth-passwd.c auth-shadow.c auth.c auth.h
   defines.h] Bug #14: Use do_pwchange to support password expiry and force
   change for platforms using /etc/shadow.  ok djm@
 - (dtucker) [openbsd-compat/fake-rfc2553.h] Bug #563: Prepend ssh_ to compat
   functions to avoid conflicts with Heimdal's libroken.  ok djm@
 - (dtucker) [auth-pam.c auth-pam.h session.c] Bug #14: Use do_pwchange to
   change expired PAM passwords for SSHv1 connections without privsep.
   pam_chauthtok is still used when privsep is disabled.  ok djm@
 - (dtucker) [openbsd-compat/port-aix.c openbsd-compat/port-aix.h] Move
   include from port-aix.h to port-aix.c and remove unnecessary function
   definition.  Fixes build errors on AIX.
 - (dtucker) [configure.ac loginrec.c] Bug #464: Use updwtmpx on platforms
   that support it.  from & ok mouring@
 - (dtucker) [configure.ac] Bug #345: Do not disable utmp on HP-UX 10.x.
   ok djm@

20040207
 - (dtucker) OpenBSD CVS Sync
   - dtucker@cvs.openbsd.org 2004/02/06 23:41:13
     [cipher-ctr.c]
     Use EVP_CIPHER_CTX_key_length for key length.  ok markus@
     (This will fix builds with OpenSSL 0.9.5)
 - (dtucker) [cipher.c] enable AES counter modes with OpenSSL 0.9.5.
   ok djm@, markus@

20040206
 - (dtucker) [acss.c acss.h] Fix $Id tags.
 - (dtucker) [cipher-acss.c cipher.c] Enable acss only if building with
   OpenSSL >= 0.9.7.  ok djm@
 - (dtucker) [session.c] Bug #789: Do not call do_pam_setcred as a non-root
   user, since some modules might fail due to lack of privilege.  ok djm@
 - (dtucker) [configure.ac] Bug #748: Always define BROKEN_GETADDRINFO
   for HP-UX 11.11.  If there are known-good configs where this is not
   required, please report them.  ok djm@
 - (dtucker) [sshd.c] Bug #757: Clear child's environment to prevent
   accidentally inheriting from root's environment.  ok djm@
 - (dtucker) [openbsd-compat/port-aix.c openbsd-compat/port-aix.h] Bug #796:
   Restore previous authdb setting after auth calls.  Fixes problems with
   setpcred failing on accounts that use AFS or NIS password registries.
 - (dtucker) [configure.ac includes.h] Include <sys/stream.h> if present,
   required on Solaris 2.5.1 for queue_t, which is used by <sys/ptms.h>.
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2004/01/30 09:48:57
     [auth-passwd.c auth.h pathnames.h session.c]
     support for password change; ok dtucker@
     (set password-dead=1w in login.conf to use this).
     In -Portable, this is currently only platforms using bsdauth.
   - dtucker@cvs.openbsd.org 2004/02/05 05:37:17
     [monitor.c sshd.c]
     Pass SIGALRM through to privsep child if LoginGraceTime expires. ok markus@
   - markus@cvs.openbsd.org 2004/02/05 15:33:33
     [progressmeter.c]
     fix ETA for > 4GB; bugzilla #791; ok henning@ deraadt@

20040129
 - (dtucker) OpenBSD CVS Sync regress/
   - dtucker@cvs.openbsd.org 2003/10/11 11:49:49
     [Makefile banner.sh]
     Test missing banner file, suppression of banner with ssh -q, check return
     code from ssh.  ok markus@
   - jmc@cvs.openbsd.org 2003/11/07 10:16:44
     [ssh-com.sh]
     adress -> address, and a few more; all from Jonathon Gray;
   - djm@cvs.openbsd.org 2004/01/13 09:49:06
     [sftp-batch.sh]
 - (dtucker) [configure.ac] Add --without-zlib-version-check.  Feedback from
   tim@, ok several
 - (dtucker) [configure.ac openbsd-compat/bsd-cray.c openbsd-compat/bsd-cray.h]
   Bug #775: Cray fixes from wendy at cray.com

20040128
 - (dtucker) [regress/README.regress] Add tcpwrappers issue, noted by tim@
 - (dtucker) [moduli] Import new moduli file from OpenBSD.

20040127
 - (djm) OpenBSD CVS Sync
   - hshoexer@cvs.openbsd.org 2004/01/23 17:06:03
     [cipher.c]
     enable acss for ssh
     ok deraadt@ markus@
   - mouring@cvs.openbsd.org 2004/01/23 17:57:48
     [sftp-int.c]
     Fix issue pointed out with ls not handling large directories 
     with embeded paths correctly.  OK damien@
   - hshoexer@cvs.openbsd.org 2004/01/23 19:26:33
     [cipher.c]
     rename acss@opebsd.org to acss@openssh.org
     ok deraadt@
   - djm@cvs.openbsd.org 2004/01/25 03:49:09
     [sshconnect.c]
     reset nonblocking flag after ConnectTimeout > 0 connect; (bugzilla #785)
     from jclonguet AT free.fr; ok millert@
   - djm@cvs.openbsd.org 2004/01/27 10:08:10
     [sftp.c]
     reorder parsing so user:skey@host:file works (bugzilla #777)
     patch from admorten AT umich.edu; ok markus@
 - (djm) [acss.c acss.h cipher-acss.c] Portable support for ACSS 
   if libcrypto lacks it

20040126
 - (tim) Typo in regress/README.regress
 - (tim) [regress/test-exec.sh] RhostsAuthentication is deprecated.
 - (tim) [defines.h] Add defines for HFIXEDSZ and T_SIG
 - (tim) [configure.ac includes.h] add <sys/ptms.h> for grantpt() and friends.
 - (tim) [defines.h openbsd-compat/getrrsetbyname.h] Move defines for HFIXEDSZ
   and T_SIG to getrrsetbyname.h

20040124
 - (djm) Typo in openbsd-compat/bsd-openpty.c; from wendyp AT cray.com

20040123 
 - (djm) Do pam_session processing for systems with HAVE_LOGIN_CAP; from 
   ralf.hack AT pipex.net; ok dtucker@
 - (djm) Bug #776: Update contrib/redhat/openssh.spec to dynamically detect
   Kerberos location (and thus work with Fedora Core 1);
   from jason AT devrandom.org
 - (dtucker) [configure.ac] Bug #788: Test for zlib.h presence and for
   zlib >= 1.1.4.  Partly from jbasney at ncsa.uiuc.edu.  ok djm@
 - (dtucker) [contrib/cygwin/README] Document new ssh-host-config options.
   Patch from vinschen at redhat.com.
 - (dtucker) [acconfig.h configure.ac includes.h servconf.c session.c]
   Change AFS symbol to USE_AFS to prevent namespace collisions, do not
   include kafs.h unless necessary.  From deengert at anl.gov.
 - (tim) [configure.ac] Remove hard coded -L/usr/local/lib and
   -I/usr/local/include. Users can do LDFLAGS="-L/usr/local/lib" \
   CPPFLAGS="-I/usr/local/include" ./configure if needed.

20040122
 - (dtucker) [configure.ac] Use krb5-config where available for Kerberos/
   GSSAPI detection, libs and includes.  ok djm@
 - (dtucker) [session.c] Enable AFS support in conjunction with KRB5 not
   just HEIMDAL.
 - (tim) [contrib/solaris/buildpkg.sh] Allow for the possibility of
   /usr/local being a symbolic link. Fixes problem reported by Henry Grebler.

20040121
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2004/01/13 09:25:05
     [sftp-int.c sftp.1 sftp.c]
     Tidy sftp batchmode handling, eliminate junk to stderr (bugzilla #754) and
     enable use of "-b -" to accept batchfile from stdin; ok markus@
   - jmc@cvs.openbsd.org 2004/01/13 12:17:33
     [sftp.1]
     remove unnecessary Ic's;
     kill whitespace at EOL;
     ok djm@
   - markus@cvs.openbsd.org 2004/01/13 19:23:15
     [compress.c session.c]
     -Wall; ok henning
   - markus@cvs.openbsd.org 2004/01/13 19:45:15
     [compress.c]
     cast for portability; millert@
   - markus@cvs.openbsd.org 2004/01/19 09:24:21
     [channels.c]
     fake consumption for half closed channels since the peer is waiting for
     window adjust messages; bugzilla #790 Matthew Dillon; test + ok dtucker@
     reproduce with sh -c 'ulimit -f 10; ssh host -n od /bsd | cat > foo'
   - markus@cvs.openbsd.org 2004/01/19 21:25:15
     [auth2-hostbased.c auth2-pubkey.c serverloop.c ssh-keysign.c sshconnect2.c]
     fix mem leaks; some fixes from Pete Flugstad; tested dtucker@
   - djm@cvs.openbsd.org 2004/01/21 03:07:59
     [sftp.c]
     initialise infile in main, rather than statically - from portable
   - deraadt@cvs.openbsd.org 2004/01/11 21:55:06
     [sshpty.c]
     for pty opening, only use the openpty() path.  the other stuff only needs
     to be in openssh-p; markus ok
 - (djm) [openbsd-compat/bsd-openpty.c] Rework old sshpty.c code into an
   openpty() replacement

20040114
 - (dtucker) [auth-pam.c] Have monitor die if PAM authentication thread exits
   unexpectedly.  with & ok djm@
 - (dtucker) [auth-pam.c] Reset signal handler in pthread_cancel too, add
   test for case where cleanup has already run.
 - (dtucker) [auth-pam.c] Add minor debugging.

20040113
 - (dtucker) [auth-pam.c] Relocate struct pam_ctxt and prototypes.  No
   functional changes.

20040108
 - (dtucker) [auth-pam.c defines.h] Bug #783: move __unused to defines.h and
   only define if not already.  From des at freebsd.org.
 - (dtucker) [configure.ac] Remove extra (typo) comma.

20040105
 - (dtucker) [contrib/ssh-copy-id] Bug #781: exit if ssh fails.  Patch from
   cjwatson at debian.org.
 - (dtucker) [acconfig.h configure.ac includes.h servconf.c session.c]
   Only enable KerberosGetAFSToken if Heimdal's libkafs is found.  with jakob@

20040102
 - (djm) OSX/Darwin needs BIND_8_COMPAT to build getrrsetbyname. Report from
   jakob@
 - (djm) Remove useless DNS support configure summary message. from jakob@
 - (djm) OSX/Darwin put the PAM headers in a different place, detect this.
   Report from jakob@

20031231
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/12/22 09:16:58
     [moduli.c ssh-keygen.1 ssh-keygen.c]
     tidy up moduli generation debugging, add -v (verbose/debug) option to
     ssh-keygen; ok markus@
   - markus@cvs.openbsd.org 2003/12/22 20:29:55
     [cipher-3des1.c]
     EVP_CIPHER_CTX_cleanup() for the des contexts; pruiksma@freesurf.fr
   - jakob@cvs.openbsd.org 2003/12/23 16:12:10
     [servconf.c servconf.h session.c sshd_config]
     implement KerberosGetAFSToken server option. ok markus@, beck@
   - millert@cvs.openbsd.org 2003/12/29 16:39:50
     [sshd_config]
     KeepAlive has been obsoleted, use TCPKeepAlive instead; markus@ OK
   - dtucker@cvs.openbsd.org 2003/12/31 00:24:50
     [auth2-passwd.c]
     Ignore password change request during password auth (which we currently
     don't support) and discard proposed new password.  corrections/ok markus@
 - (dtucker) [configure.ac] Only test setresuid and setresgid if they exist.

20031219
 - (dtucker) [defines.h] Bug #458: Define SIZE_T_MAX as UINT_MAX if we
   typedef size_t ourselves.

20031218
 - (dtucker) [configure.ac] Don't use setre[ug]id on DG-UX, from Tom Orban.
 - (dtucker) [auth-pam.c] Do PAM chauthtok during SSH2 keyboard-interactive
   authentication.  Partially fixes bug #423.  Feedback & ok djm@

20031217
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/12/09 15:28:43
     [serverloop.c]
     make ClientKeepAlive work for ssh -N, too (no login shell requested).
     1) send a bogus channel request if we find a channel
     2) send a bogus global request if we don't have a channel
     ok + test beck@
   - markus@cvs.openbsd.org 2003/12/09 17:29:04
     [sshd.c]
     fix -o and HUP; ok henning@
   - markus@cvs.openbsd.org 2003/12/09 17:30:05
     [ssh.c]
     don't modify argv for ssh -o; similar to sshd.c 1.283
   - markus@cvs.openbsd.org 2003/12/09 21:53:37
     [readconf.c readconf.h scp.1 servconf.c servconf.h sftp.1 ssh.1]
     [ssh_config.5 sshconnect.c sshd.c sshd_config.5]
     rename keepalive to tcpkeepalive; the old name causes too much
     confusion; ok djm, dtucker; with help from jmc@
   - dtucker@cvs.openbsd.org 2003/12/09 23:45:32
     [clientloop.c]
     Clear exit code when ssh -N is terminated with a SIGTERM.  ok markus@
   - markus@cvs.openbsd.org 2003/12/14 12:37:21
     [ssh_config.5]
     we don't support GSS KEX; from Simon Wilkinson
   - markus@cvs.openbsd.org 2003/12/16 15:49:51
     [clientloop.c clientloop.h readconf.c readconf.h scp.1 sftp.1 ssh.1]
     [ssh.c ssh_config.5]
     application layer keep alive (ServerAliveInterval ServerAliveCountMax)
     for ssh(1), similar to the sshd(8) option; ok beck@; with help from
     jmc and dtucker@
   - markus@cvs.openbsd.org 2003/12/16 15:51:54
     [dh.c]
     use <= instead of < in dh_estimate; ok provos/hshoexer; 
     do not return < DH_GRP_MIN
 - (dtucker) [acconfig.h configure.ac uidswap.c] Bug #645: Check for
   setres[ug]id() present but not implemented (eg some Linux/glibc
   combinations).
 - (bal) [openbsd-compat/bsd-misc.c] unset 'signal' defined if we are
   using a real 'signal()' (Noticed by a NeXT Compile)

20031209
 - (dtucker) OpenBSD CVS Sync
   - matthieu@cvs.openbsd.org 2003/11/25 23:10:08
     [ssh-add.1]
     ssh-add doesn't need to be a descendant of ssh-agent. Ok markus@, jmc@.
   - djm@cvs.openbsd.org 2003/11/26 21:44:29
     [cipher-aes.c]
     fix #ifdef before #define; ok markus@
     (RCS ID sync only, Portable already had this)
   - markus@cvs.openbsd.org 2003/12/02 12:15:10
     [progressmeter.c]
     improvments from andreas@:
     * saner speed estimate for transfers that takes less than a second by
       rounding the time to 1 second.
     * when the transfer is finished calculate the actual total speed
       rather than the current speed which is given during the transfer
   - markus@cvs.openbsd.org 2003/12/02 17:01:15
     [channels.c session.c ssh-agent.c ssh.h sshd.c]
     use SSH_LISTEN_BACKLOG (=128) in listen(2).
   - djm@cvs.openbsd.org 2003/12/07 06:34:18
     [moduli.c]
     remove unused debugging #define templates
   - markus@cvs.openbsd.org 2003/12/08 11:00:47
     [kexgexc.c]
     print requested group size in debug; ok djm
   - dtucker@cvs.openbsd.org 2003/12/09 13:52:55
     [moduli.c]
     Prevent ssh-keygen -T from outputting moduli with a generator of 0, since
     they can't be used for Diffie-Hellman.  Assistance and ok djm@
 - (dtucker) [ssh-keyscan.c] Sync RCSIDs, missed in SSH_SSFDMAX change below.

20031208
 - (tim) [configure.ac] Bug 770. Fix --without-rpath.

20031123
 - (djm) [canohost.c] Move IPv4inV6 mapped address normalisation to its own
   function and call it unconditionally
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/11/23 23:17:34
     [ssh-keyscan.c]
     from portable - use sysconf to detect fd limit; ok markus@
     (tidy diff by adding SSH_SSFDMAX macro to defines.h)
   - djm@cvs.openbsd.org 2003/11/23 23:18:45
     [ssh-keygen.c]
     consistency PATH_MAX -> MAXPATHLEN; ok markus@
     (RCS ID sync only)
   - djm@cvs.openbsd.org 2003/11/23 23:21:21
     [scp.c]
     from portable: rename clashing variable limit-> limit_rate; ok markus@
     (RCS ID sync only)
   - dtucker@cvs.openbsd.org 2003/11/24 00:16:35
     [ssh.1 ssh.c]
     Make ssh -k mean GSSAPIDelegateCredentials=no. Suggestion & ok markus@
 - (djm) Annotate OpenBSD-derived files in openbsd-compat/ with original 
   source file path (in OpenBSD tree).

20031122
 - (dtucker) [channels.c] Make AIX write limit code clearer.  Suggested by djm@
 - (dtucker) [auth-passwd.c openbsd-compat/port-aix.c openbsd-compat/port-aix.h]
   Move AIX specific password authentication code to port-aix.c, call
   authenticate() until reenter flag is clear.
 - (dtucker) [auth-sia.c configure.ac] Tru64 update from cmadams at hiwaay.net.
   Use permanently_set_uid for SIA, only define DISABLE_FD_PASSING when SIA
   is enabled, rely on SIA to check for locked accounts if enabled.  ok djm@
 - (djm) [scp.c] Rename limitbw -> limit_rate to match upstreamed patch
 - (djm) [sftp-int.c] Remove duplicated code from bogus sync
 - (djm) [packet.c] Shuffle #ifdef to reduce conditionally compiled code

20031121
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/11/20 11:39:28
     [progressmeter.c]
     fix rounding errors; from andreas@
   - djm@cvs.openbsd.org 2003/11/21 11:57:03
     [everything]
     unexpand and delete whitespace at EOL; ok markus@
     (done locally and RCS IDs synced)

20031118
 - (djm) Fix early exit for root auth success when UsePAM=yes and 
   PermitRootLogin=no
 - (dtucker) [auth-pam.c] Convert chauthtok_conv into a generic tty_conv,
   and use it for do_pam_session.  Fixes problems like pam_motd not
   displaying anything.  ok djm@
 - (dtucker) [auth-pam.c] Only use pam_putenv if our platform has it. ok djm@
 - (djm) OpenBSD CVS Sync
   - dtucker@cvs.openbsd.org 2003/11/18 00:40:05
     [serverloop.c]
     Correct check for authctxt->valid.  ok djm@
   - djm@cvs.openbsd.org 2003/11/18 10:53:07
     [monitor.c]
     unbreak fake authloop for non-existent users (my screwup). Spotted and
     tested by dtucker@; ok markus@

20031117
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/11/03 09:03:37
     [auth-chall.c]
     make this a little more idiot-proof; ok markus@
     (includes portable-specific changes)
   - jakob@cvs.openbsd.org 2003/11/03 09:09:41
     [sshconnect.c]
     move changed key warning into warn_changed_key(). ok markus@
   - jakob@cvs.openbsd.org 2003/11/03 09:37:32
     [sshconnect.c]
     do not free static type pointer in warn_changed_key()
   - djm@cvs.openbsd.org 2003/11/04 08:54:09
     [auth1.c auth2.c auth2-pubkey.c auth.h auth-krb5.c auth-passwd.c]
     [auth-rhosts.c auth-rh-rsa.c auth-rsa.c monitor.c serverloop.c]
     [session.c]
     standardise arguments to auth methods - they should all take authctxt.
     check authctxt->valid rather then pw != NULL; ok markus@
   - jakob@cvs.openbsd.org 2003/11/08 16:02:40
     [auth1.c]
     remove unused variable (pw). ok djm@
     (id sync only - still used in portable)
   - jmc@cvs.openbsd.org 2003/11/08 19:17:29
     [sftp-int.c]
     typos from Jonathon Gray;
   - jakob@cvs.openbsd.org 2003/11/10 16:23:41
     [bufaux.c bufaux.h cipher.c cipher.h hostfile.c hostfile.h key.c]
     [key.h sftp-common.c sftp-common.h sftp-server.c sshconnect.c sshd.c]
     [ssh-dss.c ssh-rsa.c uuencode.c uuencode.h]
     constify. ok markus@ & djm@
   - dtucker@cvs.openbsd.org 2003/11/12 10:12:15
     [scp.c]
     When called with -q, pass -q to ssh; suppresses SSH2 banner.  ok markus@
   - jakob@cvs.openbsd.org 2003/11/12 16:39:58
     [dns.c dns.h readconf.c ssh_config.5 sshconnect.c]
     update SSHFP validation. ok markus@
   - jmc@cvs.openbsd.org 2003/11/12 20:14:51
     [ssh_config.5]
     make verb agree with subject, and kill some whitespace;
   - markus@cvs.openbsd.org 2003/11/14 13:19:09
     [sshconnect2.c]
     cleanup and minor fixes for the client code; from Simon Wilkinson
   - djm@cvs.openbsd.org 2003/11/17 09:45:39
     [msg.c msg.h sshconnect2.c ssh-keysign.c]
     return error on msg send/receive failure (rather than fatal); ok markus@
   - markus@cvs.openbsd.org 2003/11/17 11:06:07
     [auth2-gss.c gss-genr.c gss-serv.c monitor.c monitor.h monitor_wrap.c]
     [monitor_wrap.h sshconnect2.c ssh-gss.h]
     replace "gssapi" with "gssapi-with-mic"; from Simon Wilkinson; 
     test + ok jakob.
 - (djm) Bug #632: Don't call pam_end indirectly from within kbd-int
   conversation function
 - (djm) Export environment variables from authentication subprocess to 
   parent. Part of Bug #717

20031115
 - (dtucker) [regress/agent-ptrace.sh] Test for GDB output from Solaris and
   HP-UX, skip test on AIX.

20031113
 - (dtucker) [auth-pam.c] Append newlines to lines output by the
   pam_chauthtok_conv().
 - (dtucker) [README ssh-host-config ssh-user-config Makefile] (All
   contrib/cygwin).  Major update from vinschen at redhat.com.
   - Makefile provides a `cygwin-postinstall' target to run right after
     `make install'.
   - Better support for Windows 2003 Server.
   - Try to get permissions as correct as possible.
   - New command line options to allow full automated host configuration.
   - Create configs from skeletons in /etc/defaults/etc.
   - Use /bin/bash, allows reading user input with readline support.
   - Remove really old configs from /usr/local.
 - (dtucker) [auth-pam.c] Add newline to accumulated PAM_TEXT_INFO and
   PAM_ERROR_MSG messages.

20031106
 - (djm) Clarify UsePAM consequences a little more

20031103
 - (dtucker) [contrib/cygwin/ssh-host-config] Ensure entries in /etc/services
   are created correctly with CRLF line terminations.  Patch from vinschen at
   redhat.com.
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/10/15 09:48:45
     [monitor_wrap.c]
     check pmonitor != NULL
   - markus@cvs.openbsd.org 2003/10/21 09:50:06
     [auth2-gss.c]
     make sure the doid is larger than 2
   - avsm@cvs.openbsd.org 2003/10/26 16:57:43
     [sshconnect2.c]
     rename 'supported' static var in userauth_gssapi() to 'gss_supported'
     to avoid shadowing the global version.  markus@ ok
   - markus@cvs.openbsd.org 2003/10/28 09:08:06
     [misc.c]
     error->debug for getsockopt+TCP_NODELAY; several requests
   - markus@cvs.openbsd.org 2003/11/02 11:01:03
     [auth2-gss.c compat.c compat.h sshconnect2.c]
     remove support for SSH_BUG_GSSAPI_BER; simon@sxw.org.uk
 - (dtucker) [regress/agent-ptrace.sh] Use numeric uid and gid.

20031021
 - (dtucker) [INSTALL] Some system crypt() functions support MD5 passwords
   directly.  Noted by Darren.Moffat at sun.com.
 - (dtucker) [regress/agent-ptrace.sh] Skip agent-test unless SUDO is set,
   make agent setgid during test.

20031017
 - (dtucker) [INSTALL] Note that --with-md5 is now required on platforms with
   MD5 passwords even if PAM support is enabled.  From steev at detritus.net.

20031015
 - (dtucker) OpenBSD CVS Sync
   - jmc@cvs.openbsd.org 2003/10/08 08:27:36
     [scp.1 scp.c sftp-server.8 sftp.1 sftp.c ssh.1 sshd.8]
     scp and sftp: add options list and sort options. options list requested
     by deraadt@
     sshd: use same format as ssh
     ssh: remove wrong option from list
     sftp-server: Subsystem is documented in ssh_config(5), not sshd(8)
     ok deraadt@ markus@
   - markus@cvs.openbsd.org 2003/10/08 15:21:24
     [readconf.c ssh_config.5]
     default GSS API to no in client, too; ok jakob, deraadt@
   - markus@cvs.openbsd.org 2003/10/11 08:24:08
     [readconf.c readconf.h ssh.1 ssh.c ssh_config.5]
     remote x11 clients are now untrusted by default, uses xauth(8) to generate
     untrusted cookies; ForwardX11Trusted=yes restores old behaviour.
     ok deraadt; feedback and ok djm/fries
   - markus@cvs.openbsd.org 2003/10/11 08:26:43
     [sshconnect2.c]
     search keys in reverse order; fixes #684
   - markus@cvs.openbsd.org 2003/10/11 11:36:23
     [monitor_wrap.c]
     return NULL for missing banner; ok djm@
   - jmc@cvs.openbsd.org 2003/10/12 13:12:13
     [ssh_config.5]
     note that EnableSSHKeySign should be in the non-hostspecific section;
     remove unnecessary .Pp;
     ok markus@
   - markus@cvs.openbsd.org 2003/10/13 08:22:25
     [scp.1 sftp.1]
     don't refer to options related to forwarding; ok jmc@
   - jakob@cvs.openbsd.org 2003/10/14 19:42:10
     [dns.c dns.h readconf.c ssh-keygen.c sshconnect.c]
     include SSHFP lookup code (not enabled by default). ok markus@
   - jakob@cvs.openbsd.org 2003/10/14 19:43:23
     [README.dns]
     update
   - markus@cvs.openbsd.org 2003/10/14 19:54:39
     [session.c ssh-agent.c]
     10X for mkdtemp; djm@
 - (dtucker) [acconfig.h configure.ac dns.c openbsd-compat/getrrsetbyname.c
   openbsd-compat/getrrsetbyname.h] DNS fingerprint support is now always
   compiled in but disabled in config.
 - (dtucker) [auth.c] Check for disabled password expiry on HP-UX Trusted Mode.
 - (tim) [regress/banner.sh] portability fix.

20031009
 - (dtucker) [sshd_config.5] UsePAM defaults to "no".  ok djm@

20031008
 - (dtucker) OpenBSD CVS Sync
   - dtucker@cvs.openbsd.org 2003/10/07 01:47:27
     [sshconnect2.c]
     Don't use logit for banner, since it truncates to MSGBUFSIZ; bz #668 &
     #707.  ok markus@
   - djm@cvs.openbsd.org 2003/10/07 07:04:16
     [sftp-int.c]
     sftp quoting fix from admorten AT umich.edu; ok markus@
   - deraadt@cvs.openbsd.org 2003/10/07 21:58:28
     [sshconnect2.c]
     set ptr to NULL after free
   - dtucker@cvs.openbsd.org 2003/10/07 01:52:13
     [regress/Makefile regress/banner.sh]
     Test SSH2 banner.  ok markus@
   - djm@cvs.openbsd.org 2003/10/07 07:04:52
     [regress/sftp-cmds.sh]
     more sftp quoting regress tests; ok markus

20031007
 - (djm) Delete autom4te.cache after autoreconf
 - (dtucker) [auth-pam.c auth-pam.h session.c] Make PAM use the new static
   cleanup functions.  With & ok djm@
 - (dtucker) [contrib/redhat/openssh.spec] Bug #714: Now that UsePAM is a
   run-time switch, always build --with-md5-passwords.
 - (dtucker) [configure.ac openbsd-compat/Makefile.in openbsd-compat/strtoul.c]
   Bug #670: add strtoul() to openbsd-compat for platforms lacking it.  ok djm@
 - (dtucker) [configure.ac] Bug #715: Set BROKEN_SETREUID and BROKEN_SETREGID
   on Reliant Unix.  Patch from Robert.Dahlem at siemens.com.
 - (dtucker) [configure.ac] Bug #710: Check for dlsym() in libdl on
   Reliant Unix.  Based on patch from Robert.Dahlem at siemens.com.

20031003
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/10/02 10:41:59
     [sshd.c]
     print openssl version, too, several requests; ok henning/djm.
   - markus@cvs.openbsd.org 2003/10/02 08:26:53
     [ssh-gss.h]
     missing $OpenBSD:; dtucker
 - (tim) [contrib/caldera/openssh.spec] Remove obsolete --with-ipv4-default
   option.

20031002
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/09/23 20:17:11
     [Makefile.in auth1.c auth2.c auth.c auth.h auth-krb5.c canohost.c
     cleanup.c clientloop.c fatal.c gss-serv.c log.c log.h monitor.c monitor.h
     monitor_wrap.c monitor_wrap.h packet.c serverloop.c session.c session.h
     ssh-agent.c sshd.c]
     replace fatal_cleanup() and linked list of fatal callbacks with static
     cleanup_exit() function.  re-refine cleanup_exit() where appropriate,
     allocate sshd's authctxt eary to allow simpler cleanup in sshd.
     tested by many, ok deraadt@
   - markus@cvs.openbsd.org 2003/09/23 20:18:52
     [progressmeter.c]
     don't print trailing \0; bug #709; Robert.Dahlem@siemens.com
     ok millert/deraadt@
   - markus@cvs.openbsd.org 2003/09/23 20:41:11
     [channels.c channels.h clientloop.c]
     move client only agent code to clientloop.c
   - markus@cvs.openbsd.org 2003/09/26 08:19:29
     [sshd.c]
     no need to set the listen sockets to non-block; ok deraadt@
   - jmc@cvs.openbsd.org 2003/09/29 11:40:51
     [ssh.1]
     - add list of options to -o and .Xr ssh_config(5)
     - some other cleanup
     requested by deraadt@;
     ok deraadt@ markus@
   - markus@cvs.openbsd.org 2003/09/29 20:19:57
     [servconf.c sshd_config]
     GSSAPICleanupCreds -> GSSAPICleanupCredentials
 - (dtucker) [configure.ac] Don't set DISABLE_SHADOW when configuring
   --with-pam.  ok djm@
 - (dtucker) [ssh-gss.h] Prototype change missed in sync.
 - (dtucker) [session.c] Fix bus errors on some 64-bit Solaris configurations.
   Based on patches by Matthias Koeppe and Thomas Baden.  ok djm@

20030930
 - (bal) Fix issues in openbsd-compat/realpath.c

20030925
 - (dtucker) [configure.ac openbsd-compat/xcrypt.c] Bug #633: Remove
   DISABLE_SHADOW for HP-UX, use getspnam instead of getprpwnam.  Patch from
   michael_steffens at hp.com, ok djm@
 - (tim) [sshd_config] UsePAM defaults to no.

20030924
 - (djm) Update version.h and spec files for HEAD
 - (dtucker) [configure.ac] IRIX5 needs the same setre[ug]id defines as IRIX6.

20030923
 - (dtucker) [Makefile.in] Bug #644: Fix "make clean" for out-of-tree
   builds.  Portability corrections from tim@.
 - (dtucker) [configure.ac] Bug #665: uid swapping issues on Mac OS X.
   Patch from max at quendi.de.
 - (dtucker) [configure.ac] Bug #657: uid swapping issues on BSDi.
 - (dtucker) [configure.ac] Bug #653: uid swapping issues on Tru64.
 - (dtucker) [configure.ac] Bug #693: uid swapping issues on NCR MP-RAS.
   Patch from david.haughton at ncr.com
 - (dtucker) [configure.ac] Bug #659: uid swapping issues on IRIX 6.
   Part of patch supplied by bugzilla-openssh at thewrittenword.com
 - (dtucker) [configure.ac openbsd-compat/fake-rfc2553.c
   openbsd-compat/fake-rfc2553.h] Bug #659: Test for and handle systems with
   where gai_strerror is defined as "const char *".  Part of patch supplied
   by bugzilla-openssh at thewrittenword.com
 - (dtucker) [contrib/cygwin/README contrib/cygwin/ssh-host-config] Update
   ssh-host-config to match current defaults, bump README version.  Patch from
   vinschen at redhat.com.
 - (dtucker) [uidswap.c] Don't test restoration of uid on Cygwin since the
   OS does not support permanently dropping privileges.  Patch from
   vinschen at redhat.com.
 - (dtucker) [openbsd-compat/port-aix.c] Use correct include for xmalloc.h,
   add canohost.h to stop warning.  Based on patch from openssh-unix-dev at
   thewrittenword.com
 - (dtucker) [INSTALL] Bug #686: Document requirement for zlib 1.1.4 or
   higher.
 - (tim) Fix typo. s/SETEIUD_BREAKS_SETUID/SETEUID_BREAKS_SETUID/
 - (tim) [configure.ac] Bug 665: move 3 new AC_DEFINES outside of AC_TRY_RUN.
   Report by distler AT golem ph utexas edu.
 - (dtucker) [contrib/aix/pam.conf] Include example pam.conf for AIX from
   article by genty at austin.ibm.com, included with the author's permission.
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/09/18 07:52:54
     [sshconnect.c]
     missing {}; bug #656; jclonguet at free.fr
   - markus@cvs.openbsd.org 2003/09/18 07:54:48
     [buffer.c]
     protect against double free; #660;  zardoz at users.sf.net
   - markus@cvs.openbsd.org 2003/09/18 07:56:05
     [authfile.c]
     missing  buffer_free(&encrypted); #662; zardoz at users.sf.net
   - markus@cvs.openbsd.org 2003/09/18 08:49:45
     [deattack.c misc.c session.c ssh-agent.c]
     more buffer allocation fixes; from Solar Designer; CAN-2003-0682;
     ok millert@
   - miod@cvs.openbsd.org 2003/09/18 13:02:21
     [authfd.c bufaux.c dh.c mac.c ssh-keygen.c]
     A few signedness fixes for harmless situations; markus@ ok
   - markus@cvs.openbsd.org 2003/09/19 09:02:02
     [packet.c]
     buffer_dump only if PACKET_DEBUG is defined; Jedi/Sector One; pr 3471
   - markus@cvs.openbsd.org 2003/09/19 09:03:00
     [buffer.c]
     sign fix in buffer_dump; Jedi/Sector One; pr 3473
   - markus@cvs.openbsd.org 2003/09/19 11:29:40
     [ssh-agent.c]
     provide a ssh-agent specific fatal() function; ok deraadt
   - markus@cvs.openbsd.org 2003/09/19 11:30:39
     [ssh-keyscan.c]
     avoid fatal_cleanup, just call exit(); ok deraadt
   - markus@cvs.openbsd.org 2003/09/19 11:31:33
     [channels.c]
     do not call channel_free_all on fatal; ok deraadt
   - markus@cvs.openbsd.org 2003/09/19 11:33:09
     [packet.c sshd.c]
     do not call packet_close on fatal; ok deraadt
   - markus@cvs.openbsd.org 2003/09/19 17:40:20
     [scp.c]
     error handling for remote-remote copy; #638; report Harald Koenig;
     ok millert, fgs, henning, deraadt
   - markus@cvs.openbsd.org 2003/09/19 17:43:35
     [clientloop.c sshtty.c sshtty.h]
     remove fatal callbacks from client code; ok deraadt
 - (bal) "extration" -> "extraction" in ssh-rand-helper.c; repoted by john
	on #unixhelp@efnet
 - (tim) [configure.ac] add --disable-etc-default-login option. ok djm
 - (djm) Sync with V_3_7 branch:
   - (djm) Fix SSH1 challenge kludge
   - (djm) Bug #671: Fix builds on OpenBSD
   - (djm) Bug #676: Fix PAM stack corruption
   - (djm) Fix bad free() in PAM code
   - (djm) Don't call pam_end before pam_init
   - (djm) Enable build with old OpenSSL again
   - (djm) Trim deprecated options from INSTALL. Mention UsePAM
   - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu

$Id: ChangeLog,v 1.3628 2005/02/01 08:16:45 dtucker Exp $
