]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Add and use auth_request_set_delayed_credentials()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 4 Aug 2020 11:48:23 +0000 (14:48 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 27 Aug 2020 06:20:17 +0000 (06:20 +0000)
src/auth/auth-request-fields.c
src/auth/auth-request.c
src/auth/auth-request.h

index cfb966facf5230ed7052bbf56cfbfca0608eee6a..18781398b04d0393661084ecc8c644c73ace7e44 100644 (file)
@@ -466,3 +466,12 @@ void auth_request_init_userdb_reply(struct auth_request *request,
                }
        }
 }
+
+void auth_request_set_delayed_credentials(struct auth_request *request,
+                                         const unsigned char *credentials,
+                                         size_t size)
+{
+       request->fields.delayed_credentials =
+               p_memdup(request->pool, credentials, size);
+       request->fields.delayed_credentials_size = size;
+}
index 1a5b6df98ab1f7d48d19153e7f37b4baafb0a5ca..713efaeed0c53a410593294ad7f7dfcd9256bec3 100644 (file)
@@ -1151,12 +1151,8 @@ auth_request_lookup_credentials_finish(enum passdb_result result,
                    request->fields.delayed_credentials == NULL && size > 0) {
                        /* passdb continue* rule after a successful lookup.
                           remember these credentials and use them later on. */
-                       unsigned char *dup;
-
-                       dup = p_malloc(request->pool, size);
-                       memcpy(dup, credentials, size);
-                       request->fields.delayed_credentials = dup;
-                       request->fields.delayed_credentials_size = size;
+                       auth_request_set_delayed_credentials(request,
+                               credentials, size);
                }
                auth_request_lookup_credentials(request,
                        request->credentials_scheme,
index c47e0b4eb9487ff2eb7618d76d5f5317f9f95d13..55506188e6e8ec6b1422d478b510f1815854781a 100644 (file)
@@ -60,6 +60,10 @@ struct auth_request_fields {
        /* the whole userdb result reply */
        struct auth_fields *userdb_reply;
 
+       /* Credentials from the first successful passdb lookup. These are used
+          as the final credentials, unless overridden by later passdb
+          lookups. Note that the requests in auth-worker processes see these
+          only as 1 byte sized \0 strings. */
        const unsigned char *delayed_credentials;
        size_t delayed_credentials_size;
 
@@ -251,6 +255,10 @@ void auth_request_set_realm(struct auth_request *request, const char *realm);
 void auth_request_set_auth_successful(struct auth_request *request);
 /* Password was successfully verified by a passdb. */
 void auth_request_set_password_verified(struct auth_request *request);
+/* Save credentials from a successful passdb lookup. */
+void auth_request_set_delayed_credentials(struct auth_request *request,
+                                         const unsigned char *credentials,
+                                         size_t size);
 
 void auth_request_set_field(struct auth_request *request,
                            const char *name, const char *value,