From: Nikos Mavrogiannopoulos Date: Thu, 31 Jan 2013 22:28:36 +0000 (+0100) Subject: Added gnutls_db_check_entry_time(). X-Git-Tag: gnutls_3_1_7~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e35c98563f6eeab0dc8e469bac793c41f0d7abc7;p=thirdparty%2Fgnutls.git Added gnutls_db_check_entry_time(). --- diff --git a/lib/gnutls_db.c b/lib/gnutls_db.c index 3881800561..27f8a700a2 100644 --- a/lib/gnutls_db.c +++ b/lib/gnutls_db.c @@ -148,6 +148,27 @@ gnutls_db_check_entry (gnutls_session_t session, gnutls_datum_t session_entry) return 0; } +/** + * gnutls_db_check_entry_time: + * @entry: is a pointer to a #gnutls_datum_t structure. + * @t: is the time of the session handshake + * + * This function returns the time that this entry was active. + * It can be used for database entry expiration. + * + **/ +time_t +gnutls_db_check_entry_time (gnutls_datum_t *entry) +{ +uint32_t t; + + if (entry->size < 4) + return gnutls_assert_val(0); + + memcpy(&t, entry->data, 4); + return t; +} + /* Checks if both db_store and db_retrieve functions have * been set up. */ diff --git a/lib/gnutls_session_pack.c b/lib/gnutls_session_pack.c index 2b73c0bbcd..4780802394 100644 --- a/lib/gnutls_session_pack.c +++ b/lib/gnutls_session_pack.c @@ -93,6 +93,9 @@ _gnutls_session_pack (gnutls_session_t session, _gnutls_buffer_init (&sb); + /* first is the timestamp */ + BUFFER_APPEND_NUM(&sb, session->security_parameters.timestamp); + id = gnutls_auth_get_type (session); BUFFER_APPEND (&sb, &id, 1); @@ -193,6 +196,9 @@ _gnutls_session_unpack (gnutls_session_t session, return ret; } + /* the timestamp is first */ + BUFFER_POP_NUM (&sb, session->security_parameters.timestamp); + if (_gnutls_get_auth_info (session) != NULL) { _gnutls_free_auth_info (session); @@ -725,7 +731,6 @@ error: * 1 byte the session ID size * x bytes the session ID (32 bytes max) * - * 4 bytes a timestamp * 4 bytes the new record padding flag * 4 bytes the ECC curve * ------------------- @@ -783,7 +788,6 @@ pack_security_parameters (gnutls_session_t session, gnutls_buffer_st * ps) BUFFER_APPEND_NUM (ps, session->security_parameters.max_record_send_size); BUFFER_APPEND_NUM (ps, session->security_parameters.max_record_recv_size); - BUFFER_APPEND_NUM (ps, session->security_parameters.timestamp); BUFFER_APPEND_NUM (ps, session->security_parameters.new_record_padding); BUFFER_APPEND_NUM (ps, session->security_parameters.ecc_curve); @@ -840,8 +844,6 @@ unpack_security_parameters (gnutls_session_t session, gnutls_buffer_st * ps) BUFFER_POP_NUM (ps, session->internals. resumed_security_parameters.max_record_recv_size); - BUFFER_POP_NUM (ps, - session->internals.resumed_security_parameters.timestamp); BUFFER_POP_NUM (ps, session->internals.resumed_security_parameters.new_record_padding); diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in index e9670401d6..710d77ce25 100644 --- a/lib/includes/gnutls/gnutls.h.in +++ b/lib/includes/gnutls/gnutls.h.in @@ -1131,6 +1131,7 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session); void *gnutls_db_get_ptr (gnutls_session_t session); int gnutls_db_check_entry (gnutls_session_t session, gnutls_datum_t session_entry); + time_t gnutls_db_check_entry_time (gnutls_datum_t *entry); typedef int (*gnutls_handshake_post_client_hello_func) (gnutls_session_t); void diff --git a/lib/libgnutls.map b/lib/libgnutls.map index 783fbbe9d9..bbc3ecaa94 100644 --- a/lib/libgnutls.map +++ b/lib/libgnutls.map @@ -885,6 +885,7 @@ GNUTLS_3_1_0 { gnutls_record_set_max_empty_records; gnutls_range_split; gnutls_record_send_range; + gnutls_db_check_entry_time; xssl_deinit; xssl_flush; xssl_read;