|
@@ -272,6 +272,42 @@ static int provider_conf_activate(OSSL_LIB_CTX *libctx, const char *name,
|
|
|
return ok;
|
|
|
}
|
|
|
|
|
|
+static int provider_conf_parse_bool_setting(const char *confname,
|
|
|
+ const char *confvalue, int *val)
|
|
|
+{
|
|
|
+
|
|
|
+ if (confvalue == NULL) {
|
|
|
+ ERR_raise_data(ERR_LIB_CRYPTO, CRYPTO_R_PROVIDER_SECTION_ERROR,
|
|
|
+ "directive %s set to unrecognized value",
|
|
|
+ confname);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ if ((strcmp(confvalue, "1") == 0)
|
|
|
+ || (strcmp(confvalue, "yes") == 0)
|
|
|
+ || (strcmp(confvalue, "YES") == 0)
|
|
|
+ || (strcmp(confvalue, "true") == 0)
|
|
|
+ || (strcmp(confvalue, "TRUE") == 0)
|
|
|
+ || (strcmp(confvalue, "on") == 0)
|
|
|
+ || (strcmp(confvalue, "ON") == 0)) {
|
|
|
+ *val = 1;
|
|
|
+ } else if ((strcmp(confvalue, "0") == 0)
|
|
|
+ || (strcmp(confvalue, "no") == 0)
|
|
|
+ || (strcmp(confvalue, "NO") == 0)
|
|
|
+ || (strcmp(confvalue, "false") == 0)
|
|
|
+ || (strcmp(confvalue, "FALSE") == 0)
|
|
|
+ || (strcmp(confvalue, "off") == 0)
|
|
|
+ || (strcmp(confvalue, "OFF") == 0)) {
|
|
|
+ *val = 0;
|
|
|
+ } else {
|
|
|
+ ERR_raise_data(ERR_LIB_CRYPTO, CRYPTO_R_PROVIDER_SECTION_ERROR,
|
|
|
+ "directive %s set to unrecognized value",
|
|
|
+ confname);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
static int provider_conf_load(OSSL_LIB_CTX *libctx, const char *name,
|
|
|
const char *value, const CONF *cnf)
|
|
|
{
|
|
@@ -279,7 +315,7 @@ static int provider_conf_load(OSSL_LIB_CTX *libctx, const char *name,
|
|
|
STACK_OF(CONF_VALUE) *ecmds;
|
|
|
int soft = 0;
|
|
|
const char *path = NULL;
|
|
|
- long activate = 0;
|
|
|
+ int activate = 0;
|
|
|
int ok = 0;
|
|
|
int added = 0;
|
|
|
|
|
@@ -309,39 +345,16 @@ static int provider_conf_load(OSSL_LIB_CTX *libctx, const char *name,
|
|
|
if (strcmp(confname, "identity") == 0) {
|
|
|
name = confvalue;
|
|
|
} else if (strcmp(confname, "soft_load") == 0) {
|
|
|
- soft = 1;
|
|
|
+ if (!provider_conf_parse_bool_setting(confname,
|
|
|
+ confvalue, &soft))
|
|
|
+ return 0;
|
|
|
/* Load a dynamic PROVIDER */
|
|
|
} else if (strcmp(confname, "module") == 0) {
|
|
|
path = confvalue;
|
|
|
} else if (strcmp(confname, "activate") == 0) {
|
|
|
- if (confvalue == NULL) {
|
|
|
- ERR_raise_data(ERR_LIB_CRYPTO, CRYPTO_R_PROVIDER_SECTION_ERROR,
|
|
|
- "section=%s activate set to unrecognized value",
|
|
|
- value);
|
|
|
+ if (!provider_conf_parse_bool_setting(confname,
|
|
|
+ confvalue, &activate))
|
|
|
return 0;
|
|
|
- }
|
|
|
- if ((strcmp(confvalue, "1") == 0)
|
|
|
- || (strcmp(confvalue, "yes") == 0)
|
|
|
- || (strcmp(confvalue, "YES") == 0)
|
|
|
- || (strcmp(confvalue, "true") == 0)
|
|
|
- || (strcmp(confvalue, "TRUE") == 0)
|
|
|
- || (strcmp(confvalue, "on") == 0)
|
|
|
- || (strcmp(confvalue, "ON") == 0)) {
|
|
|
- activate = 1;
|
|
|
- } else if ((strcmp(confvalue, "0") == 0)
|
|
|
- || (strcmp(confvalue, "no") == 0)
|
|
|
- || (strcmp(confvalue, "NO") == 0)
|
|
|
- || (strcmp(confvalue, "false") == 0)
|
|
|
- || (strcmp(confvalue, "FALSE") == 0)
|
|
|
- || (strcmp(confvalue, "off") == 0)
|
|
|
- || (strcmp(confvalue, "OFF") == 0)) {
|
|
|
- activate = 0;
|
|
|
- } else {
|
|
|
- ERR_raise_data(ERR_LIB_CRYPTO, CRYPTO_R_PROVIDER_SECTION_ERROR,
|
|
|
- "section=%s activate set to unrecognized value",
|
|
|
- value);
|
|
|
- return 0;
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|