diff options
author | Daiki Ueno <ueno@gnu.org> | 2020-04-24 17:47:06 +0000 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2020-04-24 17:47:06 +0000 |
commit | 7c0c1e7772a190fd601bdc033952b19864abc242 (patch) | |
tree | c2d1dc2fa57bc212775b757f6d3f6b4da1b86c24 | |
parent | d8292f24bff863ce3dc60b64e8320c532f46bd02 (diff) | |
parent | 5bba569b44b85b5aa126c1c56a549c9575856a9f (diff) | |
download | gnutls-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
-rw-r--r-- | devel/libgnutls-latest-x86_64.abi | 1 | ||||
-rw-r--r-- | devel/symbols.last | 2 | ||||
-rw-r--r-- | doc/Makefile.am | 2 | ||||
-rw-r--r-- | doc/manpages/Makefile.am | 1 | ||||
-rw-r--r-- | lib/hello_ext.c | 25 | ||||
-rw-r--r-- | lib/includes/gnutls/gnutls.h.in | 2 | ||||
-rw-r--r-- | lib/libgnutls.map | 6 | ||||
-rw-r--r-- | lib/state.c | 2 | ||||
-rw-r--r-- | tests/tls-session-ext-register.c | 9 |
9 files changed, 50 insertions, 0 deletions
diff --git a/devel/libgnutls-latest-x86_64.abi b/devel/libgnutls-latest-x86_64.abi index 12d5f5b7af..8aa81a55dd 100644 --- a/devel/libgnutls-latest-x86_64.abi +++ b/devel/libgnutls-latest-x86_64.abi @@ -271,6 +271,7 @@ <elf-symbol name='gnutls_ext_get_current_msg' version='GNUTLS_3_6_3' is-default-version='yes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='gnutls_ext_get_data' version='GNUTLS_3_4' is-default-version='yes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='gnutls_ext_get_name' version='GNUTLS_3_4' is-default-version='yes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='gnutls_ext_get_name2' version='GNUTLS_3_6_14' is-default-version='yes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='gnutls_ext_raw_parse' version='GNUTLS_3_6_3' is-default-version='yes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='gnutls_ext_register' version='GNUTLS_3_4' is-default-version='yes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='gnutls_ext_set_data' version='GNUTLS_3_4' is-default-version='yes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> diff --git a/devel/symbols.last b/devel/symbols.last index 5a8343a0f0..080f7f2954 100644 --- a/devel/symbols.last +++ b/devel/symbols.last @@ -3,6 +3,7 @@ GNUTLS_3_6_0@GNUTLS_3_6_0 GNUTLS_3_6_10@GNUTLS_3_6_10 GNUTLS_3_6_12@GNUTLS_3_6_12 GNUTLS_3_6_13@GNUTLS_3_6_13 +GNUTLS_3_6_14@GNUTLS_3_6_14 GNUTLS_3_6_2@GNUTLS_3_6_2 GNUTLS_3_6_3@GNUTLS_3_6_3 GNUTLS_3_6_4@GNUTLS_3_6_4 @@ -215,6 +216,7 @@ gnutls_error_to_alert@GNUTLS_3_4 gnutls_est_record_overhead_size@GNUTLS_3_4 gnutls_ext_get_current_msg@GNUTLS_3_6_3 gnutls_ext_get_data@GNUTLS_3_4 +gnutls_ext_get_name2@GNUTLS_3_6_14 gnutls_ext_get_name@GNUTLS_3_4 gnutls_ext_raw_parse@GNUTLS_3_6_3 gnutls_ext_register@GNUTLS_3_4 diff --git a/doc/Makefile.am b/doc/Makefile.am index 0f16eeccc8..83d851220c 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1023,6 +1023,8 @@ FUNCS += functions/gnutls_ext_get_data FUNCS += functions/gnutls_ext_get_data.short FUNCS += functions/gnutls_ext_get_name FUNCS += functions/gnutls_ext_get_name.short +FUNCS += functions/gnutls_ext_get_name2 +FUNCS += functions/gnutls_ext_get_name2.short FUNCS += functions/gnutls_ext_raw_parse FUNCS += functions/gnutls_ext_raw_parse.short FUNCS += functions/gnutls_ext_register diff --git a/doc/manpages/Makefile.am b/doc/manpages/Makefile.am index 97cc80ed6e..18f382ee45 100644 --- a/doc/manpages/Makefile.am +++ b/doc/manpages/Makefile.am @@ -313,6 +313,7 @@ APIMANS += gnutls_est_record_overhead_size.3 APIMANS += gnutls_ext_get_current_msg.3 APIMANS += gnutls_ext_get_data.3 APIMANS += gnutls_ext_get_name.3 +APIMANS += gnutls_ext_get_name2.3 APIMANS += gnutls_ext_raw_parse.3 APIMANS += gnutls_ext_register.3 APIMANS += gnutls_ext_set_data.3 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); 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"); |