auth_fields_rollback(request->extra_fields);
if (request->userdb_reply == NULL)
;
- else if (!request->snapshot_has_userdb_reply)
- request->userdb_reply = NULL;
- else
+ else if (request->snapshot_has_userdb_reply)
auth_fields_rollback(request->userdb_reply);
+ else {
+ request->userdb_reply = NULL;
+ request->userdb_prefetch_set = FALSE;
+ }
}
if (*result == PASSDB_RESULT_USER_UNKNOWN) {
auth_request_validate_networks(request, value);
} else if (strncmp(name, "userdb_", 7) == 0) {
/* for prefetch userdb */
+ request->userdb_prefetch_set = TRUE;
if (request->userdb_reply == NULL)
auth_request_init_userdb_reply(request);
auth_request_set_userdb_field(request, name + 7, value);
if (strncmp(name, "userdb_", 7) == 0) {
/* make sure userdb prefetch is used even if all the fields
were returned as NULL. */
- if (request->userdb_reply == NULL)
- auth_request_init_userdb_reply(request);
+ request->userdb_prefetch_set = TRUE;
}
}
or because one of the returned uid/gid fields couldn't be translated
to a number */
unsigned int userdb_lookup_tempfailed:1;
+ /* userdb_* fields have been set by the passdb lookup, userdb prefetch
+ will work. */
+ unsigned int userdb_prefetch_set:1;
/* ... mechanism specific data ... */
};
{
/* auth_request_set_field() should have already placed the userdb_*
values to userdb_reply. */
- if (auth_request->userdb_reply == NULL) {
+ if (!auth_request->userdb_prefetch_set) {
if (auth_request_get_auth(auth_request)->userdbs->next == NULL) {
/* no other userdbs */
if (auth_request->userdb_lookup) {