From 86a0d0234d044aa7b773c0597b3adaf447143e53 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Thu, 14 Feb 2002 23:39:36 +0000 Subject: [PATCH] Add argument to OPENSSL_config() and add flag to tolerate missing config file. --- CHANGES | 5 +++++ crypto/conf/conf.h | 3 ++- crypto/conf/conf_mall.c | 13 ++++++------- crypto/conf/conf_mod.c | 8 ++++++++ 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/CHANGES b/CHANGES index 03ed082e30..bfb5562920 100644 --- a/CHANGES +++ b/CHANGES @@ -13,6 +13,11 @@ *) applies to 0.9.6a/0.9.6b/0.9.6c and 0.9.7 +) applies to 0.9.7 only + +) Add an argument to OPENSSL_config() to allow the use of an alternative + config section name. Add a new flag to tolerate a missing config file + and move code to CONF_modules_load_file(). + [Steve Henson] + *) Add information about CygWin 1.3 and on, and preserve proper configuration for the versions before that. [Corinna Vinschen and Richard Levitte] diff --git a/crypto/conf/conf.h b/crypto/conf/conf.h index 2c6f573349..176d64b579 100644 --- a/crypto/conf/conf.h +++ b/crypto/conf/conf.h @@ -112,6 +112,7 @@ typedef void conf_finish_func(CONF_IMODULE *md); #define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 #define CONF_MFLAGS_SILENT 0x4 #define CONF_MFLAGS_NO_DSO 0x8 +#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 int CONF_set_default_method(CONF_METHOD *meth); void CONF_set_nconf(CONF *conf,LHASH *hash); @@ -127,7 +128,7 @@ void CONF_free(LHASH *conf); int CONF_dump_fp(LHASH *conf, FILE *out); int CONF_dump_bio(LHASH *conf, BIO *out); -void OPENSSL_config(void); +void OPENSSL_config(char *config_name); /* New conf code. The semantics are different from the functions above. If that wasn't the case, the above functions would have been replaced */ diff --git a/crypto/conf/conf_mall.c b/crypto/conf/conf_mall.c index 01cff6946a..18dbf11614 100644 --- a/crypto/conf/conf_mall.c +++ b/crypto/conf/conf_mall.c @@ -81,7 +81,7 @@ void OPENSSL_load_builtin_modules(void) static int openssl_configured = 0; -void OPENSSL_config(void) +void OPENSSL_config(char *config_name) { int err_exit = 0; char *file; @@ -93,15 +93,13 @@ void OPENSSL_config(void) file = CONF_get1_default_config_file(); if (!file) return; + if (config_name == NULL) + config_name = "openssl_conf"; ERR_clear_error(); - if (CONF_modules_load_file(file, "openssl_config", 0) <= 0) - { - if (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE) - ERR_clear_error(); - else + if (CONF_modules_load_file(file, config_name, + CONF_MFLAGS_IGNORE_MISSING_FILE) <= 0) err_exit = 1; - } OPENSSL_free(file); if (err_exit) @@ -113,6 +111,7 @@ void OPENSSL_config(void) BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_printf(bio_err,"Auto configuration failed\n"); ERR_print_errors(bio_err); + BIO_free(bio_err); } exit(1); } diff --git a/crypto/conf/conf_mod.c b/crypto/conf/conf_mod.c index 23e1f191da..426d69337f 100644 --- a/crypto/conf/conf_mod.c +++ b/crypto/conf/conf_mod.c @@ -170,7 +170,15 @@ int CONF_modules_load_file(const char *filename, const char *appname, goto err; if (NCONF_load(conf, filename, NULL) <= 0) + { + if ((flags & CONF_MFLAGS_IGNORE_MISSING_FILE) && + (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)) + { + ERR_clear_error(); + ret = 1; + } goto err; + } ret = CONF_modules_load(conf, appname, flags); -- 2.25.1