diff options
author | Richard Levitte <levitte@openssl.org> | 2000-10-19 08:26:32 +0000 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2000-10-19 08:26:32 +0000 |
commit | befb3e7a4de7af6039ae2d37e995675e8f5fddc5 (patch) | |
tree | a1c6b5be70bcc2bc810f6164ad35ca93afc5b641 /crypto | |
parent | c6f1787bbd8012b372158c15ac84abf75261be3e (diff) | |
download | openssl-befb3e7a4de7af6039ae2d37e995675e8f5fddc5.tar.gz |
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')
-rw-r--r-- | crypto/conf/conf.h | 5 | ||||
-rw-r--r-- | crypto/conf/conf_def.c | 29 | ||||
-rw-r--r-- | crypto/conf/conf_lib.c | 21 |
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) |