annotate src/auth/userdb-prefetch.c @ 22614:cf66220d281e

doveadm proxy: Don't crash if remote doesn't support log proxying
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sat, 14 Oct 2017 12:54:18 +0300
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19923
diff changeset
1 /* Copyright (c) 2004-2017 Dovecot authors, see the included COPYING file */
3667
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
9219
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents: 9002
diff changeset
3 #include "auth-common.h"
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 8058
diff changeset
4 #include "userdb.h"
3667
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #ifdef USERDB_PREFETCH
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "str.h"
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "var-expand.h"
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 static void prefetch_lookup(struct auth_request *auth_request,
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 userdb_callback_t *callback)
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 {
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5259
diff changeset
15 /* auth_request_set_field() should have already placed the userdb_*
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5259
diff changeset
16 values to userdb_reply. */
17061
1600e97dabbb auth: Previous userdb changes caused userdb prefetch to be used always.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
17 if (!auth_request->userdb_prefetch_set) {
10903
6e639833c3fc auth: Initial support for per-protocol auth settings.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
18 if (auth_request_get_auth(auth_request)->userdbs->next == NULL) {
4146
bdf68bc43354 Allow prefetch userdb to exist nicely with other userdbs.
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
19 /* no other userdbs */
8512
2034087a9663 If only userdb prefetch is defined and userdb lookup is tried, give a better error message.
Timo Sirainen <tss@iki.fi>
parents: 8217
diff changeset
20 if (auth_request->userdb_lookup) {
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
21 auth_request_log_error(auth_request, AUTH_SUBSYS_DB,
8512
2034087a9663 If only userdb prefetch is defined and userdb lookup is tried, give a better error message.
Timo Sirainen <tss@iki.fi>
parents: 8217
diff changeset
22 "userdb lookup not possible with only userdb prefetch");
2034087a9663 If only userdb prefetch is defined and userdb lookup is tried, give a better error message.
Timo Sirainen <tss@iki.fi>
parents: 8217
diff changeset
23 } else {
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
24 auth_request_log_error(auth_request, AUTH_SUBSYS_DB,
8512
2034087a9663 If only userdb prefetch is defined and userdb lookup is tried, give a better error message.
Timo Sirainen <tss@iki.fi>
parents: 8217
diff changeset
25 "passdb didn't return userdb entries");
2034087a9663 If only userdb prefetch is defined and userdb lookup is tried, give a better error message.
Timo Sirainen <tss@iki.fi>
parents: 8217
diff changeset
26 }
17626
535562da7b29 auth: If userdb prefetch is configured wrong, return temporary failure instead of "user not known"
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
27 callback(USERDB_RESULT_INTERNAL_FAILURE, auth_request);
535562da7b29 auth: If userdb prefetch is configured wrong, return temporary failure instead of "user not known"
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
28 return;
535562da7b29 auth: If userdb prefetch is configured wrong, return temporary failure instead of "user not known"
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
29 }
19923
81df79443d12 auth: If auth request contains "debug" field, enable auth_debug=yes for the request.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
30 if (!auth_request->userdb_lookup || auth_request->debug) {
4146
bdf68bc43354 Allow prefetch userdb to exist nicely with other userdbs.
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
31 /* more userdbs, they may know the user */
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
32 auth_request_log_debug(auth_request, AUTH_SUBSYS_DB,
7854
ea275bc7c8a1 prefetch: Updated log message.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
33 "passdb didn't return userdb entries, "
ea275bc7c8a1 prefetch: Updated log message.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
34 "trying the next userdb");
4146
bdf68bc43354 Allow prefetch userdb to exist nicely with other userdbs.
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
35 }
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5259
diff changeset
36 callback(USERDB_RESULT_USER_UNKNOWN, auth_request);
3667
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 return;
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 }
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
40 auth_request_log_debug(auth_request, AUTH_SUBSYS_DB, "success");
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5259
diff changeset
41 callback(USERDB_RESULT_OK, auth_request);
3667
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 }
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 struct userdb_module_interface userdb_prefetch = {
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 "prefetch",
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 NULL,
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 NULL,
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 NULL,
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50
9273
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
51 prefetch_lookup,
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
52
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
53 NULL,
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
54 NULL,
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
55 NULL
3667
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 };
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 8058
diff changeset
57 #else
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 8058
diff changeset
58 struct userdb_module_interface userdb_prefetch = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10082
diff changeset
59 .name = "prefetch"
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 8058
diff changeset
60 };
3667
b7569a6a4ada Renamed userdb passdb to prefetch.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 #endif