1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/*
* Copyright 2021-2024 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
*/
#include <sys/stat.h>
#include <openssl/evp.h>
#include <openssl/conf.h>
#include "testutil.h"
static char *configfile = NULL;
static char *recurseconfigfile = NULL;
static char *pathedconfig = NULL;
/*
* Test to make sure there are no leaks or failures from loading the config
* file twice.
*/
static int test_double_config(void)
{
OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new();
int testresult = 0;
EVP_MD *sha256 = NULL;
if (!TEST_ptr(ctx))
return 0;
if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, configfile)))
goto err;
if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, configfile)))
goto err;
/* Check we can actually fetch something */
sha256 = EVP_MD_fetch(ctx, "SHA2-256", NULL);
if (!TEST_ptr(sha256))
goto err;
testresult = 1;
err:
EVP_MD_free(sha256);
OSSL_LIB_CTX_free(ctx);
return testresult;
}
static int test_recursive_config(void)
{
OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new();
int testresult = 0;
unsigned long err;
if (!TEST_ptr(ctx))
goto err;
if (!TEST_false(OSSL_LIB_CTX_load_config(ctx, recurseconfigfile)))
goto err;
err = ERR_peek_error();
/* We expect to get a recursion error here */
if (ERR_GET_REASON(err) == CONF_R_RECURSIVE_SECTION_REFERENCE)
testresult = 1;
err:
OSSL_LIB_CTX_free(ctx);
return testresult;
}
#define P_TEST_PATH "/../test/p_test.so"
static int test_path_config(void)
{
OSSL_LIB_CTX *ctx = NULL;
OSSL_PROVIDER *prov;
int testresult = 0;
struct stat sbuf;
char *module_path = getenv("OPENSSL_MODULES");
char *full_path = NULL;
int rc;
if (!TEST_ptr(module_path))
return 0;
full_path = OPENSSL_zalloc(strlen(module_path) + strlen(P_TEST_PATH) + 1);
if (!TEST_ptr(full_path))
return 0;
strcpy(full_path, module_path);
full_path = strcat(full_path, P_TEST_PATH);
TEST_info("full path is %s", full_path);
rc = stat(full_path, &sbuf);
OPENSSL_free(full_path);
if (rc == -1)
return TEST_skip("Skipping modulepath test as provider not present");
if (!TEST_ptr(pathedconfig))
return 0;
ctx = OSSL_LIB_CTX_new();
if (!TEST_ptr(ctx))
return 0;
if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, pathedconfig)))
goto err;
/* attempt to manually load the test provider */
if (!TEST_ptr(prov = OSSL_PROVIDER_load(ctx, "test")))
goto err;
OSSL_PROVIDER_unload(prov);
testresult = 1;
err:
OSSL_LIB_CTX_free(ctx);
return testresult;
}
OPT_TEST_DECLARE_USAGE("configfile\n")
int setup_tests(void)
{
if (!test_skip_common_options()) {
TEST_error("Error parsing test options\n");
return 0;
}
if (!TEST_ptr(configfile = test_get_argument(0)))
return 0;
if (!TEST_ptr(recurseconfigfile = test_get_argument(1)))
return 0;
if (!TEST_ptr(pathedconfig = test_get_argument(2)))
return 0;
ADD_TEST(test_recursive_config);
ADD_TEST(test_double_config);
ADD_TEST(test_path_config);
return 1;
}
|