static void test_kdc_remove_lookaside_multiple(void **state) { struct entry *e1; krb5_context context = *state; krb5_data req1 = string2data("I'm a test request"); krb5_data rep1 = string2data("I'm a test response"); krb5_data req2 = string2data("I'm a different test request"); e1 = insert_entry(context, &req1, &rep1, 0); insert_entry(context, &req2, NULL, 0); kdc_remove_lookaside(context, &req2); assert_null(k5_hashtab_get(hash_table, req2.data, req2.length)); assert_ptr_equal(k5_hashtab_get(hash_table, req1.data, req1.length), e1); assert_int_equal(num_entries, 1); assert_int_equal(total_size, entry_size(&req1, &rep1)); kdc_remove_lookaside(context, &req1); assert_null(k5_hashtab_get(hash_table, req1.data, req1.length)); assert_int_equal(num_entries, 0); assert_int_equal(total_size, 0); }
static void test_kdc_remove_lookaside_empty_cache(void **state) { krb5_context context = *state; krb5_data req = string2data("I'm a test request"); assert_int_equal(num_entries, 0); kdc_remove_lookaside(context, &req); assert_int_equal(num_entries, 0); assert_int_equal(total_size, 0); }
static void test_kdc_remove_lookaside(void **state) { krb5_context context = *state; krb5_data req = string2data("I'm a test request"); krb5_data rep = string2data("I'm a test response"); insert_entry(context, &req, &rep, 0); kdc_remove_lookaside(context, &req); assert_null(k5_hashtab_get(hash_table, req.data, req.length)); assert_int_equal(num_entries, 0); assert_int_equal(total_size, 0); }
static void finish_dispatch(void *arg, krb5_error_code code, krb5_data *response) { struct dispatch_state *state = arg; loop_respond_fn oldrespond; void *oldarg; assert(state); oldrespond = state->respond; oldarg = state->arg; #ifndef NOCACHE /* Remove our NULL cache entry to indicate request completion. */ kdc_remove_lookaside(kdc_context, state->request); #endif if (state->is_tcp == 0 && response && response->length > max_dgram_reply_size) { krb5_free_data(kdc_context, response); response = NULL; code = make_too_big_error(&response); if (code) krb5_klog_syslog(LOG_ERR, "error constructing " "KRB_ERR_RESPONSE_TOO_BIG error: %s", error_message(code)); } #ifndef NOCACHE /* put the response into the lookaside buffer */ else if (!code && response) kdc_insert_lookaside(state->request, response); #endif free(state); (*oldrespond)(oldarg, code, response); }