From: Timo Sirainen Date: Fri, 23 Oct 2015 12:21:15 +0000 (+0300) Subject: auth: Fixed userdb changing username via auth-worker X-Git-Tag: 2.2.20.rc1~121 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=75b4cc30566e22675b9e7b19b15a7fd929d8f54c;p=thirdparty%2Fdovecot%2Fcore.git auth: Fixed userdb changing username via auth-worker --- diff --git a/src/auth/auth-worker-client.c b/src/auth/auth-worker-client.c index db4ca52841..bffe1c77a8 100644 --- a/src/auth/auth-worker-client.c +++ b/src/auth/auth-worker-client.c @@ -373,6 +373,8 @@ lookup_user_callback(enum userdb_result result, break; case USERDB_RESULT_OK: str_append(str, "OK\t"); + str_append_tabescaped(str, auth_request->user); + str_append_c(str, '\t'); auth_fields_append(auth_request->userdb_reply, str, 0, 0); if (auth_request->userdb_lookup_tempfailed) str_append(str, "\ttempfail"); diff --git a/src/auth/userdb-blocking.c b/src/auth/userdb-blocking.c index ebb8f27bbf..71592c39bc 100644 --- a/src/auth/userdb-blocking.c +++ b/src/auth/userdb-blocking.c @@ -18,7 +18,7 @@ static bool user_callback(const char *reply, void *context) { struct auth_request *request = context; enum userdb_result result; - const char *args; + const char *username, *args; if (strncmp(reply, "FAIL\t", 5) == 0) { result = USERDB_RESULT_INTERNAL_FAILURE; @@ -28,7 +28,14 @@ static bool user_callback(const char *reply, void *context) args = reply + 9; } else if (strncmp(reply, "OK\t", 3) == 0) { result = USERDB_RESULT_OK; - args = reply + 3; + username = reply + 3; + args = strchr(username, '\t'); + if (args == NULL) + args = ""; + else + username = t_strdup_until(username, args++); + if (strcmp(request->user, username) != 0) + request->user = p_strdup(request->pool, username); } else { result = USERDB_RESULT_INTERNAL_FAILURE; i_error("BUG: auth-worker sent invalid user reply");