static int master_input_cache_flush(struct auth_master_connection *conn, const char *args) { const char *const *list; unsigned int count; /* <id> [<user> [<user> [..]] */ list = t_strsplit_tab(args); if (list[0] == NULL) { i_error("BUG: doveadm sent broken CACHE-FLUSH"); return FALSE; } if (passdb_cache == NULL) { /* cache disabled */ count = 0; } else if (list[1] == NULL) { /* flush the whole cache */ count = auth_cache_clear(passdb_cache); } else { count = auth_cache_clear_users(passdb_cache, list+1); } (void)o_stream_send_str(conn->output, t_strdup_printf("OK\t%s\t%u\n", list[0], count)); return TRUE; }
{ char *key = node->data; auth_cache_node_unlink(cache, node); cache->size_left += node->alloc_size; hash_table_remove(cache->hash, key); i_free(node); } static void sig_auth_cache_clear(const siginfo_t *si ATTR_UNUSED, void *context) { struct auth_cache *cache = context; i_info("SIGHUP received, %u cache entries flushed", auth_cache_clear(cache)); } static void sig_auth_cache_stats(const siginfo_t *si ATTR_UNUSED, void *context) { struct auth_cache *cache = context; unsigned int total_count; size_t cache_used; total_count = cache->hit_count + cache->miss_count; i_info("Authentication cache hits %u/%u (%u%%)", cache->hit_count, total_count, total_count == 0 ? 100 : (cache->hit_count * 100 / total_count)); i_info("Authentication cache inserts: " "positive: %u entries %llu bytes, "