From: Timo Sirainen Date: Thu, 27 Mar 2014 09:02:08 +0000 (+0100) Subject: doveadm director move/map: Use director_username_hash setting for calculating hashes. X-Git-Tag: 2.2.13.rc1~190 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1550f6a31306246a8499f5c9ca876096cbbeae9;p=thirdparty%2Fdovecot%2Fcore.git doveadm director move/map: Use director_username_hash setting for calculating hashes. --- diff --git a/src/doveadm/doveadm-director.c b/src/doveadm/doveadm-director.c index 5837e731fe..ef76069830 100644 --- a/src/doveadm/doveadm-director.c +++ b/src/doveadm/doveadm-director.c @@ -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); diff --git a/src/doveadm/doveadm-settings.c b/src/doveadm/doveadm-settings.c index 936f1fbe6c..a89f2681eb 100644 --- a/src/doveadm/doveadm-settings.c +++ b/src/doveadm/doveadm-settings.c @@ -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 }; diff --git a/src/doveadm/doveadm-settings.h b/src/doveadm/doveadm-settings.h index 7018aaeb32..ca25bbb2a0 100644 --- a/src/doveadm/doveadm-settings.h +++ b/src/doveadm/doveadm-settings.h @@ -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; };