1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* 2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * hostapd / EAP method registration 3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Copyright (c) 2004-2006, Jouni Malinen <j@w1.fi> 4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This program is free software; you can redistribute it and/or modify 6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * it under the terms of the GNU General Public License version 2 as 7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * published by the Free Software Foundation. 8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * license. 11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * See README and COPYING for more details. 13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "includes.h" 16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "common.h" 18526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "eap_i.h" 19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "eap_methods.h" 20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 22526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic struct eap_method *eap_methods; 23526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_server_get_eap_method - Get EAP method based on type number 27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @vendor: EAP Vendor-Id (0 = IETF) 28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @method: EAP type number 29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: Pointer to EAP method or %NULL if not found 30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtconst struct eap_method * eap_server_get_eap_method(int vendor, EapType method) 32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct eap_method *m; 34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt for (m = eap_methods; m; m = m->next) { 35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (m->vendor == vendor && m->method == method) 36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return m; 37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return NULL; 39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_server_get_type - Get EAP type for the given EAP method name 44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @name: EAP method name, e.g., TLS 45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @vendor: Buffer for returning EAP Vendor-Id 46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: EAP method type or %EAP_TYPE_NONE if not found 47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This function maps EAP type names into EAP type numbers based on the list of 49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * EAP methods included in the build. 50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry ShmidtEapType eap_server_get_type(const char *name, int *vendor) 52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct eap_method *m; 54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt for (m = eap_methods; m; m = m->next) { 55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (os_strcmp(m->name, name) == 0) { 56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *vendor = m->vendor; 57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return m->method; 58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *vendor = EAP_VENDOR_IETF; 61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return EAP_TYPE_NONE; 62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_server_method_alloc - Allocate EAP server method structure 67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @version: Version of the EAP server method interface (set to 68526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * EAP_SERVER_METHOD_INTERFACE_VERSION) 69526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @vendor: EAP Vendor-ID (EAP_VENDOR_*) (0 = IETF) 70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @method: EAP type number (EAP_TYPE_*) 71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @name: Name of the method (e.g., "TLS") 72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: Allocated EAP method structure or %NULL on failure 73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * The returned structure should be freed with eap_server_method_free() when it 75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * is not needed anymore. 76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct eap_method * eap_server_method_alloc(int version, int vendor, 78526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt EapType method, const char *name) 79526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 80526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct eap_method *eap; 81526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eap = os_zalloc(sizeof(*eap)); 82526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (eap == NULL) 83526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return NULL; 84526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eap->version = version; 85526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eap->vendor = vendor; 86526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eap->method = method; 87526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eap->name = name; 88526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return eap; 89526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 90526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 91526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 92526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 93526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_server_method_free - Free EAP server method structure 94526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @method: Method structure allocated with eap_server_method_alloc() 95526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 96526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eap_server_method_free(struct eap_method *method) 97526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 98526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt os_free(method); 99526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 100526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 101526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 102526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 103526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_server_method_register - Register an EAP server method 104526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @method: EAP method to register 105526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: 0 on success, -1 on invalid method, or -2 if a matching EAP method 106526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * has already been registered 107526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 108526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Each EAP server method needs to call this function to register itself as a 109526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * supported EAP method. 110526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 111526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint eap_server_method_register(struct eap_method *method) 112526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 113526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct eap_method *m, *last = NULL; 114526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 115526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (method == NULL || method->name == NULL || 116526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt method->version != EAP_SERVER_METHOD_INTERFACE_VERSION) 117526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 118526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 119526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt for (m = eap_methods; m; m = m->next) { 120526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if ((m->vendor == method->vendor && 121526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt m->method == method->method) || 122526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt os_strcmp(m->name, method->name) == 0) 123526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -2; 124526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt last = m; 125526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 126526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 127526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (last) 128526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt last->next = method; 129526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 130526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eap_methods = method; 131526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 132526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return 0; 133526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 134526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 135526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 136526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 137526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_server_register_methods - Register statically linked EAP server methods 138526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: 0 on success, -1 on failure 139526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 140526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This function is called at program initialization to register all EAP server 141526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * methods that were linked in statically. 142526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 143526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint eap_server_register_methods(void) 144526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 145526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int ret = 0; 146526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 147526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 148526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_identity_register(void); 149526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_identity_register(); 150526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 151526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 152526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_MD5 153526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 154526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_md5_register(void); 155526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_md5_register(); 156526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 157526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_MD5 */ 158526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 159526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_TLS 160526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 161526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_tls_register(void); 162526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_tls_register(); 163526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 164526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_TLS */ 165526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 166526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_MSCHAPv2 167526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 168526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_mschapv2_register(void); 169526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_mschapv2_register(); 170526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 171526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_MSCHAPv2 */ 172526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 173526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_PEAP 174526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 175526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_peap_register(void); 176526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_peap_register(); 177526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 178526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_PEAP */ 179526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 180526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_TLV 181526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 182526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_tlv_register(void); 183526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_tlv_register(); 184526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 185526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_TLV */ 186526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 187526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_GTC 188526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 189526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_gtc_register(void); 190526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_gtc_register(); 191526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 192526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_GTC */ 193526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 194526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_TTLS 195526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 196526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_ttls_register(void); 197526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_ttls_register(); 198526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 199526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_TTLS */ 200526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 201526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_SIM 202526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 203526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_sim_register(void); 204526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_sim_register(); 205526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 206526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_SIM */ 207526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 208526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_AKA 209526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 210526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_aka_register(void); 211526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_aka_register(); 212526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 213526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_AKA */ 214526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 215526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_AKA_PRIME 216526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 217526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_aka_prime_register(void); 218526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_aka_prime_register(); 219526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 220526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_AKA_PRIME */ 221526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 222526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_PAX 223526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 224526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_pax_register(void); 225526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_pax_register(); 226526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 227526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_PAX */ 228526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 229526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_PSK 230526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 231526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_psk_register(void); 232526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_psk_register(); 233526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 234526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_PSK */ 235526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 236526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_SAKE 237526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 238526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_sake_register(void); 239526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_sake_register(); 240526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 241526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_SAKE */ 242526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 243526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_GPSK 244526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 245526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_gpsk_register(void); 246526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_gpsk_register(); 247526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 248526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_GPSK */ 249526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 250526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_VENDOR_TEST 251526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 252526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_vendor_test_register(void); 253526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_vendor_test_register(); 254526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 255526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_VENDOR_TEST */ 256526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 257526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_FAST 258526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 259526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_fast_register(void); 260526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_fast_register(); 261526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 262526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_FAST */ 263526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 264526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_WSC 265526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 266526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_wsc_register(void); 267526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_wsc_register(); 268526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 269526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_WSC */ 270526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 271526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_IKEV2 272526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 273526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_ikev2_register(void); 274526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_ikev2_register(); 275526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 276526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_IKEV2 */ 277526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 278526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_TNC 279526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == 0) { 280526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_server_tnc_register(void); 281526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = eap_server_tnc_register(); 282526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 283526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_TNC */ 284526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 285526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return ret; 286526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 287526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 288526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 289526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 290526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_server_unregister_methods - Unregister EAP server methods 291526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 292526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This function is called at program termination to unregister all EAP server 293526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * methods. 294526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 295526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eap_server_unregister_methods(void) 296526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 297526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct eap_method *m; 298526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 299526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (eap_methods) { 300526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt m = eap_methods; 301526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eap_methods = eap_methods->next; 302526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 303526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (m->free) 304526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt m->free(m); 305526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 306526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eap_server_method_free(m); 307526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 308526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 309