annotate src/auth/passdb-oauth2.c @ 22656:1789bf2a1e01

director: Make sure HOST-RESET-USERS isn't used with max_moving_users=0 The reset command would just hang in that case. doveadm would never have sent this, so this is just an extra sanity check.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 05 Nov 2017 23:51:56 +0200
parents 036d9f649c8b
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21579
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
1 /* Copyright (c) 2017 Dovecot authors, see the included COPYING file */
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
2
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
3 #include "auth-common.h"
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
4 #include "passdb.h"
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
5 #include "db-oauth2.h"
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
6
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
7 struct oauth2_passdb_module {
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
8 struct passdb_module module;
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
9 struct db_oauth2 *db;
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
10 };
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
11
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
12 static void
21737
036d9f649c8b auth: oauth2 - cleanup db_oauth2_lookup_callback_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21734
diff changeset
13 oauth2_verify_plain_continue(struct db_oauth2_request *req,
036d9f649c8b auth: oauth2 - cleanup db_oauth2_lookup_callback_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21734
diff changeset
14 enum passdb_result result, const char *error,
21579
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
15 struct auth_request *request)
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
16 {
21734
8b5f6e2ff4a6 auth: oauth2 - remove db_oauth2_request.failed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21733
diff changeset
17 if (result == PASSDB_RESULT_INTERNAL_FAILURE)
21579
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
18 auth_request_log_error(request, AUTH_SUBSYS_DB, "oauth2 failed: %s",
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
19 error);
21734
8b5f6e2ff4a6 auth: oauth2 - remove db_oauth2_request.failed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21733
diff changeset
20 else if (result != PASSDB_RESULT_OK)
21579
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
21 auth_request_log_info(request, AUTH_SUBSYS_DB, "oauth2 failed: %s",
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
22 error);
21733
01ffe59436af auth: oauth2 - remove db_oauth2_request.result
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21579
diff changeset
23 req->verify_callback(result, request);
21579
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
24 auth_request_unref(&request);
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
25 }
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
26
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
27 static void
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
28 oauth2_verify_plain(struct auth_request *request, const char *password,
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
29 verify_plain_callback_t *callback)
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
30 {
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
31 struct oauth2_passdb_module *module =
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
32 (struct oauth2_passdb_module *)request->passdb->passdb;
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
33 struct db_oauth2_request *req =
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
34 p_new(request->pool, struct db_oauth2_request, 1);
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
35 req->pool = request->pool;
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
36 req->verify_callback = callback;
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
37
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
38 auth_request_ref(request);
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
39
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
40 db_oauth2_lookup(module->db, req, password, request, oauth2_verify_plain_continue, request);
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
41 }
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
42
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
43 static struct passdb_module *
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
44 oauth2_preinit(pool_t pool, const char *args)
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
45 {
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
46 struct oauth2_passdb_module *module;
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
47
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
48 module = p_new(pool, struct oauth2_passdb_module, 1);
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
49 module->db = db_oauth2_init(args);
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
50 return &module->module;
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
51 }
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
52
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
53 static void oauth2_deinit(struct passdb_module *passdb)
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
54 {
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
55 struct oauth2_passdb_module *module = (struct oauth2_passdb_module *)passdb;
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
56 db_oauth2_unref(&module->db);
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
57 }
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
58
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
59 struct passdb_module_interface passdb_oauth2 = {
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
60 "oauth2",
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
61
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
62 oauth2_preinit,
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
63 NULL,
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
64 oauth2_deinit,
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
65
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
66 oauth2_verify_plain,
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
67 NULL,
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
68 NULL
0006d9824c80 auth: Add oauth2 passdb
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
69 };