]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Add user_directory.director
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 31 Oct 2019 17:09:35 +0000 (19:09 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 21 Aug 2020 06:10:21 +0000 (06:10 +0000)
src/director/mail-host.c
src/director/test-user-directory.c
src/director/user-directory.c
src/director/user-directory.h

index 2812b506bca0f30a3186cac0ef8e4dfb4f7d9dc9..45176526fc1ddf49c6780890766b2c2e7d53116d 100644 (file)
@@ -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);
        }
index 3b1df7e19f5a43919bd761ba1ebd872634e2349e..88f40a895996e0db0f07d2715a8266b64add8e75 100644 (file)
@@ -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;
index 0c5ae239d239adef1b30f4896e040f8a13062d43..6288a4818ee75d25331d20a9b7d65b97ba73c37f 100644 (file)
@@ -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;
index 4af13fffcf170da5078d9f65421326396568bab3..04f28cd08c694608bb9c5d6b6bcc0c625a23521a 100644 (file)
@@ -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);