diff options
author | Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> | 2010-10-01 13:57:59 -0700 |
---|---|---|
committer | Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> | 2010-10-02 00:28:23 -0700 |
commit | 865e9721fba057e4237346edc47de60bcdec9629 (patch) | |
tree | b33dfc04e03e5678c23f267fb54c4f55ec42e920 | |
parent | f320d3402b75c0edc3f806026c029e3c86dc17a3 (diff) |
supp: first try at using libeap > 0.7.10 and doing proper linking
Wiped all the crazy indirection to gain typing checks from the C
library. Still untested.
Signed-off-by: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
5 files changed, 69 insertions, 118 deletions
diff --git a/InfraStack/OSAgnostic/Product/AppSrvInfra/Makefile.am b/InfraStack/OSAgnostic/Product/AppSrvInfra/Makefile.am index c7c2977..b5274c2 100644 --- a/InfraStack/OSAgnostic/Product/AppSrvInfra/Makefile.am +++ b/InfraStack/OSAgnostic/Product/AppSrvInfra/Makefile.am @@ -194,6 +194,10 @@ wimaxd_CFLAGS = \ -D WIMAXD_NAME="\"$(WIMAXD_NAME)\"" \ -D LIB_DIR="\"$(libdir)\"" +if WPA_SUP_ENABLE +WPA_SUP_LIBS = @LIBEAP0_LIBS@ +endif + wimaxd_LDADD = \ ../../WiMax/Agents/NDnS/libNDnSAgent.la \ ../../WiMax/Agents/Supplicant/libSupplicantAgent.la \ @@ -201,6 +205,7 @@ wimaxd_LDADD = \ ../Instrumantation/libWmxInstrument.la \ ../../Common/CommonServices/libServices.la \ @LIBWIMAX_LIBS@ \ + $(WPA_SUP_LIBS) \ ../../Common/L4Common/libL4Common.la \ -lpthread \ -ldl diff --git a/InfraStack/OSAgnostic/Product/AppSrvInfra/Makefile.in b/InfraStack/OSAgnostic/Product/AppSrvInfra/Makefile.in index 45bea96..46ee1fb 100644 --- a/InfraStack/OSAgnostic/Product/AppSrvInfra/Makefile.in +++ b/InfraStack/OSAgnostic/Product/AppSrvInfra/Makefile.in @@ -59,12 +59,13 @@ am_wimaxd_OBJECTS = wimaxd-Act.$(OBJEXT) wimaxd-L4MsgProxy.$(OBJEXT) \ wimaxd-LoadInstrumentation.$(OBJEXT) \ wimaxd-DeviceConfiguration.$(OBJEXT) wimaxd_OBJECTS = $(am_wimaxd_OBJECTS) +am__DEPENDENCIES_1 = wimaxd_DEPENDENCIES = ../../WiMax/Agents/NDnS/libNDnSAgent.la \ ../../WiMax/Agents/Supplicant/libSupplicantAgent.la \ ../PipeHandler/libPipeHandler.la \ ../Instrumantation/libWmxInstrument.la \ ../../Common/CommonServices/libServices.la \ - ../../Common/L4Common/libL4Common.la + $(am__DEPENDENCIES_1) ../../Common/L4Common/libL4Common.la wimaxd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(wimaxd_CFLAGS) $(CFLAGS) \ $(wimaxd_LDFLAGS) $(LDFLAGS) -o $@ @@ -340,6 +341,7 @@ wimaxd_CFLAGS = \ -D WIMAXD_NAME="\"$(WIMAXD_NAME)\"" \ -D LIB_DIR="\"$(libdir)\"" +@WPA_SUP_ENABLE_TRUE@WPA_SUP_LIBS = @LIBEAP0_LIBS@ wimaxd_LDADD = \ ../../WiMax/Agents/NDnS/libNDnSAgent.la \ ../../WiMax/Agents/Supplicant/libSupplicantAgent.la \ @@ -347,6 +349,7 @@ wimaxd_LDADD = \ ../Instrumantation/libWmxInstrument.la \ ../../Common/CommonServices/libServices.la \ @LIBWIMAX_LIBS@ \ + $(WPA_SUP_LIBS) \ ../../Common/L4Common/libL4Common.la \ -lpthread \ -ldl diff --git a/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Makefile.am b/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Makefile.am index 2c87560..ac8169f 100644 --- a/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Makefile.am +++ b/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Makefile.am @@ -85,6 +85,9 @@ WPA_SUP_CFLAGS = \ -D "WPA_OPEN_SOURCE" -D "USE_STANDARD_TLS_H_ONLY" \ $(LIBEAP0_CFLAGS) +WPA_SUP_LIBS = \ + $(LIBEAP0_LIBS) + libSupplicantAgent_la_SOURCES = $(srcdir)/Source/SupplicantAgent.c \ $(top_srcdir)/InfraStack/OSAgnostic/WiMax/Wrappers/Supplicant/wmxSDK_Sup_Impl.c \ @@ -130,6 +133,7 @@ libSupplicantAgent_la_CFLAGS = -I "$(top_srcdir)/InfraStack/OSAgnostic/Product/ if WPA_SUP_ENABLE libSupplicantAgent_la_SOURCES += $(WPA_SUP_SOURCES) libSupplicantAgent_la_CFLAGS += $(WPA_SUP_CFLAGS) +libSupplicantAgent_la_LIBS = $(WPA_SUP_LIBS) EXTRA_DIST += $(DS_SUP_SOURCES) else libSupplicantAgent_la_SOURCES += $(DS_SUP_SOURCES) diff --git a/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Makefile.in b/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Makefile.in index 9d6758a..1118c3e 100644 --- a/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Makefile.in +++ b/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Makefile.in @@ -356,6 +356,9 @@ WPA_SUP_CFLAGS = \ -D "WPA_OPEN_SOURCE" -D "USE_STANDARD_TLS_H_ONLY" \ $(LIBEAP0_CFLAGS) +WPA_SUP_LIBS = \ + $(LIBEAP0_LIBS) + libSupplicantAgent_la_SOURCES = $(srcdir)/Source/SupplicantAgent.c \ $(top_srcdir)/InfraStack/OSAgnostic/WiMax/Wrappers/Supplicant/wmxSDK_Sup_Impl.c \ $(srcdir)/Source/SupplicantAgent.h $(am__append_1) \ @@ -396,6 +399,7 @@ libSupplicantAgent_la_CFLAGS = -I \ _GNU_SOURCE -D "_USE_TRACE" -D "BMI_MACHINE_ENDIANNESS_LITTLE" \ -D "IEEE8021X_EAPOL" -D "_OS_WIN32SIM" -D "_LINUX" \ $(am__append_2) +@WPA_SUP_ENABLE_TRUE@libSupplicantAgent_la_LIBS = $(WPA_SUP_LIBS) all: all-am .SUFFIXES: diff --git a/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Source/SupplicantAgent.c b/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Source/SupplicantAgent.c index 8d6b380..0a10e13 100644 --- a/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Source/SupplicantAgent.c +++ b/InfraStack/OSAgnostic/WiMax/Agents/Supplicant/Source/SupplicantAgent.c @@ -46,13 +46,12 @@ #if defined(WPA_OPEN_SOURCE) //open source supplicant include files -#include "includes.h" #include <eap_peer/util/common.h> #include <eap_peer/eap.h> #include <eap_peer/eap_config.h> #include <eap_peer/util/wpabuf.h> -#include "tls-wpa.h" -#include "dlfcn.h" +#include <eap_peer/eap_methods.h> + ////////////////////////////////////// // wpa_supplicant open source structures struct eap_peer_ctx { @@ -94,67 +93,6 @@ void Opensource_SupAgent_SendEapResponse(const u8 *data, size_t data_len); /************************************************************************ *********************** Loading libeap.so wpa_supplicant ********* *************************************************************************/ - -// helper functions -typedef struct wpabuf * (*wpabuf_alloc_copy_ptr) (const void *data, size_t len); -typedef void (*wpabuf_free_ptr) (struct wpabuf *buf); -typedef void (*wpa_hexdump_ptr) (int level, const char *title, const u8 *buf, size_t len); - -// eap methods -typedef int (*eap_key_available_ptr) (struct eap_sm *sm); -typedef const u8 * (*eap_get_eapKeyData_ptr) (struct eap_sm *sm, size_t *len); -typedef struct wpabuf * (*eap_get_eapRespData_ptr) (struct eap_sm *sm); -typedef struct eap_eapol_interface * (*eap_get_interface_ptr) (struct eap_sm *sm); - -// peer functions -typedef int (*eap_peer_register_methods_ptr) (void); -typedef struct eap_sm * (*eap_peer_sm_init_ptr) (void *eapol_ctx, - struct eapol_callbacks *eapol_cb, - void *msg_ctx, struct eap_config *conf); -typedef int (*eap_peer_sm_step_ptr) (struct eap_sm *sm); -typedef void (*eap_peer_sm_deinit_ptr) (struct eap_sm *sm); -typedef void (*eap_peer_unregister_methods_ptr) (void); -typedef int (*eap_peer_set_method_ptr) (int); - -//tls functions -struct tls_functions_table_t; -typedef void* (*tls_init_ptr) (const struct tls_config *conf); -typedef int (*tls_global_set_params_ptr) (void *tls_ctx, const struct tls_connection_params *params); -typedef int (*tls_global_set_verify_ptr) (void *tls_ctx, int check_crl); -typedef void (*tls_deinit_ptr) (void *tls_ctx); -typedef int (*tls_config_use_external_ptr) (const struct tls_functions_table_t *ft, const char *name_if_internal); -typedef void (*WpaLogprocPtr)(int level, char *fmt, ...); - -// helper functions -wpabuf_alloc_copy_ptr wpabuf_alloc_copy_func = NULL; -wpabuf_free_ptr wpabuf_free_func = NULL; -wpa_hexdump_ptr wpa_hexdump_func = NULL; - -// eap methods -eap_key_available_ptr eap_key_available_func = NULL; -eap_get_eapKeyData_ptr eap_get_eapKeyData_func = NULL; -eap_get_eapRespData_ptr eap_get_eapRespData_func= NULL; -eap_get_interface_ptr eap_get_interface_func = NULL; - -// peer functions -eap_peer_register_methods_ptr eap_peer_register_methods_func = NULL; -eap_peer_sm_init_ptr eap_peer_sm_init_func = NULL; -eap_peer_sm_step_ptr eap_peer_sm_step_func = NULL; -eap_peer_sm_deinit_ptr eap_peer_sm_deinit_func = NULL; -eap_peer_unregister_methods_ptr eap_peer_unregister_methods_func= NULL; - -eap_peer_set_method_ptr eap_peer_set_method_func=NULL; - - -//tls functions -tls_init_ptr tls_init_func = NULL; -tls_global_set_params_ptr tls_global_set_params_func = NULL; -tls_global_set_verify_ptr tls_global_set_verify_func = NULL; -tls_deinit_ptr tls_deinit_func = NULL; -tls_config_use_external_ptr tls_config_use_external_func = NULL; - -// print function -WpaLogprocPtr wpa_logproc_ptr = NULL; #else @@ -226,11 +164,18 @@ EapSmGetBEKFuncPtr swc_get_BEK_ptr; * Globals * **************************/ +/* + * Yes, this being static sinks ... anyway,should be inside + * SupplicantConfig, but then we'd go into #include hell and thanks + * but no, thanks. + */ + SupplicantData g_SuppData; SupplicantData g_SuppData1; //[findme][amirs] buffer for 64bit SupplicantConfig g_SuppConfig1; //[findme][amirs] buffer for 64bit #endif +static struct eap_method_type eap_methods[2]; SupplicantConfig g_SuppConfig; OSAL_dynlib_t g_DSlib = NULL; @@ -331,6 +276,29 @@ void PrintBuff(UINT8* buf, UINT32 len) printf("\n"); } }*/ + + + +/* + * Methods configuration is set in InitSupplicantLibrary() + * + * eap_ctx.eap_config.eap_methods = eap_methods + */ +static +void peer_set_method1(unsigned method) +{ + eap_methods[0].vendor = EAP_VENDOR_IETF; + eap_methods[0].method = method; +} + +static +void peer_set_method2(unsigned method) +{ + eap_methods[1].vendor = EAP_VENDOR_IETF; + eap_methods[1].method = method; +} + + #if defined(WPA_OPEN_SOURCE) // eap_eample source code static struct eap_peer_config * peer_get_config(void *ctx) @@ -506,6 +474,7 @@ wmx_Status_t InitSupplicantLibrary(VOID) smInitRequired = TRUE; #if defined(WPA_OPEN_SOURCE) + memset(&eap_methods, 0, sizeof(eap_methods)); memset(&eap_ctx, 0, sizeof(eap_ctx)); eap_ctx.eap_config.identity = (u8 *) os_strdup("user"); @@ -514,6 +483,7 @@ wmx_Status_t InitSupplicantLibrary(VOID) eap_ctx.eap_config.password_len = 8; eap_ctx.eap_config.ca_cert = (u8 *) os_strdup("ca.pem"); eap_ctx.eap_config.fragment_size = TLS_MAX_SIZE; + eap_ctx.eap_config.eap_methods = eap_methods; memset(&eap_cb, 0, sizeof(eap_cb)); eap_cb.get_config = peer_get_config; @@ -527,7 +497,7 @@ wmx_Status_t InitSupplicantLibrary(VOID) eap_cb.notify_pending = peer_notify_pending; memset(&eap_conf, 0, sizeof(eap_conf)); - eap_ctx.eap = eap_peer_sm_init_func(&eap_ctx, &eap_cb, &eap_ctx, &eap_conf); + eap_ctx.eap = eap_peer_sm_init(&eap_ctx, &eap_cb, &eap_ctx, &eap_conf); if (eap_ctx.eap == NULL) return WMX_ST_FAIL; @@ -648,30 +618,30 @@ int eap_sm_peer_step(void) if ( bMethodSet == FALSE) { - eap_peer_register_methods_func(); + eap_peer_register_methods(); bMethodSet = TRUE; } - res = eap_peer_sm_step_func(eap_ctx.eap); + res = eap_peer_sm_step(eap_ctx.eap); if (eap_ctx.eapResp) { struct wpabuf *resp; eap_ctx.eapResp = FALSE; - resp = eap_get_eapRespData_func(eap_ctx.eap); + resp = eap_get_eapRespData(eap_ctx.eap); if (resp) { Opensource_SupAgent_SendEapResponse(wpabuf_head(resp), wpabuf_len(resp)); - wpabuf_free_func(resp); + wpabuf_free(resp); } } if (eap_ctx.eapSuccess) { res = 0; - if (eap_key_available_func(eap_ctx.eap)) { + if (eap_key_available(eap_ctx.eap)) { const u8 *key; size_t key_len; - key = eap_get_eapKeyData_func(eap_ctx.eap, &key_len); - wpa_hexdump_func(MSG_DEBUG, "EAP keying material", + key = eap_get_eapKeyData(eap_ctx.eap, &key_len); + wpa_hexdump(MSG_DEBUG, "EAP keying material", key, key_len); memcpy(eap_ctx.MskKey,key,key_len); eap_ctx.MskKeyActualLen = key_len; @@ -685,8 +655,8 @@ void eap_sm_peer_rx(const u8 *data, size_t data_len) { /* Make received EAP message available to the EAP library */ eap_ctx.eapReq = TRUE; - wpabuf_free_func(eap_ctx.eapReqData); - eap_ctx.eapReqData = wpabuf_alloc_copy_func(data, data_len); + wpabuf_free(eap_ctx.eapReqData); + eap_ctx.eapReqData = wpabuf_alloc_copy(data, data_len); } #else // for DEBUG @@ -1147,9 +1117,9 @@ void ResetSupplicantLibrary() TRACE(TR_MOD_SUPPLICANT_AGENT, TR_SEV_INFO,"Supplicant: Reset library - end"); #else if( bMethodSet == TRUE ){ - eap_peer_sm_deinit_func(eap_ctx.eap); - eap_peer_unregister_methods_func(); - wpabuf_free_func(eap_ctx.eapReqData); + eap_peer_sm_deinit(eap_ctx.eap); + eap_peer_unregister_methods(); + wpabuf_free(eap_ctx.eapReqData); FreeIfAllocated(eap_ctx.eap_config.identity); FreeIfAllocated(eap_ctx.eap_config.anonymous_identity); @@ -1227,33 +1197,6 @@ wmx_Status_t LoadSupplicantLibrary() swc_set_tls_function_table_ptr = (EapSetTlsFunctionTable)OSAL_find_symbol(g_DSlib, "swc_config_use_external_tls"); swc_get_BEK_ptr = (EapSmGetBEKFuncPtr)OSAL_find_symbol(g_DSlib, "swc_eap_get_BEK_data"); aaaamirswc_eap_sm_init_ptr =swc_eap_sm_init_ptr; //[findme][amirs] buffer for 64bit -#else -// helper functions - wpabuf_alloc_copy_func = (wpabuf_alloc_copy_ptr)OSAL_find_symbol(g_DSlib, "wpabuf_alloc_copy"); - wpabuf_free_func = (wpabuf_free_ptr)OSAL_find_symbol(g_DSlib, "wpabuf_free"); - wpa_hexdump_func = (wpa_hexdump_ptr)OSAL_find_symbol(g_DSlib, "wpa_hexdump"); - -// eap methods - eap_key_available_func = (eap_key_available_ptr)OSAL_find_symbol(g_DSlib, "eap_key_available"); - eap_get_eapKeyData_func = (eap_get_eapKeyData_ptr)OSAL_find_symbol(g_DSlib, "eap_get_eapKeyData"); - eap_get_eapRespData_func= (eap_get_eapRespData_ptr)OSAL_find_symbol(g_DSlib, "eap_get_eapRespData"); - -// peer functions - eap_peer_register_methods_func = (eap_peer_register_methods_ptr)OSAL_find_symbol(g_DSlib, "eap_peer_register_methods"); - eap_peer_sm_init_func = (eap_peer_sm_init_ptr)OSAL_find_symbol(g_DSlib, "eap_peer_sm_init"); - eap_peer_sm_step_func = (eap_peer_sm_step_ptr)OSAL_find_symbol(g_DSlib, "eap_peer_sm_step"); - eap_peer_sm_deinit_func = (eap_peer_sm_deinit_ptr)OSAL_find_symbol(g_DSlib, "eap_peer_sm_deinit"); - eap_peer_unregister_methods_func= (eap_peer_unregister_methods_ptr)OSAL_find_symbol(g_DSlib, "eap_peer_unregister_methods"); - - eap_peer_set_method_func = (eap_peer_set_method_ptr)OSAL_find_symbol(g_DSlib, "eap_peer_set_method"); - -//tls functions - tls_init_func = (tls_init_ptr)OSAL_find_symbol(g_DSlib, "tls_init"); - tls_global_set_params_func = (tls_global_set_params_ptr)OSAL_find_symbol(g_DSlib, "tls_global_set_params"); - tls_global_set_verify_func = (tls_global_set_verify_ptr)OSAL_find_symbol(g_DSlib, "tls_global_set_verify"); - tls_deinit_func = (tls_deinit_ptr)OSAL_find_symbol(g_DSlib, "tls_deinit"); -// print fucntion - wpa_logproc_ptr = (WpaLogprocPtr)OSAL_find_symbol(g_DSlib, "wpa_printf"); #endif return WMX_ST_OK; } @@ -1806,16 +1749,15 @@ void Supplicant_InternalHandler( UINT32 internalRequestID, void *buffer, UINT32 Sup_PrintTrace((char*)eap_ctx.eap_config.password, "Password", prefix); break; case SUP_OPCODE_SET_EAP_METHOD: - g_SuppConfig.eapmethod = SupAgent_ExtractUnsignedInt(buffer); - eapmethod = SupAgent_ExtractUnsignedInt(buffer); - eap_peer_set_method_func(eapmethod); + g_SuppConfig.eapmethod = eapmethod; + peer_set_method1(eapmethod); bMethodSet = TRUE; break; case SUP_OPCODE_SET_PHASE2_METHOD: - g_SuppConfig.phase2 = SupAgent_ExtractUnsignedInt(buffer); eapmethod = SupAgent_ExtractUnsignedInt(buffer); - eap_peer_set_method_func(eapmethod); + g_SuppConfig.phase2 = eapmethod; + peer_set_method2(eapmethod); break; case SUP_OPCODE_SET_TLS_CA_CERT: FreeIfAllocated(g_SuppConfig.cacert); @@ -2091,7 +2033,7 @@ void ReassignSupConfig() } if (g_SuppConfig.eapmethod) { - eap_peer_set_method_func(g_SuppConfig.eapmethod); + peer_set_method1(g_SuppConfig.eapmethod); } if (g_SuppConfig.cacert) { @@ -2351,13 +2293,6 @@ Finalize: wmx_Status_t DelayLoadSupplicant() { wmx_Status_t status = WMX_ST_OK; - status = LoadSupplicantLibrary(); // Load open source supplicant - if (status != WMX_ST_OK) - { - TRACE(TR_MOD_SUPPLICANT_AGENT, TR_SEV_ERR, ("Can't load Supplicant library")); - return status; - } - status = InitSupplicantLibrary(); // Init the open source supplicant if (status != WMX_ST_OK) { |