- markus@cvs.openbsd.org 2001/04/04 00:06:54
     [clientloop.c sshconnect2.c]
     enable client rekeying
        (1) force rekeying with ~R, or
        (2) if the server requests rekeying.
     works against ssh-2.0.12/2.0.13/2.1.0/2.2.0/2.3.0/2.3.1/2.4.0
diff --git a/clientloop.c b/clientloop.c
index 4805f3c..1ed245e 100644
--- a/clientloop.c
+++ b/clientloop.c
@@ -59,7 +59,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: clientloop.c,v 1.53 2001/03/06 01:08:27 millert Exp $");
+RCSID("$OpenBSD: clientloop.c,v 1.54 2001/04/04 00:06:53 markus Exp $");
 
 #include "ssh.h"
 #include "ssh1.h"
@@ -73,6 +73,7 @@
 #include "buffer.h"
 #include "bufaux.h"
 #include "key.h"
+#include "kex.h"
 #include "log.h"
 #include "readconf.h"
 #include "clientloop.h"
@@ -130,6 +131,9 @@
 void	client_init_dispatch(void);
 int	session_ident = -1;
 
+/*XXX*/
+extern Kex *xxx_kex;
+
 /* Returns the user\'s terminal to normal mode if it had been put in raw mode. */
 
 void
@@ -548,6 +552,11 @@
 				/* We have been continued. */
 				continue;
 
+			case 'R':
+				debug("Rekeying");
+				kex_send_kexinit(xxx_kex);
+				continue;
+
 			case '&':
 				/* XXX does not work yet with proto 2 */
 				if (compat20)
@@ -762,7 +771,7 @@
 void
 client_process_buffered_input_packets(void)
 {
-	dispatch_run(DISPATCH_NONBLOCK, &quit_pending, NULL);
+	dispatch_run(DISPATCH_NONBLOCK, &quit_pending, compat20 ? xxx_kex : NULL);
 }
 
 /* scan buf[] for '~' before sending data to the peer */
@@ -1196,7 +1205,10 @@
 void
 client_init_dispatch_20(void)
 {
-	dispatch_init(&dispatch_protocol_error);
+	int i;
+	/* dispatch_init(&dispatch_protocol_error); */
+	for (i = 50; i <= 254; i++)
+		dispatch_set(i, &dispatch_protocol_error);
 	dispatch_set(SSH2_MSG_CHANNEL_CLOSE, &channel_input_oclose);
 	dispatch_set(SSH2_MSG_CHANNEL_DATA, &channel_input_data);
 	dispatch_set(SSH2_MSG_CHANNEL_EOF, &channel_input_ieof);