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