diff options
author | Richard Levitte <levitte@openssl.org> | 2000-10-13 08:30:06 +0000 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2000-10-13 08:30:06 +0000 |
commit | cde70093ac2bd2853ad81b98012ec639457ddc3b (patch) | |
tree | 3c02b685adefcf90547b87e5058971fc108b87e2 /crypto | |
parent | 5f97f508e450af9d53e3a01b59b13e9e7b540720 (diff) | |
download | openssl-cde70093ac2bd2853ad81b98012ec639457ddc3b.tar.gz |
Make the new conf implementatoin bug-compatible with the old one.
Actually, it's a feature that it goes looking at environment
variables. It's just a pity that it's at the cost of the error
checking... I'll see if I can come up with a better interface for
this.
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/conf/conf.h | 2 | ||||
-rw-r--r-- | crypto/conf/conf_err.c | 2 | ||||
-rw-r--r-- | crypto/conf/conf_lib.c | 25 |
3 files changed, 26 insertions, 3 deletions
diff --git a/crypto/conf/conf.h b/crypto/conf/conf.h index 2f70634455..cd40a0db21 100644 --- a/crypto/conf/conf.h +++ b/crypto/conf/conf.h @@ -167,6 +167,8 @@ int NCONF_dump_bio(CONF *conf, BIO *out); #define CONF_R_MISSING_EQUAL_SIGN 101 #define CONF_R_NO_CLOSE_BRACE 102 #define CONF_R_NO_CONF 105 +#define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 +#define CONF_R_NO_SECTION 107 #define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 #define CONF_R_VARIABLE_HAS_NO_VALUE 104 diff --git a/crypto/conf/conf_err.c b/crypto/conf/conf_err.c index 06d3163573..8c2bc6f1c4 100644 --- a/crypto/conf/conf_err.c +++ b/crypto/conf/conf_err.c @@ -87,6 +87,8 @@ static ERR_STRING_DATA CONF_str_reasons[]= {CONF_R_MISSING_EQUAL_SIGN ,"missing equal sign"}, {CONF_R_NO_CLOSE_BRACE ,"no close brace"}, {CONF_R_NO_CONF ,"no conf"}, +{CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE ,"no conf or environment variable"}, +{CONF_R_NO_SECTION ,"no section"}, {CONF_R_UNABLE_TO_CREATE_NEW_SECTION ,"unable to create new section"}, {CONF_R_VARIABLE_HAS_NO_VALUE ,"variable has no value"}, {0,NULL} diff --git a/crypto/conf/conf_lib.c b/crypto/conf/conf_lib.c index 4c8ca9e9ae..6a650f18e7 100644 --- a/crypto/conf/conf_lib.c +++ b/crypto/conf/conf_lib.c @@ -299,27 +299,46 @@ STACK_OF(CONF_VALUE) *NCONF_get_section(CONF *conf,char *section) return NULL; } + if (section == NULL) + { + CONFerr(CONF_F_NCONF_GET_SECTION,CONF_R_NO_SECTION); + return NULL; + } + return _CONF_get_section_values(conf, section); } char *NCONF_get_string(CONF *conf,char *group,char *name) { + char *s = _CONF_get_string(conf, group, name); + + /* Since we may get a value from an environment variable even + if conf is NULL, let's check the value first */ + if (s) return s; + if (conf == NULL) { - CONFerr(CONF_F_NCONF_GET_STRING,CONF_R_NO_CONF); + CONFerr(CONF_F_NCONF_GET_STRING, + CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE); return NULL; } - return _CONF_get_string(conf, group, name); } long NCONF_get_number(CONF *conf,char *group,char *name) { +#if 0 /* As with _CONF_get_string(), we rely on the possibility of finding + an environment variable with a suitable name. Unfortunately, there's + no way with the current API to see if we found one or not... + The meaning of this is that if a number is not found anywhere, it + will always default to 0. */ if (conf == NULL) { - CONFerr(CONF_F_NCONF_GET_NUMBER,CONF_R_NO_CONF); + CONFerr(CONF_F_NCONF_GET_NUMBER, + CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE); return 0; } +#endif return _CONF_get_number(conf, group, name); } |