提交 befb3e7a 编写于 作者: R Richard Levitte

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.
上级 c6f1787b
......@@ -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
......
......@@ -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];
......
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册