END_TEST #if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) START_TEST(cache_dsess_04) { SSL_SESSION *s1, *s2; s1 = ssl_session_from_file(TMP_SESS_FILE); fail_unless(!!s1, "creating session failed"); fail_unless(ssl_session_is_valid(s1), "session invalid"); fail_unless(s1->references == 1, "refcount != 1"); cachemgr_dsess_set((struct sockaddr*)&addr, addrlen, sni, s1); fail_unless(s1->references == 1, "refcount != 1"); s2 = cachemgr_dsess_get((struct sockaddr*)&addr, addrlen, sni); fail_unless(s1->references == 1, "refcount != 1"); fail_unless(!!s2, "cache returned no session"); fail_unless(s2->references == 1, "refcount != 1"); cachemgr_dsess_set((struct sockaddr*)&addr, addrlen, sni, s1); fail_unless(s1->references == 1, "refcount != 1"); cachemgr_dsess_del((struct sockaddr*)&addr, addrlen, sni); fail_unless(s1->references == 1, "refcount != 1"); cachemgr_dsess_set((struct sockaddr*)&addr, addrlen, sni, s1); fail_unless(s1->references == 1, "refcount != 1"); SSL_SESSION_free(s1); SSL_SESSION_free(s2); }
END_TEST START_TEST(cache_dsess_02) { SSL_SESSION *s1, *s2; s1 = ssl_session_from_file(TMP_SESS_FILE); fail_unless(!!s1, "creating session failed"); fail_unless(ssl_session_is_valid(s1), "session invalid"); s2 = cachemgr_dsess_get((struct sockaddr*)&addr, addrlen, sni); fail_unless(s2 == NULL, "session was already in empty cache"); SSL_SESSION_free(s1); }
END_TEST START_TEST(cache_dsess_03) { SSL_SESSION *s1, *s2; s1 = ssl_session_from_file(TMP_SESS_FILE); fail_unless(!!s1, "creating session failed"); fail_unless(ssl_session_is_valid(s1), "session invalid"); cachemgr_dsess_set((struct sockaddr*)&addr, addrlen, sni, s1); cachemgr_dsess_del((struct sockaddr*)&addr, addrlen, sni); s2 = cachemgr_dsess_get((struct sockaddr*)&addr, addrlen, sni); fail_unless(s2 == NULL, "cache returned deleted session"); SSL_SESSION_free(s1); }
static cache_val_t cachessess_unpackverify_val_cb(cache_val_t val, int copy) { dynbuf_t *valbuf = val; SSL_SESSION *sess; const unsigned char *p; p = (const unsigned char *)valbuf->buf; sess = d2i_SSL_SESSION(NULL, &p, valbuf->sz); /* increments p */ if (!sess) return NULL; if (!ssl_session_is_valid(sess)) { SSL_SESSION_free(sess); return NULL; } if (copy) return sess; SSL_SESSION_free(sess); return ((cache_val_t)!NULL); }