From: Richard Levitte Date: Thu, 19 Oct 2000 08:26:32 +0000 (+0000) Subject: Make it possible for methods to load from something other than a BIO, X-Git-Tag: BEFORE_engine~28 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=befb3e7a4de7af6039ae2d37e995675e8f5fddc5;p=oweals%2Fopenssl.git 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. --- 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)