From bd6c37add950ea36b41baf03eb39a383da308088 Mon Sep 17 00:00:00 2001 From: jsing <> Date: Sun, 20 Apr 2014 09:04:56 +0000 Subject: KNF. --- src/lib/libcrypto/conf/conf_mod.c | 370 +++++++++++++++++++------------------- 1 file changed, 182 insertions(+), 188 deletions(-) (limited to 'src/lib/libcrypto/conf/conf_mod.c') diff --git a/src/lib/libcrypto/conf/conf_mod.c b/src/lib/libcrypto/conf/conf_mod.c index af33451844..80266e43d8 100644 --- a/src/lib/libcrypto/conf/conf_mod.c +++ b/src/lib/libcrypto/conf/conf_mod.c @@ -10,7 +10,7 @@ * are met: * * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in @@ -74,20 +74,19 @@ * static modules. */ -struct conf_module_st - { +struct conf_module_st { /* DSO of this module or NULL if static */ DSO *dso; /* Name of the module */ char *name; /* Init function */ - conf_init_func *init; + conf_init_func *init; /* Finish function */ conf_finish_func *finish; /* Number of successfully initialized modules */ int links; void *usr_data; - }; +}; /* This structure contains information about modules that have been @@ -95,14 +94,13 @@ struct conf_module_st * given module. */ -struct conf_imodule_st - { +struct conf_imodule_st { CONF_MODULE *pmod; char *name; char *value; unsigned long flags; void *usr_data; - }; +}; static STACK_OF(CONF_MODULE) *supported_modules = NULL; static STACK_OF(CONF_IMODULE) *initialized_modules = NULL; @@ -110,20 +108,20 @@ static STACK_OF(CONF_IMODULE) *initialized_modules = NULL; static void module_free(CONF_MODULE *md); static void module_finish(CONF_IMODULE *imod); static int module_run(const CONF *cnf, char *name, char *value, - unsigned long flags); + unsigned long flags); static CONF_MODULE *module_add(DSO *dso, const char *name, - conf_init_func *ifunc, conf_finish_func *ffunc); + conf_init_func *ifunc, conf_finish_func *ffunc); static CONF_MODULE *module_find(char *name); static int module_init(CONF_MODULE *pmod, char *name, char *value, - const CONF *cnf); + const CONF *cnf); static CONF_MODULE *module_load_dso(const CONF *cnf, char *name, char *value, - unsigned long flags); + unsigned long flags); /* Main function: load modules from a CONF structure */ -int CONF_modules_load(const CONF *cnf, const char *appname, - unsigned long flags) - { +int +CONF_modules_load(const CONF *cnf, const char *appname, unsigned long flags) +{ STACK_OF(CONF_VALUE) *values; CONF_VALUE *vl; char *vsection = NULL; @@ -139,33 +137,31 @@ int CONF_modules_load(const CONF *cnf, const char *appname, if (!appname || (!vsection && (flags & CONF_MFLAGS_DEFAULT_SECTION))) vsection = NCONF_get_string(cnf, NULL, "openssl_conf"); - if (!vsection) - { + if (!vsection) { ERR_clear_error(); return 1; - } + } values = NCONF_get_section(cnf, vsection); if (!values) return 0; - for (i = 0; i < sk_CONF_VALUE_num(values); i++) - { + for (i = 0; i < sk_CONF_VALUE_num(values); i++) { vl = sk_CONF_VALUE_value(values, i); ret = module_run(cnf, vl->name, vl->value, flags); if (ret <= 0) - if(!(flags & CONF_MFLAGS_IGNORE_ERRORS)) + if (!(flags & CONF_MFLAGS_IGNORE_ERRORS)) return ret; - } + } return 1; +} - } - -int CONF_modules_load_file(const char *filename, const char *appname, - unsigned long flags) - { +int +CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags) +{ char *file = NULL; CONF *conf = NULL; int ret = 0; @@ -173,39 +169,36 @@ int CONF_modules_load_file(const char *filename, const char *appname, if (!conf) goto err; - if (filename == NULL) - { + if (filename == NULL) { file = CONF_get1_default_config_file(); if (!file) goto err; - } - else + } else file = (char *)filename; - if (NCONF_load(conf, file, NULL) <= 0) - { + if (NCONF_load(conf, file, NULL) <= 0) { if ((flags & CONF_MFLAGS_IGNORE_MISSING_FILE) && - (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)) - { + (ERR_GET_REASON(ERR_peek_last_error()) == + CONF_R_NO_SUCH_FILE)) { ERR_clear_error(); ret = 1; - } - goto err; } + goto err; + } ret = CONF_modules_load(conf, appname, flags); - err: +err: if (filename == NULL) free(file); NCONF_free(conf); return ret; - } +} -static int module_run(const CONF *cnf, char *name, char *value, - unsigned long flags) - { +static int +module_run(const CONF *cnf, char *name, char *value, unsigned long flags) +{ CONF_MODULE *md; int ret; @@ -215,62 +208,58 @@ static int module_run(const CONF *cnf, char *name, char *value, if (!md && !(flags & CONF_MFLAGS_NO_DSO)) md = module_load_dso(cnf, name, value, flags); - if (!md) - { - if (!(flags & CONF_MFLAGS_SILENT)) - { + if (!md) { + if (!(flags & CONF_MFLAGS_SILENT)) { CONFerr(CONF_F_MODULE_RUN, CONF_R_UNKNOWN_MODULE_NAME); ERR_add_error_data(2, "module=", name); - } - return -1; } + return -1; + } ret = module_init(md, name, value, cnf); - if (ret <= 0) - { - if (!(flags & CONF_MFLAGS_SILENT)) - { - char rcode[DECIMAL_SIZE(ret)+1]; - CONFerr(CONF_F_MODULE_RUN, CONF_R_MODULE_INITIALIZATION_ERROR); + if (ret <= 0) { + if (!(flags & CONF_MFLAGS_SILENT)) { + char rcode[DECIMAL_SIZE(ret) + 1]; + CONFerr(CONF_F_MODULE_RUN, + CONF_R_MODULE_INITIALIZATION_ERROR); snprintf(rcode, sizeof rcode, "%-8d", ret); - ERR_add_error_data(6, "module=", name, ", value=", value, ", retcode=", rcode); - } + ERR_add_error_data(6, "module=", name, ", value=", + value, ", retcode=", rcode); } + } return ret; - } +} /* Load a module from a DSO */ -static CONF_MODULE *module_load_dso(const CONF *cnf, char *name, char *value, - unsigned long flags) - { +static CONF_MODULE * +module_load_dso(const CONF *cnf, char *name, char *value, unsigned long flags) +{ DSO *dso = NULL; conf_init_func *ifunc; conf_finish_func *ffunc; char *path = NULL; int errcode = 0; CONF_MODULE *md; + /* Look for alternative path in module section */ path = NCONF_get_string(cnf, value, "path"); - if (!path) - { + if (!path) { ERR_clear_error(); path = name; - } + } dso = DSO_load(NULL, path, NULL, 0); - if (!dso) - { + if (!dso) { errcode = CONF_R_ERROR_LOADING_DSO; goto err; - } - ifunc = (conf_init_func *)DSO_bind_func(dso, DSO_mod_init_name); - if (!ifunc) - { + } + ifunc = (conf_init_func *)DSO_bind_func(dso, DSO_mod_init_name); + if (!ifunc) { errcode = CONF_R_MISSING_INIT_FUNCTION; goto err; - } - ffunc = (conf_finish_func *)DSO_bind_func(dso, DSO_mod_finish_name); + } + ffunc = (conf_finish_func *)DSO_bind_func(dso, DSO_mod_finish_name); /* All OK, add module */ md = module_add(dso, name, ifunc, ffunc); @@ -279,19 +268,21 @@ static CONF_MODULE *module_load_dso(const CONF *cnf, char *name, char *value, return md; - err: +err: if (dso) DSO_free(dso); CONFerr(CONF_F_MODULE_LOAD_DSO, errcode); ERR_add_error_data(4, "module=", name, ", path=", path); return NULL; - } +} /* add module to list */ -static CONF_MODULE *module_add(DSO *dso, const char *name, - conf_init_func *ifunc, conf_finish_func *ffunc) - { +static CONF_MODULE * +module_add(DSO *dso, const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc) +{ CONF_MODULE *tmod = NULL; + if (supported_modules == NULL) supported_modules = sk_CONF_MODULE_new_null(); if (supported_modules == NULL) @@ -306,47 +297,46 @@ static CONF_MODULE *module_add(DSO *dso, const char *name, tmod->finish = ffunc; tmod->links = 0; - if (!sk_CONF_MODULE_push(supported_modules, tmod)) - { + if (!sk_CONF_MODULE_push(supported_modules, tmod)) { free(tmod); return NULL; - } + } return tmod; - } +} /* Find a module from the list. We allow module names of the * form modname.XXXX to just search for modname to allow the * same module to be initialized more than once. */ -static CONF_MODULE *module_find(char *name) - { +static CONF_MODULE * +module_find(char *name) +{ CONF_MODULE *tmod; int i, nchar; char *p; + p = strrchr(name, '.'); if (p) nchar = p - name; - else + else nchar = strlen(name); - for (i = 0; i < sk_CONF_MODULE_num(supported_modules); i++) - { + for (i = 0; i < sk_CONF_MODULE_num(supported_modules); i++) { tmod = sk_CONF_MODULE_value(supported_modules, i); if (!strncmp(tmod->name, name, nchar)) return tmod; - } + } return NULL; - - } +} /* initialize a module */ -static int module_init(CONF_MODULE *pmod, char *name, char *value, - const CONF *cnf) - { +static int +module_init(CONF_MODULE *pmod, char *name, char *value, const CONF *cnf) +{ int ret = 1; int init_called = 0; CONF_IMODULE *imod = NULL; @@ -365,68 +355,63 @@ static int module_init(CONF_MODULE *pmod, char *name, char *value, goto memerr; /* Try to initialize module */ - if(pmod->init) - { + if (pmod->init) { ret = pmod->init(imod, cnf); init_called = 1; /* Error occurred, exit */ if (ret <= 0) goto err; - } + } - if (initialized_modules == NULL) - { + if (initialized_modules == NULL) { initialized_modules = sk_CONF_IMODULE_new_null(); - if (!initialized_modules) - { + if (!initialized_modules) { CONFerr(CONF_F_MODULE_INIT, ERR_R_MALLOC_FAILURE); goto err; - } } + } - if (!sk_CONF_IMODULE_push(initialized_modules, imod)) - { + if (!sk_CONF_IMODULE_push(initialized_modules, imod)) { CONFerr(CONF_F_MODULE_INIT, ERR_R_MALLOC_FAILURE); goto err; - } + } pmod->links++; return ret; - err: - +err: /* We've started the module so we'd better finish it */ if (pmod->finish && init_called) pmod->finish(imod); - memerr: - if (imod) - { +memerr: + if (imod) { if (imod->name) free(imod->name); if (imod->value) free(imod->value); free(imod); - } + } return -1; - - } +} /* Unload any dynamic modules that have a link count of zero: * i.e. have no active initialized modules. If 'all' is set * then all modules are unloaded including static ones. */ -void CONF_modules_unload(int all) - { +void +CONF_modules_unload(int all) +{ int i; CONF_MODULE *md; + CONF_modules_finish(); + /* unload modules in reverse order */ - for (i = sk_CONF_MODULE_num(supported_modules) - 1; i >= 0; i--) - { + for (i = sk_CONF_MODULE_num(supported_modules) - 1; i >= 0; i--) { md = sk_CONF_MODULE_value(supported_modules, i); /* If static or in use and 'all' not set ignore it */ if (((md->links > 0) || !md->dso) && !all) @@ -434,112 +419,125 @@ void CONF_modules_unload(int all) /* Since we're working in reverse this is OK */ (void)sk_CONF_MODULE_delete(supported_modules, i); module_free(md); - } - if (sk_CONF_MODULE_num(supported_modules) == 0) - { + } + if (sk_CONF_MODULE_num(supported_modules) == 0) { sk_CONF_MODULE_free(supported_modules); supported_modules = NULL; - } } +} /* unload a single module */ -static void module_free(CONF_MODULE *md) - { +static void +module_free(CONF_MODULE *md) +{ if (md->dso) DSO_free(md->dso); free(md->name); free(md); - } +} /* finish and free up all modules instances */ -void CONF_modules_finish(void) - { +void +CONF_modules_finish(void) +{ CONF_IMODULE *imod; - while (sk_CONF_IMODULE_num(initialized_modules) > 0) - { + + while (sk_CONF_IMODULE_num(initialized_modules) > 0) { imod = sk_CONF_IMODULE_pop(initialized_modules); module_finish(imod); - } + } sk_CONF_IMODULE_free(initialized_modules); initialized_modules = NULL; - } +} /* finish a module instance */ -static void module_finish(CONF_IMODULE *imod) - { +static void +module_finish(CONF_IMODULE *imod) +{ if (imod->pmod->finish) imod->pmod->finish(imod); imod->pmod->links--; free(imod->name); free(imod->value); free(imod); - } +} /* Add a static module to OpenSSL */ -int CONF_module_add(const char *name, conf_init_func *ifunc, - conf_finish_func *ffunc) - { +int +CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc) +{ if (module_add(NULL, name, ifunc, ffunc)) return 1; else return 0; - } +} -void CONF_modules_free(void) - { +void +CONF_modules_free(void) +{ CONF_modules_finish(); CONF_modules_unload(1); - } +} /* Utility functions */ -const char *CONF_imodule_get_name(const CONF_IMODULE *md) - { +const char * +CONF_imodule_get_name(const CONF_IMODULE *md) +{ return md->name; - } +} -const char *CONF_imodule_get_value(const CONF_IMODULE *md) - { +const char * +CONF_imodule_get_value(const CONF_IMODULE *md) +{ return md->value; - } +} -void *CONF_imodule_get_usr_data(const CONF_IMODULE *md) - { +void * +CONF_imodule_get_usr_data(const CONF_IMODULE *md) +{ return md->usr_data; - } +} -void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data) - { +void +CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data) +{ md->usr_data = usr_data; - } +} -CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md) - { +CONF_MODULE * +CONF_imodule_get_module(const CONF_IMODULE *md) +{ return md->pmod; - } +} -unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md) - { +unsigned long +CONF_imodule_get_flags(const CONF_IMODULE *md) +{ return md->flags; - } +} -void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags) - { +void +CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags) +{ md->flags = flags; - } +} -void *CONF_module_get_usr_data(CONF_MODULE *pmod) - { +void * +CONF_module_get_usr_data(CONF_MODULE *pmod) +{ return pmod->usr_data; - } +} -void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data) - { +void +CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data) +{ pmod->usr_data = usr_data; - } +} /* Return default config file name */ @@ -549,9 +547,10 @@ CONF_get1_default_config_file(void) char *file; file = getenv("OPENSSL_CONF"); - if (file) + if (file) return BUF_strdup(file); - if (asprintf(&file, "%s/openssl.cnf", X509_get_default_cert_area()) == -1) + if (asprintf(&file, "%s/openssl.cnf", + X509_get_default_cert_area()) == -1) return (NULL); return file; } @@ -562,47 +561,42 @@ CONF_get1_default_config_file(void) * be used to parse comma separated lists for example. */ -int CONF_parse_list(const char *list_, int sep, int nospc, - int (*list_cb)(const char *elem, int len, void *usr), void *arg) - { +int +CONF_parse_list(const char *list_, int sep, int nospc, + int (*list_cb)(const char *elem, int len, void *usr), void *arg) +{ int ret; const char *lstart, *tmpend, *p; - if(list_ == NULL) - { + if (list_ == NULL) { CONFerr(CONF_F_CONF_PARSE_LIST, CONF_R_LIST_CANNOT_BE_NULL); return 0; - } + } lstart = list_; - for(;;) - { - if (nospc) - { - while(*lstart && isspace((unsigned char)*lstart)) + for (;;) { + if (nospc) { + while (*lstart && isspace((unsigned char)*lstart)) lstart++; - } + } p = strchr(lstart, sep); if (p == lstart || !*lstart) ret = list_cb(NULL, 0, arg); - else - { + else { if (p) tmpend = p - 1; - else + else tmpend = lstart + strlen(lstart) - 1; - if (nospc) - { - while(isspace((unsigned char)*tmpend)) + if (nospc) { + while (isspace((unsigned char)*tmpend)) tmpend--; - } - ret = list_cb(lstart, tmpend - lstart + 1, arg); } + ret = list_cb(lstart, tmpend - lstart + 1, arg); + } if (ret <= 0) return ret; if (p == NULL) return 1; lstart = p + 1; - } } - +} -- cgit v1.2.3-55-g6feb