Coverage Report

Created: 2025-06-13 06:56

/src/openssl/crypto/x509/x509_def.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
#include <stdio.h>
11
#include "internal/e_os.h"
12
#include "internal/cryptlib.h"
13
#include "internal/thread_once.h"
14
#include <openssl/crypto.h>
15
#include <openssl/x509.h>
16
17
#if defined(_WIN32)
18
19
static char x509_private_dir[MAX_PATH + 1]; 
20
static char *x509_private_dirptr = NULL;
21
22
static char x509_cert_area[MAX_PATH + 1];
23
static char *x509_cert_areaptr = NULL;
24
25
static char x509_cert_dir[MAX_PATH + 1];
26
static char *x509_cert_dirptr = NULL;
27
28
static char x509_cert_file[MAX_PATH + 1];
29
static char *x509_cert_fileptr = NULL;
30
31
static void get_windows_default_path(char *pathname, const char *suffix)
32
{
33
    char *ossldir;
34
35
    ossldir = ossl_get_openssldir();
36
37
    if (ossldir == NULL)
38
        return;
39
40
    OPENSSL_strlcpy(pathname, ossldir, MAX_PATH - 1);
41
    if (MAX_PATH - strlen(pathname) > strlen(suffix))
42
        strcat(pathname, suffix);
43
}
44
45
static CRYPTO_ONCE openssldir_setup_init = CRYPTO_ONCE_STATIC_INIT;
46
DEFINE_RUN_ONCE_STATIC(do_openssldir_setup)
47
{
48
    get_windows_default_path(x509_private_dir, "\\private");
49
    if (strlen(x509_private_dir) > 0)
50
        x509_private_dirptr = x509_private_dir;
51
52
    get_windows_default_path(x509_cert_area, "\\");
53
    if (strlen(x509_cert_area) > 0)
54
        x509_cert_areaptr = x509_cert_area;
55
56
    get_windows_default_path(x509_cert_dir, "\\certs");
57
    if (strlen(x509_cert_dir) > 0)
58
        x509_cert_dirptr = x509_cert_dir;
59
60
    get_windows_default_path(x509_cert_file, "\\cert.pem");
61
    if (strlen(x509_cert_file) > 0)
62
        x509_cert_fileptr = x509_cert_file;
63
64
    return 1;
65
}
66
#endif
67
68
const char *X509_get_default_private_dir(void)
69
0
{
70
#if defined (_WIN32)
71
    RUN_ONCE(&openssldir_setup_init, do_openssldir_setup);
72
    return x509_private_dirptr;
73
#else
74
0
    return X509_PRIVATE_DIR;
75
0
#endif
76
0
}
77
78
const char *X509_get_default_cert_area(void)
79
1
{
80
#if defined (_WIN32)
81
    RUN_ONCE(&openssldir_setup_init, do_openssldir_setup);
82
    return x509_cert_areaptr;
83
#else
84
1
    return X509_CERT_AREA;
85
1
#endif
86
1
}
87
88
const char *X509_get_default_cert_dir(void)
89
0
{
90
#if defined (_WIN32)
91
    RUN_ONCE(&openssldir_setup_init, do_openssldir_setup);
92
    return x509_cert_dirptr;
93
#else
94
0
    return X509_CERT_DIR;
95
0
#endif
96
0
}
97
98
const char *X509_get_default_cert_file(void)
99
0
{
100
#if defined (_WIN32)
101
    RUN_ONCE(&openssldir_setup_init, do_openssldir_setup);
102
    return x509_cert_fileptr;
103
#else
104
0
    return X509_CERT_FILE;
105
0
#endif
106
0
}
107
108
const char *X509_get_default_cert_dir_env(void)
109
0
{
110
0
    return X509_CERT_DIR_EVP;
111
0
}
112
113
const char *X509_get_default_cert_file_env(void)
114
0
{
115
0
    return X509_CERT_FILE_EVP;
116
0
}