auth = auth_request_get_auth(request);
request->set = auth->set;
- request->passdb = auth->passdbs;
+ request->passdb = auth->masterdbs != NULL ?
+ auth->masterdbs : auth->passdbs;
request->userdb = auth->userdbs;
}
static ARRAY_DEFINE(auths, struct auth *);
static void
-auth_passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set)
+auth_passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set,
+ struct auth_passdb **passdbs)
{
struct auth_passdb *auth_passdb, **dest;
auth_passdb = p_new(auth->pool, struct auth_passdb, 1);
auth_passdb->set = set;
- for (dest = &auth->passdbs; *dest != NULL; dest = &(*dest)->next) ;
+ for (dest = passdbs; *dest != NULL; dest = &(*dest)->next) ;
*dest = auth_passdb;
auth_passdb->passdb =
if (passdbs[i]->master)
continue;
- auth_passdb_preinit(auth, passdbs[i]);
+ auth_passdb_preinit(auth, passdbs[i], &auth->passdbs);
passdb_count++;
last_passdb = i;
}
i_fatal("Master passdb can't have pass=yes "
"if there are no passdbs");
}
- auth_passdb_preinit(auth, passdbs[i]);
+ auth_passdb_preinit(auth, passdbs[i], &auth->masterdbs);
}
if (array_is_created(&set->userdbs)) {