20030703
 - (dtucker) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/06/28 07:48:10
     [sshd.c]
     report pidfile creation errors, based on patch from Roumen Petrov;
     ok markus@
   - deraadt@cvs.openbsd.org 2003/06/28 16:23:06
     [atomicio.c atomicio.h authfd.c clientloop.c monitor_wrap.c msg.c
     progressmeter.c scp.c sftp-client.c ssh-keyscan.c ssh.h sshconnect.c
     sshd.c]
     deal with typing of write vs read in atomicio

20030630
 - (djm) Search for support functions necessary to build our 
   getrrsetbyname() replacement. Patch from Roumen Petrov 

20030629
 - (dtucker) [includes.h] Bug #602: move #include of netdb.h to after in.h
   (fixes compiler warnings on Solaris 2.5.1).
 - (dtucker) [configure.ac] Add sanity test after system-dependant compiler
   flag modifications.
   
20030628
 - (djm) Bug #591: use PKCS#15 private key label as a comment in case 
   of OpenSC. Report and patch from larsch@trustcenter.de
 - (djm) Bug #593: Sanity check OpenSC card reader number; patch from 
   aj@dungeon.inka.de
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/06/23 09:02:44
     [ssh_config.5]
     document EnableSSHKeysign; bugzilla #599; ok deraadt@, jmc@
   - markus@cvs.openbsd.org 2003/06/24 08:23:46
     [auth2-hostbased.c auth2-pubkey.c auth2.c channels.c key.c key.h
      monitor.c packet.c packet.h serverloop.c sshconnect2.c sshd.c]
     int -> u_int; ok djm@, deraadt@, mouring@
   - miod@cvs.openbsd.org 2003/06/25 22:39:36
     [sftp-server.c]
     Typo police: attribute is better written with an 'r'.
   - markus@cvs.openbsd.org 2003/06/26 20:08:33
     [readconf.c]
     do not dump core for 'ssh -o proxycommand host'; ok deraadt@
 - (dtucker) [regress/dynamic-forward.sh] Import new regression test.
 - (dtucker) [configure.ac] Bug #570: Have ./configure --enable-FEATURE 
   actually enable the feature, for those normally disabled.  Patch by
   openssh (at) roumenpetrov.info.

20030624
 - (dtucker) Have configure refer the user to config.log and
   contrib/findssl.sh for OpenSSL header/library mismatches.

20030622
 - (dtucker) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/06/21 09:14:05
     [regress/reconfigure.sh]
     missing $SUDO; from dtucker@zip.com.au
   - markus@cvs.openbsd.org 2003/06/18 11:28:11
     [ssh-rsa.c]
     backout last change, since it violates pkcs#1
     switch to share/misc/license.template
   - djm@cvs.openbsd.org 2003/06/20 05:47:58
     [sshd_config.5]
     sync description of protocol 2 cipher proposal; ok markus
   - djm@cvs.openbsd.org 2003/06/20 05:48:21
     [sshd_config]
     sync some implemented options; ok markus@
 - (dtucker) [regress/authorized_keys_root] Remove temp data file from CVS.
 - (dtucker) [openbsd-compat/setproctitle.c] Ensure SPT_TYPE is defined before
   testing its value.

20030618
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/06/12 07:57:38
     [monitor.c sshlogin.c sshpty.c]
     typos; dtucker at zip.com.au
   - djm@cvs.openbsd.org 2003/06/12 12:22:47
     [LICENCE]
     mention more copyright holders; ok markus@
   - nino@cvs.openbsd.org 2003/06/12 15:34:09
     [scp.c]
     Typo. Ok markus@.
   - markus@cvs.openbsd.org 2003/06/12 19:12:03
     [scard.c scard.h ssh-agent.c ssh.c]
     add sc_get_key_label; larsch at trustcenter.de; bugzilla#591
   - markus@cvs.openbsd.org 2003/06/16 08:22:35
     [ssh-rsa.c]
     make sure the signature has at least the expected length (don't
     insist on len == hlen + oidlen, since this breaks some smartcards)
     bugzilla #592; ok djm@
   - markus@cvs.openbsd.org 2003/06/16 10:22:45
     [ssh-add.c]
     print out key comment on each prompt; make ssh-askpass more useable; ok djm@
   - markus@cvs.openbsd.org 2003/06/17 18:14:23
     [cipher-ctr.c]
     use license from /usr/share/misc/license.template for new code
 - (dtucker) [reconfigure.sh rekey.sh sftp-badcmds.sh]
   Import new regression tests from OpenBSD
 - (dtucker) [regress/copy.1 regress/copy.2] Remove temp data files from CVS.
 - (dtucker) OpenBSD CVS Sync (regress/)
   - markus@cvs.openbsd.org 2003/04/02 12:21:13
     [Makefile]
     enable rekey test
   - djm@cvs.openbsd.org 2003/04/04 09:34:22
     [Makefile sftp-cmds.sh]
     More regression tests, including recent directory rename bug; ok markus@
   - markus@cvs.openbsd.org 2003/05/14 22:08:27
     [ssh-com-client.sh ssh-com-keygen.sh ssh-com-sftp.sh ssh-com.sh]
     test against some new commerical versions
   - mouring@cvs.openbsd.org 2003/05/15 04:07:12
     [sftp-cmds.sh]
     Advanced put/get testing for sftp.  OK @djm
   - markus@cvs.openbsd.org 2003/06/12 15:40:01
     [try-ciphers.sh]
     add ctr
   - markus@cvs.openbsd.org 2003/06/12 15:43:32
     [Makefile]
     test -HUP; dtucker at zip.com.au

20030614
 - (djm) Update license on fake-rfc2553.[ch]; ok itojun@

20030611
 - (djm) Mention portable copyright holders in LICENSE
 - (djm) Put licenses on substantial header files
 - (djm) Sync LICENSE against OpenBSD
 - (djm) OpenBSD CVS Sync
   - jmc@cvs.openbsd.org 2003/06/10 09:12:11
     [scp.1 sftp-server.8 ssh.1 ssh-add.1 ssh-agent.1 ssh_config.5]
     [sshd.8 sshd_config.5 ssh-keygen.1 ssh-keyscan.1 ssh-keysign.8]
     - section reorder
     - COMPATIBILITY merge
     - macro cleanup
     - kill whitespace at EOL
     - new sentence, new line
     ssh pages ok markus@
   - deraadt@cvs.openbsd.org 2003/06/10 22:20:52
     [packet.c progressmeter.c]
     mostly ansi cleanup; pval ok
   - jakob@cvs.openbsd.org 2003/06/11 10:16:16
     [sshconnect.c]
     clean up check_host_key() and improve SSHFP feedback. ok markus@
   - jakob@cvs.openbsd.org 2003/06/11 10:18:47
     [dns.c]
     sync with check_host_key() change
   - djm@cvs.openbsd.org 2003/06/11 11:18:38
     [authfd.c authfd.h ssh-add.c ssh-agent.c]
     make agent constraints (lifetime, confirm) work with smartcard keys; 
     ok markus@


20030609
 - (djm) Sync README.smartcard with OpenBSD -current
 - (djm) Re-merge OpenSC info into README.smartcard

20030606
 - (dtucker) [uidswap.c] Fix setreuid and add missing args to fatal(). ok djm@

20030605
 - (djm) Support AI_NUMERICHOST in fake-getaddrinfo.c. Needed for recent
   canohost.c changes.
 - (djm) Implement paranoid priv dropping checks, based on:
   "SetUID demystified" - Hao Chen, David Wagner and Drew Dean
   Proceedings of USENIX Security Symposium 2002
 - (djm) Don't use xmalloc() or pull in toplevel headers in fake-* code
 - (djm) Merge all the openbsd/fake-* into fake-rfc2553.[ch]
 - (djm) Bug #588 - Add scard-opensc.o back to Makefile.in
   Patch from larsch@trustcenter.de
 - (djm) Bug #589 - scard-opensc: load only keys with a private keys
   Patch from larsch@trustcenter.de
 - (dtucker) Add includes.h to fake-rfc2553.c so it will build.
 - (dtucker) Define EAI_NONAME in fake-rfc2553.h (used by fake-rfc2553.c).

20030604
 - (djm) Bug #573 - Remove unneeded Krb headers and compat goop. Patch from
   simon@sxw.org.uk (Also matches a change in OpenBSD a while ago)
 - (djm) Bug #577 - wrong flag in scard-opensc.c sc_private_decrypt. 
   Patch from larsch@trustcenter.de; ok markus@
 - (djm) Bug #584: scard-opensc.c doesn't work without PIN. Patch from 
   larsch@trustcenter.de; ok markus@
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/06/04 08:25:18
     [sshconnect.c]
     disable challenge/response and keyboard-interactive auth methods 
     upon hostkey mismatch. based on patch from fcusack AT fcusack.com. 
     bz #580; ok markus@
   - djm@cvs.openbsd.org 2003/06/04 10:23:48
     [sshd.c]
     remove duplicated group-dropping code; ok markus@
   - djm@cvs.openbsd.org 2003/06/04 12:03:59
     [serverloop.c]
     remove bitrotten commet; ok markus@
   - djm@cvs.openbsd.org 2003/06/04 12:18:49
     [scp.c]
     ansify; ok markus@
   - djm@cvs.openbsd.org 2003/06/04 12:40:39
     [scp.c]
     kill ssh process upon receipt of signal, bz #241.
     based on patch from esb AT hawaii.edu; ok markus@
   - djm@cvs.openbsd.org 2003/06/04 12:41:22
     [sftp.c]
     kill ssh process on receipt of signal; ok markus@
 - (djm) Update to fix of bug #584: lock card before return. 
   From larsch@trustcenter.de
 - (djm) Always use mysignal() for SIGALRM

20030603
 - (djm) Replace setproctitle replacement with code derived from 
   UCB sendmail
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/06/02 09:17:34
     [auth2-hostbased.c auth.c auth-options.c auth-rhosts.c auth-rh-rsa.c]
     [canohost.c monitor.c servconf.c servconf.h session.c sshd_config]
     [sshd_config.5]
     deprecate VerifyReverseMapping since it's dangerous if combined
     with IP based access control as noted by Mike Harding; replace with
     a UseDNS option, UseDNS is on by default and includes the
     VerifyReverseMapping check; with itojun@, provos@, jakob@ and deraadt@
     ok deraadt@, djm@
   - millert@cvs.openbsd.org 2003/06/03 02:56:16
     [scp.c]
     Remove the advertising clause in the UCB license which Berkeley
     rescinded 22 July 1999.  Proofed by myself and Theo.
 - (djm) Fix portable-specific uses of verify_reverse_mapping too
 - (djm) Sync openbsd-compat with OpenBSD CVS. 
    - No more 4-term BSD licenses in linked code
 - (dtucker) [port-aix.c bsd-cray.c] Fix uses of verify_reverse_mapping.

20030602
 - (djm) Fix segv from bad reordering in auth-pam.c
 - (djm) Always use saved_argv in sshd.c as compat_init_setproctitle may 
   clobber
 - (tim) openbsd-compat/xmmap.[ch] License clarifications. Add missing
   CVS ID.
 - (djm) Remove "noip6" option from RedHat spec file. This may now be 
   set at runtime using AddressFamily option.
 - (djm) Fix use of macro before #define in cipher-aes.c
 - (djm) Sync license on openbsd-compat/bindresvport.c with OpenBSD CVS
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/05/26 12:54:40
     [sshconnect.c]
     fix format strings; ok markus@
   - deraadt@cvs.openbsd.org 2003/05/29 16:58:45
     [sshd.c uidswap.c]
     seteuid and setegid; markus ok
   - jakob@cvs.openbsd.org 2003/06/02 08:31:10
     [ssh_config.5]
     VerifyHostKeyDNS is v2 only. ok markus@

20030530
 - (dtucker) Add missing semicolon in md5crypt.c, patch from openssh at
   roumenpetrov.info
 - (dtucker) Define SSHD_ACQUIRES_CTTY for NCR MP-RAS and Reliant Unix.

20030526
 - (djm) Avoid auth2-chall.c warning when compiling without 
   PAM, BSD_AUTH and SKEY

20030525
- (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/05/24 09:02:22
     [log.c]
     pass logged data through strnvis; ok markus
   - djm@cvs.openbsd.org 2003/05/24 09:30:40
     [authfile.c monitor.c sftp-common.c sshpty.c]
     cast some types for printing; ok markus@

20030524
 - (dtucker) Correct --osfsia in INSTALL.  Patch by skeleten at shillest.net

20030523
 - (djm) Use VIS_SAFE on logged strings rather than default strnvis 
   encoding (which encodes many more characters)
 - OpenBSD CVS Sync
   - jmc@cvs.openbsd.org 2003/05/20 12:03:35
     [sftp.1]
     - new sentence, new line
     - added .Xr's
     - typos
     ok djm@
   - jmc@cvs.openbsd.org 2003/05/20 12:09:31
     [ssh.1 ssh_config.5 sshd.8 sshd_config.5 ssh-keygen.1]
     new sentence, new line
   - djm@cvs.openbsd.org 2003/05/23 08:29:30
     [sshconnect.c]
     fix leak; ok markus@

20030520
 - (djm) OpenBSD CVS Sync
   - deraadt@cvs.openbsd.org 2003/05/18 23:22:01
     [log.c]
     use syslog_r() in a signal handler called place; markus ok
 - (djm) Configure logic to detect syslog_r and friends

20030519
 - (djm) Sync auth-pam.h with what we actually implement

20030518
 - (djm) Return of the dreaded PAM_TTY_KLUDGE, which went missing in 
   recent merge
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/05/16 03:27:12
     [readconf.c ssh_config ssh_config.5 ssh-keysign.c]
     add AddressFamily option to ssh_config (like -4, -6 on commandline).
     Portable bug #534; ok markus@
   - itojun@cvs.openbsd.org 2003/05/17 03:25:58
     [auth-rhosts.c]
     just in case, put numbers to sscanf %s arg.
   - markus@cvs.openbsd.org 2003/05/17 04:27:52
     [cipher.c cipher-ctr.c myproposal.h]
     experimental support for aes-ctr modes from
     http://www.ietf.org/internet-drafts/draft-ietf-secsh-newmodes-00.txt
     ok djm@
 - (djm) Remove IPv4 by default hack now that we can specify AF in config
 - (djm) Tidy and trim TODO
 - (djm) Sync openbsd-compat/ with OpenBSD CVS head
 - (djm) Big KNF on openbsd-compat/
 - (djm) KNF on md5crypt.[ch]
 - (djm) KNF on auth-sia.[ch]

20030517
 - (bal) strcat -> strlcat on openbsd-compat/realpath.c (rev 1.8 OpenBSD)

20030516
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/05/15 13:52:10
     [ssh.c]
     Make "ssh -V" print the OpenSSL version in a human readable form. Patch
     from Craig Leres (mindrot at ee.lbl.gov); ok markus@
   - jakob@cvs.openbsd.org 2003/05/15 14:02:47
     [readconf.c servconf.c]
     warn for unsupported config option. ok markus@
   - markus@cvs.openbsd.org 2003/05/15 14:09:21
     [auth2-krb5.c]
     fix 64bit issue; report itojun@
   - djm@cvs.openbsd.org 2003/05/15 14:55:25
     [readconf.c readconf.h ssh_config ssh_config.5 sshconnect.c]
     add a ConnectTimeout option to ssh, based on patch from
     Jean-Charles Longuet (jclonguet at free.fr); portable #207 ok markus@
 - (djm) Add warning for UsePAM when built without PAM support
 - (djm) A few type mismatch fixes from Bug #565
 - (djm) Guard free_pam_environment against NULL argument. Works around
   HP/UX PAM problems debugged by dtucker

20030515
 - (djm) OpenBSD CVS Sync
   - jmc@cvs.openbsd.org 2003/05/14 13:11:56
     [ssh-agent.1]
     setup -> set up;
     from wiz@netbsd
   - jakob@cvs.openbsd.org 2003/05/14 18:16:20
     [key.c key.h readconf.c readconf.h ssh_config.5 sshconnect.c]
     [dns.c dns.h README.dns ssh-keygen.1 ssh-keygen.c]
     add experimental support for verifying hos keys using DNS as described
     in draft-ietf-secsh-dns-xx.txt. more information in README.dns.
     ok markus@ and henning@
   - markus@cvs.openbsd.org 2003/05/14 22:24:42
     [clientloop.c session.c ssh.1]
     allow to send a BREAK to the remote system; ok various
   - markus@cvs.openbsd.org 2003/05/15 00:28:28
     [sshconnect2.c]
     cleanup unregister of per-method packet handlers; ok djm@
   - jakob@cvs.openbsd.org 2003/05/15 01:48:10
     [readconf.c readconf.h servconf.c servconf.h]
     always parse kerberos options. ok djm@ markus@
   - jakob@cvs.openbsd.org 2003/05/15 02:27:15
     [dns.c]
     add missing freerrset
   - markus@cvs.openbsd.org 2003/05/15 03:08:29
     [cipher.c cipher-bf1.c cipher-aes.c cipher-3des1.c]
     split out custom EVP ciphers
   - djm@cvs.openbsd.org 2003/05/15 03:10:52
     [ssh-keygen.c]
     avoid warning; ok jakob@
   - mouring@cvs.openbsd.org 2003/05/15 03:39:07
     [sftp-int.c]
     Make put/get (globed and nonglobed) code more consistant. OK djm@
   - mouring@cvs.openbsd.org 2003/05/15 03:43:59
     [sftp-int.c sftp.c]
     Teach ls how to display multiple column display and allow users 
     to return to single column format via 'ls -1'.  OK @djm
   - jakob@cvs.openbsd.org 2003/05/15 04:08:44
     [readconf.c servconf.c]
     disable kerberos when not supported. ok markus@
   - markus@cvs.openbsd.org 2003/05/15 04:08:41
     [ssh.1]
     ~B is ssh2 only
 - (djm) Always parse UsePAM
 - (djm) Configure glue for DNS support (code doesn't work in portable yet)
 - (djm) Import getrrsetbyname() function from OpenBSD libc (for DNS support)
 - (djm) Tidy Makefile clean targets
 - (djm) Adapt README.dns for portable
 - (djm) Avoid uuencode.c warnings
 - (djm) Enable UsePAM when built --with-pam
 - (djm) Only build getrrsetbyname replacement when using --with-dns
 - (djm) Bug #529: sshd doesn't work correctly after SIGHUP (copy argv 
         correctly)
 - (djm) Bug #444: Wrong paths after reconfigure
 - (dtucker) HP-UX needs to include <sys/strtio.h> for TIOCSBRK

20030514
 - (djm) Bug #117: Don't lie to PAM about username
 - (djm) RCSID sync w/ OpenBSD
 - (djm) OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2003/04/09 12:00:37
     [readconf.c]
     strip trailing whitespace from config lines before parsing. 
     Fixes bz 528; ok markus@
   - markus@cvs.openbsd.org 2003/04/12 10:13:57
     [cipher.c]
     hide cipher details; ok djm@
   - markus@cvs.openbsd.org 2003/04/12 10:15:36
     [misc.c]
     debug->debug2
   - naddy@cvs.openbsd.org 2003/04/12 11:40:15
     [ssh.1]
     document -V switch, fix wording; ok markus@
   - markus@cvs.openbsd.org 2003/04/14 14:17:50
     [channels.c sshconnect.c sshd.c ssh-keyscan.c]
     avoid hardcoded SOCK_xx; with itojun@; should allow ssh over SCTP
   - mouring@cvs.openbsd.org 2003/04/14 21:31:27
     [sftp-int.c]
     Missing globfree(&g) in process_put() spotted by Vince Brimhall
     <VBrimhall@novell.com>.  ok@ Theo
   - markus@cvs.openbsd.org 2003/04/16 14:35:27
     [auth.h]
     document struct Authctxt; with solar
   - deraadt@cvs.openbsd.org 2003/04/26 04:29:49
     [ssh-keyscan.c]
     -t in usage(); rogier@quaak.org
   - mouring@cvs.openbsd.org 2003/04/30 01:16:20
     [sshd.8 sshd_config.5]
     Escape ?, * and ! in .Ql for nroff compatibility.  OpenSSH Portable 
     Bug #550 and * escaping suggested by jmc@.
   - david@cvs.openbsd.org 2003/04/30 20:41:07
     [sshd.8]
     fix invalid .Pf macro usage introduced in previous commit
     ok jmc@ mouring@
   - markus@cvs.openbsd.org 2003/05/11 16:56:48
     [authfile.c ssh-keygen.c]
     change key_load_public to try to read a public from:
     rsa1 private or rsa1 public and ssh2 keys.
     this makes ssh-keygen -e fail for ssh1 keys more gracefully
     for example; report from itojun (netbsd pr 20550).
   - markus@cvs.openbsd.org 2003/05/11 20:30:25
     [channels.c clientloop.c serverloop.c session.c ssh.c]
     make channel_new() strdup the 'remote_name' (not the caller); ok theo
   - markus@cvs.openbsd.org 2003/05/12 16:55:37
     [sshconnect2.c]
     for pubkey authentication try the user keys in the following order:
        1. agent keys that are found in the config file
        2. other agent keys
        3. keys that are only listed in the config file
     this helps when an agent has many keys, where the server might
     close the connection before the correct key is used. report & ok pb@
   - markus@cvs.openbsd.org 2003/05/12 18:35:18
     [ssh-keyscan.1]
     typo: DSA keys are of type ssh-dss; Brian Poole
   - markus@cvs.openbsd.org 2003/05/14 00:52:59
     [ssh2.h]
     ranges for per auth method messages
   - djm@cvs.openbsd.org 2003/05/14 01:00:44
     [sftp.1]
     emphasise the batchmode functionality and make reference to pubkey auth,
     both of which are FAQs; ok markus@
   - markus@cvs.openbsd.org 2003/05/14 02:15:47
     [auth2.c monitor.c sshconnect2.c auth2-krb5.c]
     implement kerberos over ssh2 ("kerberos-2@ssh.com"); tested with jakob@
     server interops with commercial client; ok jakob@ djm@
   - jmc@cvs.openbsd.org 2003/05/14 08:25:39
     [sftp.1]
     - better formatting in SYNOPSIS
     - whitespace at EOL
     ok djm@
   - markus@cvs.openbsd.org 2003/05/14 08:57:49
     [monitor.c]
     http://bugzilla.mindrot.org/show_bug.cgi?id=560
     Privsep child continues to run after monitor killed.
     Pass monitor signals through to child; Darren Tucker
 - (djm) Make portable build with MIT krb5 (some issues remain)
 - (djm) Add new UsePAM configuration directive to allow runtime control
   over usage of PAM. This allows non-root use of sshd when built with
   --with-pam
 - (djm) Die screaming if start_pam() is called when UsePAM=no
 - (djm) Avoid KrbV leak for MIT Kerberos
 - (dtucker) Set ai_socktype and ai_protocol in fake-getaddrinfo.c. ok djm@
 - (djm) Bug #258: sscanf("[0-9]") -> sscanf("[0123456789]") for portability

20030512
 - (djm) Redhat spec: Don't install profile.d scripts when not 
   building with GNOME/GTK askpass (patch from bet@rahul.net)

20030510
 - (dtucker) Bug #318: Create ssh_prng_cmds.out during "make" rather than
   "make install".  Patch by roth@feep.net.
 - (dtucker) Bug #536: Test for and work around openpty/controlling tty
   problem on Linux (fixes "could not set controlling tty" errors).
 - (djm) Merge FreeBSD PAM code: replaces PAM password auth kludge with 
   proper challenge-response module
 - (djm) 2-clause license on loginrec.c, with permission from
   andre@ae-35.com

20030504
 - (dtucker) Bug #497: Move #include of bsd-cygwin_util.h to openbsd-compat.h.
   Patch from vinschen@redhat.com.

20030503
 - (dtucker) Add missing "void" to record_failed_login in bsd-cray.c.  Noted
   by wendyp@cray.com.

20030502
 - (dtucker) Bug #544: ignore invalid cmsg_type on Linux 2.0 kernels,
   privsep should now work.
 - (dtucker) Move handling of bad password authentications into a platform
   specific record_failed_login() function (affects AIX & Unicos). ok mouring@

20030429
 - (djm) Add back radix.o (used by AFS support), after it went missing from
   Makefile many moons ago
 - (djm) Apply "owl-always-auth" patch from Openwall/Solar Designer
 - (djm) Fix blibpath specification for AIX/gcc
 - (djm) Some systems have basename in -lgen. Fix from ayamura@ayamura.org

20030428
 - (bal) [defines.h progressmeter.c scp.c] Some more culling of non 64bit 
   hacked code.

20030427
 - (bal) Bug #541: return; was dropped by mistake.  Reported by 
   furrier@iglou.com
 - (bal) Since we don't support platforms lacking u_int_64.  We may
   as well clean out some of those evil #ifdefs
 - (bal) auth1.c minor resync while looking at the code.
 - (bal) auth2.c same changed as above.

20030409
 - (djm) Bug #539: Specify creation mode with O_CREAT for lastlog. Report 
   from matth@eecs.berkeley.edu
 - (djm) Make the spec work with Redhat 9.0 (which renames sharutils)
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/04/02 09:48:07
     [clientloop.c monitor.c monitor_wrap.c packet.c packet.h readconf.c]
     [readconf.h serverloop.c sshconnect2.c]
     reapply rekeying chage, tested by henning@, ok djm@
   - markus@cvs.openbsd.org 2003/04/02 14:36:26
     [ssh-keysign.c]
     potential segfault if KEY_UNSPEC; cjwatson@debian.org; bug #526
   - itojun@cvs.openbsd.org 2003/04/03 07:25:27
     [progressmeter.c]
     $OpenBSD$
   - itojun@cvs.openbsd.org 2003/04/03 10:17:35
     [progressmeter.c]
     remove $OpenBSD$, as other *.c does not have it.
   - markus@cvs.openbsd.org 2003/04/07 08:29:57
     [monitor_wrap.c]
     typo: get correct counters; introduced during rekeying change.
   - millert@cvs.openbsd.org 2003/04/07 21:58:05
     [progressmeter.c]
     The UCB copyright here is incorrect.  This code did not originate
     at UCB, it was written by Luke Mewburn.  Updated the copyright at
     the author's request.  markus@ OK
   - itojun@cvs.openbsd.org 2003/04/08 20:21:29
     [*.c *.h]
     rename log() into logit() to avoid name conflict.  markus ok, from
     netbsd
     - (djm) XXX - Performed locally using:
       "perl -p -i -e 's/(\s|^)log\(/$1logit\(/g' *.c *.h"
   - hin@cvs.openbsd.org 2003/04/09 08:23:52
     [servconf.c]
     Don't include <krb.h> when compiling with Kerberos 5 support
   - (djm) Fix up missing include for packet.c
   - (djm) Fix missed log => logit occurance (reference by function pointer)

20030402
 - (bal) if IP_TOS is not found or broken don't try to compile in
   packet_set_tos() function call.  bug #527

20030401
 - (djm) OpenBSD CVS Sync
   - jmc@cvs.openbsd.org 2003/03/28 10:11:43
     [scp.1 sftp.1 ssh.1 ssh-add.1 ssh-agent.1 ssh_config.5 sshd_config.5]
     [ssh-keygen.1 ssh-keyscan.1 ssh-keysign.8]
     - killed whitespace
     - new sentence new line
     - .Bk for arguments
     ok markus@
   - markus@cvs.openbsd.org 2003/04/01 10:10:23
     [clientloop.c monitor.c monitor_wrap.c packet.c packet.h readconf.c]
     [readconf.h serverloop.c sshconnect2.c]
     rekeying bugfixes and automatic rekeying:
     * both client and server rekey _automatically_
           (a) after 2^31 packets, because after 2^32 packets
               the sequence number for packets wraps
           (b) after 2^(blocksize_in_bits/4) blocks
       (see: draft-ietf-secsh-newmodes-00.txt)
       (a) and (b) are _enabled_ by default, and only disabled for known
       openssh versions, that don't support rekeying properly.
     * client option 'RekeyLimit'
     * do not reply to requests during rekeying
   - markus@cvs.openbsd.org 2003/04/01 10:22:21
     [clientloop.c monitor.c monitor_wrap.c packet.c packet.h readconf.c]
     [readconf.h serverloop.c sshconnect2.c]
     backout rekeying changes (for 3.6.1)
   - markus@cvs.openbsd.org 2003/04/01 10:31:26
     [compat.c compat.h kex.c]
     bugfix causes stalled connections for ssh.com < 3.0; noticed by ho@; 
     tested by ho@ and myself
   - markus@cvs.openbsd.org 2003/04/01 10:56:46
     [version.h]
     3.6.1
 - (djm) Crank spec file versions
 - (djm) Release 3.6.1p1

20030326
 - (djm) OpenBSD CVS Sync
   - deraadt@cvs.openbsd.org 2003/03/26 04:02:51
     [sftp-server.c]
     one last fix to the tree: race fix broke stuff; pr 3169; 
     srp@srparish.net, help from djm

20030325
 - (djm) Fix getpeerid support for 64 bit BE systems. From 
    Arnd Bergmann <arndb@de.ibm.com>

20030324
 - (djm) OpenBSD CVS Sync
   - markus@cvs.openbsd.org 2003/03/23 19:02:00
     [monitor.c]
     unbreak rekeying for privsep; ok millert@
 - Release 3.6p1
 - Fix sshd BindAddress and -b options for systems using fake-getaddrinfo.
   Report from murple@murple.net, diagnosis from dtucker@zip.com.au

$Id: ChangeLog,v 1.2837 2003/07/03 03:46:56 dtucker Exp $
