18dbcf02cSchristos /*
28dbcf02cSchristos  * EAP method registration
38dbcf02cSchristos  * Copyright (c) 2004-2009, Jouni Malinen <j@w1.fi>
48dbcf02cSchristos  *
562a52023Schristos  * This software may be distributed under the terms of the BSD license.
662a52023Schristos  * See README for more details.
78dbcf02cSchristos  */
88dbcf02cSchristos 
98dbcf02cSchristos #include "includes.h"
108dbcf02cSchristos 
118dbcf02cSchristos #include "common.h"
128dbcf02cSchristos #include "eap_peer/eap_methods.h"
138dbcf02cSchristos #include "eap_server/eap_methods.h"
1462a52023Schristos #include "wpa_supplicant_i.h"
158dbcf02cSchristos 
168dbcf02cSchristos 
178dbcf02cSchristos /**
188dbcf02cSchristos  * eap_register_methods - Register statically linked EAP methods
198dbcf02cSchristos  * Returns: 0 on success, -1 or -2 on failure
208dbcf02cSchristos  *
218dbcf02cSchristos  * This function is called at program initialization to register all EAP
228dbcf02cSchristos  * methods that were linked in statically.
238dbcf02cSchristos  */
eap_register_methods(void)248dbcf02cSchristos int eap_register_methods(void)
258dbcf02cSchristos {
268dbcf02cSchristos 	int ret = 0;
278dbcf02cSchristos 
288dbcf02cSchristos #ifdef EAP_MD5
298dbcf02cSchristos 	if (ret == 0)
308dbcf02cSchristos 		ret = eap_peer_md5_register();
318dbcf02cSchristos #endif /* EAP_MD5 */
328dbcf02cSchristos 
338dbcf02cSchristos #ifdef EAP_TLS
348dbcf02cSchristos 	if (ret == 0)
358dbcf02cSchristos 		ret = eap_peer_tls_register();
368dbcf02cSchristos #endif /* EAP_TLS */
378dbcf02cSchristos 
3862a52023Schristos #ifdef EAP_UNAUTH_TLS
3962a52023Schristos 	if (ret == 0)
4062a52023Schristos 		ret = eap_peer_unauth_tls_register();
4162a52023Schristos #endif /* EAP_UNAUTH_TLS */
4262a52023Schristos 
4336d97821Schristos #ifdef EAP_TLS
4436d97821Schristos #ifdef CONFIG_HS20
4536d97821Schristos 	if (ret == 0)
4636d97821Schristos 		ret = eap_peer_wfa_unauth_tls_register();
4736d97821Schristos #endif /* CONFIG_HS20 */
4836d97821Schristos #endif /* EAP_TLS */
4936d97821Schristos 
508dbcf02cSchristos #ifdef EAP_MSCHAPv2
518dbcf02cSchristos 	if (ret == 0)
528dbcf02cSchristos 		ret = eap_peer_mschapv2_register();
538dbcf02cSchristos #endif /* EAP_MSCHAPv2 */
548dbcf02cSchristos 
558dbcf02cSchristos #ifdef EAP_PEAP
568dbcf02cSchristos 	if (ret == 0)
578dbcf02cSchristos 		ret = eap_peer_peap_register();
588dbcf02cSchristos #endif /* EAP_PEAP */
598dbcf02cSchristos 
608dbcf02cSchristos #ifdef EAP_TTLS
618dbcf02cSchristos 	if (ret == 0)
628dbcf02cSchristos 		ret = eap_peer_ttls_register();
638dbcf02cSchristos #endif /* EAP_TTLS */
648dbcf02cSchristos 
658dbcf02cSchristos #ifdef EAP_GTC
668dbcf02cSchristos 	if (ret == 0)
678dbcf02cSchristos 		ret = eap_peer_gtc_register();
688dbcf02cSchristos #endif /* EAP_GTC */
698dbcf02cSchristos 
708dbcf02cSchristos #ifdef EAP_OTP
718dbcf02cSchristos 	if (ret == 0)
728dbcf02cSchristos 		ret = eap_peer_otp_register();
738dbcf02cSchristos #endif /* EAP_OTP */
748dbcf02cSchristos 
758dbcf02cSchristos #ifdef EAP_SIM
768dbcf02cSchristos 	if (ret == 0)
778dbcf02cSchristos 		ret = eap_peer_sim_register();
788dbcf02cSchristos #endif /* EAP_SIM */
798dbcf02cSchristos 
808dbcf02cSchristos #ifdef EAP_LEAP
818dbcf02cSchristos 	if (ret == 0)
828dbcf02cSchristos 		ret = eap_peer_leap_register();
838dbcf02cSchristos #endif /* EAP_LEAP */
848dbcf02cSchristos 
858dbcf02cSchristos #ifdef EAP_PSK
868dbcf02cSchristos 	if (ret == 0)
878dbcf02cSchristos 		ret = eap_peer_psk_register();
888dbcf02cSchristos #endif /* EAP_PSK */
898dbcf02cSchristos 
908dbcf02cSchristos #ifdef EAP_AKA
918dbcf02cSchristos 	if (ret == 0)
928dbcf02cSchristos 		ret = eap_peer_aka_register();
938dbcf02cSchristos #endif /* EAP_AKA */
948dbcf02cSchristos 
958dbcf02cSchristos #ifdef EAP_AKA_PRIME
968dbcf02cSchristos 	if (ret == 0)
978dbcf02cSchristos 		ret = eap_peer_aka_prime_register();
988dbcf02cSchristos #endif /* EAP_AKA_PRIME */
998dbcf02cSchristos 
1008dbcf02cSchristos #ifdef EAP_FAST
1018dbcf02cSchristos 	if (ret == 0)
1028dbcf02cSchristos 		ret = eap_peer_fast_register();
1038dbcf02cSchristos #endif /* EAP_FAST */
1048dbcf02cSchristos 
105*0d69f216Schristos #ifdef EAP_TEAP
106*0d69f216Schristos 	if (ret == 0)
107*0d69f216Schristos 		ret = eap_peer_teap_register();
108*0d69f216Schristos #endif /* EAP_TEAP */
109*0d69f216Schristos 
1108dbcf02cSchristos #ifdef EAP_PAX
1118dbcf02cSchristos 	if (ret == 0)
1128dbcf02cSchristos 		ret = eap_peer_pax_register();
1138dbcf02cSchristos #endif /* EAP_PAX */
1148dbcf02cSchristos 
1158dbcf02cSchristos #ifdef EAP_SAKE
1168dbcf02cSchristos 	if (ret == 0)
1178dbcf02cSchristos 		ret = eap_peer_sake_register();
1188dbcf02cSchristos #endif /* EAP_SAKE */
1198dbcf02cSchristos 
1208dbcf02cSchristos #ifdef EAP_GPSK
1218dbcf02cSchristos 	if (ret == 0)
1228dbcf02cSchristos 		ret = eap_peer_gpsk_register();
1238dbcf02cSchristos #endif /* EAP_GPSK */
1248dbcf02cSchristos 
1258dbcf02cSchristos #ifdef EAP_WSC
1268dbcf02cSchristos 	if (ret == 0)
1278dbcf02cSchristos 		ret = eap_peer_wsc_register();
1288dbcf02cSchristos #endif /* EAP_WSC */
1298dbcf02cSchristos 
1308dbcf02cSchristos #ifdef EAP_IKEV2
1318dbcf02cSchristos 	if (ret == 0)
1328dbcf02cSchristos 		ret = eap_peer_ikev2_register();
1338dbcf02cSchristos #endif /* EAP_IKEV2 */
1348dbcf02cSchristos 
1358dbcf02cSchristos #ifdef EAP_VENDOR_TEST
1368dbcf02cSchristos 	if (ret == 0)
1378dbcf02cSchristos 		ret = eap_peer_vendor_test_register();
1388dbcf02cSchristos #endif /* EAP_VENDOR_TEST */
1398dbcf02cSchristos 
1408dbcf02cSchristos #ifdef EAP_TNC
1418dbcf02cSchristos 	if (ret == 0)
1428dbcf02cSchristos 		ret = eap_peer_tnc_register();
1438dbcf02cSchristos #endif /* EAP_TNC */
1448dbcf02cSchristos 
14542669be3Schristos #ifdef EAP_PWD
14642669be3Schristos 	if (ret == 0)
14742669be3Schristos 		ret = eap_peer_pwd_register();
14842669be3Schristos #endif /* EAP_PWD */
1498dbcf02cSchristos 
15036d97821Schristos #ifdef EAP_EKE
15136d97821Schristos 	if (ret == 0)
15236d97821Schristos 		ret = eap_peer_eke_register();
15336d97821Schristos #endif /* EAP_EKE */
15436d97821Schristos 
1558dbcf02cSchristos #ifdef EAP_SERVER_IDENTITY
1568dbcf02cSchristos 	if (ret == 0)
1578dbcf02cSchristos 		ret = eap_server_identity_register();
1588dbcf02cSchristos #endif /* EAP_SERVER_IDENTITY */
1598dbcf02cSchristos 
1608dbcf02cSchristos #ifdef EAP_SERVER_MD5
1618dbcf02cSchristos 	if (ret == 0)
1628dbcf02cSchristos 		ret = eap_server_md5_register();
1638dbcf02cSchristos #endif /* EAP_SERVER_MD5 */
1648dbcf02cSchristos 
1658dbcf02cSchristos #ifdef EAP_SERVER_TLS
1668dbcf02cSchristos 	if (ret == 0)
1678dbcf02cSchristos 		ret = eap_server_tls_register();
1688dbcf02cSchristos #endif /* EAP_SERVER_TLS */
1698dbcf02cSchristos 
17062a52023Schristos #ifdef EAP_SERVER_UNAUTH_TLS
17162a52023Schristos 	if (ret == 0)
17262a52023Schristos 		ret = eap_server_unauth_tls_register();
17362a52023Schristos #endif /* EAP_SERVER_UNAUTH_TLS */
17462a52023Schristos 
1758dbcf02cSchristos #ifdef EAP_SERVER_MSCHAPV2
1768dbcf02cSchristos 	if (ret == 0)
1778dbcf02cSchristos 		ret = eap_server_mschapv2_register();
1788dbcf02cSchristos #endif /* EAP_SERVER_MSCHAPV2 */
1798dbcf02cSchristos 
1808dbcf02cSchristos #ifdef EAP_SERVER_PEAP
1818dbcf02cSchristos 	if (ret == 0)
1828dbcf02cSchristos 		ret = eap_server_peap_register();
1838dbcf02cSchristos #endif /* EAP_SERVER_PEAP */
1848dbcf02cSchristos 
1858dbcf02cSchristos #ifdef EAP_SERVER_TLV
1868dbcf02cSchristos 	if (ret == 0)
1878dbcf02cSchristos 		ret = eap_server_tlv_register();
1888dbcf02cSchristos #endif /* EAP_SERVER_TLV */
1898dbcf02cSchristos 
1908dbcf02cSchristos #ifdef EAP_SERVER_GTC
1918dbcf02cSchristos 	if (ret == 0)
1928dbcf02cSchristos 		ret = eap_server_gtc_register();
1938dbcf02cSchristos #endif /* EAP_SERVER_GTC */
1948dbcf02cSchristos 
1958dbcf02cSchristos #ifdef EAP_SERVER_TTLS
1968dbcf02cSchristos 	if (ret == 0)
1978dbcf02cSchristos 		ret = eap_server_ttls_register();
1988dbcf02cSchristos #endif /* EAP_SERVER_TTLS */
1998dbcf02cSchristos 
2008dbcf02cSchristos #ifdef EAP_SERVER_SIM
2018dbcf02cSchristos 	if (ret == 0)
2028dbcf02cSchristos 		ret = eap_server_sim_register();
2038dbcf02cSchristos #endif /* EAP_SERVER_SIM */
2048dbcf02cSchristos 
2058dbcf02cSchristos #ifdef EAP_SERVER_AKA
2068dbcf02cSchristos 	if (ret == 0)
2078dbcf02cSchristos 		ret = eap_server_aka_register();
2088dbcf02cSchristos #endif /* EAP_SERVER_AKA */
2098dbcf02cSchristos 
2108dbcf02cSchristos #ifdef EAP_SERVER_AKA_PRIME
2118dbcf02cSchristos 	if (ret == 0)
2128dbcf02cSchristos 		ret = eap_server_aka_prime_register();
2138dbcf02cSchristos #endif /* EAP_SERVER_AKA_PRIME */
2148dbcf02cSchristos 
2158dbcf02cSchristos #ifdef EAP_SERVER_PAX
2168dbcf02cSchristos 	if (ret == 0)
2178dbcf02cSchristos 		ret = eap_server_pax_register();
2188dbcf02cSchristos #endif /* EAP_SERVER_PAX */
2198dbcf02cSchristos 
2208dbcf02cSchristos #ifdef EAP_SERVER_PSK
2218dbcf02cSchristos 	if (ret == 0)
2228dbcf02cSchristos 		ret = eap_server_psk_register();
2238dbcf02cSchristos #endif /* EAP_SERVER_PSK */
2248dbcf02cSchristos 
2258dbcf02cSchristos #ifdef EAP_SERVER_SAKE
2268dbcf02cSchristos 	if (ret == 0)
2278dbcf02cSchristos 		ret = eap_server_sake_register();
2288dbcf02cSchristos #endif /* EAP_SERVER_SAKE */
2298dbcf02cSchristos 
2308dbcf02cSchristos #ifdef EAP_SERVER_GPSK
2318dbcf02cSchristos 	if (ret == 0)
2328dbcf02cSchristos 		ret = eap_server_gpsk_register();
2338dbcf02cSchristos #endif /* EAP_SERVER_GPSK */
2348dbcf02cSchristos 
2358dbcf02cSchristos #ifdef EAP_SERVER_VENDOR_TEST
2368dbcf02cSchristos 	if (ret == 0)
2378dbcf02cSchristos 		ret = eap_server_vendor_test_register();
2388dbcf02cSchristos #endif /* EAP_SERVER_VENDOR_TEST */
2398dbcf02cSchristos 
2408dbcf02cSchristos #ifdef EAP_SERVER_FAST
2418dbcf02cSchristos 	if (ret == 0)
2428dbcf02cSchristos 		ret = eap_server_fast_register();
2438dbcf02cSchristos #endif /* EAP_SERVER_FAST */
2448dbcf02cSchristos 
245*0d69f216Schristos #ifdef EAP_SERVER_TEAP
246*0d69f216Schristos 	if (ret == 0)
247*0d69f216Schristos 		ret = eap_server_teap_register();
248*0d69f216Schristos #endif /* EAP_SERVER_TEAP */
249*0d69f216Schristos 
2508dbcf02cSchristos #ifdef EAP_SERVER_WSC
2518dbcf02cSchristos 	if (ret == 0)
2528dbcf02cSchristos 		ret = eap_server_wsc_register();
2538dbcf02cSchristos #endif /* EAP_SERVER_WSC */
2548dbcf02cSchristos 
2558dbcf02cSchristos #ifdef EAP_SERVER_IKEV2
2568dbcf02cSchristos 	if (ret == 0)
2578dbcf02cSchristos 		ret = eap_server_ikev2_register();
2588dbcf02cSchristos #endif /* EAP_SERVER_IKEV2 */
2598dbcf02cSchristos 
2608dbcf02cSchristos #ifdef EAP_SERVER_TNC
2618dbcf02cSchristos 	if (ret == 0)
2628dbcf02cSchristos 		ret = eap_server_tnc_register();
2638dbcf02cSchristos #endif /* EAP_SERVER_TNC */
2648dbcf02cSchristos 
26542669be3Schristos #ifdef EAP_SERVER_PWD
26642669be3Schristos 	if (ret == 0)
26742669be3Schristos 		ret = eap_server_pwd_register();
26842669be3Schristos #endif /* EAP_SERVER_PWD */
26942669be3Schristos 
2708dbcf02cSchristos 	return ret;
2718dbcf02cSchristos }
272