]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Add and use auth_request_set_username_forced()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 3 Aug 2020 14:25:59 +0000 (17:25 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 27 Aug 2020 06:20:17 +0000 (06:20 +0000)
src/auth/auth-master-connection.c
src/auth/auth-request-fields.c
src/auth/auth-request.c
src/auth/auth-request.h
src/auth/mech-anonymous.c
src/auth/userdb-blocking.c

index 6e7a8c6c2e9189e25589885cac78cb8778d06fc8..6541d850a0c0249ac1e3e3a92d31e2c0cc622cc8 100644 (file)
@@ -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 = "";
 
index 2009151086f0647de24f5b24e17bdda7a1e55b46..19f6b9179cd59060561c56e4e7613518973a0967 100644 (file)
@@ -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;
 }
index 08d34db009bda84f36a1e242ffb9369f35ac9cdd..90c645a6a93ccab68c4a11510e31afa29c78b9f1 100644 (file)
@@ -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;
index 2c91517e9f5e15e1db8566c8c84599cb7d7a3b72..26de56d16611179fe6f4bcda402b965fd18c6656 100644 (file)
@@ -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);
index 8b1da99e859c910bea6d1a272629213dc0f293f6..fbbfccdee66882a34dad0e4da853e1575b36c200 100644 (file)
@@ -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);
index 32e37a8ce3216ab8822cdec3e7461adc8033e328..044886d313bd281358f9c027ee29c440733c096b 100644 (file)
@@ -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 {