1 | /* |
2 | * Copyright 2002-2016 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 <openssl/crypto.h> |
12 | #include "internal/cryptlib.h" |
13 | #include "internal/conf.h" |
14 | #include <openssl/x509.h> |
15 | #include <openssl/asn1.h> |
16 | #include <openssl/engine.h> |
17 | |
18 | #ifdef _WIN32 |
19 | # define strdup _strdup |
20 | #endif |
21 | |
22 | /* |
23 | * This is the automatic configuration loader: it is called automatically by |
24 | * OpenSSL when any of a number of standard initialisation functions are |
25 | * called, unless this is overridden by calling OPENSSL_no_config() |
26 | */ |
27 | |
28 | static int openssl_configured = 0; |
29 | |
30 | #ifndef OPENSSL_NO_DEPRECATED_1_1_0 |
31 | void OPENSSL_config(const char *appname) |
32 | { |
33 | OPENSSL_INIT_SETTINGS settings; |
34 | |
35 | memset(&settings, 0, sizeof(settings)); |
36 | if (appname != NULL) |
37 | settings.appname = strdup(appname); |
38 | settings.flags = DEFAULT_CONF_MFLAGS; |
39 | OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, &settings); |
40 | } |
41 | #endif |
42 | |
43 | int openssl_config_int(const OPENSSL_INIT_SETTINGS *settings) |
44 | { |
45 | int ret = 0; |
46 | const char *filename; |
47 | const char *appname; |
48 | unsigned long flags; |
49 | |
50 | if (openssl_configured) |
51 | return 1; |
52 | |
53 | filename = settings ? settings->filename : NULL; |
54 | appname = settings ? settings->appname : NULL; |
55 | flags = settings ? settings->flags : DEFAULT_CONF_MFLAGS; |
56 | |
57 | #ifdef OPENSSL_INIT_DEBUG |
58 | fprintf(stderr, "OPENSSL_INIT: openssl_config_int(%s, %s, %lu)\n" , |
59 | filename, appname, flags); |
60 | #endif |
61 | |
62 | OPENSSL_load_builtin_modules(); |
63 | #ifndef OPENSSL_NO_ENGINE |
64 | /* Need to load ENGINEs */ |
65 | ENGINE_load_builtin_engines(); |
66 | #endif |
67 | ERR_clear_error(); |
68 | #ifndef OPENSSL_SYS_UEFI |
69 | ret = CONF_modules_load_file(filename, appname, flags); |
70 | #endif |
71 | openssl_configured = 1; |
72 | return ret; |
73 | } |
74 | |
75 | void openssl_no_config_int(void) |
76 | { |
77 | openssl_configured = 1; |
78 | } |
79 | |