From c9b8061af6a3643b7a721bc38e6c1119c8b50da8 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 31 Oct 2019 19:09:35 +0200 Subject: [PATCH] director: Add user_directory.director --- src/director/mail-host.c | 3 ++- src/director/test-user-directory.c | 6 +++--- src/director/user-directory.c | 5 ++++- src/director/user-directory.h | 4 +++- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/director/mail-host.c b/src/director/mail-host.c index 2812b506bc..45176526fc 100644 --- a/src/director/mail-host.c +++ b/src/director/mail-host.c @@ -142,7 +142,8 @@ mail_tag_get(struct mail_host_list *list, const char *tag_name) tag = i_new(struct mail_tag, 1); tag->name = i_strdup(tag_name); i_array_init(&tag->vhosts, 16*VHOST_MULTIPLIER); - tag->users = user_directory_init(list->user_expire_secs, + tag->users = user_directory_init(list->dir, + list->user_expire_secs, list->user_free_hook); array_push_back(&list->tags, &tag); } diff --git a/src/director/test-user-directory.c b/src/director/test-user-directory.c index 3b1df7e19f..88f40a8959 100644 --- a/src/director/test-user-directory.c +++ b/src/director/test-user-directory.c @@ -46,7 +46,7 @@ static void test_user_directory_ascending(void) unsigned int i; test_begin("user directory ascending"); - dir = user_directory_init(USER_DIR_TIMEOUT, NULL); + dir = user_directory_init(NULL, USER_DIR_TIMEOUT, NULL); (void)user_directory_add(dir, 1, host, ioloop_time + count+1); for (i = 0; i < count; i++) @@ -64,7 +64,7 @@ static void test_user_directory_descending(void) unsigned int i; test_begin("user directory descending"); - dir = user_directory_init(USER_DIR_TIMEOUT, NULL); + dir = user_directory_init(NULL, USER_DIR_TIMEOUT, NULL); for (i = 0; i < count; i++) (void)user_directory_add(dir, i+1, host, ioloop_time - i); @@ -81,7 +81,7 @@ static void test_user_directory_random(void) unsigned int i, count = i_rand_minmax(10000, 19999); test_begin("user directory random"); - dir = user_directory_init(USER_DIR_TIMEOUT, NULL); + dir = user_directory_init(NULL, USER_DIR_TIMEOUT, NULL); for (i = 0; i < count; i++) { if (i_rand_limit(10) == 0) timestamp = ioloop_time; diff --git a/src/director/user-directory.c b/src/director/user-directory.c index 0c5ae239d2..6288a4818e 100644 --- a/src/director/user-directory.c +++ b/src/director/user-directory.c @@ -21,6 +21,8 @@ struct user_directory_iter { }; struct user_directory { + struct director *director; + /* unsigned int username_hash => user */ HASH_TABLE(void *, struct user *) hash; /* sorted by time. may be unsorted while handshakes are going on. */ @@ -253,7 +255,7 @@ bool user_directory_user_is_near_expiring(struct user_directory *dir, } struct user_directory * -user_directory_init(unsigned int timeout_secs, +user_directory_init(struct director *director, unsigned int timeout_secs, user_free_hook_t *user_free_hook) { struct user_directory *dir; @@ -261,6 +263,7 @@ user_directory_init(unsigned int timeout_secs, i_assert(timeout_secs > USER_NEAR_EXPIRING_MIN); dir = i_new(struct user_directory, 1); + dir->director = director; dir->timeout_secs = timeout_secs; dir->user_near_expiring_secs = timeout_secs * USER_NEAR_EXPIRING_PERCENTAGE / 100; diff --git a/src/director/user-directory.h b/src/director/user-directory.h index 4af13fffcf..04f28cd08c 100644 --- a/src/director/user-directory.h +++ b/src/director/user-directory.h @@ -1,6 +1,8 @@ #ifndef USER_DIRECTORY_H #define USER_DIRECTORY_H +struct director; + #define USER_IS_BEING_KILLED(user) \ ((user)->kill_ctx != NULL) @@ -33,7 +35,7 @@ typedef void user_free_hook_t(struct user *); /* Create a new directory. Users are dropped if their time gets older than timeout_secs. */ struct user_directory * -user_directory_init(unsigned int timeout_secs, +user_directory_init(struct director *director, unsigned int timeout_secs, user_free_hook_t *user_free_hook); void user_directory_deinit(struct user_directory **dir); -- 2.47.3