/* this passdb lookup succeeded, preserve its extra
fields */
auth_fields_snapshot(request->extra_fields);
+ request->snapshot_has_userdb_reply =
+ request->userdb_reply != NULL;
+ if (request->userdb_reply != NULL)
+ auth_fields_snapshot(request->userdb_reply);
} else {
/* this passdb lookup failed, remove any extra fields
it set */
auth_fields_rollback(request->extra_fields);
+ if (request->userdb_reply == NULL)
+ ;
+ else if (!request->snapshot_has_userdb_reply)
+ request->userdb_reply = NULL;
+ else
+ auth_fields_rollback(request->userdb_reply);
}
if (*result == PASSDB_RESULT_USER_UNKNOWN) {
unsigned int prefer_plain_credentials:1;
unsigned int in_delayed_failure_queue:1;
unsigned int removed_from_handler:1;
+ unsigned int snapshot_has_userdb_reply:1;
/* each passdb lookup can update the current success-status using the
result_* rules. the authentication succeeds only if this is TRUE
at the end. mechanisms that don't require passdb, but do a passdb