#include <db.h>
#include <session_pack.h>
#include <datum.h>
+#include "ext/server_name.h"
/**
* gnutls_db_set_retrieve_function:
session->security_parameters.ext_master_secret)
return gnutls_assert_val(GNUTLS_E_INVALID_SESSION);
+ if (!_gnutls_server_name_matches_resumed(session))
+ return gnutls_assert_val(GNUTLS_E_INVALID_SESSION);
+
return 0;
}
gnutls_free(priv);
return ret;
}
+
+unsigned _gnutls_server_name_matches_resumed(gnutls_session_t session)
+{
+ server_name_ext_st *priv1, *priv2;
+ int ret;
+ gnutls_ext_priv_data_t epriv;
+
+ ret =
+ _gnutls_ext_get_session_data(session,
+ GNUTLS_EXTENSION_SERVER_NAME,
+ &epriv);
+ if (ret < 0) /* no server name in this session */
+ priv1 = NULL;
+ else
+ priv1 = epriv;
+
+ ret =
+ _gnutls_ext_get_resumed_session_data(session,
+ GNUTLS_EXTENSION_SERVER_NAME,
+ &epriv);
+ if (ret < 0) /* no server name in extensions */
+ priv2 = NULL;
+ else
+ priv2 = epriv;
+
+ if (priv1 == NULL || priv2 == NULL) {
+ if (priv1 == priv2)
+ return 1;
+ else
+ return 0;
+ }
+
+ if (priv1->name_length != priv2->name_length)
+ return 0;
+
+ if (memcmp(priv1->name, priv2->name, priv1->name_length) != 0)
+ return 0;
+
+ return 1;
+}