summaryrefslogtreecommitdiff
path: root/src/lib/libssl/s23_srvr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/s23_srvr.c')
-rw-r--r--src/lib/libssl/s23_srvr.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/lib/libssl/s23_srvr.c b/src/lib/libssl/s23_srvr.c
index 6637bb9549..b73abc448f 100644
--- a/src/lib/libssl/s23_srvr.c
+++ b/src/lib/libssl/s23_srvr.c
@@ -132,10 +132,28 @@ static SSL_METHOD *ssl23_get_server_method(int ver)
132 return(NULL); 132 return(NULL);
133 } 133 }
134 134
135IMPLEMENT_ssl23_meth_func(SSLv23_server_method, 135SSL_METHOD *SSLv23_server_method(void)
136 ssl23_accept, 136 {
137 ssl_undefined_function, 137 static int init=1;
138 ssl23_get_server_method) 138 static SSL_METHOD SSLv23_server_data;
139
140 if (init)
141 {
142 CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
143
144 if (init)
145 {
146 memcpy((char *)&SSLv23_server_data,
147 (char *)sslv23_base_method(),sizeof(SSL_METHOD));
148 SSLv23_server_data.ssl_accept=ssl23_accept;
149 SSLv23_server_data.get_ssl_method=ssl23_get_server_method;
150 init=0;
151 }
152
153 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
154 }
155 return(&SSLv23_server_data);
156 }
139 157
140int ssl23_accept(SSL *s) 158int ssl23_accept(SSL *s)
141 { 159 {
@@ -386,6 +404,15 @@ int ssl23_get_client_hello(SSL *s)
386 } 404 }
387 } 405 }
388 406
407#ifdef OPENSSL_FIPS
408 if (FIPS_mode() && (s->version < TLS1_VERSION))
409 {
410 SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,
411 SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE);
412 goto err;
413 }
414#endif
415
389 if (s->state == SSL23_ST_SR_CLNT_HELLO_B) 416 if (s->state == SSL23_ST_SR_CLNT_HELLO_B)
390 { 417 {
391 /* we have SSLv3/TLSv1 in an SSLv2 header 418 /* we have SSLv3/TLSv1 in an SSLv2 header
@@ -565,6 +592,7 @@ int ssl23_get_client_hello(SSL *s)
565 s->init_num=0; 592 s->init_num=0;
566 593
567 if (buf != buf_space) OPENSSL_free(buf); 594 if (buf != buf_space) OPENSSL_free(buf);
595 s->first_packet=1;
568 return(SSL_accept(s)); 596 return(SSL_accept(s));
569err: 597err:
570 if (buf != buf_space) OPENSSL_free(buf); 598 if (buf != buf_space) OPENSSL_free(buf);