From: Timo Sirainen Date: Mon, 3 Aug 2020 14:25:59 +0000 (+0300) Subject: auth: Add and use auth_request_set_username_forced() X-Git-Tag: 2.3.13~321 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=854ffb49fd00b98ca0df0c17a3f99a1a23521d10;p=thirdparty%2Fdovecot%2Fcore.git auth: Add and use auth_request_set_username_forced() --- diff --git a/src/auth/auth-master-connection.c b/src/auth/auth-master-connection.c index 6e7a8c6c2e..6541d850a0 100644 --- a/src/auth/auth-master-connection.c +++ b/src/auth/auth-master-connection.c @@ -603,14 +603,13 @@ master_input_list(struct auth_master_connection *conn, const char *args) if (!auth_request_import_info(auth_request, name, arg) && strcmp(name, "user") == 0) { /* username mask */ - auth_request->fields.user = - p_strdup(auth_request->pool, arg); + auth_request_set_username_forced(auth_request, arg); } } /* rest of the code doesn't like NULL user or service */ if (auth_request->fields.user == NULL) - auth_request->fields.user = ""; + auth_request_set_username_forced(auth_request, ""); if (auth_request->fields.service == NULL) auth_request->fields.service = ""; diff --git a/src/auth/auth-request-fields.c b/src/auth/auth-request-fields.c index 2009151086..19f6b9179c 100644 --- a/src/auth/auth-request-fields.c +++ b/src/auth/auth-request-fields.c @@ -201,7 +201,7 @@ bool auth_request_import_auth(struct auth_request *request, if (request->set->ssl_username_from_cert && *value != '\0') { /* get username from SSL certificate. it overrides the username given by the auth mechanism. */ - fields->user = p_strdup(request->pool, value); + auth_request_set_username_forced(request, value); fields->cert_username = TRUE; } } else { @@ -222,7 +222,7 @@ bool auth_request_import(struct auth_request *request, /* for communication between auth master and worker processes */ if (strcmp(key, "user") == 0) - fields->user = p_strdup(request->pool, value); + auth_request_set_username_forced(request, value); else if (strcmp(key, "master-user") == 0) fields->master_user = p_strdup(request->pool, value); else if (strcmp(key, "original-username") == 0) @@ -347,7 +347,7 @@ bool auth_request_set_username(struct auth_request *request, request->fields.user = NULL; return FALSE; } - request->fields.user = p_strdup(request->pool, username); + auth_request_set_username_forced(request, username); if (request->fields.translated_username == NULL) { /* similar to original_username, but after translations */ request->fields.translated_username = request->fields.user; @@ -363,6 +363,14 @@ bool auth_request_set_username(struct auth_request *request, return TRUE; } +void auth_request_set_username_forced(struct auth_request *request, + const char *username) +{ + i_assert(username != NULL); + + request->fields.user = p_strdup(request->pool, username); +} + bool auth_request_set_login_username(struct auth_request *request, const char *username, const char **error_r) @@ -413,6 +421,7 @@ void auth_request_master_user_login_finish(struct auth_request *request) request->fields.requested_login_user); request->fields.master_user = request->fields.user; - request->fields.user = request->fields.requested_login_user; + auth_request_set_username_forced(request, + request->fields.requested_login_user); request->fields.requested_login_user = NULL; } diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 08d34db009..90c645a6a9 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -1731,7 +1731,7 @@ auth_request_try_update_username(struct auth_request *request, e_debug(authdb_event(request), "username changed %s -> %s", request->fields.user, new_value); - request->fields.user = p_strdup(request->pool, new_value); + auth_request_set_username_forced(request, new_value); request->user_changed_by_lookup = TRUE; } return TRUE; diff --git a/src/auth/auth-request.h b/src/auth/auth-request.h index 2c91517e9f..26de56d166 100644 --- a/src/auth/auth-request.h +++ b/src/auth/auth-request.h @@ -230,6 +230,9 @@ void auth_request_lookup_user(struct auth_request *request, bool auth_request_set_username(struct auth_request *request, const char *username, const char **error_r); +/* Change the username without any translations or checks. */ +void auth_request_set_username_forced(struct auth_request *request, + const char *username); bool auth_request_set_login_username(struct auth_request *request, const char *username, const char **error_r); diff --git a/src/auth/mech-anonymous.c b/src/auth/mech-anonymous.c index 8b1da99e85..fbbfccdee6 100644 --- a/src/auth/mech-anonymous.c +++ b/src/auth/mech-anonymous.c @@ -12,13 +12,13 @@ mech_anonymous_auth_continue(struct auth_request *request, if (request->set->verbose) { /* temporarily set the user to the one that was given, so that the log message goes right */ - request->fields.user = - p_strndup(pool_datastack_create(), data, data_size); + auth_request_set_username_forced(request, + t_strndup(data, data_size)); e_info(request->mech_event, "login"); } - request->fields.user = p_strdup(request->pool, - request->set->anonymous_username); + auth_request_set_username_forced(request, + request->set->anonymous_username); request->passdb_success = TRUE; auth_request_success(request, "", 0); diff --git a/src/auth/userdb-blocking.c b/src/auth/userdb-blocking.c index 32e37a8ce3..044886d313 100644 --- a/src/auth/userdb-blocking.c +++ b/src/auth/userdb-blocking.c @@ -36,7 +36,7 @@ static bool user_callback(const char *reply, void *context) username = t_strdup_until(username, args++); if (username[0] != '\0' && strcmp(request->fields.user, username) != 0) { - request->fields.user = p_strdup(request->pool, username); + auth_request_set_username_forced(request, username); request->user_changed_by_lookup = TRUE; } } else {