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.
This commit is contained in:
parent
c6f1787bbd
commit
befb3e7a4d
@ -90,7 +90,8 @@ struct conf_method_st
|
|||||||
int (MS_FAR *init)(CONF *conf);
|
int (MS_FAR *init)(CONF *conf);
|
||||||
int (MS_FAR *destroy)(CONF *conf);
|
int (MS_FAR *destroy)(CONF *conf);
|
||||||
int (MS_FAR *destroy_data)(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 *dump)(CONF *conf, BIO *bp);
|
||||||
int (MS_FAR *is_number)(CONF *conf, char c);
|
int (MS_FAR *is_number)(CONF *conf, char c);
|
||||||
int (MS_FAR *to_int)(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_NUMBER_E 112
|
||||||
#define CONF_F_NCONF_GET_SECTION 108
|
#define CONF_F_NCONF_GET_SECTION 108
|
||||||
#define CONF_F_NCONF_GET_STRING 109
|
#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_BIO 110
|
||||||
|
#define CONF_F_NCONF_LOAD_FP 114
|
||||||
#define CONF_F_NCONF_NEW 111
|
#define CONF_F_NCONF_NEW 111
|
||||||
#define CONF_F_STR_COPY 101
|
#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_init_WIN32(CONF *conf);
|
||||||
static int def_destroy(CONF *conf);
|
static int def_destroy(CONF *conf);
|
||||||
static int def_destroy_data(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_dump(CONF *conf, BIO *bp);
|
||||||
static int def_is_number(CONF *conf, char c);
|
static int def_is_number(CONF *conf, char c);
|
||||||
static int def_to_int(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,
|
||||||
def_destroy_data,
|
def_destroy_data,
|
||||||
def_load,
|
def_load,
|
||||||
|
def_load_bio,
|
||||||
def_dump,
|
def_dump,
|
||||||
def_is_number,
|
def_is_number,
|
||||||
def_to_int
|
def_to_int
|
||||||
@ -107,6 +109,7 @@ static CONF_METHOD WIN32_method = {
|
|||||||
def_destroy,
|
def_destroy,
|
||||||
def_destroy_data,
|
def_destroy_data,
|
||||||
def_load,
|
def_load,
|
||||||
|
def_load_bio,
|
||||||
def_dump,
|
def_dump,
|
||||||
def_is_number,
|
def_is_number,
|
||||||
def_to_int
|
def_to_int
|
||||||
@ -177,7 +180,29 @@ static int def_destroy_data(CONF *conf)
|
|||||||
return 1;
|
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
|
#define BUFSIZE 512
|
||||||
char btmp[16];
|
char btmp[16];
|
||||||
|
@ -252,24 +252,13 @@ void NCONF_free_data(CONF *conf)
|
|||||||
|
|
||||||
int NCONF_load(CONF *conf, const char *file, long *eline)
|
int NCONF_load(CONF *conf, const char *file, long *eline)
|
||||||
{
|
{
|
||||||
int ret;
|
if (conf == NULL)
|
||||||
BIO *in=NULL;
|
|
||||||
|
|
||||||
#ifdef VMS
|
|
||||||
in=BIO_new_file(file, "r");
|
|
||||||
#else
|
|
||||||
in=BIO_new_file(file, "rb");
|
|
||||||
#endif
|
|
||||||
if (in == NULL)
|
|
||||||
{
|
{
|
||||||
CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
|
CONFerr(CONF_F_NCONF_LOAD,CONF_R_NO_CONF);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = NCONF_load_bio(conf, in, eline);
|
return conf->meth->load(conf, file, eline);
|
||||||
BIO_free(in);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NO_FP_API
|
#ifndef NO_FP_API
|
||||||
@ -279,7 +268,7 @@ int NCONF_load_fp(CONF *conf, FILE *fp,long *eline)
|
|||||||
int ret;
|
int ret;
|
||||||
if(!(btmp = BIO_new_fp(fp, BIO_NOCLOSE)))
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
ret = NCONF_load_bio(conf, btmp, eline);
|
ret = NCONF_load_bio(conf, btmp, eline);
|
||||||
@ -296,7 +285,7 @@ int NCONF_load_bio(CONF *conf, BIO *bp,long *eline)
|
|||||||
return 0;
|
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)
|
STACK_OF(CONF_VALUE) *NCONF_get_section(CONF *conf,char *section)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user