diff --git a/lib/TTLS/src/Method.cpp b/lib/TTLS/src/Method.cpp index c56acb9..e824931 100644 --- a/lib/TTLS/src/Method.cpp +++ b/lib/TTLS/src/Method.cpp @@ -64,12 +64,19 @@ void eap::method_ttls::begin_session( method_tls::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize); // Initialize inner method. - auto * cfg_inner = dynamic_cast(m_cfg ).m_inner.get(); - auto *cred_inner = dynamic_cast(m_cred).m_inner.get(); - switch (cfg_inner->get_method_id()) { - case eap_type_legacy_pap : m_inner.reset(new method_pap (m_module, dynamic_cast(*cfg_inner), dynamic_cast(*cred_inner))); break; - case eap_type_legacy_mschapv2: m_inner.reset(new method_mschapv2(m_module, dynamic_cast(*cfg_inner), dynamic_cast(*cred_inner))); break; - default: throw invalid_argument(__FUNCTION__ " Unsupported inner authentication method."); + auto * cfg_inner = dynamic_cast(m_cfg ).m_inner.get(); + auto *cred_inner = dynamic_cast(m_cred).m_inner.get(); + auto *cfg_inner_eapmsg = dynamic_cast(cfg_inner); + if (!cfg_inner_eapmsg) { + // Native inner methods + switch (cfg_inner->get_method_id()) { + case eap_type_legacy_pap : m_inner.reset(new method_pap (m_module, dynamic_cast(*cfg_inner), dynamic_cast(*cred_inner))); break; + case eap_type_legacy_mschapv2: m_inner.reset(new method_mschapv2(m_module, dynamic_cast(*cfg_inner), dynamic_cast(*cred_inner))); break; + default: throw invalid_argument(__FUNCTION__ " Unsupported inner authentication method."); + } + } else { + // EapHost inner method + m_inner.reset(new method_eapmsg(m_module, *cfg_inner_eapmsg, dynamic_cast(*cred_inner))); } m_inner->begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, MAXDWORD); } diff --git a/lib/TTLS/src/StdAfx.h b/lib/TTLS/src/StdAfx.h index 6b73967..4082ad0 100644 --- a/lib/TTLS/src/StdAfx.h +++ b/lib/TTLS/src/StdAfx.h @@ -33,6 +33,9 @@ #include "../../MSCHAPv2/include/Method.h" #include "../../MSCHAPv2/include/MSCHAPv2.h" +#include "../../EAPMsg/include/Config.h" +#include "../../EAPMsg/include/Method.h" + #include "../../EAPBase/include/EAPXML.h" #include diff --git a/lib/TTLS_UI/src/TTLS_UI.cpp b/lib/TTLS_UI/src/TTLS_UI.cpp index 687d981..17f1c62 100644 --- a/lib/TTLS_UI/src/TTLS_UI.cpp +++ b/lib/TTLS_UI/src/TTLS_UI.cpp @@ -238,15 +238,15 @@ bool wxTTLSConfigWindow::TransferDataToWindow() auto *cfg_inner_eapmsg = dynamic_cast(cfg_ttls.m_inner.get()); if (!cfg_inner_eapmsg) { - // Legacy inner methods + // Native inner methods switch (cfg_ttls.m_inner->get_method_id()) { case winstd::eap_type_legacy_pap: - m_cfg_pap = *(eap::config_method_pap*)cfg_ttls.m_inner.get(); + m_cfg_pap = dynamic_cast(*cfg_ttls.m_inner); m_inner_type->SetSelection(0); // 0=PAP break; case winstd::eap_type_legacy_mschapv2: - m_cfg_mschapv2 = *(eap::config_method_mschapv2*)cfg_ttls.m_inner.get(); + m_cfg_mschapv2 = dynamic_cast(*cfg_ttls.m_inner); m_inner_type->SetSelection(1); // 1=MSCHAPv2 break; @@ -254,7 +254,7 @@ bool wxTTLSConfigWindow::TransferDataToWindow() wxFAIL_MSG(wxT("Unsupported inner authentication method type.")); } } else { - // EAP inner method + // EapHost inner method m_cfg_eapmsg = *cfg_inner_eapmsg; m_inner_type->SetSelection(2); // 2=EAP }