diff options
Diffstat (limited to 'src/auth/auth-cache.h')
-rw-r--r-- | src/auth/auth-cache.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/auth/auth-cache.h b/src/auth/auth-cache.h new file mode 100644 index 0000000..ab02fe5 --- /dev/null +++ b/src/auth/auth-cache.h @@ -0,0 +1,53 @@ +#ifndef AUTH_CACHE_H +#define AUTH_CACHE_H + +struct auth_cache_node { + struct auth_cache_node *prev, *next; + + time_t created; + /* Total number of bytes used by this node */ + uint32_t alloc_size:31; + /* TRUE if the user gave the correct password the last time. */ + bool last_success:1; + + char data[]; /* key \0 value \0 */ +}; + +struct auth_cache; +struct auth_request; + +/* Parses all %x variables from query and compresses them into tab-separated + list, so it can be used as a cache key. */ +char *auth_cache_parse_key(pool_t pool, const char *query); + +/* Create a new cache. max_size specifies the maximum amount of memory in + bytes to use for cache (it's not fully exact). ttl_secs specifies time to + live for cache record, requests older than that are not used. + neg_ttl_secs specifies the TTL for negative entries. */ +struct auth_cache *auth_cache_new(size_t max_size, unsigned int ttl_secs, + unsigned int neg_ttl_secs); +void auth_cache_free(struct auth_cache **cache); + +/* Clear the cache. Returns how many entries were removed. */ +unsigned int ATTR_NOWARN_UNUSED_RESULT +auth_cache_clear(struct auth_cache *cache); +unsigned int auth_cache_clear_users(struct auth_cache *cache, + const char *const *usernames); + +/* Look key from cache. key should be the same string as returned by + auth_cache_parse_key(). Returned node can't be used after any other + auth_cache_*() calls. */ +const char * +auth_cache_lookup(struct auth_cache *cache, const struct auth_request *request, + const char *key, struct auth_cache_node **node_r, + bool *expired_r, bool *neg_expired_r); +/* Insert key => value into cache. "" value means negative cache entry. */ +void auth_cache_insert(struct auth_cache *cache, struct auth_request *request, + const char *key, const char *value, bool last_success); + +/* Remove key from cache */ +void auth_cache_remove(struct auth_cache *cache, + const struct auth_request *request, + const char *key); + +#endif |