Skip to content

Commit

Permalink
Update from 1.0.0-stable.
Browse files Browse the repository at this point in the history
  • Loading branch information
snhenson committed Jun 5, 2009
1 parent 78074ba commit 1ddf691
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 5 deletions.
2 changes: 2 additions & 0 deletions apps/s_server.c
Expand Up @@ -284,7 +284,9 @@ static const char *session_id_prefix=NULL;

static int enable_timeouts = 0;
static long socket_mtu;
#ifndef OPENSSL_NO_DTLS1
static int cert_chain = 0;
#endif


#ifdef MONOLITH
Expand Down
11 changes: 9 additions & 2 deletions crypto/bio/bss_dgram.c
Expand Up @@ -217,12 +217,19 @@ static void dgram_adjust_rcv_timeout(BIO *b)
timeleft.tv_usec += 1000000;
}

if (timeleft.tv_sec < 0)
{
timeleft.tv_sec = 0;
timeleft.tv_usec = 1;
}

/* Adjust socket timeout if next handhake message timer
* will expire earlier.
*/
if (data->socket_timeout.tv_sec < timeleft.tv_sec ||
if ((data->socket_timeout.tv_sec == 0 && data->socket_timeout.tv_usec == 0) ||
(data->socket_timeout.tv_sec > timeleft.tv_sec) ||
(data->socket_timeout.tv_sec == timeleft.tv_sec &&
data->socket_timeout.tv_usec <= timeleft.tv_usec))
data->socket_timeout.tv_usec >= timeleft.tv_usec))
{
#ifdef OPENSSL_SYS_WINDOWS
timeout = timeleft.tv_sec * 1000 + timeleft.tv_usec / 1000;
Expand Down
8 changes: 6 additions & 2 deletions ssl/d1_both.c
Expand Up @@ -568,9 +568,13 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok)
pq_64bit_free(&seq64);

/* Discard the message if sequence number was already there, is
* too far in the future or the fragment is already in the queue */
* too far in the future, already in the queue or if we received
* a FINISHED before the SERVER_HELLO, which then must be a stale
* retransmit.
*/
if (msg_hdr->seq <= s->d1->handshake_read_seq ||
msg_hdr->seq > s->d1->handshake_read_seq + 10 || item != NULL)
msg_hdr->seq > s->d1->handshake_read_seq + 10 || item != NULL ||
(s->d1->handshake_read_seq == 0 && msg_hdr->type == SSL3_MT_FINISHED))
{
unsigned char devnull [256];

Expand Down
2 changes: 1 addition & 1 deletion ssl/d1_clnt.c
Expand Up @@ -440,7 +440,7 @@ int dtls1_connect(SSL *s)

case SSL3_ST_CR_FINISHED_A:
case SSL3_ST_CR_FINISHED_B:

s->d1->change_cipher_spec_ok = 1;
ret=ssl3_get_finished(s,SSL3_ST_CR_FINISHED_A,
SSL3_ST_CR_FINISHED_B);
if (ret <= 0) goto end;
Expand Down
10 changes: 10 additions & 0 deletions ssl/d1_pkt.c
Expand Up @@ -1058,6 +1058,16 @@ int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek)
s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC,
rr->data, 1, s, s->msg_callback_arg);

/* We can't process a CCS now, because previous handshake
* messages are still missing, so just drop it.
*/
if (!s->d1->change_cipher_spec_ok)
{
goto start;
}

s->d1->change_cipher_spec_ok = 0;

s->s3->change_cipher_spec=1;
if (!ssl3_do_change_cipher_spec(s))
goto err;
Expand Down
2 changes: 2 additions & 0 deletions ssl/d1_srvr.c
Expand Up @@ -470,6 +470,7 @@ int dtls1_accept(SSL *s)
case SSL3_ST_SR_CERT_VRFY_A:
case SSL3_ST_SR_CERT_VRFY_B:

s->d1->change_cipher_spec_ok = 1;
/* we should decide if we expected this one */
ret=ssl3_get_cert_verify(s);
if (ret <= 0) goto end;
Expand All @@ -481,6 +482,7 @@ int dtls1_accept(SSL *s)

case SSL3_ST_SR_FINISHED_A:
case SSL3_ST_SR_FINISHED_B:
s->d1->change_cipher_spec_ok = 1;
ret=ssl3_get_finished(s,SSL3_ST_SR_FINISHED_A,
SSL3_ST_SR_FINISHED_B);
if (ret <= 0) goto end;
Expand Down
1 change: 1 addition & 0 deletions ssl/dtls1.h
Expand Up @@ -229,6 +229,7 @@ typedef struct dtls1_state_st
unsigned int handshake_fragment_len;

unsigned int retransmitting;
unsigned int change_cipher_spec_ok;

} DTLS1_STATE;

Expand Down

0 comments on commit 1ddf691

Please sign in to comment.