]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: auth_request_fix_username() - Don't temporarily modify auth_request_fields...
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 3 Aug 2020 13:28:57 +0000 (16:28 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 27 Aug 2020 06:20:17 +0000 (06:20 +0000)
Use the new username parameter in auth_request_get_var_expand_table_full()
instead.

src/auth/auth-request.c

index 4dd60ef1e79643fa5bf586e23944ebc535ce4c29..5e5b7a084d2ead822231e2e26db74cccdc851ece 100644 (file)
@@ -1659,22 +1659,21 @@ auth_request_fix_username(struct auth_request *request, const char *username,
                   we'll have to temporarily replace request->user to get
                   %u to be the wanted username */
                const char *error;
-               char *old_username;
                string_t *dest;
 
-               old_username = request->fields.user;
-               request->fields.user = user;
-
                dest = t_str_new(256);
-               if (auth_request_var_expand(dest, set->username_format,
-                                           request, NULL, &error) <= 0) {
+               unsigned int count = 0;
+               const struct var_expand_table *table =
+                       auth_request_get_var_expand_table_full(request,
+                               user, NULL, &count);
+               if (auth_request_var_expand_with_table(dest,
+                               set->username_format, request,
+                               table, NULL, &error) <= 0) {
                        *error_r = t_strdup_printf(
                                "Failed to expand username_format=%s: %s",
                                set->username_format, error);
                }
                user = p_strdup(request->pool, str_c(dest));
-
-               request->fields.user = old_username;
        }
 
        if (user[0] == '\0') {