}
}
}
+
+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;
+}
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,
/* 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;
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,