From: Matt Caswell Date: Fri, 10 Apr 2020 13:31:19 +0000 (+0100) Subject: Teach ssl_test_old how to run tests in a non-default library context X-Git-Tag: openssl-3.0.0-alpha1~32 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=63215d04492fd6ffadced26d249656b692416e6a Teach ssl_test_old how to run tests in a non-default library context Reviewed-by: Shane Lontis (Merged from https://github.com/openssl/openssl/pull/11534) --- diff --git a/test/ssltest_old.c b/test/ssltest_old.c index d2c764c1ae..90f16056aa 100644 --- a/test/ssltest_old.c +++ b/test/ssltest_old.c @@ -65,6 +65,7 @@ #ifndef OPENSSL_NO_CT # include #endif +#include /* * Or gethostname won't be declared properly @@ -725,6 +726,7 @@ static void sv_usage(void) fprintf(stderr, " -client_sess_in - Read the client session from a file\n"); fprintf(stderr, " -should_reuse - The expected state of reusing the session\n"); fprintf(stderr, " -no_ticket - do not issue TLS session ticket\n"); + fprintf(stderr, " -provider - Load the given provider into the library context\n"); } static void print_key_details(BIO *out, EVP_PKEY *key) @@ -922,6 +924,9 @@ int main(int argc, char *argv[]) SSL_CONF_CTX *s_cctx = NULL, *c_cctx = NULL, *s_cctx2 = NULL; STACK_OF(OPENSSL_STRING) *conf_args = NULL; char *arg = NULL, *argn = NULL; + const char *provider = NULL, *config = NULL; + OSSL_PROVIDER *thisprov = NULL, *defctxnull = NULL; + OPENSSL_CTX *libctx = NULL; verbose = 0; debug = 0; @@ -1183,6 +1188,10 @@ int main(int argc, char *argv[]) should_reuse = !!atoi(*(++argv)); } else if (strcmp(*argv, "-no_ticket") == 0) { no_ticket = 1; + } else if (strcmp(*argv, "-provider") == 0) { + if (--argc < 1) + goto bad; + provider = *(++argv); } else { int rv; arg = argv[0]; @@ -1350,9 +1359,22 @@ int main(int argc, char *argv[]) } #endif - c_ctx = SSL_CTX_new(meth); - s_ctx = SSL_CTX_new(meth); - s_ctx2 = SSL_CTX_new(meth); /* no SSL_CTX_dup! */ + if (provider != NULL) { + defctxnull = OSSL_PROVIDER_load(NULL, "null"); + if (defctxnull == NULL) + goto end; + libctx = OPENSSL_CTX_new(); + if (libctx == NULL) + goto end; + + thisprov = OSSL_PROVIDER_load(libctx, provider); + if (thisprov == NULL) + goto end; + } + + c_ctx = SSL_CTX_new_with_libctx(libctx, NULL, meth); + s_ctx = SSL_CTX_new_with_libctx(libctx, NULL, meth); + s_ctx2 = SSL_CTX_new_with_libctx(libctx, NULL, meth); /* no SSL_CTX_dup! */ if ((c_ctx == NULL) || (s_ctx == NULL) || (s_ctx2 == NULL)) { ERR_print_errors(bio_err); goto end; @@ -1859,6 +1881,10 @@ int main(int argc, char *argv[]) SSL_SESSION_free(server_sess); SSL_SESSION_free(client_sess); + OSSL_PROVIDER_unload(defctxnull); + OSSL_PROVIDER_unload(thisprov); + OPENSSL_CTX_free(libctx); + BIO_free(bio_err); EXIT(ret); }