eap-tls-common: Introduce variant data and reset API

This commit is contained in:
Tim Kourt 2018-11-29 14:41:40 -08:00 committed by Denis Kenzior
parent bb98101bd4
commit 779f668ab9
2 changed files with 22 additions and 2 deletions

View File

@ -112,6 +112,7 @@ struct eap_tls_state {
char *passphrase; char *passphrase;
const struct eap_tls_variant_ops *variant_ops; const struct eap_tls_variant_ops *variant_ops;
void *variant_data;
}; };
static void __eap_tls_common_state_reset(struct eap_tls_state *eap_tls) static void __eap_tls_common_state_reset(struct eap_tls_state *eap_tls)
@ -145,6 +146,18 @@ static void __eap_tls_common_state_reset(struct eap_tls_state *eap_tls)
} }
} }
bool eap_tls_common_state_reset(struct eap_state *eap)
{
struct eap_tls_state *eap_tls = eap_get_data(eap);
__eap_tls_common_state_reset(eap_tls);
if (eap_tls->variant_ops->reset)
eap_tls->variant_ops->reset(eap_tls->variant_data);
return true;
}
void eap_tls_common_state_free(struct eap_state *eap) void eap_tls_common_state_free(struct eap_state *eap)
{ {
struct eap_tls_state *eap_tls = eap_get_data(eap); struct eap_tls_state *eap_tls = eap_get_data(eap);
@ -153,6 +166,9 @@ void eap_tls_common_state_free(struct eap_state *eap)
eap_set_data(eap, NULL); eap_set_data(eap, NULL);
if (eap_tls->variant_ops->destroy)
eap_tls->variant_ops->destroy(eap_tls->variant_data);
l_free(eap_tls->ca_cert); l_free(eap_tls->ca_cert);
l_free(eap_tls->client_cert); l_free(eap_tls->client_cert);
l_free(eap_tls->client_key); l_free(eap_tls->client_key);
@ -767,7 +783,8 @@ int eap_tls_common_settings_check(struct l_settings *settings,
bool eap_tls_common_settings_load(struct eap_state *eap, bool eap_tls_common_settings_load(struct eap_state *eap,
struct l_settings *settings, const char *prefix, struct l_settings *settings, const char *prefix,
const struct eap_tls_variant_ops *variant_ops) const struct eap_tls_variant_ops *variant_ops,
void *variant_data)
{ {
struct eap_tls_state *eap_tls; struct eap_tls_state *eap_tls;
char setting_key[72]; char setting_key[72];
@ -776,6 +793,7 @@ bool eap_tls_common_settings_load(struct eap_state *eap,
eap_tls->version_negotiated = EAP_TLS_VERSION_NOT_NEGOTIATED; eap_tls->version_negotiated = EAP_TLS_VERSION_NOT_NEGOTIATED;
eap_tls->variant_ops = variant_ops; eap_tls->variant_ops = variant_ops;
eap_tls->variant_data = variant_data;
snprintf(setting_key, sizeof(setting_key), "%sCACert", prefix); snprintf(setting_key, sizeof(setting_key), "%sCACert", prefix);
eap_tls->ca_cert = l_settings_get_string(settings, "Security", eap_tls->ca_cert = l_settings_get_string(settings, "Security",

View File

@ -49,6 +49,7 @@ struct eap_tls_variant_ops {
void (*destroy)(void *variant_data); void (*destroy)(void *variant_data);
}; };
bool eap_tls_common_state_reset(struct eap_state *eap);
void eap_tls_common_state_free(struct eap_state *eap); void eap_tls_common_state_free(struct eap_state *eap);
void eap_tls_common_set_completed(struct eap_state *eap); void eap_tls_common_set_completed(struct eap_state *eap);
@ -65,4 +66,5 @@ int eap_tls_common_settings_check(struct l_settings *settings,
struct l_queue **out_missing); struct l_queue **out_missing);
bool eap_tls_common_settings_load(struct eap_state *eap, bool eap_tls_common_settings_load(struct eap_state *eap,
struct l_settings *settings, const char *prefix, struct l_settings *settings, const char *prefix,
const struct eap_tls_variant_ops *variant_ops); const struct eap_tls_variant_ops *variant_ops,
void *variant_data);