diff options
author | Scott Deboy <sdeboy@secondstryke.com> | 2013-08-01 11:54:09 -0700 |
---|---|---|
committer | Scott Deboy <sdeboy@secondstryke.com> | 2014-02-08 16:14:23 -0800 |
commit | 40632f6b770ea79358cabacef8160065c30fd77c (patch) | |
tree | af649a4f8240c93facb3f5f5a0215ed5b767ab8b /apps/s_server.c | |
parent | 038bec784e528ce273169f178c35991fbc3bea92 (diff) |
Free generated supp data after handshake completion, add comment regarding use of num_renegotiations in TLS and supp data generation callbacks
(cherry picked from commit 67c408cee9b01a7c8c7ca002d36b4f8c0612b08c)
Conflicts:
apps/s_client.c
apps/s_server.c
Diffstat (limited to 'apps/s_server.c')
-rw-r--r-- | apps/s_server.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/apps/s_server.c b/apps/s_server.c index 42e2133308..576daac696 100644 --- a/apps/s_server.c +++ b/apps/s_server.c @@ -228,8 +228,10 @@ static void s_server_init(void); static const unsigned char auth_ext_data[]={TLSEXT_AUTHZDATAFORMAT_dtcp}; -static const unsigned char *most_recent_supplemental_data; -static size_t most_recent_supplemental_data_length; +static unsigned char *generated_supp_data = NULL; + +static unsigned char *most_recent_supplemental_data = NULL; +static size_t most_recent_supplemental_data_length = 0; static int client_provided_server_authz = 0; static int client_provided_client_authz = 0; @@ -2678,6 +2680,13 @@ static int init_ssl_connection(SSL *con) i=SSL_accept(con); } #endif + /*handshake is complete - free the generated supp data allocated in the callback */ + if (generated_supp_data) + { + OPENSSL_free(generated_supp_data); + generated_supp_data = NULL; + } + if (i <= 0) { if (BIO_sock_should_retry(i)) @@ -3571,7 +3580,10 @@ static int authz_tlsext_generate_cb(SSL *s, unsigned short ext_type, { if (c_auth && client_provided_client_authz && client_provided_server_authz) { - if (!c_auth_require_reneg || (c_auth_require_reneg && SSL_num_renegotiations(s))) + /*if auth_require_reneg flag is set, only send extensions if + renegotiation has occurred */ + if (!c_auth_require_reneg + || (c_auth_require_reneg && SSL_num_renegotiations(s))) { *out = auth_ext_data; *outlen = 1; @@ -3599,14 +3611,16 @@ static int auth_suppdata_generate_cb(SSL *s, unsigned short supp_data_type, const unsigned char **out, unsigned short *outlen, void *arg) { - unsigned char *result; if (c_auth && client_provided_client_authz && client_provided_server_authz) { - if (!c_auth_require_reneg || (c_auth_require_reneg && SSL_num_renegotiations(s))) + /*if auth_require_reneg flag is set, only send supplemental data if + renegotiation has occurred */ + if (!c_auth_require_reneg + || (c_auth_require_reneg && SSL_num_renegotiations(s))) { - result = OPENSSL_malloc(10); - memcpy(result, "1234512345", 10); - *out = result; + generated_supp_data = OPENSSL_malloc(10); + memcpy(generated_supp_data, "1234512345", 10); + *out = generated_supp_data; *outlen = 10; return 1; } |