diff options
author | Ben Laurie <ben@links.org> | 2013-09-05 14:45:25 +0100 |
---|---|---|
committer | Ben Laurie <ben@links.org> | 2013-09-05 14:45:25 +0100 |
commit | 85b2ca671513df2b21df404d3dfa76cf681e553d (patch) | |
tree | 46d7449de265b982c077e993b94dbf9681abe40a | |
parent | 664c69432740670e8d93e0fd8d8d29f84b15fe3d (diff) | |
parent | 0314741417bf45549bab1c94a49b33d40476d844 (diff) | |
download | openssl-new-supplemental-data-api-2.tar.gz |
Merge remote-tracking branch 'scott2/ben-openssl' into supplemental-data-api-2supplemental-data-api-2
Conflicts:
apps/s_client.c
apps/s_server.c
-rw-r--r-- | apps/s_client.c | 24 | ||||
-rw-r--r-- | apps/s_server.c | 24 |
2 files changed, 36 insertions, 12 deletions
diff --git a/apps/s_client.c b/apps/s_client.c index a17917c9cb..fa98d5b2e6 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -225,8 +225,10 @@ static int c_brief=0; #ifndef OPENSSL_NO_TLSEXT -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 server_provided_server_authz = 0; static int server_provided_client_authz = 0; @@ -1768,6 +1770,13 @@ SSL_set_tlsext_status_ids(con, ids); "CONNECTION ESTABLISHED\n"); print_ssl_summary(bio_err, con); } + /*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; + } + print_stuff(bio_c_out,con,full_log); if (full_log > 0) full_log--; @@ -2439,6 +2448,8 @@ static int authz_tlsext_generate_cb(SSL *s, unsigned short ext_type, { if (c_auth) { + /*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; @@ -2467,15 +2478,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 && server_provided_client_authz && server_provided_server_authz) { + /*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, "5432154321", 10); - *out = result; + generated_supp_data = OPENSSL_malloc(10); + memcpy(generated_supp_data, "5432154321", 10); + *out = generated_supp_data; *outlen = 10; return 1; } diff --git a/apps/s_server.c b/apps/s_server.c index 42bce64bdb..c3eca2bca5 100644 --- a/apps/s_server.c +++ b/apps/s_server.c @@ -229,8 +229,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; @@ -2673,6 +2675,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)) @@ -3583,6 +3592,8 @@ static int authz_tlsext_generate_cb(SSL *s, unsigned short ext_type, { if (c_auth && client_provided_client_authz && client_provided_server_authz) { + /*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))) { @@ -3612,15 +3623,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 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; } |