]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Code cleanup - moved username_hash generation to director.h
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 20 Oct 2016 17:31:33 +0000 (20:31 +0300)
committerGitLab <gitlab@git.dovecot.net>
Tue, 8 Nov 2016 14:27:39 +0000 (16:27 +0200)
It's not really user_directory specific. This is especially important
in the following patches that add per-tag user_directories. It's also not
always known which tag the username_hash refers to, so there can't be
different tag-specific username_hash generators.

src/director/director-request.c
src/director/director.c
src/director/director.h
src/director/doveadm-connection.c
src/director/notify-connection.c
src/director/test-user-directory.c
src/director/user-directory.c
src/director/user-directory.h

index 3b5c8d9c474a0732d1c51a39047445f8bb3596c3..24d5c24f719c3c5e83582a38fd1c3e732a011219 100644 (file)
@@ -127,8 +127,8 @@ void director_request(struct director *dir, const char *username,
        struct director_request *request;
        unsigned int username_hash;
 
-       if (!user_directory_get_username_hash(dir->users, username,
-                                             &username_hash)) {
+       if (!director_get_username_hash(dir, username,
+                                       &username_hash)) {
                callback(NULL, NULL, "Failed to expand director_username_hash", context);
                return;
        }
index ea32812ee89fdccb33f2254eb91abbecc71ac26d..90280b71816181143214ac6dcfa0edfb0950ce3d 100644 (file)
@@ -12,6 +12,7 @@
 #include "istream.h"
 #include "ostream.h"
 #include "iostream-temp.h"
+#include "mail-user-hash.h"
 #include "user-directory.h"
 #include "mail-host.h"
 #include "director-host.h"
@@ -1299,7 +1300,6 @@ director_init(const struct director_settings *set,
        i_array_init(&dir->pending_requests, 16);
        i_array_init(&dir->connections, 8);
        dir->users = user_directory_init(set->director_user_expire,
-                                        set->director_username_hash,
                                         director_user_freed);
        dir->mail_hosts = mail_hosts_init(set->director_consistent_hashing);
 
@@ -1390,6 +1390,20 @@ void director_iterate_users_deinit(struct director_user_iter **_iter)
        i_free(iter);
 }
 
+bool
+director_get_username_hash(struct director *dir, const char *username,
+                          unsigned int *hash_r)
+{
+       const char *error;
+
+       if (mail_user_hash(username, dir->set->director_username_hash, hash_r,
+                          &error))
+               return TRUE;
+       i_error("Failed to expand director_user_expire=%s: %s",
+               dir->set->director_username_hash, error);
+       return FALSE;
+}
+
 void directors_init(void)
 {
        user_move_throttle =
index 11a515cfbb08b67dc8c0183c0171572aefd30640..590366b39b281eba4dcd84251da706bcb7a894fe 100644 (file)
@@ -235,6 +235,10 @@ void director_update_send_version(struct director *dir,
 
 int director_connect_host(struct director *dir, struct director_host *host);
 
+bool
+director_get_username_hash(struct director *dir, const char *username,
+                          unsigned int *hash_r);
+
 void directors_init(void);
 void directors_deinit(void);
 
index b352486c2e2af7a3da714d91cd611ba6d3da4285..99395a9a694ab3a1db5495e7c81a43c22c2dd973 100644 (file)
@@ -567,8 +567,8 @@ doveadm_cmd_user_lookup(struct doveadm_connection *conn,
                tag = args[1] != NULL ? args[1] : "";
        }
        if (str_to_uint(username, &username_hash) < 0) {
-               if (!user_directory_get_username_hash(users,
-                                                     username, &username_hash)) {
+               if (!director_get_username_hash(conn->dir,
+                                               username, &username_hash)) {
                        o_stream_nsend_str(conn->output, "TRYAGAIN\n");
                        return 1;
                }
@@ -657,8 +657,8 @@ doveadm_cmd_user_move(struct doveadm_connection *conn, const char *const *args)
        }
 
        if (str_to_uint(args[0], &username_hash) < 0) {
-               if (!user_directory_get_username_hash(users,
-                                                     args[0], &username_hash)) {
+               if (!director_get_username_hash(conn->dir,
+                                               args[0], &username_hash)) {
                        o_stream_nsend_str(conn->output, "TRYAGAIN\n");
                        return 1;
                }
index 05ba2ba40deae464430417cfdd6daf72d68f37ae..eedf1ca0ac13aadd41d996023b99bd77f7be1621 100644 (file)
@@ -42,7 +42,7 @@ static void notify_connection_input(struct notify_connection *conn)
        unsigned int hash;
 
        while ((line = i_stream_read_next_line(conn->input)) != NULL) {
-               if (!user_directory_get_username_hash(conn->dir->users, line, &hash))
+               if (!director_get_username_hash(conn->dir, line, &hash))
                        continue;
                notify_update_user(conn->dir, line, hash);
        }
index 9b97a00a93885f483b1f7d3547eee4da4cfe155f..4f00d19d7229d83a9d1369f4bd9b2c814a50e739 100644 (file)
@@ -47,7 +47,7 @@ static void test_user_directory_ascending(void)
        unsigned int i;
 
        test_begin("user directory ascending");
-       dir = user_directory_init(USER_DIR_TIMEOUT, "%u", NULL);
+       dir = user_directory_init(USER_DIR_TIMEOUT, NULL);
        (void)user_directory_add(dir, 1, host, ioloop_time + count+1);
 
        for (i = 0; i < count; i++)
@@ -65,7 +65,7 @@ static void test_user_directory_descending(void)
        unsigned int i;
 
        test_begin("user directory descending");
-       dir = user_directory_init(USER_DIR_TIMEOUT, "%u", NULL);
+       dir = user_directory_init(USER_DIR_TIMEOUT, NULL);
 
        for (i = 0; i < count; i++)
                (void)user_directory_add(dir, i+1, host, ioloop_time - i);
@@ -82,7 +82,7 @@ static void test_user_directory_random(void)
        unsigned int i, count = 10000 + rand()%10000;
 
        test_begin("user directory random");
-       dir = user_directory_init(USER_DIR_TIMEOUT, "%u", NULL);
+       dir = user_directory_init(USER_DIR_TIMEOUT, NULL);
        for (i = 0; i < count; i++) {
                if (rand() % 10 == 0)
                        timestamp = ioloop_time;
index aa1c365855698d2c40f6cec3c7a556a773642b4f..8856650588e559b119ad63e162382a1586616c76 100644 (file)
@@ -5,7 +5,6 @@
 #include "array.h"
 #include "hash.h"
 #include "llist.h"
-#include "mail-user-hash.h"
 #include "mail-host.h"
 #include "user-directory.h"
 
@@ -30,7 +29,6 @@ struct user_directory {
        ARRAY(struct user_directory_iter *) iters;
        void (*user_free_hook)(struct user *);
 
-       char *username_hash_fmt;
        unsigned int timeout_secs;
        /* If user's expire time is less than this many seconds away,
           don't assume that other directors haven't yet expired it */
@@ -256,19 +254,6 @@ void user_directory_sort(struct user_directory *dir)
        array_free(&users);
 }
 
-bool user_directory_get_username_hash(struct user_directory *dir,
-                                     const char *username,
-                                     unsigned int *hash_r)
-{
-       const char *error;
-
-       if (mail_user_hash(username, dir->username_hash_fmt, hash_r, &error))
-               return TRUE;
-       i_error("Failed to expand director_user_expire=%s: %s",
-               dir->username_hash_fmt, error);
-       return FALSE;
-}
-
 bool user_directory_user_is_recently_updated(struct user_directory *dir,
                                             struct user *user)
 {
@@ -286,7 +271,7 @@ bool user_directory_user_is_near_expiring(struct user_directory *dir,
 }
 
 struct user_directory *
-user_directory_init(unsigned int timeout_secs, const char *username_hash_fmt,
+user_directory_init(unsigned int timeout_secs,
                    void (*user_free_hook)(struct user *))
 {
        struct user_directory *dir;
@@ -303,7 +288,6 @@ user_directory_init(unsigned int timeout_secs, const char *username_hash_fmt,
                I_MAX(dir->user_near_expiring_secs, USER_NEAR_EXPIRING_MIN);
        i_assert(dir->timeout_secs/2 > dir->user_near_expiring_secs);
 
-       dir->username_hash_fmt = i_strdup(username_hash_fmt);
        dir->user_free_hook = user_free_hook;
        hash_table_create_direct(&dir->hash, default_pool, 0);
        i_array_init(&dir->iters, 8);
@@ -322,7 +306,6 @@ void user_directory_deinit(struct user_directory **_dir)
                user_free(dir, dir->head);
        hash_table_destroy(&dir->hash);
        array_free(&dir->iters);
-       i_free(dir->username_hash_fmt);
        i_free(dir);
 }
 
index 0be4a8c829eb03d7257184ada67b2ed4271f635b..1cbd55dcce4f15c8337285ee010c6784829efd48 100644 (file)
@@ -29,7 +29,7 @@ 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, const char *username_hash_fmt,
+user_directory_init(unsigned int timeout_secs,
                    void (*user_free_hook)(struct user *));
 void user_directory_deinit(struct user_directory **dir);
 
@@ -52,10 +52,6 @@ void user_directory_remove_host(struct user_directory *dir,
    timestamps based on remote director's user list after handshake. */
 void user_directory_sort(struct user_directory *dir);
 
-bool user_directory_get_username_hash(struct user_directory *dir,
-                                     const char *username,
-                                     unsigned int *hash_r);
-
 bool user_directory_user_is_recently_updated(struct user_directory *dir,
                                             struct user *user);
 bool user_directory_user_is_near_expiring(struct user_directory *dir,