From 5bba569b44b85b5aa126c1c56a549c9575856a9f Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Fri, 27 Mar 2020 09:53:38 +0100 Subject: gnutls_session_ext_register: keep track of extension name Previously it discarded the name argument, and that was making the debug output awkward, e.g., running tests/tls-session-ext-register -v: client|<4>| EXT[0x9cdc20]: Preparing extension ((null)/242) for 'client hello' client|<4>| EXT[0x9cdc20]: Preparing extension ((null)/241) for 'client hello' client|<4>| EXT[0x9cdc20]: Sending extension (null)/241 (2 bytes) Signed-off-by: Daiki Ueno --- lib/hello_ext.c | 1 + lib/state.c | 2 ++ tests/tls-session-ext-register.c | 9 +++++++++ 3 files changed, 12 insertions(+) diff --git a/lib/hello_ext.c b/lib/hello_ext.c index 8052488366..dbe73fdeb3 100644 --- a/lib/hello_ext.c +++ b/lib/hello_ext.c @@ -898,6 +898,7 @@ gnutls_session_ext_register(gnutls_session_t session, return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); memset(&tmp_mod, 0, sizeof(hello_ext_entry_st)); + tmp_mod.name = gnutls_strdup(name); tmp_mod.free_struct = 1; tmp_mod.tls_id = id; tmp_mod.gid = gid; diff --git a/lib/state.c b/lib/state.c index 98900c171f..8ba2cc4a32 100644 --- a/lib/state.c +++ b/lib/state.c @@ -692,6 +692,8 @@ void gnutls_deinit(gnutls_session_t session) _gnutls_free_datum(&session->internals.resumption_data); _gnutls_free_datum(&session->internals.dtls.dcookie); + for (i = 0; i < session->internals.rexts_size; i++) + gnutls_free(session->internals.rexts[i].name); gnutls_free(session->internals.rexts); gnutls_free(session->internals.post_handshake_cr_context.data); diff --git a/tests/tls-session-ext-register.c b/tests/tls-session-ext-register.c index 7e907f5e96..6e44b9e60e 100644 --- a/tests/tls-session-ext-register.c +++ b/tests/tls-session-ext-register.c @@ -152,6 +152,7 @@ static void client(int sd, const char *name, const char *prio, unsigned flags, u int ret; gnutls_session_t session; gnutls_certificate_credentials_t clientx509cred; + const char *ext_name; void *p; side = "client"; @@ -179,6 +180,14 @@ static void client(int sd, const char *name, const char *prio, unsigned flags, u if (ret < 0) myfail("client: register extension\n"); + ext_name = gnutls_ext_get_name2(session, TLSEXT_TYPE_IGN, GNUTLS_EXT_ANY); + if (ext_name == NULL || strcmp(ext_name, "ext_ign")) + myfail("client: retrieve name of extension %u\n", TLSEXT_TYPE_IGN); + + ext_name = gnutls_ext_get_name2(session, TLSEXT_TYPE_IGN, GNUTLS_EXT_APPLICATION); + if (ext_name) + myfail("client: retrieve name of extension %u (expected none)\n", TLSEXT_TYPE_IGN); + ret = gnutls_session_ext_register(session, "ext_client", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, flags); if (ret < 0) myfail("client: register extension\n"); -- cgit v1.2.1