From: Nikos Mavrogiannopoulos Date: Mon, 10 Nov 2003 15:32:33 +0000 (+0000) Subject: some fixes to have the correct cert_type on resumed sessions. X-Git-Tag: gnutls_0_9_97~13 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2cefc18b9a397b266e4352dfc160cb876d47811e;p=thirdparty%2Fgnutls.git some fixes to have the correct cert_type on resumed sessions. --- diff --git a/lib/auth_cert.c b/lib/auth_cert.c index d0bef0f2cb..b0c0685ca2 100644 --- a/lib/auth_cert.c +++ b/lib/auth_cert.c @@ -52,7 +52,7 @@ static int _gnutls_server_find_cert_list_index(gnutls_session session, * exported certificate struct (CERTIFICATE_AUTH_INFO) */ static -int _gnutls_copy_certificate_auth_info(CERTIFICATE_AUTH_INFO info, +int _gnutls_copy_certificate_auth_info(CERTIFICATE_AUTH_INFO info, gnutls_certificate_type type, gnutls_cert * cert, int ncerts) { /* Copy peer's information to AUTH_INFO @@ -64,7 +64,7 @@ int _gnutls_copy_certificate_auth_info(CERTIFICATE_AUTH_INFO info, info->ncerts = 0; return 0; } - + info->raw_certificate_list = gnutls_calloc(1, sizeof(gnutls_datum) * ncerts); if (info->raw_certificate_list == NULL) { @@ -737,7 +737,7 @@ int _gnutls_proc_x509_server_certificate(gnutls_session session, if ((ret = - _gnutls_copy_certificate_auth_info(info, + _gnutls_copy_certificate_auth_info(info, gnutls_certificate_type_get(session), peer_certificate_list, peer_certificate_list_size)) < 0) { @@ -909,7 +909,8 @@ int _gnutls_proc_openpgp_server_certificate(gnutls_session session, if ((ret = _gnutls_copy_certificate_auth_info(info, - peer_certificate_list, + gnutls_certificate_type_get(session), + peer_certificate_list, peer_certificate_list_size)) < 0) { gnutls_assert(); diff --git a/lib/ext_cert_type.c b/lib/ext_cert_type.c index e9683e3768..7375646124 100644 --- a/lib/ext_cert_type.c +++ b/lib/ext_cert_type.c @@ -30,6 +30,9 @@ #include #include +inline static int _gnutls_num2cert_type( int num); +inline static int _gnutls_cert_type2num( int record_size); + /* * In case of a server: if a CERT_TYPE extension type is received then it stores * into the session security parameters the new value. The server may use gnutls_session_certificate_type_get(), @@ -144,7 +147,6 @@ int _gnutls_cert_type_send_params( gnutls_session session, opaque* data, size_t } } else { /* server side */ - if ( session->security_parameters.cert_type != DEFAULT_CERT_TYPE) { len = 1; if (data_size < len) { @@ -165,7 +167,8 @@ int _gnutls_cert_type_send_params( gnutls_session session, opaque* data, size_t /* Maps numbers to record sizes according to the * extensions draft. */ -int _gnutls_num2cert_type( int num) { +inline +static int _gnutls_num2cert_type( int num) { switch( num) { case 0: return GNUTLS_CRT_X509; @@ -179,7 +182,8 @@ int _gnutls_num2cert_type( int num) { /* Maps record size to numbers according to the * extensions draft. */ -int _gnutls_cert_type2num( int cert_type) { +inline +static int _gnutls_cert_type2num( int cert_type) { switch(cert_type) { case GNUTLS_CRT_X509: return 0; diff --git a/lib/ext_cert_type.h b/lib/ext_cert_type.h index f7520cdab2..c011befc19 100644 --- a/lib/ext_cert_type.h +++ b/lib/ext_cert_type.h @@ -1,7 +1,5 @@ /* Maps record size to numbers according to the * extensions draft. */ -int _gnutls_num2cert_type( int num); -int _gnutls_cert_type2num( int record_size); int _gnutls_cert_type_recv_params( gnutls_session session, const opaque* data, size_t data_size); int _gnutls_cert_type_send_params( gnutls_session session, opaque* data, size_t); diff --git a/lib/gnutls_constate.c b/lib/gnutls_constate.c index 191b1c066e..c74fddd38a 100644 --- a/lib/gnutls_constate.c +++ b/lib/gnutls_constate.c @@ -393,6 +393,7 @@ int _gnutls_set_write_keys(gnutls_session session) memcpy( dst->server_random, src->server_random, TLS_RANDOM_SIZE); \ memcpy( dst->session_id, src->session_id, TLS_MAX_SESSION_ID_SIZE); \ dst->session_id_size = src->session_id_size; \ + dst->cert_type = src->cert_type; \ dst->timestamp = src->timestamp; \ dst->max_record_recv_size = src->max_record_recv_size; \ dst->max_record_send_size = src->max_record_send_size; \ diff --git a/lib/gnutls_extensions.c b/lib/gnutls_extensions.c index 5d8bd6334b..de80bf5dbd 100644 --- a/lib/gnutls_extensions.c +++ b/lib/gnutls_extensions.c @@ -77,7 +77,7 @@ const char *_gnutls_extension_get_name(uint16 type) const char *ret = NULL; /* avoid prefix */ - GNUTLS_EXTENSION_LOOP(ret = p->name + sizeof("EXTENSION_") - 1); + GNUTLS_EXTENSION_LOOP(ret = p->name + sizeof("GNUTLS_EXTENSION_") - 1); return ret; } @@ -111,7 +111,8 @@ int i; if (session->security_parameters.entity==GNUTLS_CLIENT) for (i=0;iinternals.extensions_sent_size;i++) { - _gnutls_debug_log("extensions: expecting extension %d\n", session->internals.extensions_sent[i]); + _gnutls_debug_log("EXT[%d]: expecting extension '%s'\n", session, + _gnutls_extension_get_name(session->internals.extensions_sent[i])); } #endif @@ -126,6 +127,9 @@ int i; type = _gnutls_read_uint16( &data[pos]); pos+=2; + _gnutls_debug_log("EXT[%x]: Received extension '%s'\n", session, + _gnutls_extension_get_name(type)); + if ( (ret=_gnutls_extension_list_check( session, type)) < 0) { gnutls_assert(); return ret; @@ -210,6 +214,9 @@ int (*ext_func_send)( gnutls_session, opaque*, int); /* add this extension to the extension list */ _gnutls_extension_list_add( session, next); + + _gnutls_debug_log("EXT[%x]: Sending extension %s\n", session, + _gnutls_extension_get_name(next)); } else if (size < 0) { gnutls_assert(); gnutls_free(*data); *data = NULL; diff --git a/lib/gnutls_session_pack.c b/lib/gnutls_session_pack.c index 17cb8946dc..01c7e36e0f 100644 --- a/lib/gnutls_session_pack.c +++ b/lib/gnutls_session_pack.c @@ -140,7 +140,6 @@ int _gnutls_session_pack(gnutls_session session, gnutls_datum * packed_session) data[packed_session->size - sizeof(SecurityParameters)], &session->security_parameters, sizeof(SecurityParameters)); - return 0; }