Mercurial > dovecot > core-2.2
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 |
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 | 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 | 5 |
6 #ifdef USERDB_PREFETCH | |
7 | |
8 #include "str.h" | |
9 #include "var-expand.h" | |
10 | |
11 | |
12 static void prefetch_lookup(struct auth_request *auth_request, | |
13 userdb_callback_t *callback) | |
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 | 33 "passdb didn't return userdb entries, " |
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 | 37 return; |
38 } | |
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 | 42 } |
43 | |
44 struct userdb_module_interface userdb_prefetch = { | |
45 "prefetch", | |
46 | |
47 NULL, | |
48 NULL, | |
49 NULL, | |
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 | 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 | 61 #endif |