early-access version 2698

This commit is contained in:
pineappleEA
2022-04-24 22:29:35 +02:00
parent c96f949832
commit caa0c2911b
486 changed files with 37806 additions and 14362 deletions

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: ssl_sess.c,v 1.100 2020/09/19 09:56:35 tb Exp $ */
/* $OpenBSD: ssl_sess.c,v 1.109 2022/01/11 19:03:15 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@@ -136,6 +136,7 @@
*/
#include <openssl/lhash.h>
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_ENGINE
#include <openssl/engine.h>
@@ -185,13 +186,13 @@ SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
int
SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, void *arg)
{
return (CRYPTO_set_ex_data(&s->internal->ex_data, idx, arg));
return (CRYPTO_set_ex_data(&s->ex_data, idx, arg));
}
void *
SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx)
{
return (CRYPTO_get_ex_data(&s->internal->ex_data, idx));
return (CRYPTO_get_ex_data(&s->ex_data, idx));
}
uint32_t
@@ -220,26 +221,21 @@ SSL_SESSION_new(void)
SSLerrorx(ERR_R_MALLOC_FAILURE);
return (NULL);
}
if ((ss->internal = calloc(1, sizeof(*ss->internal))) == NULL) {
free(ss);
SSLerrorx(ERR_R_MALLOC_FAILURE);
return (NULL);
}
ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */
ss->references = 1;
ss->timeout=60*5+4; /* 5 minute timeout by default */
ss->time = time(NULL);
ss->internal->prev = NULL;
ss->internal->next = NULL;
ss->prev = NULL;
ss->next = NULL;
ss->tlsext_hostname = NULL;
ss->internal->tlsext_ecpointformatlist_length = 0;
ss->internal->tlsext_ecpointformatlist = NULL;
ss->internal->tlsext_supportedgroups_length = 0;
ss->internal->tlsext_supportedgroups = NULL;
ss->tlsext_ecpointformatlist_length = 0;
ss->tlsext_ecpointformatlist = NULL;
ss->tlsext_supportedgroups_length = 0;
ss->tlsext_supportedgroups = NULL;
CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->internal->ex_data);
CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data);
return (ss);
}
@@ -345,6 +341,7 @@ ssl_get_new_session(SSL *s, int session)
case TLS1_1_VERSION:
case TLS1_2_VERSION:
case DTLS1_VERSION:
case DTLS1_2_VERSION:
ss->ssl_version = s->version;
ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
break;
@@ -736,7 +733,7 @@ remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck)
CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
if (ret) {
r->internal->not_resumable = 1;
r->not_resumable = 1;
if (ctx->internal->remove_session_cb != NULL)
ctx->internal->remove_session_cb(ctx, r);
SSL_SESSION_free(r);
@@ -758,23 +755,22 @@ SSL_SESSION_free(SSL_SESSION *ss)
if (i > 0)
return;
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->internal->ex_data);
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data);
explicit_bzero(ss->master_key, sizeof ss->master_key);
explicit_bzero(ss->session_id, sizeof ss->session_id);
ssl_sess_cert_free(ss->internal->sess_cert);
sk_X509_pop_free(ss->cert_chain, X509_free);
X509_free(ss->peer);
X509_free(ss->peer_cert);
sk_SSL_CIPHER_free(ss->ciphers);
free(ss->tlsext_hostname);
free(ss->tlsext_tick);
free(ss->internal->tlsext_ecpointformatlist);
free(ss->internal->tlsext_supportedgroups);
free(ss->tlsext_ecpointformatlist);
free(ss->tlsext_supportedgroups);
freezero(ss->internal, sizeof(*ss->internal));
freezero(ss, sizeof(*ss));
}
@@ -797,7 +793,7 @@ SSL_set_session(SSL *s, SSL_SESSION *session)
return SSL_set_ssl_method(s, s->ctx->method);
}
if ((method = ssl_get_client_method(session->ssl_version)) == NULL) {
if ((method = ssl_get_method(session->ssl_version)) == NULL) {
SSLerror(s, SSL_R_UNABLE_TO_FIND_SSL_METHOD);
return (0);
}
@@ -872,10 +868,16 @@ SSL_SESSION_get_protocol_version(const SSL_SESSION *s)
return s->ssl_version;
}
const SSL_CIPHER *
SSL_SESSION_get0_cipher(const SSL_SESSION *s)
{
return s->cipher;
}
X509 *
SSL_SESSION_get0_peer(SSL_SESSION *s)
{
return s->peer;
return s->peer_cert;
}
int
@@ -905,6 +907,12 @@ SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx,
return 1;
}
int
SSL_SESSION_is_resumable(const SSL_SESSION *s)
{
return 0;
}
long
SSL_CTX_set_timeout(SSL_CTX *s, long t)
{
@@ -993,7 +1001,7 @@ timeout_doall_arg(SSL_SESSION *s, TIMEOUT_PARAM *p)
* save on locking overhead */
(void)lh_SSL_SESSION_delete(p->cache, s);
SSL_SESSION_list_remove(p->ctx, s);
s->internal->not_resumable = 1;
s->not_resumable = 1;
if (p->ctx->internal->remove_session_cb != NULL)
p->ctx->internal->remove_session_cb(p->ctx, s);
SSL_SESSION_free(s);
@@ -1045,50 +1053,50 @@ ssl_clear_bad_session(SSL *s)
static void
SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s)
{
if ((s->internal->next == NULL) || (s->internal->prev == NULL))
if (s->next == NULL || s->prev == NULL)
return;
if (s->internal->next == (SSL_SESSION *)&(ctx->internal->session_cache_tail)) {
if (s->next == (SSL_SESSION *)&(ctx->internal->session_cache_tail)) {
/* last element in list */
if (s->internal->prev == (SSL_SESSION *)&(ctx->internal->session_cache_head)) {
if (s->prev == (SSL_SESSION *)&(ctx->internal->session_cache_head)) {
/* only one element in list */
ctx->internal->session_cache_head = NULL;
ctx->internal->session_cache_tail = NULL;
} else {
ctx->internal->session_cache_tail = s->internal->prev;
s->internal->prev->internal->next =
ctx->internal->session_cache_tail = s->prev;
s->prev->next =
(SSL_SESSION *)&(ctx->internal->session_cache_tail);
}
} else {
if (s->internal->prev == (SSL_SESSION *)&(ctx->internal->session_cache_head)) {
if (s->prev == (SSL_SESSION *)&(ctx->internal->session_cache_head)) {
/* first element in list */
ctx->internal->session_cache_head = s->internal->next;
s->internal->next->internal->prev =
ctx->internal->session_cache_head = s->next;
s->next->prev =
(SSL_SESSION *)&(ctx->internal->session_cache_head);
} else {
/* middle of list */
s->internal->next->internal->prev = s->internal->prev;
s->internal->prev->internal->next = s->internal->next;
s->next->prev = s->prev;
s->prev->next = s->next;
}
}
s->internal->prev = s->internal->next = NULL;
s->prev = s->next = NULL;
}
static void
SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s)
{
if ((s->internal->next != NULL) && (s->internal->prev != NULL))
if (s->next != NULL && s->prev != NULL)
SSL_SESSION_list_remove(ctx, s);
if (ctx->internal->session_cache_head == NULL) {
ctx->internal->session_cache_head = s;
ctx->internal->session_cache_tail = s;
s->internal->prev = (SSL_SESSION *)&(ctx->internal->session_cache_head);
s->internal->next = (SSL_SESSION *)&(ctx->internal->session_cache_tail);
s->prev = (SSL_SESSION *)&(ctx->internal->session_cache_head);
s->next = (SSL_SESSION *)&(ctx->internal->session_cache_tail);
} else {
s->internal->next = ctx->internal->session_cache_head;
s->internal->next->internal->prev = s;
s->internal->prev = (SSL_SESSION *)&(ctx->internal->session_cache_head);
s->next = ctx->internal->session_cache_head;
s->next->prev = s;
s->prev = (SSL_SESSION *)&(ctx->internal->session_cache_head);
ctx->internal->session_cache_head = s;
}
}