diff options
author | Rich Salz <rsalz@akamai.com> | 2015-05-28 13:52:55 -0400 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2015-05-28 17:28:33 -0400 |
commit | cc01d21756cc9c79231ef21039782c5fe42008a2 (patch) | |
tree | cb92584cc79d9994f9859b15c04a645d0b020389 /apps/openssl.c | |
parent | f097f81c891bb1f479426d8ac9c9541390334983 (diff) |
RT3876: Only load config when needed
Create app_load_config(), a routine to load config file. Remove the
"always load config" from the main app. Change the places that used to
load config to call the new common routine.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'apps/openssl.c')
-rw-r--r-- | apps/openssl.c | 70 |
1 files changed, 14 insertions, 56 deletions
diff --git a/apps/openssl.c b/apps/openssl.c index fa3b6837f9..7713f9fbdb 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -172,6 +172,7 @@ static void apps_startup() ERR_load_SSL_strings(); OpenSSL_add_all_algorithms(); OpenSSL_add_ssl_algorithms(); + OPENSSL_load_builtin_modules(); setup_ui_method(); /*SSL_library_init();*/ #ifndef OPENSSL_NO_ENGINE @@ -199,43 +200,26 @@ static void apps_shutdown() static char *make_config_name() { - const char *t = X509_get_default_cert_area(); + const char *t; size_t len; char *p; - len = strlen(t) + strlen(OPENSSL_CONF) + 2; + if ((t = getenv("OPENSSL_CONF")) != NULL + || (t = getenv("SSLEAY_CONF")) != NULL) + return BUF_strdup(t); + + t = X509_get_default_cert_area(); + len = strlen(t) + 1 + strlen(OPENSSL_CONF) + 1; p = app_malloc(len, "config filename buffer"); - BUF_strlcpy(p, t, len); + strcpy(p, t); #ifndef OPENSSL_SYS_VMS - BUF_strlcat(p, "/", len); + strcat(p, "/"); #endif - BUF_strlcat(p, OPENSSL_CONF, len); + strcat(p, OPENSSL_CONF); return p; } -static int load_config(CONF *cnf) -{ - static int load_config_called = 0; - - if (load_config_called) - return 1; - load_config_called = 1; - if (!cnf) - cnf = config; - if (!cnf) - return 1; - - OPENSSL_load_builtin_modules(); - - if (CONF_modules_load(cnf, NULL, 0) <= 0) { - BIO_printf(bio_err, "Error configuring OpenSSL\n"); - ERR_print_errors(bio_err); - return 0; - } - return 1; -} - static void lock_dbg_cb(int mode, int type, const char *file, int line) { static int modes[CRYPTO_NUM_LOCKS]; @@ -338,12 +322,11 @@ int main(int argc, char *argv[]) FUNCTION f, *fp; LHASH_OF(FUNCTION) *prog = NULL; char **copied_argv = NULL; - char *p, *pname, *to_free = NULL; + char *p, *pname; char buf[1024]; const char *prompt; ARGS arg; int first, n, i, ret = 0; - long errline; arg.argv = NULL; arg.size = 0; @@ -394,36 +377,11 @@ int main(int argc, char *argv[]) pname = opt_progname(argv[0]); /* Lets load up our environment a little */ + default_config_file = make_config_name(); bio_in = dup_bio_in(); bio_out = dup_bio_out(); bio_err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT); - /* Determine and load the config file. */ - default_config_file = getenv("OPENSSL_CONF"); - if (default_config_file == NULL) - default_config_file = getenv("SSLEAY_CONF"); - if (default_config_file == NULL) - default_config_file = to_free = make_config_name(); - if (!load_config(NULL)) - goto end; - config = NCONF_new(NULL); - i = NCONF_load(config, default_config_file, &errline); - if (i == 0) { - if (ERR_GET_REASON(ERR_peek_last_error()) - == CONF_R_NO_SUCH_FILE) { - BIO_printf(bio_err, - "%s: WARNING: can't open config file: %s\n", - pname, default_config_file); - ERR_clear_error(); - NCONF_free(config); - config = NULL; - } else { - ERR_print_errors(bio_err); - NCONF_free(config); - exit(1); - } - } - /* first check the program name */ f.name = pname; fp = lh_FUNCTION_retrieve(prog, &f); @@ -510,7 +468,7 @@ int main(int argc, char *argv[]) ret = 1; end: OPENSSL_free(copied_argv); - OPENSSL_free(to_free); + OPENSSL_free(default_config_file); NCONF_free(config); config = NULL; lh_FUNCTION_free(prog); |