annotate src/auth/mech-external.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: 19552
diff changeset
1 /* Copyright (c) 2009-2017 Dovecot authors, see the included COPYING file */
9380
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "auth-common.h"
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "passdb.h"
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "mech.h"
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "mech-plain-common.h"
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 static void
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 mech_external_auth_continue(struct auth_request *request,
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 const unsigned char *data, size_t data_size)
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 {
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 const char *authzid, *error;
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 authzid = t_strndup(data, data_size);
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 if (request->user == NULL) {
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
16 auth_request_log_info(request, AUTH_SUBSYS_MECH,
9380
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 "username not known");
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 auth_request_fail(request);
14735
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
19 return;
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
20 }
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
21
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
22 /* this call is done simply to put the username through translation
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
23 settings */
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
24 if (!auth_request_set_username(request, "", &error)) {
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
25 auth_request_log_info(request, AUTH_SUBSYS_MECH,
14735
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
26 "Invalid username");
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
27 auth_request_fail(request);
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
28 return;
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
29 }
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
30
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
31 if (*authzid != '\0' &&
1e7c33ce9c16 auth: EXTERNAL mechanism didn't use auth_username_* settings.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
32 !auth_request_set_login_username(request, authzid, &error)) {
9380
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 /* invalid login username */
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
34 auth_request_log_info(request, AUTH_SUBSYS_MECH,
9380
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 "login user: %s", error);
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 auth_request_fail(request);
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 } else {
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 auth_request_verify_plain(request, "",
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 plain_verify_callback);
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 }
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 }
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 static struct auth_request *mech_external_auth_new(void)
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 {
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 struct auth_request *request;
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 pool_t pool;
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47
17837
569d41d21ec3 auth: Mark memory pools as growing and use the same sizes for all mechanisms.
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
48 pool = pool_alloconly_create(MEMPOOL_GROWING"external_auth_request", 2048);
9380
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 request = p_new(pool, struct auth_request, 1);
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 request->pool = pool;
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 return request;
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 }
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 const struct mech_module mech_external = {
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 "EXTERNAL",
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 9380
diff changeset
57 .flags = 0,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 9380
diff changeset
58 .passdb_need = MECH_PASSDB_NEED_VERIFY_PLAIN,
9380
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 mech_external_auth_new,
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 mech_generic_auth_initial,
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 mech_external_auth_continue,
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 mech_generic_auth_free
976a4c9ca6b6 auth: Forgot to add mech-external.c in earlier commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 };