]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Using "username" or "domain" passdb fields caused problems with cache and block...
authorTimo Sirainen <tss@iki.fi>
Sat, 31 Jan 2009 18:15:12 +0000 (20:15 +0200)
committerTimo Sirainen <tss@iki.fi>
Sat, 31 Jan 2009 18:15:12 +0000 (20:15 +0200)
--HG--
branch : HEAD

src/auth/auth-request.c

index 758e6233ccb6cb64c92200ce2c167299ba7621e5..f506e113d5b25120017d01e0c8057b4f84dffc8b 100644 (file)
@@ -981,7 +981,7 @@ void auth_request_set_field(struct auth_request *request,
                            const char *name, const char *value,
                            const char *default_scheme)
 {
-       const char *p;
+       const char *p, *orig_value;
 
        i_assert(*name != '\0');
        i_assert(value != NULL);
@@ -999,6 +999,7 @@ void auth_request_set_field(struct auth_request *request,
        if (strcmp(name, "user") == 0 ||
            strcmp(name, "username") == 0 || strcmp(name, "domain") == 0) {
                /* update username */
+               orig_value = value;
                if (strcmp(name, "username") == 0 &&
                    strchr(value, '@') == NULL &&
                    (p = strchr(request->user, '@')) != NULL) {
@@ -1023,6 +1024,9 @@ void auth_request_set_field(struct auth_request *request,
                                request->user, value);
                        request->user = p_strdup(request->pool, value);
                }
+               /* restore the original value so it gets saved correctly to
+                  cache. */
+               value = orig_value;
        } else if (strcmp(name, "nodelay") == 0) {
                /* don't delay replying to client of the failure */
                request->no_failure_delay = TRUE;