X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fconf%2Fconf_api.c;h=4c7349a3057ece19609eb7b053840facd9c574c3;hp=6f8947df2c83ed9e125075d1472df0b3a5d0906b;hb=2b9bafe607421e394265dcbaad6234b4efee19e8;hpb=07016a8a3174db5caf07182930533cf88ad9b0ad diff --git a/crypto/conf/conf_api.c b/crypto/conf/conf_api.c index 6f8947df2c..4c7349a305 100644 --- a/crypto/conf/conf_api.c +++ b/crypto/conf/conf_api.c @@ -1,7 +1,7 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ /* Part of the code in here was originally in conf.c, which is now removed */ #include "e_os.h" +#include "internal/cryptlib.h" #include #include #include @@ -18,30 +19,26 @@ static void value_free_hash(const CONF_VALUE *a, LHASH_OF(CONF_VALUE) *conf); static void value_free_stack_doall(CONF_VALUE *a); -/* Up until OpenSSL 0.9.5a, this was get_section */ CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section) { - CONF_VALUE *v, vv; + CONF_VALUE vv; - if ((conf == NULL) || (section == NULL)) - return (NULL); + if (conf == NULL || section == NULL) + return NULL; vv.name = NULL; vv.section = (char *)section; - v = lh_CONF_VALUE_retrieve(conf->data, &vv); - return (v); + return lh_CONF_VALUE_retrieve(conf->data, &vv); } -/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, const char *section) { CONF_VALUE *v; v = _CONF_get_section(conf, section); - if (v != NULL) - return ((STACK_OF(CONF_VALUE) *)v->value); - else - return (NULL); + if (v == NULL) + return NULL; + return ((STACK_OF(CONF_VALUE) *)v->value); } int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value) @@ -52,9 +49,8 @@ int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value) ts = (STACK_OF(CONF_VALUE) *)section->value; value->section = section->section; - if (!sk_CONF_VALUE_push(ts, value)) { + if (!sk_CONF_VALUE_push(ts, value)) return 0; - } v = lh_CONF_VALUE_insert(conf->data, value); if (v != NULL) { @@ -73,29 +69,27 @@ char *_CONF_get_string(const CONF *conf, const char *section, char *p; if (name == NULL) - return (NULL); - if (conf != NULL) { - if (section != NULL) { - vv.name = (char *)name; - vv.section = (char *)section; - v = lh_CONF_VALUE_retrieve(conf->data, &vv); - if (v != NULL) - return (v->value); - if (strcmp(section, "ENV") == 0) { - p = getenv(name); - if (p != NULL) - return (p); - } - } - vv.section = "default"; + return NULL; + if (conf == NULL) + return ossl_safe_getenv(name); + if (section != NULL) { vv.name = (char *)name; + vv.section = (char *)section; v = lh_CONF_VALUE_retrieve(conf->data, &vv); if (v != NULL) - return (v->value); - else - return (NULL); - } else - return (getenv(name)); + return v->value; + if (strcmp(section, "ENV") == 0) { + p = ossl_safe_getenv(name); + if (p != NULL) + return p; + } + } + vv.section = "default"; + vv.name = (char *)name; + v = lh_CONF_VALUE_retrieve(conf->data, &vv); + if (v == NULL) + return NULL; + return v->value; } static unsigned long conf_value_hash(const CONF_VALUE *v) @@ -109,24 +103,21 @@ static int conf_value_cmp(const CONF_VALUE *a, const CONF_VALUE *b) if (a->section != b->section) { i = strcmp(a->section, b->section); - if (i) - return (i); + if (i != 0) + return i; } - if ((a->name != NULL) && (b->name != NULL)) { - i = strcmp(a->name, b->name); - return (i); - } else if (a->name == b->name) - return (0); - else - return ((a->name == NULL) ? -1 : 1); + if (a->name != NULL && b->name != NULL) + return strcmp(a->name, b->name); + if (a->name == b->name) + return 0; + return (a->name == NULL) ? -1 : 1; } int _CONF_new_data(CONF *conf) { - if (conf == NULL) { + if (conf == NULL) return 0; - } if (conf->data == NULL) { conf->data = lh_CONF_VALUE_new(conf_value_hash, conf_value_cmp); if (conf->data == NULL) @@ -184,7 +175,6 @@ static void value_free_stack_doall(CONF_VALUE *a) OPENSSL_free(a); } -/* Up until OpenSSL 0.9.5a, this was new_section */ CONF_VALUE *_CONF_new_section(CONF *conf, const char *section) { STACK_OF(CONF_VALUE) *sk = NULL; @@ -204,12 +194,14 @@ CONF_VALUE *_CONF_new_section(CONF *conf, const char *section) v->value = (char *)sk; vv = lh_CONF_VALUE_insert(conf->data, v); - if (vv != NULL) + if (vv != NULL || lh_CONF_VALUE_error(conf->data) > 0) goto err; return v; err: sk_CONF_VALUE_free(sk); + if (v != NULL) + OPENSSL_free(v->section); OPENSSL_free(v); return NULL; }