Maximum packet size parameter is now optional
This commit is contained in:
parent
0a0a28730b
commit
198b9a576e
@ -84,7 +84,7 @@ namespace eap
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize);
|
_In_opt_ DWORD dwMaxSendPacketSize = MAXDWORD);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Ends an EAP authentication session for the EAP method.
|
/// Ends an EAP authentication session for the EAP method.
|
||||||
|
@ -62,7 +62,7 @@ void eap::method::begin_session(
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize)
|
_In_opt_ DWORD dwMaxSendPacketSize)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(dwFlags);
|
UNREFERENCED_PARAMETER(dwFlags);
|
||||||
UNREFERENCED_PARAMETER(pAttributeArray);
|
UNREFERENCED_PARAMETER(pAttributeArray);
|
||||||
|
@ -77,7 +77,7 @@ namespace eap
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize);
|
_In_opt_ DWORD dwMaxSendPacketSize = MAXDWORD);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Processes a packet received by EapHost from a supplicant.
|
/// Processes a packet received by EapHost from a supplicant.
|
||||||
|
@ -65,7 +65,7 @@ void eap::method_mschapv2::begin_session(
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize)
|
_In_opt_ DWORD dwMaxSendPacketSize)
|
||||||
{
|
{
|
||||||
method::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
|
method::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ namespace eap
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize);
|
_In_opt_ DWORD dwMaxSendPacketSize = MAXDWORD);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Processes a packet received by EapHost from a supplicant.
|
/// Processes a packet received by EapHost from a supplicant.
|
||||||
|
@ -65,7 +65,7 @@ void eap::method_pap::begin_session(
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize)
|
_In_opt_ DWORD dwMaxSendPacketSize)
|
||||||
{
|
{
|
||||||
method::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
|
method::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ namespace eap
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize);
|
_In_opt_ DWORD dwMaxSendPacketSize = MAXDWORD);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Processes a packet received by EapHost from a supplicant.
|
/// Processes a packet received by EapHost from a supplicant.
|
||||||
|
@ -190,7 +190,7 @@ void eap::method_tls::begin_session(
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize)
|
_In_opt_ DWORD dwMaxSendPacketSize)
|
||||||
{
|
{
|
||||||
method::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
|
method::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ namespace eap
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize);
|
_In_opt_ DWORD dwMaxSendPacketSize = MAXDWORD);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Ends an EAP authentication session for the EAP method.
|
/// Ends an EAP authentication session for the EAP method.
|
||||||
@ -147,7 +147,5 @@ namespace eap
|
|||||||
} m_version; ///< EAP-TTLS version
|
} m_version; ///< EAP-TTLS version
|
||||||
|
|
||||||
std::unique_ptr<method> m_inner; ///< Inner authentication method
|
std::unique_ptr<method> m_inner; ///< Inner authentication method
|
||||||
unsigned char m_inner_packet_id; ///< Inner packet ID
|
|
||||||
DWORD m_size_inner_packet_max; ///< Maximum size of inner response packet
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -32,21 +32,17 @@ eap::method_ttls::method_ttls(_In_ module &module, _In_ config_method_ttls &cfg,
|
|||||||
m_cfg(cfg),
|
m_cfg(cfg),
|
||||||
m_cred(cred),
|
m_cred(cred),
|
||||||
m_version(version_0),
|
m_version(version_0),
|
||||||
m_inner_packet_id(0),
|
|
||||||
m_size_inner_packet_max(0),
|
|
||||||
method_tls(module, cfg, cred)
|
method_tls(module, cfg, cred)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
eap::method_ttls::method_ttls(_Inout_ method_ttls &&other) :
|
eap::method_ttls::method_ttls(_Inout_ method_ttls &&other) :
|
||||||
m_cfg ( other.m_cfg ),
|
m_cfg ( other.m_cfg ),
|
||||||
m_cred ( other.m_cred ),
|
m_cred ( other.m_cred ),
|
||||||
m_version (std::move(other.m_version )),
|
m_version (std::move(other.m_version)),
|
||||||
m_inner (std::move(other.m_inner )),
|
m_inner (std::move(other.m_inner )),
|
||||||
m_inner_packet_id (std::move(other.m_inner_packet_id )),
|
method_tls(std::move(other ))
|
||||||
m_size_inner_packet_max(std::move(other.m_size_inner_packet_max)),
|
|
||||||
method_tls (std::move(other ))
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,11 +50,9 @@ eap::method_ttls::method_ttls(_Inout_ method_ttls &&other) :
|
|||||||
eap::method_ttls& eap::method_ttls::operator=(_Inout_ method_ttls &&other)
|
eap::method_ttls& eap::method_ttls::operator=(_Inout_ method_ttls &&other)
|
||||||
{
|
{
|
||||||
if (this != std::addressof(other)) {
|
if (this != std::addressof(other)) {
|
||||||
(method_tls&)*this = std::move(other );
|
(method_tls&)*this = std::move(other );
|
||||||
m_version = std::move(other.m_version );
|
m_version = std::move(other.m_version);
|
||||||
m_inner = std::move(other.m_inner );
|
m_inner = std::move(other.m_inner );
|
||||||
m_inner_packet_id = std::move(other.m_inner_packet_id );
|
|
||||||
m_size_inner_packet_max = std::move(other.m_size_inner_packet_max);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
@ -69,7 +63,7 @@ void eap::method_ttls::begin_session(
|
|||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
_In_ DWORD dwMaxSendPacketSize)
|
_In_opt_ DWORD dwMaxSendPacketSize)
|
||||||
{
|
{
|
||||||
method_tls::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
|
method_tls::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
|
||||||
|
|
||||||
@ -79,8 +73,7 @@ void eap::method_ttls::begin_session(
|
|||||||
case eap_type_legacy_mschapv2: m_inner.reset(new method_mschapv2(m_module, (config_method_mschapv2&)*m_cfg.m_inner, (credentials_mschapv2&)*m_cred.m_inner.get())); break;
|
case eap_type_legacy_mschapv2: m_inner.reset(new method_mschapv2(m_module, (config_method_mschapv2&)*m_cfg.m_inner, (credentials_mschapv2&)*m_cred.m_inner.get())); break;
|
||||||
default: throw invalid_argument(__FUNCTION__ " Unsupported inner authentication method.");
|
default: throw invalid_argument(__FUNCTION__ " Unsupported inner authentication method.");
|
||||||
}
|
}
|
||||||
m_inner->begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, m_size_inner_packet_max = dwMaxSendPacketSize); // TODO: Maximum inner packet size should have subtracted TLS overhead
|
m_inner->begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, MAXDWORD);
|
||||||
m_inner_packet_id = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -243,8 +236,8 @@ void eap::method_ttls::process_application_data(_In_bytecount_(size_msg) const v
|
|||||||
if (FAILED(status))
|
if (FAILED(status))
|
||||||
throw sec_runtime_error(status, __FUNCTION__ " Error getting Schannel required encryption sizes.");
|
throw sec_runtime_error(status, __FUNCTION__ " Error getting Schannel required encryption sizes.");
|
||||||
|
|
||||||
sanitizing_blob data(sizes.cbHeader + m_size_inner_packet_max + sizes.cbTrailer, 0);
|
sanitizing_blob data(sizes.cbHeader + sizes.cbMaximumMessage + sizes.cbTrailer, 0);
|
||||||
DWORD size_data = m_size_inner_packet_max;
|
DWORD size_data = sizes.cbMaximumMessage;
|
||||||
unsigned char *ptr_data = data.data() + sizes.cbHeader;
|
unsigned char *ptr_data = data.data() + sizes.cbHeader;
|
||||||
#endif
|
#endif
|
||||||
m_inner->get_response_packet(ptr_data, &size_data);
|
m_inner->get_response_packet(ptr_data, &size_data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user