#endif
+static int _tls_session_free(tls_session_t *ssn)
+{
+ /*
+ * Free any opaque TTLS or PEAP data.
+ */
+ if ((ssn->opaque) && (ssn->free_opaque)) {
+ ssn->free_opaque(ssn->opaque);
+ ssn->opaque = NULL;
+ }
+
+ session_close(ssn);
+
+ return 0;
+}
+
tls_session_t *tls_new_client_session(TALLOC_CTX *ctx, fr_tls_server_conf_t *conf, int fd)
{
int verify_mode;
ssn = talloc_zero(ctx, tls_session_t);
if (!ssn) return NULL;
+ talloc_set_destructor(ssn, _tls_session_free);
+
ssn->ctx = conf->ctx;
SSL_CTX_set_mode(ssn->ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER | SSL_MODE_AUTO_RETRY);
while ((err = ERR_get_error())) {
ERROR("tls: %s", ERR_error_string(err, NULL));
}
- SSL_free(ssn->ssl);
talloc_free(ssn);
return NULL;
return ssn;
}
-static int _tls_session_free(tls_session_t *ssn)
-{
- /*
- * Free any opaque TTLS or PEAP data.
- */
- if ((ssn->opaque) && (ssn->free_opaque)) {
- ssn->free_opaque(ssn->opaque);
- ssn->opaque = NULL;
- }
-
- session_close(ssn);
-
- return 0;
-}
-
tls_session_t *tls_new_session(TALLOC_CTX *ctx, fr_tls_server_conf_t *conf, REQUEST *request, bool client_cert)
{
tls_session_t *state = NULL;