summaryrefslogtreecommitdiffhomepage
path: root/cli-session.c
diff options
context:
space:
mode:
Diffstat (limited to 'cli-session.c')
-rw-r--r--cli-session.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/cli-session.c b/cli-session.c
index f862bc8..c5252b5 100644
--- a/cli-session.c
+++ b/cli-session.c
@@ -109,6 +109,12 @@ void cli_session(int sock_in, int sock_out) {
}
+static void cli_send_kex_first_guess() {
+ send_msg_kexdh_init();
+ dropbear_log(LOG_INFO, "kexdh_init guess sent");
+ //cli_ses.kex_state = KEXDH_INIT_SENT;
+}
+
static void cli_session_init() {
cli_ses.state = STATE_NOTHING;
@@ -142,12 +148,14 @@ static void cli_session_init() {
/* For printing "remote host closed" for the user */
ses.remoteclosed = cli_remoteclosed;
- ses.buf_match_algo = cli_buf_match_algo;
/* packet handlers */
ses.packettypes = cli_packettypes;
ses.isserver = 0;
+
+ ses.send_kex_first_guess = cli_send_kex_first_guess;
+
}
/* This function drives the progress of the session - it initiates KEX,
@@ -157,15 +165,13 @@ static void cli_sessionloop() {
TRACE(("enter cli_sessionloop"))
if (ses.lastpacket == SSH_MSG_KEXINIT && cli_ses.kex_state == KEX_NOTHING) {
- cli_ses.kex_state = KEXINIT_RCVD;
- }
-
- if (cli_ses.kex_state == KEXINIT_RCVD) {
-
/* We initiate the KEXDH. If DH wasn't the correct type, the KEXINIT
* negotiation would have failed. */
- send_msg_kexdh_init();
- cli_ses.kex_state = KEXDH_INIT_SENT;
+ if (!ses.kexstate.our_first_follows_matches) {
+ dropbear_log(LOG_INFO, "kexdh_init after remote's kexinit");
+ send_msg_kexdh_init();
+ }
+ cli_ses.kex_state = KEXDH_INIT_SENT;
TRACE(("leave cli_sessionloop: done with KEXINIT_RCVD"))
return;
}