passdb-blocking.c revision 47bb4a7615c85f212f061499f04f121d6d625387
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch/* Copyright (C) 2005 Timo Sirainen */
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Boschcheck_failure(struct auth_request *request, const char **reply)
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch const char *p;
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch /* OK / FAIL */
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch /* FAIL \t result \t password */
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch "Received invalid FAIL result from worker: %d", ret);
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch "Received unknown reply from worker: %s", *reply);
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Boschstatic int get_pass_reply(struct auth_request *request, const char *reply,
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch const char **password_r, const char **scheme_r)
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch /* user \t {scheme}password [\t extra] */
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch /* username may have changed, update it */
7c7117e542b6a44c1db7fc91c0180bdace6dbce7Stephan Bosch auth_request_set_field(request, "user", p == NULL ? reply :
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch /* we didn't get a password. */
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch "Received reply from worker without "
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch "password scheme");
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch for (tmp = t_strsplit(reply, "\t"); *tmp != NULL; tmp++) {
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch auth_request_set_field(request, *tmp, p, NULL);
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Boschverify_plain_callback(struct auth_request *request, const char *reply)
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch if (get_pass_reply(request, reply, &password, &scheme) < 0)
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch auth_request_verify_plain_callback(result, request);
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Boschvoid passdb_blocking_verify_plain(struct auth_request *request)
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch str_printfa(str, "PASSV\t%u\t", request->passdb->id);
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch auth_worker_call(request, str_c(str), verify_plain_callback);
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Boschlookup_credentials_callback(struct auth_request *request, const char *reply)
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch if (get_pass_reply(request, reply, &password, &scheme) < 0)
3fcb3d2d1f3583025ff62bae95ec706920f398b1Stephan Bosch passdb_handle_credentials(result, password, scheme,
2f64a4c88de91c483fb378bc80d10e1caa6f2305Stephan Boschvoid passdb_blocking_lookup_credentials(struct auth_request *request)