annotate src/auth/mech-otp-skey-common.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 8eae4e205c82
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9219
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
1 /*
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
2 * Common code for OTP and SKEY authentication mechanisms.
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
3 *
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
4 * Copyright (c) 2006 Andrey Panin <pazke@donpac.ru>
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
5 *
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
6 * This software is released under the MIT license.
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
7 */
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
8
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
9 #include "auth-common.h"
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
10 #include "hash.h"
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
11 #include "mech.h"
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
12
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
13 #include "otp.h"
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
14 #include "mech-otp-skey-common.h"
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
15
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
16 static HASH_TABLE(char *, struct auth_request *) otp_lock_table;
9219
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
17
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
18 void otp_lock_init(void)
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
19 {
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
20 if (hash_table_is_created(otp_lock_table))
9219
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
21 return;
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
22
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
23 hash_table_create(&otp_lock_table, default_pool, 128,
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
24 strcase_hash, strcasecmp);
9219
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
25 }
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
26
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
27 int otp_try_lock(struct auth_request *auth_request)
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
28 {
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
29 if (hash_table_lookup(otp_lock_table, auth_request->user))
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
30 return FALSE;
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
31
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
32 hash_table_insert(otp_lock_table, auth_request->user, auth_request);
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
33 return TRUE;
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
34 }
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
35
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
36 void otp_unlock(struct auth_request *auth_request)
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
37 {
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
38 struct otp_auth_request *request =
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
39 (struct otp_auth_request *)auth_request;
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
40
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
41 if (!request->lock)
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
42 return;
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
43
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
44 hash_table_remove(otp_lock_table, auth_request->user);
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
45 request->lock = FALSE;
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
46 }
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
47
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
48 void otp_set_credentials_callback(bool success,
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
49 struct auth_request *auth_request)
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
50 {
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
51 if (success)
14629
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
52 auth_request_success(auth_request, "", 0);
9219
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
53 else {
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
54 auth_request_internal_failure(auth_request);
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
55 otp_unlock(auth_request);
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
56 }
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
57
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
58 otp_unlock(auth_request);
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
59 }
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
60
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
61 void mech_otp_skey_auth_free(struct auth_request *auth_request)
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
62 {
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
63 otp_unlock(auth_request);
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
64
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
65 pool_unref(&auth_request->pool);
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents:
diff changeset
66 }