diff options
Diffstat (limited to 'src/lib/libssl/s23_clnt.c')
| -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) || |
