5f977b6375baa4a733b35bf86c98e595ccde2122
[mech_eap.git] / eap_mech.c
1 /*
2  * Copyright (c) 2010, JANET(UK)
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * 3. Neither the name of JANET(UK) nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  */
32
33 #include "gssapiP_eap.h"
34
35 static int
36 eapPeerRegisterMethods(void)
37 {
38     int ret = 0;
39
40 #ifdef EAP_MD5
41     if (ret == 0)
42         ret = eap_peer_md5_register();
43 #endif /* EAP_MD5 */
44
45 #ifdef EAP_TLS
46     if (ret == 0)
47         ret = eap_peer_tls_register();
48 #endif /* EAP_TLS */
49
50 #ifdef EAP_MSCHAPv2
51     if (ret == 0)
52         ret = eap_peer_mschapv2_register();
53 #endif /* EAP_MSCHAPv2 */
54
55 #ifdef EAP_PEAP
56     if (ret == 0)
57         ret = eap_peer_peap_register();
58 #endif /* EAP_PEAP */
59
60 #ifdef EAP_TTLS
61     if (ret == 0)
62         ret = eap_peer_ttls_register();
63 #endif /* EAP_TTLS */
64
65 #ifdef EAP_GTC
66     if (ret == 0)
67         ret = eap_peer_gtc_register();
68 #endif /* EAP_GTC */
69
70 #ifdef EAP_OTP
71     if (ret == 0)
72         ret = eap_peer_otp_register();
73 #endif /* EAP_OTP */
74
75 #ifdef EAP_SIM
76     if (ret == 0)
77         ret = eap_peer_sim_register();
78 #endif /* EAP_SIM */
79
80 #ifdef EAP_LEAP
81     if (ret == 0)
82         ret = eap_peer_leap_register();
83 #endif /* EAP_LEAP */
84
85 #ifdef EAP_PSK
86     if (ret == 0)
87         ret = eap_peer_psk_register();
88 #endif /* EAP_PSK */
89
90 #ifdef EAP_AKA
91     if (ret == 0)
92         ret = eap_peer_aka_register();
93 #endif /* EAP_AKA */
94
95 #ifdef EAP_AKA_PRIME
96     if (ret == 0)
97         ret = eap_peer_aka_prime_register();
98 #endif /* EAP_AKA_PRIME */
99
100 #ifdef EAP_FAST
101     if (ret == 0)
102         ret = eap_peer_fast_register();
103 #endif /* EAP_FAST */
104
105 #ifdef EAP_PAX
106     if (ret == 0)
107         ret = eap_peer_pax_register();
108 #endif /* EAP_PAX */
109
110 #ifdef EAP_SAKE
111     if (ret == 0)
112         ret = eap_peer_sake_register();
113 #endif /* EAP_SAKE */
114
115 #ifdef EAP_GPSK
116     if (ret == 0)
117         ret = eap_peer_gpsk_register();
118 #endif /* EAP_GPSK */
119
120 #ifdef EAP_WSC
121     if (ret == 0)
122         ret = eap_peer_wsc_register();
123 #endif /* EAP_WSC */
124
125 #ifdef EAP_IKEV2
126     if (ret == 0)
127         ret = eap_peer_ikev2_register();
128 #endif /* EAP_IKEV2 */
129
130 #ifdef EAP_VENDOR_TEST
131     if (ret == 0)
132         ret = eap_peer_vendor_test_register();
133 #endif /* EAP_VENDOR_TEST */
134
135 #ifdef EAP_TNC
136     if (ret == 0)
137         ret = eap_peer_tnc_register();
138 #endif /* EAP_TNC */
139
140     return ret;
141 }
142
143 static int
144 eapServerRegisterMethods(void)
145 {
146     int ret = 0;
147
148 #ifdef EAP_SERVER_IDENTITY
149     if (ret == 0)
150         ret = eap_server_identity_register();
151 #endif /* EAP_SERVER_IDENTITY */
152
153 #ifdef EAP_SERVER_MD5
154     if (ret == 0)
155         ret = eap_server_md5_register();
156 #endif /* EAP_SERVER_MD5 */
157
158 #ifdef EAP_SERVER_TLS
159     if (ret == 0)
160         ret = eap_server_tls_register();
161 #endif /* EAP_SERVER_TLS */
162
163 #ifdef EAP_SERVER_MSCHAPV2
164     if (ret == 0)
165         ret = eap_server_mschapv2_register();
166 #endif /* EAP_SERVER_MSCHAPV2 */
167
168 #ifdef EAP_SERVER_PEAP
169     if (ret == 0)
170         ret = eap_server_peap_register();
171 #endif /* EAP_SERVER_PEAP */
172
173 #ifdef EAP_SERVER_TLV
174     if (ret == 0)
175         ret = eap_server_tlv_register();
176 #endif /* EAP_SERVER_TLV */
177 #ifdef EAP_SERVER_GTC
178     if (ret == 0)
179         ret = eap_server_gtc_register();
180 #endif /* EAP_SERVER_GTC */
181
182 #ifdef EAP_SERVER_TTLS
183     if (ret == 0)
184         ret = eap_server_ttls_register();
185 #endif /* EAP_SERVER_TTLS */
186
187 #ifdef EAP_SERVER_SIM
188     if (ret == 0)
189         ret = eap_server_sim_register();
190 #endif /* EAP_SERVER_SIM */
191
192 #ifdef EAP_SERVER_AKA
193     if (ret == 0)
194         ret = eap_server_aka_register();
195 #endif /* EAP_SERVER_AKA */
196
197 #ifdef EAP_SERVER_AKA_PRIME
198     if (ret == 0)
199         ret = eap_server_aka_prime_register();
200 #endif /* EAP_SERVER_AKA_PRIME */
201
202 #ifdef EAP_SERVER_PAX
203     if (ret == 0)
204         ret = eap_server_pax_register();
205 #endif /* EAP_SERVER_PAX */
206
207 #ifdef EAP_SERVER_PSK
208     if (ret == 0)
209         ret = eap_server_psk_register();
210 #endif /* EAP_SERVER_PSK */
211
212 #ifdef EAP_SERVER_SAKE
213     if (ret == 0)
214         ret = eap_server_sake_register();
215 #endif /* EAP_SERVER_SAKE */
216
217 #ifdef EAP_SERVER_GPSK
218     if (ret == 0)
219         ret = eap_server_gpsk_register();
220 #endif /* EAP_SERVER_GPSK */
221
222 #ifdef EAP_SERVER_VENDOR_TEST
223     if (ret == 0)
224         ret = eap_server_vendor_test_register();
225 #endif /* EAP_SERVER_VENDOR_TEST */
226
227 #ifdef EAP_SERVER_FAST
228     if (ret == 0)
229         ret = eap_server_fast_register();
230 #endif /* EAP_SERVER_FAST */
231
232 #ifdef EAP_SERVER_WSC
233     if (ret == 0)
234         ret = eap_server_wsc_register();
235 #endif /* EAP_SERVER_WSC */
236
237 #ifdef EAP_SERVER_IKEV2
238     if (ret == 0)
239         ret = eap_server_ikev2_register();
240 #endif /* EAP_SERVER_IKEV2 */
241
242 #ifdef EAP_SERVER_TNC
243     if (ret == 0)
244         ret = eap_server_tnc_register();
245 #endif /* EAP_SERVER_TNC */
246
247     return ret;
248 }
249
250 static int
251 gssEapInitLibEap(void)
252 {
253     return eapPeerRegisterMethods();
254 }
255
256 static int
257 gssEapInitLibRadSec(void)
258 {
259     return 0;
260 }
261
262 static void gssEapInit(void) __attribute__((constructor));
263 static void gssEapFinalize(void) __attribute__((destructor));
264
265 static void
266 gssEapInit(void)
267 {
268     int ret;
269
270     ret = gssEapInitLibEap();
271     if (ret == 0)
272 #if 0
273         ret = gssEapInitLibRadSec();
274 #else
275         ret = eapServerRegisterMethods();
276 #endif
277 }
278
279 static void
280 gssEapFinalize(void)
281 {
282     eap_peer_unregister_methods();
283 #if 1
284     eap_server_unregister_methods();
285 #endif
286 }
287