summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@gnu.org>2020-04-24 17:47:06 +0000
committerDaiki Ueno <ueno@gnu.org>2020-04-24 17:47:06 +0000
commit7c0c1e7772a190fd601bdc033952b19864abc242 (patch)
treec2d1dc2fa57bc212775b757f6d3f6b4da1b86c24 /lib
parentd8292f24bff863ce3dc60b64e8320c532f46bd02 (diff)
parent5bba569b44b85b5aa126c1c56a549c9575856a9f (diff)
downloadgnutls-7c0c1e7772a190fd601bdc033952b19864abc242.tar.gz
Merge branch 'tmp-ext-name' into 'master'
gnutls_session_ext_register: keep track of extension name See merge request gnutls/gnutls!1224
Diffstat (limited to 'lib')
-rw-r--r--lib/hello_ext.c25
-rw-r--r--lib/includes/gnutls/gnutls.h.in2
-rw-r--r--lib/libgnutls.map6
-rw-r--r--lib/state.c2
4 files changed, 35 insertions, 0 deletions
diff --git a/lib/hello_ext.c b/lib/hello_ext.c
index 1df1506e0b..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;
@@ -1000,3 +1001,27 @@ unsigned gnutls_ext_get_current_msg(gnutls_session_t session)
{
return _gnutls_ext_get_msg(session);
}
+
+/**
+ * gnutls_ext_get_name2:
+ * @session: a #gnutls_session_t opaque pointer
+ * @tls_id: is a TLS extension numeric ID
+ * @parse_point: the parse type of the extension
+ *
+ * Convert a TLS extension numeric ID to a printable string.
+ *
+ * Returns: a pointer to a string that contains the name of the
+ * specified cipher, or %NULL.
+ **/
+const char *gnutls_ext_get_name2(gnutls_session_t session, unsigned int tls_id,
+ gnutls_ext_parse_type_t parse_point)
+{
+ const struct hello_ext_entry_st *ext;
+
+ ext = tls_id_to_ext_entry(session, tls_id, parse_point);
+ if (ext)
+ return ext->name;
+
+ return NULL;
+}
+
diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in
index 517153634a..fdcf914f42 100644
--- a/lib/includes/gnutls/gnutls.h.in
+++ b/lib/includes/gnutls/gnutls.h.in
@@ -3130,6 +3130,8 @@ int gnutls_session_ext_register(gnutls_session_t, const char *name, int type, gn
gnutls_ext_unpack_func unpack_func, unsigned flags);
const char *gnutls_ext_get_name(unsigned int ext);
+const char *gnutls_ext_get_name2(gnutls_session_t session, unsigned int tls_id,
+ gnutls_ext_parse_type_t parse_point);
/* Public supplemental data related functions */
diff --git a/lib/libgnutls.map b/lib/libgnutls.map
index 5541e9caba..512e403bb6 100644
--- a/lib/libgnutls.map
+++ b/lib/libgnutls.map
@@ -1324,6 +1324,12 @@ GNUTLS_3_6_13
gnutls_psk_set_client_credentials_function2;
} GNUTLS_3_6_12;
+GNUTLS_3_6_14
+{
+ global:
+ gnutls_ext_get_name2;
+} GNUTLS_3_6_13;
+
GNUTLS_FIPS140_3_4 {
global:
gnutls_cipher_self_test;
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);