Commit | Line | Data |
---|---|---|
b3ef41c9 JH |
1 | /************************************************* |
2 | * Exim - an Internet mail transport agent * | |
3 | *************************************************/ | |
4 | ||
f9ba5e22 | 5 | /* Copyright (c) Jeremy Harris 1995 - 2018 */ |
b3ef41c9 JH |
6 | /* See the file NOTICE for conditions of use and distribution. */ |
7 | ||
8 | /* This file provides an Exim authenticator driver for | |
9 | a server to verify a client SSL certificate | |
10 | */ | |
11 | ||
12 | ||
13 | #include "../exim.h" | |
14 | #include "tls.h" | |
15 | ||
16 | /* Options specific to the tls authentication mechanism. */ | |
17 | ||
18 | optionlist auth_tls_options[] = { | |
19 | { "server_param", opt_stringptr, | |
20 | (void *)(offsetof(auth_tls_options_block, server_param1)) }, | |
21 | { "server_param1", opt_stringptr, | |
22 | (void *)(offsetof(auth_tls_options_block, server_param1)) }, | |
23 | { "server_param2", opt_stringptr, | |
24 | (void *)(offsetof(auth_tls_options_block, server_param2)) }, | |
25 | { "server_param3", opt_stringptr, | |
26 | (void *)(offsetof(auth_tls_options_block, server_param3)) }, | |
27 | }; | |
28 | ||
29 | /* Size of the options list. An extern variable has to be used so that its | |
30 | address can appear in the tables drtables.c. */ | |
31 | ||
32 | int auth_tls_options_count = nelem(auth_tls_options); | |
33 | ||
34 | /* Default private options block for the authentication method. */ | |
35 | ||
36 | auth_tls_options_block auth_tls_option_defaults = { | |
37 | NULL, /* server_param1 */ | |
38 | NULL, /* server_param2 */ | |
39 | NULL, /* server_param3 */ | |
40 | }; | |
41 | ||
42 | ||
d185889f JH |
43 | #ifdef MACRO_PREDEF |
44 | ||
45 | /* Dummy values */ | |
46 | void auth_tls_init(auth_instance *ablock) {} | |
47 | int auth_tls_server(auth_instance *ablock, uschar *data) {return 0;} | |
251b9eb4 JH |
48 | int auth_tls_client(auth_instance *ablock, void * sx, |
49 | int timeout, uschar *buffer, int buffsize) {return 0;} | |
d185889f JH |
50 | |
51 | #else /*!MACRO_PREDEF*/ | |
52 | ||
53 | ||
54 | ||
55 | ||
b3ef41c9 JH |
56 | /************************************************* |
57 | * Initialization entry point * | |
58 | *************************************************/ | |
59 | ||
60 | /* Called for each instance, after its options have been read, to | |
61 | enable consistency checks to be done, or anything else that needs | |
62 | to be set up. */ | |
63 | ||
64 | void | |
65 | auth_tls_init(auth_instance *ablock) | |
66 | { | |
67 | ablock->public_name = ablock->name; /* needed for core code */ | |
68 | } | |
69 | ||
70 | ||
71 | ||
72 | /************************************************* | |
73 | * Server entry point * | |
74 | *************************************************/ | |
75 | ||
76 | /* For interface, see auths/README */ | |
77 | ||
78 | int | |
79 | auth_tls_server(auth_instance *ablock, uschar *data) | |
80 | { | |
81 | auth_tls_options_block * ob = (auth_tls_options_block *)ablock->options_block; | |
82 | ||
83 | if (ob->server_param1) | |
84 | auth_vars[expand_nmax++] = expand_string(ob->server_param1); | |
85 | if (ob->server_param2) | |
86 | auth_vars[expand_nmax++] = expand_string(ob->server_param2); | |
d4ff61d1 | 87 | if (ob->server_param3) |
b3ef41c9 JH |
88 | auth_vars[expand_nmax++] = expand_string(ob->server_param3); |
89 | return auth_check_serv_cond(ablock); | |
90 | } | |
91 | ||
92 | ||
d185889f | 93 | #endif /*!MACRO_PREDEF*/ |
b3ef41c9 | 94 | /* End of tls.c */ |