summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Laurie <ben@links.org>2013-09-05 14:45:25 +0100
committerBen Laurie <ben@links.org>2013-09-05 14:45:25 +0100
commit85b2ca671513df2b21df404d3dfa76cf681e553d (patch)
tree46d7449de265b982c077e993b94dbf9681abe40a
parent664c69432740670e8d93e0fd8d8d29f84b15fe3d (diff)
parent0314741417bf45549bab1c94a49b33d40476d844 (diff)
downloadopenssl-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.c24
-rw-r--r--apps/s_server.c24
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;
}