mirror of
https://github.com/clearml/dropbear
synced 2025-05-15 09:05:52 +00:00
requirenext fixup for firstkexfollows
This commit is contained in:
parent
ba15bbfe33
commit
ef151888fb
36
CHANGES
36
CHANGES
@ -1,3 +1,39 @@
|
|||||||
|
2013.57 -
|
||||||
|
|
||||||
|
- Improved initial connection time particularly with high latency connections.
|
||||||
|
The number of round trips has been reduced for both client and server.
|
||||||
|
CPU time hasn't been changed.
|
||||||
|
|
||||||
|
- Client will attempt to send an initial key exchange packet to save a round
|
||||||
|
trip. Dropbear implements an extension kexguess2@matt.ucc.asn.au to allow
|
||||||
|
the first packet guess to succeed in wider circumstances than the standard
|
||||||
|
behaviour. When communicating with other implementations the standard
|
||||||
|
behaviour is used.
|
||||||
|
|
||||||
|
- Client side: when public key or password authentication with
|
||||||
|
$DROPBEAR_PASSWORD is used, an initial authentication request will
|
||||||
|
be sent immediately rather than querying the list of available methods.
|
||||||
|
This behaviour is enabled by CLI_IMMEDIATE_AUTH option (on by default),
|
||||||
|
please let the Dropbear author know if it causes any interoperability
|
||||||
|
problems.
|
||||||
|
|
||||||
|
- Implement client escape characters ~. (terminate session) and
|
||||||
|
~^Z (background session)
|
||||||
|
|
||||||
|
- Server will more reliably clean up utmp when connection is closed
|
||||||
|
|
||||||
|
- Don't crash if /dev/urandom isn't writable (RHEL5), thanks to Scott Case
|
||||||
|
|
||||||
|
- Add "-y -y" client option to skip host key checking, thanks to Hans Harder
|
||||||
|
|
||||||
|
- scp didn't work properly on systems using vfork(), thanks to Frank Van Uffelen
|
||||||
|
|
||||||
|
- Added IUTF8 terminal mode support. Not yet standardised though seems that it
|
||||||
|
will soon be
|
||||||
|
|
||||||
|
- Some verbose DROPBEAR_TRACE output is now hidden unless $DROPBEAR_TRACE2
|
||||||
|
enviroment variable is set
|
||||||
|
|
||||||
2013.56 - Thursday 21 March 2013
|
2013.56 - Thursday 21 March 2013
|
||||||
|
|
||||||
- Allow specifying cipher (-c) and MAC (-m) lists for dbclient
|
- Allow specifying cipher (-c) and MAC (-m) lists for dbclient
|
||||||
|
@ -61,8 +61,8 @@ void send_msg_kexdh_init() {
|
|||||||
buf_putbyte(ses.writepayload, SSH_MSG_KEXDH_INIT);
|
buf_putbyte(ses.writepayload, SSH_MSG_KEXDH_INIT);
|
||||||
buf_putmpint(ses.writepayload, cli_ses.dh_e);
|
buf_putmpint(ses.writepayload, cli_ses.dh_e);
|
||||||
encrypt_packet();
|
encrypt_packet();
|
||||||
// XXX fixme
|
ses.requirenext[0] = SSH_MSG_KEXDH_REPLY;
|
||||||
//ses.requirenext = SSH_MSG_KEXDH_REPLY;
|
ses.requirenext[1] = SSH_MSG_KEXINIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle a diffie-hellman key exchange reply. */
|
/* Handle a diffie-hellman key exchange reply. */
|
||||||
@ -118,7 +118,8 @@ void recv_msg_kexdh_reply() {
|
|||||||
hostkey = NULL;
|
hostkey = NULL;
|
||||||
|
|
||||||
send_msg_newkeys();
|
send_msg_newkeys();
|
||||||
ses.requirenext = SSH_MSG_NEWKEYS;
|
ses.requirenext[0] = SSH_MSG_NEWKEYS;
|
||||||
|
ses.requirenext[1] = 0;
|
||||||
TRACE(("leave recv_msg_kexdh_init"))
|
TRACE(("leave recv_msg_kexdh_init"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,7 +542,7 @@ void recv_msg_kexinit() {
|
|||||||
buf_putstring(ses.kexhashbuf,
|
buf_putstring(ses.kexhashbuf,
|
||||||
ses.transkexinit->data, ses.transkexinit->len);
|
ses.transkexinit->data, ses.transkexinit->len);
|
||||||
|
|
||||||
ses.requirenext = SSH_MSG_KEXDH_INIT;
|
ses.requirenext[0] = SSH_MSG_KEXDH_INIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf_free(ses.transkexinit);
|
buf_free(ses.transkexinit);
|
||||||
|
@ -82,7 +82,7 @@ void common_session_init(int sock_in, int sock_out) {
|
|||||||
|
|
||||||
initqueue(&ses.writequeue);
|
initqueue(&ses.writequeue);
|
||||||
|
|
||||||
ses.requirenext = SSH_MSG_KEXINIT;
|
ses.requirenext[0] = SSH_MSG_KEXINIT;
|
||||||
ses.dataallowed = 1; /* we can send data until we actually
|
ses.dataallowed = 1; /* we can send data until we actually
|
||||||
send the SSH_MSG_KEXINIT */
|
send the SSH_MSG_KEXINIT */
|
||||||
ses.ignorenext = 0;
|
ses.ignorenext = 0;
|
||||||
|
2
debug.h
2
debug.h
@ -39,7 +39,7 @@
|
|||||||
* Caution: Don't use this in an unfriendly environment (ie unfirewalled),
|
* Caution: Don't use this in an unfriendly environment (ie unfirewalled),
|
||||||
* since the printing may not sanitise strings etc. This will add a reasonable
|
* since the printing may not sanitise strings etc. This will add a reasonable
|
||||||
* amount to your executable size. */
|
* amount to your executable size. */
|
||||||
#define DEBUG_TRACE
|
/* #define DEBUG_TRACE */
|
||||||
|
|
||||||
/* All functions writing to the cleartext payload buffer call
|
/* All functions writing to the cleartext payload buffer call
|
||||||
* CHECKCLEARTOWRITE() before writing. This is only really useful if you're
|
* CHECKCLEARTOWRITE() before writing. This is only really useful if you're
|
||||||
|
@ -74,14 +74,15 @@ void process_packet() {
|
|||||||
|
|
||||||
/* This applies for KEX, where the spec says the next packet MUST be
|
/* This applies for KEX, where the spec says the next packet MUST be
|
||||||
* NEWKEYS */
|
* NEWKEYS */
|
||||||
if (ses.requirenext != 0) {
|
if (ses.requirenext[0] != 0) {
|
||||||
if (ses.requirenext != type) {
|
if (ses.requirenext[0] != type
|
||||||
/* TODO send disconnect? */
|
&& (ses.requirenext[1] == 0 || ses.requirenext[1] != type)) {
|
||||||
dropbear_exit("Unexpected packet type %d, expected %d", type,
|
dropbear_exit("Unexpected packet type %d, expected %d", type,
|
||||||
ses.requirenext);
|
ses.requirenext);
|
||||||
} else {
|
} else {
|
||||||
/* Got what we expected */
|
/* Got what we expected */
|
||||||
ses.requirenext = 0;
|
ses.requirenext[0] = 0;
|
||||||
|
ses.requirenext[1] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,8 +135,9 @@ struct sshsession {
|
|||||||
unsigned dataallowed : 1; /* whether we can send data packets or we are in
|
unsigned dataallowed : 1; /* whether we can send data packets or we are in
|
||||||
the middle of a KEX or something */
|
the middle of a KEX or something */
|
||||||
|
|
||||||
unsigned char requirenext; /* byte indicating what packet we require next,
|
unsigned char requirenext[2]; /* bytes indicating what packets we require next,
|
||||||
or 0x00 for any */
|
or 0x00 for any. Second option can only be
|
||||||
|
used if the first byte is also set */
|
||||||
|
|
||||||
unsigned char ignorenext; /* whether to ignore the next packet,
|
unsigned char ignorenext; /* whether to ignore the next packet,
|
||||||
used for kex_follows stuff */
|
used for kex_follows stuff */
|
||||||
|
@ -61,7 +61,8 @@ void recv_msg_kexdh_init() {
|
|||||||
mp_clear(&dh_e);
|
mp_clear(&dh_e);
|
||||||
|
|
||||||
send_msg_newkeys();
|
send_msg_newkeys();
|
||||||
ses.requirenext = SSH_MSG_NEWKEYS;
|
ses.requirenext[0] = SSH_MSG_NEWKEYS;
|
||||||
|
ses.requirenext[1] = 0;
|
||||||
TRACE(("leave recv_msg_kexdh_init"))
|
TRACE(("leave recv_msg_kexdh_init"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user