diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/libssl/s23_clnt.c | 80 |
1 files changed, 1 insertions, 79 deletions
diff --git a/src/lib/libssl/s23_clnt.c b/src/lib/libssl/s23_clnt.c index 3d2e7510cf..7c9de0dd0e 100644 --- a/src/lib/libssl/s23_clnt.c +++ b/src/lib/libssl/s23_clnt.c | |||
@@ -122,10 +122,6 @@ static int ssl23_get_server_hello(SSL *s); | |||
122 | static const SSL_METHOD | 122 | static const SSL_METHOD |
123 | *ssl23_get_client_method(int ver) | 123 | *ssl23_get_client_method(int ver) |
124 | { | 124 | { |
125 | #ifndef OPENSSL_NO_SSL2 | ||
126 | if (ver == SSL2_VERSION) | ||
127 | return (SSLv2_client_method()); | ||
128 | #endif | ||
129 | if (ver == SSL3_VERSION) | 125 | if (ver == SSL3_VERSION) |
130 | return (SSLv3_client_method()); | 126 | return (SSLv3_client_method()); |
131 | else if (ver == TLS1_VERSION) | 127 | else if (ver == TLS1_VERSION) |
@@ -320,14 +316,7 @@ ssl23_client_hello(SSL *s) | |||
320 | * TLS1>=1, it would be insufficient to pass SSL_NO_TLSv1, the | 316 | * TLS1>=1, it would be insufficient to pass SSL_NO_TLSv1, the |
321 | * answer is SSL_OP_NO_TLSv1|SSL_OP_NO_SSLv3|SSL_OP_NO_SSLv2. | 317 | * answer is SSL_OP_NO_TLSv1|SSL_OP_NO_SSLv3|SSL_OP_NO_SSLv2. |
322 | */ | 318 | */ |
323 | mask = SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1 | 319 | mask = SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1|SSL_OP_NO_SSLv3; |
324 | #if !defined(OPENSSL_NO_SSL3) | ||
325 | |SSL_OP_NO_SSLv3 | ||
326 | #endif | ||
327 | #if !defined(OPENSSL_NO_SSL2) | ||
328 | |(ssl2_compat ? SSL_OP_NO_SSLv2 : 0) | ||
329 | #endif | ||
330 | ; | ||
331 | #if !defined(OPENSSL_NO_TLS1_2_CLIENT) | 320 | #if !defined(OPENSSL_NO_TLS1_2_CLIENT) |
332 | version = TLS1_2_VERSION; | 321 | version = TLS1_2_VERSION; |
333 | 322 | ||
@@ -340,15 +329,9 @@ ssl23_client_hello(SSL *s) | |||
340 | if ((options & SSL_OP_NO_TLSv1_1) && (options & mask) != mask) | 329 | if ((options & SSL_OP_NO_TLSv1_1) && (options & mask) != mask) |
341 | version = TLS1_VERSION; | 330 | version = TLS1_VERSION; |
342 | mask &= ~SSL_OP_NO_TLSv1; | 331 | mask &= ~SSL_OP_NO_TLSv1; |
343 | #if !defined(OPENSSL_NO_SSL3) | ||
344 | if ((options & SSL_OP_NO_TLSv1) && (options & mask) != mask) | 332 | if ((options & SSL_OP_NO_TLSv1) && (options & mask) != mask) |
345 | version = SSL3_VERSION; | 333 | version = SSL3_VERSION; |
346 | mask &= ~SSL_OP_NO_SSLv3; | 334 | mask &= ~SSL_OP_NO_SSLv3; |
347 | #endif | ||
348 | #if !defined(OPENSSL_NO_SSL2) | ||
349 | if ((options & SSL_OP_NO_SSLv3) && (options & mask) != mask) | ||
350 | version = SSL2_VERSION; | ||
351 | #endif | ||
352 | 335 | ||
353 | #ifndef OPENSSL_NO_TLSEXT | 336 | #ifndef OPENSSL_NO_TLSEXT |
354 | if (version != SSL2_VERSION) { | 337 | if (version != SSL2_VERSION) { |
@@ -592,69 +575,8 @@ ssl23_get_server_hello(SSL *s) | |||
592 | 575 | ||
593 | if ((p[0] & 0x80) && (p[2] == SSL2_MT_SERVER_HELLO) && | 576 | if ((p[0] & 0x80) && (p[2] == SSL2_MT_SERVER_HELLO) && |
594 | (p[5] == 0x00) && (p[6] == 0x02)) { | 577 | (p[5] == 0x00) && (p[6] == 0x02)) { |
595 | #ifdef OPENSSL_NO_SSL2 | ||
596 | SSLerr(SSL_F_SSL23_GET_SERVER_HELLO, SSL_R_UNSUPPORTED_PROTOCOL); | 578 | SSLerr(SSL_F_SSL23_GET_SERVER_HELLO, SSL_R_UNSUPPORTED_PROTOCOL); |
597 | goto err; | 579 | goto err; |
598 | #else | ||
599 | /* we are talking sslv2 */ | ||
600 | /* we need to clean up the SSLv3 setup and put in the | ||
601 | * sslv2 stuff. */ | ||
602 | int ch_len; | ||
603 | |||
604 | if (s->options & SSL_OP_NO_SSLv2) { | ||
605 | SSLerr(SSL_F_SSL23_GET_SERVER_HELLO, SSL_R_UNSUPPORTED_PROTOCOL); | ||
606 | goto err; | ||
607 | } | ||
608 | if (s->s2 == NULL) { | ||
609 | if (!ssl2_new(s)) | ||
610 | goto err; | ||
611 | } else | ||
612 | ssl2_clear(s); | ||
613 | |||
614 | if (s->options & SSL_OP_NETSCAPE_CHALLENGE_BUG) | ||
615 | ch_len = SSL2_CHALLENGE_LENGTH; | ||
616 | else | ||
617 | ch_len = SSL2_MAX_CHALLENGE_LENGTH; | ||
618 | |||
619 | /* write out sslv2 challenge */ | ||
620 | /* Note that ch_len must be <= SSL3_RANDOM_SIZE (32), because | ||
621 | it is one of SSL2_MAX_CHALLENGE_LENGTH (32) or | ||
622 | SSL2_MAX_CHALLENGE_LENGTH (16), but leave the check in for | ||
623 | futurproofing */ | ||
624 | i = (SSL3_RANDOM_SIZE < ch_len) ? SSL3_RANDOM_SIZE : ch_len; | ||
625 | s->s2->challenge_length = i; | ||
626 | memcpy(s->s2->challenge, | ||
627 | &(s->s3->client_random[SSL3_RANDOM_SIZE - i]), i); | ||
628 | |||
629 | if (s->s3 != NULL) | ||
630 | ssl3_free(s); | ||
631 | |||
632 | if (!BUF_MEM_grow_clean(s->init_buf, | ||
633 | SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER)) { | ||
634 | SSLerr(SSL_F_SSL23_GET_SERVER_HELLO, ERR_R_BUF_LIB); | ||
635 | goto err; | ||
636 | } | ||
637 | |||
638 | s->state = SSL2_ST_GET_SERVER_HELLO_A; | ||
639 | if (!(s->client_version == SSL2_VERSION)) | ||
640 | /* use special padding (SSL 3.0 draft/RFC 2246, App. E.2) */ | ||
641 | s->s2->ssl2_rollback = 1; | ||
642 | |||
643 | /* setup the 7 bytes we have read so we get them from | ||
644 | * the sslv2 buffer */ | ||
645 | s->rstate = SSL_ST_READ_HEADER; | ||
646 | s->packet_length = n; | ||
647 | s->packet = &(s->s2->rbuf[0]); | ||
648 | memcpy(s->packet, buf, n); | ||
649 | s->s2->rbuf_left = n; | ||
650 | s->s2->rbuf_offs = 0; | ||
651 | |||
652 | /* we have already written one */ | ||
653 | s->s2->write_sequence = 1; | ||
654 | |||
655 | s->method = SSLv2_client_method(); | ||
656 | s->handshake_func = s->method->ssl_connect; | ||
657 | #endif | ||
658 | } else if (p[1] == SSL3_VERSION_MAJOR && | 580 | } else if (p[1] == SSL3_VERSION_MAJOR && |
659 | p[2] <= TLS1_2_VERSION_MINOR && | 581 | p[2] <= TLS1_2_VERSION_MINOR && |
660 | ((p[0] == SSL3_RT_HANDSHAKE && p[5] == SSL3_MT_SERVER_HELLO) || | 582 | ((p[0] == SSL3_RT_HANDSHAKE && p[5] == SSL3_MT_SERVER_HELLO) || |