diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/s23_clnt.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/lib/libssl/s23_clnt.c b/src/lib/libssl/s23_clnt.c index 019e9aecee..64ee4269ec 100644 --- a/src/lib/libssl/s23_clnt.c +++ b/src/lib/libssl/s23_clnt.c | |||
| @@ -87,18 +87,25 @@ SSL_METHOD *SSLv23_client_method(void) | |||
| 87 | 87 | ||
| 88 | if (init) | 88 | if (init) |
| 89 | { | 89 | { |
| 90 | memcpy((char *)&SSLv23_client_data, | 90 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD); |
| 91 | (char *)sslv23_base_method(),sizeof(SSL_METHOD)); | 91 | |
| 92 | SSLv23_client_data.ssl_connect=ssl23_connect; | 92 | if (init) |
| 93 | SSLv23_client_data.get_ssl_method=ssl23_get_client_method; | 93 | { |
| 94 | init=0; | 94 | memcpy((char *)&SSLv23_client_data, |
| 95 | (char *)sslv23_base_method(),sizeof(SSL_METHOD)); | ||
| 96 | SSLv23_client_data.ssl_connect=ssl23_connect; | ||
| 97 | SSLv23_client_data.get_ssl_method=ssl23_get_client_method; | ||
| 98 | init=0; | ||
| 99 | } | ||
| 100 | |||
| 101 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD); | ||
| 95 | } | 102 | } |
| 96 | return(&SSLv23_client_data); | 103 | return(&SSLv23_client_data); |
| 97 | } | 104 | } |
| 98 | 105 | ||
| 99 | int ssl23_connect(SSL *s) | 106 | int ssl23_connect(SSL *s) |
| 100 | { | 107 | { |
| 101 | BUF_MEM *buf; | 108 | BUF_MEM *buf=NULL; |
| 102 | unsigned long Time=time(NULL); | 109 | unsigned long Time=time(NULL); |
| 103 | void (*cb)(const SSL *ssl,int type,int val)=NULL; | 110 | void (*cb)(const SSL *ssl,int type,int val)=NULL; |
| 104 | int ret= -1; | 111 | int ret= -1; |
| @@ -152,6 +159,7 @@ int ssl23_connect(SSL *s) | |||
| 152 | goto end; | 159 | goto end; |
| 153 | } | 160 | } |
| 154 | s->init_buf=buf; | 161 | s->init_buf=buf; |
| 162 | buf=NULL; | ||
| 155 | } | 163 | } |
| 156 | 164 | ||
| 157 | if (!ssl3_setup_buffers(s)) { ret= -1; goto end; } | 165 | if (!ssl3_setup_buffers(s)) { ret= -1; goto end; } |
| @@ -200,6 +208,8 @@ int ssl23_connect(SSL *s) | |||
| 200 | } | 208 | } |
| 201 | end: | 209 | end: |
| 202 | s->in_handshake--; | 210 | s->in_handshake--; |
| 211 | if (buf != NULL) | ||
| 212 | BUF_MEM_free(buf); | ||
| 203 | if (cb != NULL) | 213 | if (cb != NULL) |
| 204 | cb(s,SSL_CB_CONNECT_EXIT,ret); | 214 | cb(s,SSL_CB_CONNECT_EXIT,ret); |
| 205 | return(ret); | 215 | return(ret); |
| @@ -363,7 +373,7 @@ static int ssl23_get_server_hello(SSL *s) | |||
| 363 | 373 | ||
| 364 | if (s->s3 != NULL) ssl3_free(s); | 374 | if (s->s3 != NULL) ssl3_free(s); |
| 365 | 375 | ||
| 366 | if (!BUF_MEM_grow(s->init_buf, | 376 | if (!BUF_MEM_grow_clean(s->init_buf, |
| 367 | SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER)) | 377 | SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER)) |
| 368 | { | 378 | { |
| 369 | SSLerr(SSL_F_SSL23_GET_SERVER_HELLO,ERR_R_BUF_LIB); | 379 | SSLerr(SSL_F_SSL23_GET_SERVER_HELLO,ERR_R_BUF_LIB); |
