From: Timo Sirainen Date: Tue, 4 Jan 2022 16:03:41 +0000 (+0200) Subject: director: Add user_director_hash field to passdb lookup replies X-Git-Tag: 2.4.0~4481 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4c25b714adc065bf277febdd364a534aadb3656d;p=thirdparty%2Fdovecot%2Fcore.git director: Add user_director_hash field to passdb lookup replies This can be used as alt-username to kick users by the hash. --- diff --git a/src/director/director-request.c b/src/director/director-request.c index af41f7f33e..ae3009ca4e 100644 --- a/src/director/director-request.c +++ b/src/director/director-request.c @@ -119,7 +119,8 @@ static void director_request_timeout(struct director *dir) array_pop_front(&dir->pending_requests); T_BEGIN { - request->callback(NULL, NULL, errormsg, request->context); + request->callback(NULL, NULL, 0, errormsg, + request->context); } T_END; director_request_free(request); } @@ -137,7 +138,8 @@ void director_request(struct director *dir, const char *username, if (!director_get_username_hash(dir, username, &username_hash)) { - callback(NULL, NULL, "Failed to expand director_username_hash", context); + callback(NULL, NULL, 0, + "Failed to expand director_username_hash", context); return; } @@ -333,6 +335,7 @@ static bool director_request_continue_real(struct director_request *request) director_update_user(dir, dir->self_host, user); T_BEGIN { request->callback(user->host, user->host->hostname, + request->username_hash, NULL, request->context); } T_END; director_request_free(request); diff --git a/src/director/director-request.h b/src/director/director-request.h index e6fff802df..67da7e6229 100644 --- a/src/director/director-request.h +++ b/src/director/director-request.h @@ -6,7 +6,8 @@ struct director_request; typedef void director_request_callback(const struct mail_host *host, const char *hostname, - const char *errormsg, void *context); + unsigned int username_hash, const char *errormsg, + void *context); void director_request(struct director *dir, const char *username, const char *tag, diff --git a/src/director/director.h b/src/director/director.h index 8f2d2a1e23..172dab81e5 100644 --- a/src/director/director.h +++ b/src/director/director.h @@ -8,6 +8,8 @@ #define DIRECTOR_VERSION_MAJOR 1 #define DIRECTOR_VERSION_MINOR 9 +#define DIRECTOR_ALT_USER_FIELD_NAME "user_director_hash" + /* weak users supported in protocol */ #define DIRECTOR_VERSION_WEAK_USERS 1 /* director ring remove supported */ diff --git a/src/director/login-connection.c b/src/director/login-connection.c index 78de3b9372..3b3d04d694 100644 --- a/src/director/login-connection.c +++ b/src/director/login-connection.c @@ -135,7 +135,8 @@ static bool login_host_request_is_self(struct login_host_request *request, static void login_host_callback(const struct mail_host *host, const char *hostname, - const char *errormsg, void *context) + unsigned int username_hash, const char *errormsg, + void *context) { struct login_host_request *request = context; struct director *dir = request->conn->dir; @@ -173,6 +174,8 @@ login_host_callback(const struct mail_host *host, const char *hostname, str_append(str, "\thostip="); str_append(str, host->ip_str); } + str_printfa(str, "\t"DIRECTOR_ALT_USER_FIELD_NAME"=%u", + username_hash); line = str_c(str); } login_connection_send_line(request->conn, line);