summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2000-10-13 08:30:06 +0000
committerRichard Levitte <levitte@openssl.org>2000-10-13 08:30:06 +0000
commitcde70093ac2bd2853ad81b98012ec639457ddc3b (patch)
tree3c02b685adefcf90547b87e5058971fc108b87e2
parent5f97f508e450af9d53e3a01b59b13e9e7b540720 (diff)
downloadopenssl-new-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.
-rw-r--r--crypto/conf/conf.h2
-rw-r--r--crypto/conf/conf_err.c2
-rw-r--r--crypto/conf/conf_lib.c25
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);
}