From: Nikos Mavrogiannopoulos Date: Wed, 16 Nov 2005 11:54:04 +0000 (+0000) Subject: some more fixes for PSK. X-Git-Tag: gnutls_1_3_1~47 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dcfb94a67e5db06c6a16a49ce4c2bc4c329f4c40;p=thirdparty%2Fgnutls.git some more fixes for PSK. --- diff --git a/lib/gnutls_datum.c b/lib/gnutls_datum.c index 66bc6fce6a..367e0d2a2a 100644 --- a/lib/gnutls_datum.c +++ b/lib/gnutls_datum.c @@ -37,28 +37,32 @@ void _gnutls_write_datum16 (opaque * dest, gnutls_datum_t dat) { _gnutls_write_uint16 (dat.size, dest); - memcpy (&dest[2], dat.data, dat.size); + if (dat.data != NULL) + memcpy (&dest[2], dat.data, dat.size); } void _gnutls_write_datum24 (opaque * dest, gnutls_datum_t dat) { _gnutls_write_uint24 (dat.size, dest); - memcpy (&dest[3], dat.data, dat.size); + if (dat.data != NULL) + memcpy (&dest[3], dat.data, dat.size); } void _gnutls_write_datum32 (opaque * dest, gnutls_datum_t dat) { _gnutls_write_uint32 (dat.size, dest); - memcpy (&dest[4], dat.data, dat.size); + if (dat.data != NULL) + memcpy (&dest[4], dat.data, dat.size); } void _gnutls_write_datum8 (opaque * dest, gnutls_datum_t dat) { dest[0] = (uint8) dat.size; - memcpy (&dest[1], dat.data, dat.size); + if (dat.data != NULL) + memcpy (&dest[1], dat.data, dat.size); } diff --git a/lib/gnutls_session_pack.c b/lib/gnutls_session_pack.c index 1c4ec6971c..ecf24188d7 100644 --- a/lib/gnutls_session_pack.c +++ b/lib/gnutls_session_pack.c @@ -769,8 +769,10 @@ error: static int pack_psk_auth_info (gnutls_session_t session, gnutls_datum * packed_session) { - psk_auth_info_t info = _gnutls_get_auth_info (session); - int pack_size, username_size, pos; + psk_auth_info_t info; + int pack_size, username_size = 0, pos; + + info = _gnutls_get_auth_info (session); if (info == NULL && session->key->auth_info_size != 0) { @@ -778,11 +780,11 @@ pack_psk_auth_info (gnutls_session_t session, gnutls_datum * packed_session) return GNUTLS_E_INVALID_REQUEST; } - username_size = strlen (info->username) + 1; /* include the terminating null */ - if (info) + if (info) { + username_size = strlen (info->username) + 1; /* include the terminating null */ pack_size = username_size + 2 + 4 * 3 + info->dh.prime.size + info->dh.generator.size + info->dh.public_key.size; - else + } else pack_size = 0; packed_session->size = PACK_HEADER_SIZE + pack_size + sizeof (uint32); diff --git a/src/serv.c b/src/serv.c index d47351aa04..6c6bfc5fcc 100644 --- a/src/serv.c +++ b/src/serv.c @@ -282,7 +282,7 @@ int protocol_priority[PRI_MAX] = { GNUTLS_TLS1_1, GNUTLS_TLS1, GNUTLS_SSL3, 0 }; int kx_priority[PRI_MAX] = { GNUTLS_KX_DHE_DSS, GNUTLS_KX_RSA, GNUTLS_KX_DHE_RSA, GNUTLS_KX_SRP, - GNUTLS_KX_PSK, + GNUTLS_KX_PSK, GNUTLS_KX_DHE_PSK, /* Do not use anonymous authentication, unless you know what that means */ GNUTLS_KX_SRP_DSS, GNUTLS_KX_SRP_RSA, GNUTLS_KX_ANON_DH, GNUTLS_KX_RSA_EXPORT, 0