X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=ssl%2Fssl_lib.c;h=846b856af497c58d295a9b817684e1422d18f101;hp=89570fbe3adf21506b030961593c9a2794588c28;hb=18958cefd82449daf3c589b74a074f0c88159d47;hpb=32097b33bdff520d149ad6c8a11bd344e4ef764b diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index 89570fbe3a..846b856af4 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -23,8 +23,6 @@ #include "internal/cryptlib.h" #include "internal/refcount.h" -const char SSL_version_str[] = OPENSSL_VERSION_TEXT; - static int ssl_undefined_function_1(SSL *ssl, SSL3_RECORD *r, size_t s, int t) { (void)r; @@ -654,6 +652,10 @@ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth) ctx->method = meth; + if (!SSL_CTX_set_ciphersuites(ctx, TLS_DEFAULT_CIPHERSUITES)) { + SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS); + return 0; + } sk = ssl_create_cipher_list(ctx->method, ctx->tls13_ciphersuites, &(ctx->cipher_list), @@ -702,6 +704,7 @@ SSL *SSL_new(SSL_CTX *ctx) s->max_early_data = ctx->max_early_data; s->recv_max_early_data = ctx->recv_max_early_data; s->num_tickets = ctx->num_tickets; + s->pha_enabled = ctx->pha_enabled; /* Shallow copy of the ciphersuites stack */ s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites); @@ -2599,18 +2602,14 @@ const char *SSL_get_servername(const SSL *s, const int type) return NULL; /* - * TODO(OpenSSL1.2) clean up this compat mess. This API is - * currently a mix of "what did I configure" and "what did the - * peer send" and "what was actually negotiated"; we should have - * a clear distinction amongst those three. + * SNI is not negotiated in pre-TLS-1.3 resumption flows, so fake up an + * SNI value to return if we are resuming/resumed. N.B. that we still + * call the relevant callbacks for such resumption flows, and callbacks + * might error out if there is not a SNI value available. */ - if (SSL_in_init(s)) { - if (s->hit) - return s->session->ext.hostname; - return s->ext.hostname; - } - return (s->session != NULL && s->ext.hostname == NULL) ? - s->session->ext.hostname : s->ext.hostname; + if (s->hit) + return s->session->ext.hostname; + return s->ext.hostname; } int SSL_get_servername_type(const SSL *s) @@ -3562,12 +3561,6 @@ int SSL_do_handshake(SSL *s) s->method->ssl_renegotiate_check(s, 0); - if (SSL_is_server(s)) { - /* clear SNI settings at server-side */ - OPENSSL_free(s->ext.hostname); - s->ext.hostname = NULL; - } - if (SSL_in_init(s) || SSL_in_before(s)) { if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) { struct ssl_async_args args; @@ -5455,6 +5448,11 @@ int SSL_stateless(SSL *s) return -1; } +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val) +{ + ctx->pha_enabled = val; +} + void SSL_set_post_handshake_auth(SSL *ssl, int val) { ssl->pha_enabled = val;