]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm director move/map: Use director_username_hash setting for calculating hashes.
authorTimo Sirainen <tss@iki.fi>
Thu, 27 Mar 2014 09:02:08 +0000 (10:02 +0100)
committerTimo Sirainen <tss@iki.fi>
Thu, 27 Mar 2014 09:02:08 +0000 (10:02 +0100)
src/doveadm/doveadm-director.c
src/doveadm/doveadm-settings.c
src/doveadm/doveadm-settings.h

index 5837e731fe39ba10b5468eabcba7786c48268b1f..ef76069830ab13a82a20c7c4ea0da97a0aa6f9ea 100644 (file)
@@ -9,6 +9,7 @@
 #include "write-full.h"
 #include "master-service.h"
 #include "auth-master.h"
+#include "mail-user-hash.h"
 #include "doveadm.h"
 #include "doveadm-print.h"
 
@@ -180,17 +181,6 @@ static void cmd_director_status(int argc, char *argv[])
        director_disconnect(ctx);
 }
 
-static unsigned int director_username_hash(const char *username)
-{
-       unsigned char md5[MD5_RESULTLEN];
-       unsigned int i, hash = 0;
-
-       md5_get_digest(username, strlen(username), md5);
-       for (i = 0; i < sizeof(hash); i++)
-               hash = (hash << CHAR_BIT) | md5[i];
-       return hash;
-}
-
 static void
 user_list_add(const char *username, pool_t pool,
              HASH_TABLE_TYPE(user_list) users)
@@ -200,7 +190,7 @@ user_list_add(const char *username, pool_t pool,
 
        user = p_new(pool, struct user_list, 1);
        user->name = p_strdup(pool, username);
-       user_hash = director_username_hash(username);
+       user_hash = mail_user_hash(username, doveadm_settings->director_username_hash);
 
        old_user = hash_table_lookup(users, POINTER_CAST(user_hash));
        if (old_user != NULL)
@@ -440,7 +430,7 @@ static void cmd_director_move(int argc, char *argv[])
            argv[optind+2] != NULL)
                director_cmd_help(cmd_director_move);
 
-       user_hash = director_username_hash(argv[optind++]);
+       user_hash = mail_user_hash(argv[optind++], doveadm_settings->director_username_hash);
        host = argv[optind];
 
        director_get_host(host, &ips, &ips_count);
index 936f1fbe6c69d7fea0ea4230879267624a79cf04..a89f2681eb1e8bfa4f4ff544869bdef368ea1240 100644 (file)
@@ -67,6 +67,7 @@ static const struct setting_define doveadm_setting_defines[] = {
        DEF(SET_STR, dsync_remote_cmd),
        DEF(SET_STR, ssl_client_ca_dir),
        DEF(SET_STR, ssl_client_ca_file),
+       DEF(SET_STR, director_username_hash),
 
        { SET_STRLIST, "plugin", offsetof(struct doveadm_settings, plugin_envs), NULL },
 
@@ -88,6 +89,7 @@ const struct doveadm_settings doveadm_default_settings = {
        .dsync_remote_cmd = "ssh -l%{login} %{host} doveadm dsync-server -u%u -U",
        .ssl_client_ca_dir = "",
        .ssl_client_ca_file = "",
+       .director_username_hash = "%Lu",
 
        .plugin_envs = ARRAY_INIT
 };
index 7018aaeb329dd9da372a549c5875be564246144f..ca25bbb2a0f5203062700d4624839ad05d8e73e5 100644 (file)
@@ -16,6 +16,7 @@ struct doveadm_settings {
        const char *dsync_remote_cmd;
        const char *ssl_client_ca_dir;
        const char *ssl_client_ca_file;
+       const char *director_username_hash;
 
        ARRAY(const char *) plugin_envs;
 };