### Changes between 3.2 and 3.3 [xx XXX xxxx]
- * The activate configuration setting for providers in openssl.cnf has been
- updated to require a value of [1|yes|true|on] (in lower or UPPER case) to
- activate the provider. Conversely a setting [0|no|false|off] will prevent
- provider activation. All other values, or the omission of a value for this
- setting will result in an error.
+ * The activate and soft_load configuration settings for providers in
+ openssl.cnf have been updated to require a value of [1|yes|true|on]
+ (in lower or UPPER case) to enable the setting. Conversely a value
+ of [0|no|false|off] will disable the setting. All other values, or the
+ omission of a value for these settings will result in an error.
*Neil Horman*
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)
{
STACK_OF(CONF_VALUE) *ecmds;
int soft = 0;
const char *path = NULL;
- long activate = 0;
+ int activate = 0;
int ok = 0;
int added = 0;
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;
- }
}
}