summaryrefslogtreecommitdiffstats
path: root/crypto/conf
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2000-10-19 08:26:32 +0000
committerRichard Levitte <levitte@openssl.org>2000-10-19 08:26:32 +0000
commitbefb3e7a4de7af6039ae2d37e995675e8f5fddc5 (patch)
treea1c6b5be70bcc2bc810f6164ad35ca93afc5b641 /crypto/conf
parentc6f1787bbd8012b372158c15ac84abf75261be3e (diff)
Make it possible for methods to load from something other than a BIO,
by providing a function pointer that is given a name instead of a BIO. For example, this could be used to load configuration data from an LDAP server.
Diffstat (limited to 'crypto/conf')
-rw-r--r--crypto/conf/conf.h5
-rw-r--r--crypto/conf/conf_def.c29
-rw-r--r--crypto/conf/conf_lib.c21
3 files changed, 36 insertions, 19 deletions
diff --git a/crypto/conf/conf.h b/crypto/conf/conf.h
index 3fded162a2..9f039391c9 100644
--- a/crypto/conf/conf.h
+++ b/crypto/conf/conf.h
@@ -90,7 +90,8 @@ struct conf_method_st
int (MS_FAR *init)(CONF *conf);
int (MS_FAR *destroy)(CONF *conf);
int (MS_FAR *destroy_data)(CONF *conf);
- int (MS_FAR *load)(CONF *conf, BIO *bp, long *eline);
+ int (MS_FAR *load)(CONF *conf, const char *name, long *eline);
+ int (MS_FAR *load_bio)(CONF *conf, BIO *bp, long *eline);
int (MS_FAR *dump)(CONF *conf, BIO *bp);
int (MS_FAR *is_number)(CONF *conf, char c);
int (MS_FAR *to_int)(CONF *conf, char c);
@@ -166,7 +167,9 @@ long NCONF_get_number(CONF *conf,char *group,char *name);
#define CONF_F_NCONF_GET_NUMBER_E 112
#define CONF_F_NCONF_GET_SECTION 108
#define CONF_F_NCONF_GET_STRING 109
+#define CONF_F_NCONF_LOAD 113
#define CONF_F_NCONF_LOAD_BIO 110
+#define CONF_F_NCONF_LOAD_FP 114
#define CONF_F_NCONF_NEW 111
#define CONF_F_STR_COPY 101
diff --git a/crypto/conf/conf_def.c b/crypto/conf/conf_def.c
index 773df32c68..7cf14316d5 100644
--- a/crypto/conf/conf_def.c
+++ b/crypto/conf/conf_def.c
@@ -81,7 +81,8 @@ static int def_init_default(CONF *conf);
static int def_init_WIN32(CONF *conf);
static int def_destroy(CONF *conf);
static int def_destroy_data(CONF *conf);
-static int def_load(CONF *conf, BIO *bp, long *eline);
+static int def_load(CONF *conf, const char *name, long *eline);
+static int def_load_bio(CONF *conf, BIO *bp, long *eline);
static int def_dump(CONF *conf, BIO *bp);
static int def_is_number(CONF *conf, char c);
static int def_to_int(CONF *conf, char c);
@@ -95,6 +96,7 @@ static CONF_METHOD default_method = {
def_destroy,
def_destroy_data,
def_load,
+ def_load_bio,
def_dump,
def_is_number,
def_to_int
@@ -107,6 +109,7 @@ static CONF_METHOD WIN32_method = {
def_destroy,
def_destroy_data,
def_load,
+ def_load_bio,
def_dump,
def_is_number,
def_to_int
@@ -177,7 +180,29 @@ static int def_destroy_data(CONF *conf)
return 1;
}
-static int def_load(CONF *conf, BIO *in, long *line)
+static int def_load(CONF *conf, const char *name, long *line)
+ {
+ int ret;
+ BIO *in=NULL;
+
+#ifdef VMS
+ in=BIO_new_file(name, "r");
+#else
+ in=BIO_new_file(name, "rb");
+#endif
+ if (in == NULL)
+ {
+ CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
+ return 0;
+ }
+
+ ret = def_load_bio(conf, in, line);
+ BIO_free(in);
+
+ return ret;
+ }
+
+static int def_load_bio(CONF *conf, BIO *in, long *line)
{
#define BUFSIZE 512
char btmp[16];
diff --git a/crypto/conf/conf_lib.c b/crypto/conf/conf_lib.c
index a1d31cf953..2005c87350 100644
--- a/crypto/conf/conf_lib.c
+++ b/crypto/conf/conf_lib.c
@@ -252,24 +252,13 @@ void NCONF_free_data(CONF *conf)
int NCONF_load(CONF *conf, const char *file, long *eline)
{
- int ret;
- BIO *in=NULL;
-
-#ifdef VMS
- in=BIO_new_file(file, "r");
-#else
- in=BIO_new_file(file, "rb");
-#endif
- if (in == NULL)
+ if (conf == NULL)
{
- CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
+ CONFerr(CONF_F_NCONF_LOAD,CONF_R_NO_CONF);
return 0;
}
- ret = NCONF_load_bio(conf, in, eline);
- BIO_free(in);
-
- return ret;
+ return conf->meth->load(conf, file, eline);
}
#ifndef NO_FP_API
@@ -279,7 +268,7 @@ int NCONF_load_fp(CONF *conf, FILE *fp,long *eline)
int ret;
if(!(btmp = BIO_new_fp(fp, BIO_NOCLOSE)))
{
- CONFerr(CONF_F_CONF_LOAD_FP,ERR_R_BUF_LIB);
+ CONFerr(CONF_F_NCONF_LOAD_FP,ERR_R_BUF_LIB);
return 0;
}
ret = NCONF_load_bio(conf, btmp, eline);
@@ -296,7 +285,7 @@ int NCONF_load_bio(CONF *conf, BIO *bp,long *eline)
return 0;
}
- return conf->meth->load(conf, bp, eline);
+ return conf->meth->load_bio(conf, bp, eline);
}
STACK_OF(CONF_VALUE) *NCONF_get_section(CONF *conf,char *section)