EAP modules divided to libraries
This commit is contained in:
parent
218aa187f6
commit
cf7ca9c8e9
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
/*.opensdf
|
/*.opensdf
|
||||||
/*.suo
|
/*.suo
|
||||||
/*.sdf
|
/*.sdf
|
||||||
|
/doc
|
||||||
/ipch
|
/ipch
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<AdditionalIncludeDirectories>..\EAPMethods\EAPMethodEvents\temp\EAPMethodEvents.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>EAPMETHOD_TYPE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
|
Binary file not shown.
@ -86,8 +86,6 @@
|
|||||||
<ClInclude Include="StdAfx.h" />
|
<ClInclude Include="StdAfx.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\EAPMethods\src\EAP.cpp" />
|
|
||||||
<ClCompile Include="..\EAPMethods\src\PAP.cpp" />
|
|
||||||
<ClCompile Include="Main.cpp" />
|
<ClCompile Include="Main.cpp" />
|
||||||
<ClCompile Include="StdAfx.cpp">
|
<ClCompile Include="StdAfx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
@ -100,9 +98,15 @@
|
|||||||
<ResourceCompile Include="CredWrite.rc" />
|
<ResourceCompile Include="CredWrite.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\EAPMethods\EAPMethodEvents\EAPMethodEvents.vcxproj">
|
<ProjectReference Include="..\lib\EAPBase\build\EAPBase.vcxproj">
|
||||||
|
<Project>{ad6816a0-9600-4e01-8c49-39d03d1e791f}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\lib\Events\build\Events.vcxproj">
|
||||||
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\lib\PAP\build\PAP.vcxproj">
|
||||||
|
<Project>{36b0cf8a-7794-46c3-8099-825ba962b4c7}</Project>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\lib\WinStd\build\WinStd.vcxproj">
|
<ProjectReference Include="..\lib\WinStd\build\WinStd.vcxproj">
|
||||||
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
|
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
@ -26,12 +26,6 @@
|
|||||||
<ClCompile Include="Main.cpp">
|
<ClCompile Include="Main.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\EAPMethods\src\EAP.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\EAPMethods\src\PAP.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="CredWrite.rc">
|
<ResourceCompile Include="CredWrite.rc">
|
||||||
|
@ -20,12 +20,10 @@
|
|||||||
|
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
#pragma comment(lib, "Crypt32.lib")
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace winstd;
|
using namespace winstd;
|
||||||
|
|
||||||
eap::module g_module;
|
eap::module g_module(eap::type_undefined);
|
||||||
|
|
||||||
|
|
||||||
static int CredWrite()
|
static int CredWrite()
|
||||||
|
@ -20,17 +20,30 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../include/Version.h"
|
#include "../lib/PAP/include/Credentials.h"
|
||||||
|
#include "../lib/EAPBase/include/Module.h"
|
||||||
#include "../EAPMethods/include/EAP.h"
|
|
||||||
#include "../EAPMethods/include/PAP.h"
|
|
||||||
|
|
||||||
|
#include <WinStd/Common.h>
|
||||||
#include <WinStd/Base64.h>
|
#include <WinStd/Base64.h>
|
||||||
#include <WinStd/Cred.h>
|
|
||||||
#include <WinStd/Crypt.h>
|
|
||||||
#include <WinStd/Win.h>
|
#include <WinStd/Win.h>
|
||||||
|
|
||||||
#include <tchar.h>
|
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
#include <eaptypes.h> // Must include after <Windows.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
//#include "../include/Version.h"
|
||||||
|
//
|
||||||
|
//#include "../EAPMethods/include/EAP.h"
|
||||||
|
//#include "../EAPMethods/include/PAP.h"
|
||||||
|
//
|
||||||
|
//#include <WinStd/Base64.h>
|
||||||
|
//#include <WinStd/Cred.h>
|
||||||
|
//#include <WinStd/Crypt.h>
|
||||||
|
//#include <WinStd/Win.h>
|
||||||
|
//
|
||||||
|
//#include <tchar.h>
|
||||||
|
//#include <Windows.h>
|
||||||
|
//
|
||||||
|
//#include <memory>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Doxyfile 1.8.7
|
# Doxyfile 1.8.7
|
||||||
|
|
||||||
# This file describes the settings to be used by the documentation system
|
# This file describes the settings to be used by the documentation system
|
||||||
# doxygen (www.doxygen.org) for a project.
|
# doxygen (www.doxygen.org) for a project.
|
||||||
@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
|
|||||||
# title of most generated pages and in a few other places.
|
# title of most generated pages and in a few other places.
|
||||||
# The default value is: My Project.
|
# The default value is: My Project.
|
||||||
|
|
||||||
PROJECT_NAME = "EAPModules"
|
PROJECT_NAME = "GÉANTLink"
|
||||||
|
|
||||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
@ -44,7 +44,7 @@ PROJECT_NUMBER =
|
|||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
# quick idea about the purpose of the project. Keep the description short.
|
# quick idea about the purpose of the project. Keep the description short.
|
||||||
|
|
||||||
PROJECT_BRIEF = "EAP Modules"
|
PROJECT_BRIEF = "EAP Supplicant for Windows"
|
||||||
|
|
||||||
# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
|
# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
|
||||||
# the documentation. The maximum height of the logo should not exceed 55 pixels
|
# the documentation. The maximum height of the logo should not exceed 55 pixels
|
||||||
@ -718,7 +718,7 @@ WARN_IF_UNDOCUMENTED = YES
|
|||||||
# markup commands wrongly.
|
# markup commands wrongly.
|
||||||
# The default value is: YES.
|
# The default value is: YES.
|
||||||
|
|
||||||
WARN_IF_DOC_ERROR = YES
|
WARN_IF_DOC_ERROR = NO
|
||||||
|
|
||||||
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
|
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
|
||||||
# are documented, but have no documentation for their parameters or return
|
# are documented, but have no documentation for their parameters or return
|
||||||
@ -726,7 +726,7 @@ WARN_IF_DOC_ERROR = YES
|
|||||||
# documentation, but not about the absence of documentation.
|
# documentation, but not about the absence of documentation.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
WARN_NO_PARAMDOC = NO
|
WARN_NO_PARAMDOC = YES
|
||||||
|
|
||||||
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
|
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
|
||||||
# can produce. The string should contain the $file, $line, and $text tags, which
|
# can produce. The string should contain the $file, $line, and $text tags, which
|
||||||
@ -789,7 +789,11 @@ RECURSIVE = YES
|
|||||||
# Note that relative paths are relative to the directory from which doxygen is
|
# Note that relative paths are relative to the directory from which doxygen is
|
||||||
# run.
|
# run.
|
||||||
|
|
||||||
EXCLUDE = res
|
EXCLUDE = \
|
||||||
|
lib\EAPBase_UI\res \
|
||||||
|
lib\TLS_UI\res \
|
||||||
|
lib\TTLS_UI\res \
|
||||||
|
lib\WinStd
|
||||||
|
|
||||||
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
||||||
# directories that are symbolic links (a Unix file system feature) are excluded
|
# directories that are symbolic links (a Unix file system feature) are excluded
|
1
EAPMethods/.gitignore
vendored
1
EAPMethods/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
/doc
|
|
@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ImportGroup Label="PropertySheets">
|
|
||||||
<Import Project="..\..\include\ResourceDLL.props" />
|
|
||||||
<Import Project="..\build\Common.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup />
|
|
||||||
<ItemDefinitionGroup />
|
|
||||||
<ItemGroup />
|
|
||||||
</Project>
|
|
Binary file not shown.
@ -79,20 +79,10 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\include\EAP.h" />
|
|
||||||
<ClInclude Include="..\include\EAPSerial.h" />
|
|
||||||
<ClInclude Include="..\include\TLS.h" />
|
|
||||||
<ClInclude Include="..\include\TTLS.h" />
|
|
||||||
<ClInclude Include="..\include\EAPXML.h" />
|
|
||||||
<ClInclude Include="..\include\PAP.h" />
|
|
||||||
<ClInclude Include="StdAfx.h" />
|
<ClInclude Include="StdAfx.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\src\EAP.cpp" />
|
|
||||||
<ClCompile Include="..\src\TLS.cpp" />
|
|
||||||
<ClCompile Include="..\src\TTLS.cpp" />
|
|
||||||
<ClCompile Include="..\src\Main.cpp" />
|
<ClCompile Include="..\src\Main.cpp" />
|
||||||
<ClCompile Include="..\src\PAP.cpp" />
|
|
||||||
<ClCompile Include="StdAfx.cpp">
|
<ClCompile Include="StdAfx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
@ -104,12 +94,24 @@
|
|||||||
<ResourceCompile Include="EAPTTLS.rc" />
|
<ResourceCompile Include="EAPTTLS.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\lib\EAPBase\build\EAPBase.vcxproj">
|
||||||
|
<Project>{ad6816a0-9600-4e01-8c49-39d03d1e791f}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\Events\build\Events.vcxproj">
|
||||||
|
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\PAP\build\PAP.vcxproj">
|
||||||
|
<Project>{36b0cf8a-7794-46c3-8099-825ba962b4c7}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\TLS\build\TLS.vcxproj">
|
||||||
|
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\TTLS\build\TTLS.vcxproj">
|
||||||
|
<Project>{ee0ef0d9-a475-4038-8637-5754724f65b0}</Project>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\lib\WinStd\build\WinStd.vcxproj">
|
<ProjectReference Include="..\..\lib\WinStd\build\WinStd.vcxproj">
|
||||||
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
|
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\EAPMethodEvents\EAPMethodEvents.vcxproj">
|
|
||||||
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\build\EAPMethod.def" />
|
<None Include="..\build\EAPMethod.def" />
|
||||||
|
@ -18,24 +18,6 @@
|
|||||||
<ClInclude Include="StdAfx.h">
|
<ClInclude Include="StdAfx.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\include\TTLS.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\PAP.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\EAPXML.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\TLS.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\EAP.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\EAPSerial.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="StdAfx.cpp">
|
<ClCompile Include="StdAfx.cpp">
|
||||||
@ -44,18 +26,6 @@
|
|||||||
<ClCompile Include="..\src\Main.cpp">
|
<ClCompile Include="..\src\Main.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\PAP.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\EAP.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\TLS.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\TTLS.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="EAPTTLS.rc">
|
<ResourceCompile Include="EAPTTLS.rc">
|
||||||
|
@ -20,31 +20,5 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../include/Version.h"
|
#include "../../lib/TTLS/include/Module.h"
|
||||||
|
#include "../../lib/TTLS/include/Session.h"
|
||||||
#include "../include/EAP.h"
|
|
||||||
#include "../include/EAPSerial.h"
|
|
||||||
#include "../include/TLS.h"
|
|
||||||
#include "../include/TTLS.h"
|
|
||||||
#include "../include/EAPXML.h"
|
|
||||||
#include "../include/PAP.h"
|
|
||||||
|
|
||||||
#include <WinStd/Base64.h>
|
|
||||||
#include <WinStd/Cred.h>
|
|
||||||
#include <WinStd/Crypt.h>
|
|
||||||
#include <WinStd/ETW.h>
|
|
||||||
#include <WinStd/Hex.h>
|
|
||||||
#include <WinStd/Win.h>
|
|
||||||
|
|
||||||
#include <eaptypes.h>
|
|
||||||
#include <eapmethodpeerapis.h>
|
|
||||||
|
|
||||||
#include <Commctrl.h>
|
|
||||||
#include <Msi.h>
|
|
||||||
#include <tchar.h>
|
|
||||||
#include <Shlwapi.h>
|
|
||||||
#include <Windows.h>
|
|
||||||
|
|
||||||
#include <EAPMethodETW.h>
|
|
||||||
|
|
||||||
#pragma comment(lib, "Crypt32.lib")
|
|
||||||
|
Binary file not shown.
@ -79,33 +79,10 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\include\EAP.h" />
|
|
||||||
<ClInclude Include="..\include\EAPXML.h" />
|
|
||||||
<ClInclude Include="..\include\EAP_UI.h" />
|
|
||||||
<ClInclude Include="..\include\PAP_UI.h" />
|
|
||||||
<ClInclude Include="..\include\TLS.h" />
|
|
||||||
<ClInclude Include="..\include\TTLS.h" />
|
|
||||||
<ClInclude Include="..\include\TTLS_UI.h" />
|
|
||||||
<ClInclude Include="..\include\PAP.h" />
|
|
||||||
<ClInclude Include="..\include\TLS_UI.h" />
|
|
||||||
<ClInclude Include="..\res\wxEAP_UI.h" />
|
|
||||||
<ClInclude Include="StdAfx.h" />
|
<ClInclude Include="StdAfx.h" />
|
||||||
<ClInclude Include="..\res\wxTLS_UI.h" />
|
|
||||||
<ClInclude Include="..\res\wxTTLS_UI.h" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\res\wxEAP_UI.cpp" />
|
|
||||||
<ClCompile Include="..\res\wxTLS_UI.cpp" />
|
|
||||||
<ClCompile Include="..\res\wxTTLS_UI.cpp" />
|
|
||||||
<ClCompile Include="..\src\EAP.cpp" />
|
|
||||||
<ClCompile Include="..\src\PAP_UI.cpp" />
|
|
||||||
<ClCompile Include="..\src\TLS.cpp" />
|
|
||||||
<ClCompile Include="..\src\TTLS.cpp" />
|
|
||||||
<ClCompile Include="..\src\TTLS_UI.cpp" />
|
|
||||||
<ClCompile Include="..\src\Main_UI.cpp" />
|
<ClCompile Include="..\src\Main_UI.cpp" />
|
||||||
<ClCompile Include="..\src\PAP.cpp" />
|
|
||||||
<ClCompile Include="..\src\EAP_UI.cpp" />
|
|
||||||
<ClCompile Include="..\src\TLS_UI.cpp" />
|
|
||||||
<ClCompile Include="StdAfx.cpp">
|
<ClCompile Include="StdAfx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
@ -117,18 +94,39 @@
|
|||||||
<ResourceCompile Include="EAPTTLSUI.rc" />
|
<ResourceCompile Include="EAPTTLSUI.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\lib\EAPBase\build\EAPBase.vcxproj">
|
||||||
|
<Project>{ad6816a0-9600-4e01-8c49-39d03d1e791f}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\EAPBase_UI\build\EAPBase_UI.vcxproj">
|
||||||
|
<Project>{d4b54856-be1f-4937-a8f7-495125be76be}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\Events\build\Events.vcxproj">
|
||||||
|
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\PAP\build\PAP.vcxproj">
|
||||||
|
<Project>{36b0cf8a-7794-46c3-8099-825ba962b4c7}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\PAP_UI\build\PAP_UI.vcxproj">
|
||||||
|
<Project>{3d309c2e-64ab-4bc4-a16d-468571a2bc1a}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\TLS\build\TLS.vcxproj">
|
||||||
|
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\TLS_UI\build\TLS_UI.vcxproj">
|
||||||
|
<Project>{9a25c261-8ade-4938-8393-e857ef0e37e9}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\TTLS\build\TTLS.vcxproj">
|
||||||
|
<Project>{ee0ef0d9-a475-4038-8637-5754724f65b0}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\TTLS_UI\build\TTLS_UI.vcxproj">
|
||||||
|
<Project>{42f0f0f4-c928-4860-a4e4-94991c2c3d90}</Project>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\lib\WinStd\build\WinStd.vcxproj">
|
<ProjectReference Include="..\..\lib\WinStd\build\WinStd.vcxproj">
|
||||||
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
|
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\EAPMethodEvents\EAPMethodEvents.vcxproj">
|
|
||||||
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\build\EAPMethodUI.def" />
|
<None Include="..\build\EAPMethodUI.def" />
|
||||||
<None Include="..\res\wxEAP_UI.fbp" />
|
|
||||||
<None Include="..\res\wxTLS_UI.fbp" />
|
|
||||||
<None Include="..\res\wxTTLS_UI.fbp" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
@ -13,97 +13,19 @@
|
|||||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="Header Files\wx">
|
|
||||||
<UniqueIdentifier>{51f0404d-9280-4fcc-8138-5d1f815ce568}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Source Files\wx">
|
|
||||||
<UniqueIdentifier>{9befee7a-5dff-41dd-b080-4e26ccb19a7f}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Resource Files\wx">
|
|
||||||
<UniqueIdentifier>{0ec1840b-101c-415a-91c6-2c7eb4530c15}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="StdAfx.h">
|
<ClInclude Include="StdAfx.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\include\TTLS.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\PAP.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\TLS_UI.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\TLS.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\res\wxEAP_UI.h">
|
|
||||||
<Filter>Header Files\wx</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\res\wxTLS_UI.h">
|
|
||||||
<Filter>Header Files\wx</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\res\wxTTLS_UI.h">
|
|
||||||
<Filter>Header Files\wx</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\EAP.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\EAP_UI.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\TTLS_UI.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\EAPXML.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\PAP_UI.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="StdAfx.cpp">
|
<ClCompile Include="StdAfx.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\PAP.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\res\wxEAP_UI.cpp">
|
|
||||||
<Filter>Source Files\wx</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\res\wxTLS_UI.cpp">
|
|
||||||
<Filter>Source Files\wx</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\res\wxTTLS_UI.cpp">
|
|
||||||
<Filter>Source Files\wx</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\EAP.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\EAP_UI.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\TLS.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\TLS_UI.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\TTLS.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\TTLS_UI.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\Main_UI.cpp">
|
<ClCompile Include="..\src\Main_UI.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\PAP_UI.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="EAPTTLSUI.rc">
|
<ResourceCompile Include="EAPTTLSUI.rc">
|
||||||
@ -114,14 +36,5 @@
|
|||||||
<None Include="..\build\EAPMethodUI.def">
|
<None Include="..\build\EAPMethodUI.def">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</None>
|
</None>
|
||||||
<None Include="..\res\wxEAP_UI.fbp">
|
|
||||||
<Filter>Resource Files\wx</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\res\wxTTLS_UI.fbp">
|
|
||||||
<Filter>Resource Files\wx</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\res\wxTLS_UI.fbp">
|
|
||||||
<Filter>Resource Files\wx</Filter>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -18,48 +18,6 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _CRT_SECURE_NO_WARNINGS
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../include/Version.h"
|
#include "../../lib/TTLS_UI/include/Module.h"
|
||||||
|
|
||||||
#include "../include/EAP.h"
|
|
||||||
#include "../include/EAP_UI.h"
|
|
||||||
#include "../include/EAPSerial.h"
|
|
||||||
#include "../include/EAPXML.h"
|
|
||||||
#include "../include/TLS.h"
|
|
||||||
#include "../include/TLS_UI.h"
|
|
||||||
#include "../include/TTLS.h"
|
|
||||||
#include "../include/TTLS_UI.h"
|
|
||||||
#include "../include/PAP.h"
|
|
||||||
#include "../include/PAP_UI.h"
|
|
||||||
|
|
||||||
#include "../res/wxTLS_UI.h"
|
|
||||||
#include "../res/wxTTLS_UI.h"
|
|
||||||
|
|
||||||
#include <WinStd/Base64.h>
|
|
||||||
#include <WinStd/Cred.h>
|
|
||||||
#include <WinStd/Crypt.h>
|
|
||||||
#include <WinStd/ETW.h>
|
|
||||||
#include <WinStd/Hex.h>
|
|
||||||
#include <WinStd/Win.h>
|
|
||||||
|
|
||||||
#include <wx/app.h>
|
|
||||||
#include <wx/filedlg.h>
|
|
||||||
#include <wx/init.h>
|
|
||||||
#include <wx/msgdlg.h>
|
|
||||||
|
|
||||||
#include <eaptypes.h>
|
|
||||||
#include <eapmethodpeerapis.h>
|
|
||||||
|
|
||||||
#include <Commctrl.h>
|
|
||||||
#include <cryptuiapi.h>
|
|
||||||
#include <Msi.h>
|
|
||||||
#include <tchar.h>
|
|
||||||
#include <Shlwapi.h>
|
|
||||||
#include <Windows.h>
|
|
||||||
|
|
||||||
#include <EAPMethodETW.h>
|
|
||||||
|
|
||||||
#pragma comment(lib, "Crypt32.lib")
|
|
||||||
|
Binary file not shown.
@ -8,11 +8,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<AdditionalIncludeDirectories>$(ProjectDir);..\EAPMethodEvents\temp\EAPMethodEvents.$(Platform).$(Configuration).$(PlatformToolset);..\include;..\..\lib\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ProjectDir);..\..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\include;..\..\lib\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ResourceCompile>
|
|
||||||
<AdditionalIncludeDirectories>temp\EAPMethodEvents.$(Platform).$(Configuration).$(PlatformToolset);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
</ResourceCompile>
|
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
</Project>
|
</Project>
|
File diff suppressed because it is too large
Load Diff
@ -1,405 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2015-2016 Amebis
|
|
||||||
Copyright 2016 GÉANT
|
|
||||||
|
|
||||||
This file is part of GÉANTLink.
|
|
||||||
|
|
||||||
GÉANTLink is free software: you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
GÉANTLink is distributed in the hope that it will be useful, but
|
|
||||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "EAP.h"
|
|
||||||
#include "EAPSerial.h"
|
|
||||||
#include "TLS.h"
|
|
||||||
#include "PAP.h"
|
|
||||||
|
|
||||||
#include <WinStd/Crypt.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace eap
|
|
||||||
{
|
|
||||||
class config_ttls;
|
|
||||||
class credentials_ttls;
|
|
||||||
class session_ttls;
|
|
||||||
class peer_ttls;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace eapserial
|
|
||||||
{
|
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_ttls &val);
|
|
||||||
inline size_t get_pk_size(const eap::config_ttls &val);
|
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_ttls &val);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
namespace eap
|
|
||||||
{
|
|
||||||
///
|
|
||||||
/// TTLS configuration
|
|
||||||
///
|
|
||||||
class config_ttls : public config_tls
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
/// Constructs configuration
|
|
||||||
///
|
|
||||||
/// \param[in] mod Reference of the EAP module to use for global services
|
|
||||||
///
|
|
||||||
config_ttls(_In_ module &mod);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Copies configuration
|
|
||||||
///
|
|
||||||
/// \param[in] other Configuration to copy from
|
|
||||||
///
|
|
||||||
config_ttls(const _In_ config_ttls &other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Moves configuration
|
|
||||||
///
|
|
||||||
/// \param[in] other Configuration to move from
|
|
||||||
///
|
|
||||||
config_ttls(_Inout_ config_ttls &&other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Destructs configuration
|
|
||||||
///
|
|
||||||
virtual ~config_ttls();
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Copies configuration
|
|
||||||
///
|
|
||||||
/// \param[in] other Configuration to copy from
|
|
||||||
///
|
|
||||||
/// \returns Reference to this object
|
|
||||||
///
|
|
||||||
config_ttls& operator=(const _In_ config_ttls &other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Moves configuration
|
|
||||||
///
|
|
||||||
/// \param[in] other Configuration to move from
|
|
||||||
///
|
|
||||||
/// \returns Reference to this object
|
|
||||||
///
|
|
||||||
config_ttls& operator=(_Inout_ config_ttls &&other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Clones configuration
|
|
||||||
///
|
|
||||||
/// \returns Pointer to cloned configuration
|
|
||||||
///
|
|
||||||
virtual config* clone() const { return new config_ttls(*this); }
|
|
||||||
|
|
||||||
/// \name XML configuration management
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Save configuration to XML document
|
|
||||||
///
|
|
||||||
/// \param[in] pDoc XML document
|
|
||||||
/// \param[in] pConfigRoot Suggested root element for saving configuration
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Load configuration from XML document
|
|
||||||
///
|
|
||||||
/// \param[in] pConfigRoot Root element for loading configuration
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError);
|
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns EAP method type of this configuration
|
|
||||||
///
|
|
||||||
/// \returns `eap::type_ttls`
|
|
||||||
///
|
|
||||||
virtual eap::type_t get_method_id() { return eap::type_ttls; }
|
|
||||||
|
|
||||||
public:
|
|
||||||
config_method *m_inner; ///< Inner authentication configuration
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// TTLS credentials
|
|
||||||
///
|
|
||||||
class credentials_ttls : public credentials_tls
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
/// Constructs credentials
|
|
||||||
///
|
|
||||||
/// \param[in] mod Reference of the EAP module to use for global services
|
|
||||||
///
|
|
||||||
credentials_ttls(_In_ module &mod);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Copies credentials
|
|
||||||
///
|
|
||||||
/// \param[in] other Credentials to copy from
|
|
||||||
///
|
|
||||||
credentials_ttls(_In_ const credentials_ttls &other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Moves credentials
|
|
||||||
///
|
|
||||||
/// \param[in] other Credentials to move from
|
|
||||||
///
|
|
||||||
credentials_ttls(_Inout_ credentials_ttls &&other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Copies credentials
|
|
||||||
///
|
|
||||||
/// \param[in] other Credentials to copy from
|
|
||||||
///
|
|
||||||
/// \returns Reference to this object
|
|
||||||
///
|
|
||||||
credentials_ttls& operator=(_In_ const credentials_ttls &other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Moves credentials
|
|
||||||
///
|
|
||||||
/// \param[in] other Credentials to move from
|
|
||||||
///
|
|
||||||
/// \returns Reference to this object
|
|
||||||
///
|
|
||||||
credentials_ttls& operator=(_Inout_ credentials_ttls &&other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Clones credentials
|
|
||||||
///
|
|
||||||
/// \returns Pointer to cloned credentials
|
|
||||||
///
|
|
||||||
virtual config* clone() const { return new credentials_ttls(*this); }
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Resets credentials
|
|
||||||
///
|
|
||||||
virtual void clear();
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Test credentials if blank
|
|
||||||
///
|
|
||||||
virtual bool empty() const;
|
|
||||||
|
|
||||||
/// \name XML credentials management
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Load credentials from XML document
|
|
||||||
///
|
|
||||||
/// \param[in] pConfigRoot Root element for loading credentials
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError);
|
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
/// \name Storage
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Save credentials to Windows Credential Manager
|
|
||||||
///
|
|
||||||
/// \param[in] pszTargetName The name in Windows Credential Manager to store credentials as
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD store(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) const;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieve credentials from Windows Credential Manager
|
|
||||||
///
|
|
||||||
/// \param[in] pszTargetName The name in Windows Credential Manager to retrieve credentials from
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError);
|
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
public:
|
|
||||||
credentials *m_inner; ///< Inner credentials
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// TTLS session
|
|
||||||
///
|
|
||||||
class session_ttls : public session
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
/// Constructor
|
|
||||||
///
|
|
||||||
session_ttls();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// TTLS peer
|
|
||||||
///
|
|
||||||
class peer_ttls : public peer<eap::config_ttls, eap::credentials_ttls, int, int>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
/// Constructor
|
|
||||||
///
|
|
||||||
peer_ttls();
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Initializes an EAP peer method for EAPHost.
|
|
||||||
///
|
|
||||||
/// \sa [EapPeerGetInfo function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363613.aspx)
|
|
||||||
///
|
|
||||||
virtual DWORD initialize(_Out_ EAP_ERROR **ppEapError);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Shuts down the EAP method and prepares to unload its corresponding DLL.
|
|
||||||
///
|
|
||||||
/// \sa [EapPeerShutdown function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363627.aspx)
|
|
||||||
///
|
|
||||||
virtual DWORD shutdown(_Out_ EAP_ERROR **ppEapError);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns the user data and user identity after being called by EAPHost.
|
|
||||||
///
|
|
||||||
/// \sa [EapPeerGetIdentity function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363607.aspx)
|
|
||||||
///
|
|
||||||
virtual DWORD get_identity(
|
|
||||||
_In_ DWORD dwFlags,
|
|
||||||
_In_ DWORD dwConnectionDataSize,
|
|
||||||
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
|
|
||||||
_In_ DWORD dwUserDataSize,
|
|
||||||
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
|
||||||
_Out_ BOOL *pfInvokeUI,
|
|
||||||
_Out_ DWORD *pdwUserDataOutSize,
|
|
||||||
_Out_ BYTE **ppUserDataOut,
|
|
||||||
_Out_ WCHAR **ppwszIdentity,
|
|
||||||
_Out_ EAP_ERROR **ppEapError);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Defines the implementation of an EAP method-specific function that retrieves the properties of an EAP method given the connection and user data.
|
|
||||||
///
|
|
||||||
/// \sa [EapPeerGetMethodProperties function](https://msdn.microsoft.com/en-us/library/windows/desktop/hh706636.aspx)
|
|
||||||
///
|
|
||||||
virtual DWORD get_method_properties(
|
|
||||||
_In_ DWORD dwVersion,
|
|
||||||
_In_ DWORD dwFlags,
|
|
||||||
_In_ HANDLE hUserImpersonationToken,
|
|
||||||
_In_ DWORD dwEapConnDataSize,
|
|
||||||
_In_count_(dwEapConnDataSize) const BYTE *pEapConnData,
|
|
||||||
_In_ DWORD dwUserDataSize,
|
|
||||||
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
|
||||||
_Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
|
|
||||||
_Out_ EAP_ERROR **ppEapError) const;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
namespace eapserial
|
|
||||||
{
|
|
||||||
///
|
|
||||||
/// Packs a TTLS based method configuration
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[in] val Configuration to pack
|
|
||||||
///
|
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_ttls &val)
|
|
||||||
{
|
|
||||||
pack(cursor, (const eap::config_tls&)val);
|
|
||||||
if (val.m_inner) {
|
|
||||||
if (dynamic_cast<eap::config_pap*>(val.m_inner)) {
|
|
||||||
pack(cursor, (unsigned char)eap::type_pap);
|
|
||||||
pack(cursor, (const eap::config_pap&)*val.m_inner);
|
|
||||||
} else {
|
|
||||||
assert(0); // Unsupported inner authentication method type.
|
|
||||||
pack(cursor, (unsigned char)0);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
pack(cursor, (unsigned char)0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns packed size of a TTLS based method configuration
|
|
||||||
///
|
|
||||||
/// \param[in] val Configuration to pack
|
|
||||||
///
|
|
||||||
/// \returns Size of data when packed (in bytes)
|
|
||||||
///
|
|
||||||
inline size_t get_pk_size(const eap::config_ttls &val)
|
|
||||||
{
|
|
||||||
size_t size_inner = sizeof(unsigned char);
|
|
||||||
if (val.m_inner) {
|
|
||||||
if (dynamic_cast<eap::config_pap*>(val.m_inner))
|
|
||||||
size_inner += get_pk_size((const eap::config_pap&)*val.m_inner);
|
|
||||||
else
|
|
||||||
assert(0); // Unsupported inner authentication method type.
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
get_pk_size((const eap::config_tls&)val) +
|
|
||||||
size_inner;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Unpacks a TTLS based method configuration
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val Configuration to unpack to
|
|
||||||
///
|
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_ttls &val)
|
|
||||||
{
|
|
||||||
unpack(cursor, (eap::config_tls&)val);
|
|
||||||
|
|
||||||
assert(!val.m_inner);
|
|
||||||
unsigned char eap_type;
|
|
||||||
unpack(cursor, eap_type);
|
|
||||||
switch (eap_type) {
|
|
||||||
case eap::type_pap:
|
|
||||||
val.m_inner = new eap::config_pap(val.m_module);
|
|
||||||
unpack(cursor, (eap::config_pap&)*val.m_inner);
|
|
||||||
break;
|
|
||||||
case 0 : break;
|
|
||||||
default : assert(0); // Unsupported inner authentication method type.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,7 +2,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EAPMethods\n"
|
"Project-Id-Version: EAPMethods\n"
|
||||||
"POT-Creation-Date: 2016-06-09 15:19+0200\n"
|
"POT-Creation-Date: 2016-06-10 12:06+0200\n"
|
||||||
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
|
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
|
||||||
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
|
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
|
||||||
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
|
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
|
||||||
@ -10,295 +10,332 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Generator: Poedit 1.8.8\n"
|
"X-Generator: Poedit 1.8.8\n"
|
||||||
"X-Poedit-Basepath: ..\n"
|
"X-Poedit-Basepath: ../..\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"Language: en_US\n"
|
"Language: en_US\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
"X-Poedit-KeywordsList: _\n"
|
"X-Poedit-KeywordsList: _\n"
|
||||||
"X-Poedit-SearchPath-0: res\n"
|
"X-Poedit-SearchPath-0: lib/EAPBase_UI\n"
|
||||||
"X-Poedit-SearchPath-1: MSIBuild\n"
|
"X-Poedit-SearchPath-1: lib/PAP_UI\n"
|
||||||
"X-Poedit-SearchPath-2: src\n"
|
"X-Poedit-SearchPath-2: lib/TLS_UI\n"
|
||||||
"X-Poedit-SearchPath-3: include\n"
|
"X-Poedit-SearchPath-3: lib/TTLS_UI\n"
|
||||||
|
"X-Poedit-SearchPath-4: EAPMethods\n"
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:123 res/wxEAP_UI.cpp:200
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:123 lib/EAPBase_UI/res/wxEAP_UI.cpp:200
|
||||||
msgid "Client Credentials"
|
msgid "Client Credentials"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:134
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:134
|
||||||
msgid "Manage your credentials stored in Windows Credential Manager."
|
msgid "Manage your credentials stored in Windows Credential Manager."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:144
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:144
|
||||||
msgid "Identity:"
|
msgid "Identity:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:149
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:149
|
||||||
msgid "Enter your user name here (user@domain.org, DOMAINUser, etc.)"
|
msgid "Enter your user name here (user@domain.org, DOMAINUser, etc.)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:159
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:159
|
||||||
msgid "&Set Credentials..."
|
msgid "&Set Credentials..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:160
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:160
|
||||||
msgid "Click here to set or modify your credentials"
|
msgid "Click here to set or modify your credentials"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:164
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:164
|
||||||
msgid "&Clear Credentials"
|
msgid "&Clear Credentials"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:165
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Click to clear your credentials from Credential Manager.\n"
|
"Click to clear your credentials from Credential Manager.\n"
|
||||||
"Note: You will be prompted to enter credentials when connecting."
|
"Note: You will be prompted to enter credentials when connecting."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:211
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:211
|
||||||
msgid "Please provide your user ID and password."
|
msgid "Please provide your user ID and password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:221
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:221
|
||||||
msgid "User ID:"
|
msgid "User ID:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:226
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:226
|
||||||
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
|
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:230
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:230
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:235
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:235
|
||||||
msgid "Enter your password here"
|
msgid "Enter your password here"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:242 res/wxTLS_UI.cpp:164
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:242 lib/TLS_UI/res/wxTLS_UI.cpp:164
|
||||||
msgid "&Remember"
|
msgid "&Remember"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.cpp:243
|
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:243
|
||||||
msgid "Check if you would like to save username and password"
|
msgid "Check if you would like to save username and password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:17
|
#: lib/PAP_UI/src/PAP_UI.cpp:41
|
||||||
msgid "Server Trust"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:28
|
|
||||||
msgid "Describe the servers you trust to prevent credential interception in case of man-in-the-middle attacks."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:35
|
|
||||||
msgid "Acceptable Certificate Authorities:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:40
|
|
||||||
msgid "List of certificate authorities server's certificate must be issued by"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:47
|
|
||||||
msgid "Add CA from Store..."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:48
|
|
||||||
msgid "Adds a new certificate authority from the certificate store to the list"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:52
|
|
||||||
msgid "Add CA from File..."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:53
|
|
||||||
msgid "Adds a new certificate authority from the file to the list"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:57
|
|
||||||
msgid "&Remove CA"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:59
|
|
||||||
msgid "Removes selected certificate authorities from the list"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:72
|
|
||||||
msgid "Acceptable server &names:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:77
|
|
||||||
msgid "A semicolon delimited list of acceptable server FQDN names; blank to skip name check; \"*\" wildchar allowed"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:81
|
|
||||||
msgid "(Example: foo.bar.com;*.domain.org)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:120
|
|
||||||
msgid "TLS Client Certificate"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:131
|
|
||||||
msgid "Please select your client certificate to use for authentication."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:138
|
|
||||||
msgid "Co&nnect without providing a client certificate"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:139
|
|
||||||
msgid "Select if your server does not require you to provide a client certificate"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:146
|
|
||||||
msgid "Use the following &certificate:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:147
|
|
||||||
msgid "Select if you need to provide a client certificate when connecting"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:154
|
|
||||||
msgid "Client certificate to use for authentication"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTLS_UI.cpp:165
|
|
||||||
msgid "Check if you would like to save certificate selection"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:17
|
|
||||||
msgid "Outer Identity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:28
|
|
||||||
msgid "Select the user ID supplicant introduces itself as to authenticator:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:35
|
|
||||||
msgid "&Same as inner identity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:36
|
|
||||||
msgid "Use my true user name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:40
|
|
||||||
msgid "Use &empty outer identity (RFC 4822)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:41
|
|
||||||
msgid "Ommit my user name and use @mydomain.org only"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:48
|
|
||||||
msgid "&Custom outer identity:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:49
|
|
||||||
msgid "Specify custom outer identity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: res/wxTTLS_UI.cpp:54
|
|
||||||
msgid "Custom outer identity to use"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/PAP_UI.cpp:41
|
|
||||||
msgid "This method requires no additional settings."
|
msgid "This method requires no additional settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:198
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
|
||||||
|
msgid "Server Trust"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:28
|
||||||
|
msgid "Describe the servers you trust to prevent credential interception in case of man-in-the-middle attacks."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:35
|
||||||
|
msgid "Acceptable Certificate Authorities:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:40
|
||||||
|
msgid "List of certificate authorities server's certificate must be issued by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
|
||||||
|
msgid "Add CA from Store..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:48
|
||||||
|
msgid "Adds a new certificate authority from the certificate store to the list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:52
|
||||||
|
msgid "Add CA from File..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:53
|
||||||
|
msgid "Adds a new certificate authority from the file to the list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:57
|
||||||
|
msgid "&Remove CA"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:59
|
||||||
|
msgid "Removes selected certificate authorities from the list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:72
|
||||||
|
msgid "Acceptable server &names:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:77
|
||||||
|
msgid "A semicolon delimited list of acceptable server FQDN names; blank to skip name check; \"*\" wildchar allowed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:81
|
||||||
|
msgid "(Example: foo.bar.com;*.domain.org)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:120
|
||||||
|
msgid "TLS Client Certificate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:131
|
||||||
|
msgid "Please select your client certificate to use for authentication."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:138
|
||||||
|
msgid "Co&nnect without providing a client certificate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:139
|
||||||
|
msgid "Select if your server does not require you to provide a client certificate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:146
|
||||||
|
msgid "Use the following &certificate:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:147
|
||||||
|
msgid "Select if you need to provide a client certificate when connecting"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:154
|
||||||
|
msgid "Client certificate to use for authentication"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/res/wxTLS_UI.cpp:165
|
||||||
|
msgid "Check if you would like to save certificate selection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TLS_UI/src/TLS_UI.cpp:199
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invalid character in host name found: %c"
|
msgid "Invalid character in host name found: %c"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:198
|
#: lib/TLS_UI/src/TLS_UI.cpp:199
|
||||||
msgid "Validation conflict"
|
msgid "Validation conflict"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:550
|
#: lib/TLS_UI/src/TLS_UI.cpp:551
|
||||||
msgid "Add Certificate"
|
msgid "Add Certificate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:551
|
#: lib/TLS_UI/src/TLS_UI.cpp:552
|
||||||
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
|
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:552
|
#: lib/TLS_UI/src/TLS_UI.cpp:553
|
||||||
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
|
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:553
|
#: lib/TLS_UI/src/TLS_UI.cpp:554
|
||||||
msgid "PKCS #7 Certificate Files (*.p7b)"
|
msgid "PKCS #7 Certificate Files (*.p7b)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:554
|
#: lib/TLS_UI/src/TLS_UI.cpp:555
|
||||||
msgid "All Files (*.*)"
|
msgid "All Files (*.*)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:570
|
#: lib/TLS_UI/src/TLS_UI.cpp:571
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invalid or unsupported certificate file %s"
|
msgid "Invalid or unsupported certificate file %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TLS_UI.cpp:570
|
#: lib/TLS_UI/src/TLS_UI.cpp:571
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Napaka pri nalaganju knjižnice MSI.DLL (%1!ld!)."
|
msgstr "Napaka pri nalaganju knjižnice MSI.DLL (%1!ld!)."
|
||||||
|
|
||||||
#: src/TTLS_UI.cpp:172
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:17
|
||||||
|
msgid "Outer Identity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:28
|
||||||
|
msgid "Select the user ID supplicant introduces itself as to authenticator:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:35
|
||||||
|
msgid "&Same as inner identity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:36
|
||||||
|
msgid "Use my true user name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:40
|
||||||
|
msgid "Use &empty outer identity (RFC 4822)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:41
|
||||||
|
msgid "Ommit my user name and use @mydomain.org only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:48
|
||||||
|
msgid "&Custom outer identity:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:49
|
||||||
|
msgid "Specify custom outer identity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:54
|
||||||
|
msgid "Custom outer identity to use"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/TTLS_UI/src/TTLS_UI.cpp:92
|
||||||
msgid "Outer Authentication"
|
msgid "Outer Authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TTLS_UI.cpp:185
|
#: lib/TTLS_UI/src/TTLS_UI.cpp:105
|
||||||
msgid "Inner Authentication"
|
msgid "Inner Authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TTLS_UI.cpp:191
|
#: lib/TTLS_UI/src/TTLS_UI.cpp:111
|
||||||
msgid "Select inner authentication method from the list"
|
msgid "Select inner authentication method from the list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/TTLS_UI.cpp:192
|
#: lib/TTLS_UI/src/TTLS_UI.cpp:112
|
||||||
msgid "PAP"
|
msgid "PAP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: include/EAP_UI.h:272
|
#: lib/EAPBase_UI/include/EAP_UI.h:217
|
||||||
msgid "<blank>"
|
msgid "<blank>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: include/EAP_UI.h:278
|
#: lib/EAPBase_UI/include/EAP_UI.h:223
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "<error %u>"
|
msgid "<error %u>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: include/EAP_UI.h:301
|
#: lib/EAPBase_UI/include/EAP_UI.h:246
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Deleting credentials failed (error %u)."
|
msgid "Deleting credentials failed (error %u)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: include/EAP_UI.h:358
|
#: lib/EAPBase_UI/include/EAP_UI.h:300
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Error reading credentials from Credential Manager: %ls (error %u)"
|
msgid "Error reading credentials from Credential Manager: %ls (error %u)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: include/EAP_UI.h:361
|
#: lib/EAPBase_UI/include/EAP_UI.h:303
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Reading credentials failed (error %u)."
|
msgid "Reading credentials failed (error %u)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: include/EAP_UI.h:376
|
#: lib/EAPBase_UI/include/EAP_UI.h:318
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Error writing credentials to Credential Manager: %ls (error %u)"
|
msgid "Error writing credentials to Credential Manager: %ls (error %u)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: include/EAP_UI.h:379
|
#: lib/EAPBase_UI/include/EAP_UI.h:321
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Writing credentials failed (error %u)."
|
msgid "Writing credentials failed (error %u)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.h:56
|
#: lib/EAPBase_UI/res/wxEAP_UI.h:56
|
||||||
msgid "EAP Method Configuration"
|
msgid "EAP Method Configuration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: res/wxEAP_UI.h:81
|
#: lib/EAPBase_UI/res/wxEAP_UI.h:81
|
||||||
msgid "EAP Credentials"
|
msgid "EAP Credentials"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Debug.Feature-2.idtx:3
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Release.Feature-2.idtx:3
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Debug.Feature-2.idtx:3
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Release.Feature-2.idtx:3
|
||||||
|
#, fuzzy
|
||||||
|
msgid "1252"
|
||||||
|
msgstr "1250"
|
||||||
|
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Debug.Feature-2.idtx:4
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Release.Feature-2.idtx:4
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Debug.Feature-2.idtx:4
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Release.Feature-2.idtx:4
|
||||||
|
msgid "EAP Peer Methods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Debug.Feature-2.idtx:4
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Release.Feature-2.idtx:4
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Debug.Feature-2.idtx:4
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Release.Feature-2.idtx:4
|
||||||
|
msgid "Modules to support individual EAP methods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Debug.Feature-2.idtx:5
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Release.Feature-2.idtx:5
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Debug.Feature-2.idtx:5
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Release.Feature-2.idtx:5
|
||||||
|
msgid "TTLS"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Debug.Feature-2.idtx:5
|
||||||
|
#: EAPMethods/MSIBuild/En.Win32.Release.Feature-2.idtx:5
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Debug.Feature-2.idtx:5
|
||||||
|
#: EAPMethods/MSIBuild/En.x64.Release.Feature-2.idtx:5
|
||||||
|
msgid "Tunneled Transport Layer Security"
|
||||||
|
msgstr ""
|
||||||
|
@ -1,727 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2015-2016 Amebis
|
|
||||||
Copyright 2016 GÉANT
|
|
||||||
|
|
||||||
This file is part of GÉANTLink.
|
|
||||||
|
|
||||||
GÉANTLink is free software: you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
GÉANTLink is distributed in the hope that it will be useful, but
|
|
||||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <StdAfx.h>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace winstd;
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::session
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::session::session()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::session::~session()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::begin(
|
|
||||||
_In_ DWORD dwFlags,
|
|
||||||
_In_ const EapAttributes *pAttributeArray,
|
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
|
||||||
_In_ DWORD dwConnectionDataSize,
|
|
||||||
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
|
|
||||||
_In_ DWORD dwUserDataSize,
|
|
||||||
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
|
||||||
_In_ DWORD dwMaxSendPacketSize,
|
|
||||||
_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(dwFlags);
|
|
||||||
UNREFERENCED_PARAMETER(pAttributeArray);
|
|
||||||
UNREFERENCED_PARAMETER(hTokenImpersonateUser);
|
|
||||||
UNREFERENCED_PARAMETER(dwConnectionDataSize);
|
|
||||||
UNREFERENCED_PARAMETER(pConnectionData);
|
|
||||||
UNREFERENCED_PARAMETER(dwUserDataSize);
|
|
||||||
UNREFERENCED_PARAMETER(pUserData);
|
|
||||||
UNREFERENCED_PARAMETER(dwMaxSendPacketSize);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::end(_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::process_request_packet(
|
|
||||||
_In_ DWORD dwReceivedPacketSize,
|
|
||||||
_In_bytecount_(dwReceivedPacketSize) const EapPacket *pReceivedPacket,
|
|
||||||
_Out_ EapPeerMethodOutput *pEapOutput,
|
|
||||||
_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(dwReceivedPacketSize);
|
|
||||||
UNREFERENCED_PARAMETER(pReceivedPacket);
|
|
||||||
UNREFERENCED_PARAMETER(pEapOutput);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::get_response_packet(
|
|
||||||
_Inout_ DWORD *pdwSendPacketSize,
|
|
||||||
_Inout_bytecap_(*dwSendPacketSize) EapPacket *pSendPacket,
|
|
||||||
_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(pdwSendPacketSize);
|
|
||||||
UNREFERENCED_PARAMETER(pSendPacket);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::get_result(_In_ EapPeerMethodResultReason reason, _Out_ EapPeerMethodResult *ppResult, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(reason);
|
|
||||||
UNREFERENCED_PARAMETER(ppResult);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::get_ui_context(
|
|
||||||
_Out_ DWORD *pdwUIContextDataSize,
|
|
||||||
_Out_ BYTE **ppUIContextData,
|
|
||||||
_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(pdwUIContextDataSize);
|
|
||||||
UNREFERENCED_PARAMETER(ppUIContextData);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::set_ui_context(
|
|
||||||
_In_ DWORD dwUIContextDataSize,
|
|
||||||
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
|
|
||||||
_In_ const EapPeerMethodOutput *pEapOutput,
|
|
||||||
_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(dwUIContextDataSize);
|
|
||||||
UNREFERENCED_PARAMETER(pUIContextData);
|
|
||||||
UNREFERENCED_PARAMETER(pEapOutput);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::get_response_attributes(_Out_ EapAttributes *pAttribs, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(pAttribs);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::session::set_response_attributes(const _In_ EapAttributes *pAttribs, _Out_ EapPeerMethodOutput *pEapOutput, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(pAttribs);
|
|
||||||
UNREFERENCED_PARAMETER(pEapOutput);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::config
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::config::config(_In_ module &mod) :
|
|
||||||
m_module(mod)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config::config(_In_ const config &other) :
|
|
||||||
m_module(other.m_module)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config::config(_Inout_ config &&other) :
|
|
||||||
m_module(other.m_module)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config::~config()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config& eap::config::operator=(_In_ const config &other)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(other);
|
|
||||||
assert(&m_module == &other.m_module); // Copy configuration within same module only!
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config& eap::config::operator=(_Inout_ config &&other)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(other);
|
|
||||||
assert(&m_module == &other.m_module); // Copy configuration within same module only!
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::config_method
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::config_method::config_method(_In_ module &mod) :
|
|
||||||
m_allow_save(true),
|
|
||||||
config(mod)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_method::config_method(_In_ const config_method &other) :
|
|
||||||
m_allow_save(other.m_allow_save),
|
|
||||||
m_anonymous_identity(other.m_anonymous_identity),
|
|
||||||
config(other)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_method::config_method(_Inout_ config_method &&other) :
|
|
||||||
m_allow_save(std::move(other.m_allow_save)),
|
|
||||||
m_anonymous_identity(std::move(other.m_anonymous_identity)),
|
|
||||||
config(std::move(other))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_method& eap::config_method::operator=(_In_ const config_method &other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(config&)*this = other;
|
|
||||||
m_allow_save = other.m_allow_save;
|
|
||||||
m_anonymous_identity = other.m_anonymous_identity;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_method& eap::config_method::operator=(_Inout_ config_method &&other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(config&&)*this = std::move(other);
|
|
||||||
m_allow_save = std::move(other.m_allow_save);
|
|
||||||
m_anonymous_identity = std::move(other.m_anonymous_identity);
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::config_method::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const
|
|
||||||
{
|
|
||||||
const bstr bstrNamespace(L"urn:ietf:params:xml:ns:yang:ietf-eap-metadata");
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
// <ClientSideCredential>
|
|
||||||
com_obj<IXMLDOMElement> pXmlElClientSideCredential;
|
|
||||||
if ((dwResult = eapxml::create_element(pDoc, pConfigRoot, bstr(L"eap-metadata:ClientSideCredential"), bstr(L"ClientSideCredential"), bstrNamespace, &pXmlElClientSideCredential)) != ERROR_SUCCESS) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <ClientSideCredential> element."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// <ClientSideCredential>/<allow-save>
|
|
||||||
if ((dwResult = eapxml::put_element_value(pDoc, pXmlElClientSideCredential, bstr(L"allow-save"), bstrNamespace, m_allow_save)) != ERROR_SUCCESS) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <allow-save> element."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// <ClientSideCredential>/<AnonymousIdentity>
|
|
||||||
if (!m_anonymous_identity.empty())
|
|
||||||
if ((dwResult = eapxml::put_element_value(pDoc, pXmlElClientSideCredential, bstr(L"AnonymousIdentity"), bstrNamespace, bstr(m_anonymous_identity))) != ERROR_SUCCESS) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <AnonymousIdentity> element."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::config_method::load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
m_allow_save = true;
|
|
||||||
m_anonymous_identity.clear();
|
|
||||||
|
|
||||||
// <ClientSideCredential>
|
|
||||||
com_obj<IXMLDOMElement> pXmlElClientSideCredential;
|
|
||||||
if (eapxml::select_element(pConfigRoot, bstr(L"eap-metadata:ClientSideCredential"), &pXmlElClientSideCredential) == ERROR_SUCCESS) {
|
|
||||||
// <allow-save>
|
|
||||||
eapxml::get_element_value(pXmlElClientSideCredential, bstr(L"eap-metadata:allow-save"), &m_allow_save);
|
|
||||||
|
|
||||||
// <AnonymousIdentity>
|
|
||||||
eapxml::get_element_value(pXmlElClientSideCredential, bstr(L"eap-metadata:AnonymousIdentity"), m_anonymous_identity);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::credentials
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::credentials::credentials(_In_ module &mod) : config(mod)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials::credentials(_In_ const credentials &other) :
|
|
||||||
m_identity(other.m_identity),
|
|
||||||
config(other)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials::credentials(_Inout_ credentials &&other) :
|
|
||||||
m_identity(std::move(other.m_identity)),
|
|
||||||
config(std::move(other))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials& eap::credentials::operator=(_In_ const credentials &other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(config&)*this = other;
|
|
||||||
m_identity = other.m_identity;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials& eap::credentials::operator=(_Inout_ credentials &&other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(config&)*this = std::move(other);
|
|
||||||
m_identity = std::move(other.m_identity);
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void eap::credentials::clear()
|
|
||||||
{
|
|
||||||
m_identity.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool eap::credentials::empty() const
|
|
||||||
{
|
|
||||||
return m_identity.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(pDoc);
|
|
||||||
UNREFERENCED_PARAMETER(pConfigRoot);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
// Yeah, right!? Credentials are non-exportable!
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::credentials_pass
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::credentials_pass::credentials_pass(_In_ module &mod) : credentials(mod)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_pass::credentials_pass(_In_ const credentials_pass &other) :
|
|
||||||
m_password(other.m_password),
|
|
||||||
credentials(other)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_pass::credentials_pass(_Inout_ credentials_pass &&other) :
|
|
||||||
m_password(std::move(other.m_password)),
|
|
||||||
credentials(std::move(other))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_pass& eap::credentials_pass::operator=(_In_ const credentials_pass &other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(credentials&)*this = other;
|
|
||||||
m_password = other.m_password;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_pass& eap::credentials_pass::operator=(_Inout_ credentials_pass &&other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(credentials&)*this = std::move(other);
|
|
||||||
m_password = std::move(other.m_password);
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void eap::credentials_pass::clear()
|
|
||||||
{
|
|
||||||
credentials::clear();
|
|
||||||
m_password.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool eap::credentials_pass::empty() const
|
|
||||||
{
|
|
||||||
return credentials::empty() && m_password.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_pass::load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
assert(pConfigRoot);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
eapxml::get_element_value(pConfigRoot, bstr(L"eap-metadata:UserName"), m_identity);
|
|
||||||
|
|
||||||
bstr pass;
|
|
||||||
if ((eapxml::get_element_value(pConfigRoot, bstr(L"eap-metadata:Password"), &pass)) == ERROR_SUCCESS)
|
|
||||||
m_password = pass;
|
|
||||||
SecureZeroMemory((BSTR)pass, sizeof(OLECHAR)*pass.length());
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_pass::store(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) const
|
|
||||||
{
|
|
||||||
assert(pszTargetName);
|
|
||||||
assert(ppEapError);
|
|
||||||
DWORD dwResult;
|
|
||||||
string password_enc;
|
|
||||||
|
|
||||||
// Prepare cryptographics provider.
|
|
||||||
crypt_prov cp;
|
|
||||||
if (!cp.create(NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CryptAcquireContext failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Import the public key.
|
|
||||||
HRSRC res = FindResource(m_module.m_instance, MAKEINTRESOURCE(IDR_EAP_KEY_PUBLIC), RT_RCDATA);
|
|
||||||
assert(res);
|
|
||||||
HGLOBAL res_handle = LoadResource(m_module.m_instance, res);
|
|
||||||
assert(res_handle);
|
|
||||||
crypt_key key;
|
|
||||||
unique_ptr<CERT_PUBLIC_KEY_INFO, LocalFree_delete<CERT_PUBLIC_KEY_INFO> > keyinfo_data;
|
|
||||||
DWORD keyinfo_size = 0;
|
|
||||||
if (!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_PUBLIC_KEY_INFO, (const BYTE*)::LockResource(res_handle), ::SizeofResource(m_module.m_instance, res), CRYPT_DECODE_ALLOC_FLAG, NULL, &keyinfo_data, &keyinfo_size)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CryptDecodeObjectEx failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!key.import_public(cp, X509_ASN_ENCODING, keyinfo_data.get())) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Public key import failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert password to UTF-8.
|
|
||||||
sanitizing_string password_utf8;
|
|
||||||
WideCharToMultiByte(CP_UTF8, 0, m_password.c_str(), (int)m_password.length(), password_utf8, NULL, NULL);
|
|
||||||
|
|
||||||
// Pre-allocate memory to allow space, as encryption will grow the data, and we need additional 16B at the end for MD5 hash.
|
|
||||||
DWORD dwBlockLen;
|
|
||||||
vector<char, sanitizing_allocator<char> > password(password_utf8.length());
|
|
||||||
memcpy(password.data(), password_utf8.c_str(), sizeof(char)*password_utf8.length());
|
|
||||||
if (!CryptGetKeyParam(key, KP_BLOCKLEN, dwBlockLen, 0)) dwBlockLen = 0;
|
|
||||||
password.reserve((password.size() + dwBlockLen - 1) / dwBlockLen * dwBlockLen + 16);
|
|
||||||
|
|
||||||
// Encrypt the password using our public key. Calculate MD5 hash and append it.
|
|
||||||
crypt_hash hash;
|
|
||||||
if (!hash.create(cp, CALG_MD5)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Creating MD5 hash failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
if (!CryptEncrypt(key, hash, TRUE, 0, password)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Encrypting password failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
vector<char> hash_bin;
|
|
||||||
CryptGetHashParam(hash, HP_HASHVAL, hash_bin, 0);
|
|
||||||
password.insert(password.end(), hash_bin.begin(), hash_bin.end());
|
|
||||||
|
|
||||||
// Convert encrypted password to Base64, since CredProtectA() fail for binary strings.
|
|
||||||
string password_base64;
|
|
||||||
base64_enc enc;
|
|
||||||
enc.encode(password_base64, password.data(), password.size());
|
|
||||||
|
|
||||||
// Encrypt the password using user's key.
|
|
||||||
CRED_PROTECTION_TYPE cpt;
|
|
||||||
if (!CredProtectA(TRUE, password_base64.c_str(), (DWORD)password_base64.length(), password_enc, &cpt)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredProtect failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
tstring target(target_name(pszTargetName));
|
|
||||||
|
|
||||||
// Write credentials.
|
|
||||||
assert(password_enc.size()*sizeof(char) < CRED_MAX_CREDENTIAL_BLOB_SIZE);
|
|
||||||
assert(m_identity.length() < CRED_MAX_USERNAME_LENGTH );
|
|
||||||
CREDENTIAL cred = {
|
|
||||||
0, // Flags
|
|
||||||
CRED_TYPE_GENERIC, // Type
|
|
||||||
(LPTSTR)target.c_str(), // TargetName
|
|
||||||
_T(""), // Comment
|
|
||||||
{ 0, 0 }, // LastWritten
|
|
||||||
(DWORD)password_enc.size()*sizeof(char), // CredentialBlobSize
|
|
||||||
(LPBYTE)password_enc.data(), // CredentialBlob
|
|
||||||
CRED_PERSIST_ENTERPRISE, // Persist
|
|
||||||
0, // AttributeCount
|
|
||||||
NULL, // Attributes
|
|
||||||
NULL, // TargetAlias
|
|
||||||
(LPTSTR)m_identity.c_str() // UserName
|
|
||||||
};
|
|
||||||
if (!CredWrite(&cred, 0)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredWrite failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_pass::retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
assert(pszTargetName);
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
// Read credentials.
|
|
||||||
unique_ptr<CREDENTIAL, CredFree_delete<CREDENTIAL> > cred;
|
|
||||||
if (!CredRead(target_name(pszTargetName).c_str(), CRED_TYPE_GENERIC, 0, (PCREDENTIAL*)&cred)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredRead failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_identity = cred->UserName;
|
|
||||||
|
|
||||||
// Decrypt the password using user's key.
|
|
||||||
string password_base64;
|
|
||||||
if (!CredUnprotectA(TRUE, (LPCSTR)(cred->CredentialBlob), cred->CredentialBlobSize/sizeof(char), password_base64)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredUnprotect failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert Base64 to binary encrypted password, since CredProtectA() fail for binary strings.
|
|
||||||
vector<char, sanitizing_allocator<char> > password;
|
|
||||||
base64_dec dec;
|
|
||||||
bool is_last;
|
|
||||||
dec.decode(password, is_last, password_base64.c_str(), password_base64.length());
|
|
||||||
|
|
||||||
// Prepare cryptographics provider.
|
|
||||||
crypt_prov cp;
|
|
||||||
if (!cp.create(NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CryptAcquireContext failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create hash.
|
|
||||||
crypt_hash hash;
|
|
||||||
if (!hash.create(cp, CALG_MD5)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Creating MD5 hash failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
DWORD dwHashSize, dwHashSizeSize = sizeof(dwHashSize);
|
|
||||||
CryptGetHashParam(hash, HP_HASHSIZE, (LPBYTE)&dwHashSize, &dwHashSizeSize, 0);
|
|
||||||
if (password.size() < dwHashSize) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = ERROR_INVALID_DATA, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Encrypted password too short."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Truncate hash from encrypted password.
|
|
||||||
vector<char> hash_bin;
|
|
||||||
size_t enc_size = password.size() - dwHashSize;
|
|
||||||
hash_bin.assign(password.begin() + enc_size, password.end());
|
|
||||||
password.resize(enc_size);
|
|
||||||
|
|
||||||
// Import the private key.
|
|
||||||
HRSRC res = FindResource(m_module.m_instance, MAKEINTRESOURCE(IDR_EAP_KEY_PRIVATE), RT_RCDATA);
|
|
||||||
assert(res);
|
|
||||||
HGLOBAL res_handle = LoadResource(m_module.m_instance, res);
|
|
||||||
assert(res_handle);
|
|
||||||
crypt_key key;
|
|
||||||
unique_ptr<unsigned char[], LocalFree_delete<unsigned char[]> > keyinfo_data;
|
|
||||||
DWORD keyinfo_size = 0;
|
|
||||||
if (!CryptDecodeObjectEx(X509_ASN_ENCODING, PKCS_RSA_PRIVATE_KEY, (const BYTE*)::LockResource(res_handle), ::SizeofResource(m_module.m_instance, res), CRYPT_DECODE_ALLOC_FLAG, NULL, &keyinfo_data, &keyinfo_size)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CryptDecodeObjectEx failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!key.import(cp, keyinfo_data.get(), keyinfo_size, NULL, 0)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Private key import failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decrypt the password using our private key. Calculate MD5 hash and verify it.
|
|
||||||
if (!CryptDecrypt(key, hash, TRUE, 0, password)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Decrypting password failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
vector<char> hash2_bin;
|
|
||||||
CryptGetHashParam(hash, HP_HASHVAL, hash2_bin, 0);
|
|
||||||
if (hash_bin != hash2_bin) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = ERROR_INVALID_DATA, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Invalid password data."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert password from UTF-8.
|
|
||||||
MultiByteToWideChar(CP_UTF8, 0, password.data(), (int)password.size(), m_password);
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::module
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::module::module() :
|
|
||||||
m_instance(NULL)
|
|
||||||
{
|
|
||||||
m_ep.create(&EAPMETHOD_TRACE_EVENT_PROVIDER);
|
|
||||||
m_ep.write(&EAPMETHOD_TRACE_EVT_MODULE_LOAD, event_data((BYTE)EAPMETHOD_TYPE), event_data::blank);
|
|
||||||
|
|
||||||
m_heap.create(0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::module::~module()
|
|
||||||
{
|
|
||||||
m_ep.write(&EAPMETHOD_TRACE_EVT_MODULE_UNLOAD, event_data((BYTE)EAPMETHOD_TYPE), event_data::blank);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
EAP_ERROR* eap::module::make_error(_In_ DWORD dwErrorCode, _In_ DWORD dwReasonCode, _In_ LPCGUID pRootCauseGuid, _In_ LPCGUID pRepairGuid, _In_ LPCGUID pHelpLinkGuid, _In_z_ LPCWSTR pszRootCauseString, _In_z_ LPCWSTR pszRepairString) const
|
|
||||||
{
|
|
||||||
// Calculate memory size requirement.
|
|
||||||
SIZE_T
|
|
||||||
nRootCauseSize = pszRootCauseString != NULL && pszRootCauseString[0] ? (wcslen(pszRootCauseString) + 1)*sizeof(WCHAR) : 0,
|
|
||||||
nRepairStringSize = pszRepairString != NULL && pszRepairString [0] ? (wcslen(pszRepairString ) + 1)*sizeof(WCHAR) : 0,
|
|
||||||
nEapErrorSize = sizeof(EAP_ERROR) + nRootCauseSize + nRepairStringSize;
|
|
||||||
|
|
||||||
EAP_ERROR *pError = (EAP_ERROR*)HeapAlloc(m_heap, 0, nEapErrorSize);
|
|
||||||
if (!pError)
|
|
||||||
return NULL;
|
|
||||||
BYTE *p = (BYTE*)(pError + 1);
|
|
||||||
|
|
||||||
// Fill the error descriptor.
|
|
||||||
pError->dwWinError = dwErrorCode;
|
|
||||||
pError->type.eapType.type = EAPMETHOD_TYPE;
|
|
||||||
pError->type.eapType.dwVendorId = 0;
|
|
||||||
pError->type.eapType.dwVendorType = 0;
|
|
||||||
pError->type.dwAuthorId = 67532;
|
|
||||||
pError->dwReasonCode = dwReasonCode;
|
|
||||||
pError->rootCauseGuid = pRootCauseGuid != NULL ? *pRootCauseGuid : GUID_NULL;
|
|
||||||
pError->repairGuid = pRepairGuid != NULL ? *pRepairGuid : GUID_NULL;
|
|
||||||
pError->helpLinkGuid = pHelpLinkGuid != NULL ? *pHelpLinkGuid : GUID_NULL;
|
|
||||||
if (nRootCauseSize) {
|
|
||||||
pError->pRootCauseString = (LPWSTR)p;
|
|
||||||
memcpy(pError->pRootCauseString, pszRootCauseString, nRootCauseSize);
|
|
||||||
p += nRootCauseSize;
|
|
||||||
} else
|
|
||||||
pError->pRootCauseString = NULL;
|
|
||||||
if (nRepairStringSize) {
|
|
||||||
pError->pRepairString = (LPWSTR)p;
|
|
||||||
memcpy(pError->pRepairString, pszRepairString, nRepairStringSize);
|
|
||||||
p += nRepairStringSize;
|
|
||||||
} else
|
|
||||||
pError->pRepairString = NULL;
|
|
||||||
|
|
||||||
// Write trace event.
|
|
||||||
vector<EVENT_DATA_DESCRIPTOR> evt_desc;
|
|
||||||
evt_desc.reserve(8);
|
|
||||||
evt_desc.push_back(event_data(pError->dwWinError));
|
|
||||||
evt_desc.push_back(event_data(pError->type.eapType.type));
|
|
||||||
evt_desc.push_back(event_data(pError->dwReasonCode));
|
|
||||||
evt_desc.push_back(event_data(&(pError->rootCauseGuid), sizeof(GUID)));
|
|
||||||
evt_desc.push_back(event_data(&(pError->repairGuid), sizeof(GUID)));
|
|
||||||
evt_desc.push_back(event_data(&(pError->helpLinkGuid), sizeof(GUID)));
|
|
||||||
evt_desc.push_back(event_data(pError->pRootCauseString));
|
|
||||||
evt_desc.push_back(event_data(pError->pRepairString));
|
|
||||||
m_ep.write(&EAPMETHOD_TRACE_EAP_ERROR, (ULONG)evt_desc.size(), evt_desc.data());
|
|
||||||
|
|
||||||
return pError;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BYTE* eap::module::alloc_memory(_In_ size_t size)
|
|
||||||
{
|
|
||||||
return (BYTE*)HeapAlloc(m_heap, 0, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void eap::module::free_memory(_In_ BYTE *ptr)
|
|
||||||
{
|
|
||||||
ETW_FN_VOID;
|
|
||||||
|
|
||||||
// Since we do security here and some of the BLOBs contain credentials, sanitize every memory block before freeing.
|
|
||||||
SecureZeroMemory(ptr, HeapSize(m_heap, 0, ptr));
|
|
||||||
HeapFree(m_heap, 0, ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void eap::module::free_error_memory(_In_ EAP_ERROR *err)
|
|
||||||
{
|
|
||||||
ETW_FN_VOID;
|
|
||||||
|
|
||||||
// pRootCauseString and pRepairString always trail the ppEapError to reduce number of (de)allocations.
|
|
||||||
HeapFree(m_heap, 0, err);
|
|
||||||
}
|
|
@ -20,6 +20,8 @@
|
|||||||
|
|
||||||
#include <StdAfx.h>
|
#include <StdAfx.h>
|
||||||
|
|
||||||
|
#pragma comment(lib, "msxml6.lib")
|
||||||
|
|
||||||
|
|
||||||
#if EAPMETHOD_TYPE==21
|
#if EAPMETHOD_TYPE==21
|
||||||
#define _EAPMETHOD_PEER_UI eap::peer_ttls_ui
|
#define _EAPMETHOD_PEER_UI eap::peer_ttls_ui
|
||||||
|
@ -1,375 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2015-2016 Amebis
|
|
||||||
Copyright 2016 GÉANT
|
|
||||||
|
|
||||||
This file is part of GÉANTLink.
|
|
||||||
|
|
||||||
GÉANTLink is free software: you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
GÉANTLink is distributed in the hope that it will be useful, but
|
|
||||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <StdAfx.h>
|
|
||||||
|
|
||||||
#pragma comment(lib, "Msi.lib")
|
|
||||||
#pragma comment(lib, "msxml6.lib")
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace winstd;
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::config_ttls
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::config_ttls::config_ttls(_In_ module &mod) :
|
|
||||||
m_inner(NULL),
|
|
||||||
config_tls(mod)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_ttls::config_ttls(const _In_ config_ttls &other) :
|
|
||||||
m_inner(other.m_inner ? (config_method*)other.m_inner->clone() : NULL),
|
|
||||||
config_tls(other)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_ttls::config_ttls(_Inout_ config_ttls &&other) :
|
|
||||||
m_inner(other.m_inner),
|
|
||||||
config_tls(std::move(other))
|
|
||||||
{
|
|
||||||
other.m_inner = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_ttls::~config_ttls()
|
|
||||||
{
|
|
||||||
if (m_inner)
|
|
||||||
delete m_inner;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_ttls& eap::config_ttls::operator=(const _In_ config_ttls &other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(config_tls&)*this = other;
|
|
||||||
if (m_inner) delete m_inner;
|
|
||||||
m_inner = other.m_inner ? (config_method*)other.m_inner->clone() : NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_ttls& eap::config_ttls::operator=(_Inout_ config_ttls &&other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(config_tls&&)*this = std::move(other);
|
|
||||||
if (m_inner) delete m_inner;
|
|
||||||
m_inner = other.m_inner;
|
|
||||||
other.m_inner = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::config_ttls::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const
|
|
||||||
{
|
|
||||||
const bstr bstrNamespace(L"urn:ietf:params:xml:ns:yang:ietf-eap-metadata");
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
// <InnerAuthenticationMethod>
|
|
||||||
com_obj<IXMLDOMElement> pXmlElInnerAuthenticationMethod;
|
|
||||||
if ((dwResult = eapxml::create_element(pDoc, pConfigRoot, bstr(L"eap-metadata:InnerAuthenticationMethod"), bstr(L"InnerAuthenticationMethod"), bstrNamespace, &pXmlElInnerAuthenticationMethod)) != ERROR_SUCCESS) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <InnerAuthenticationMethod> element."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dynamic_cast<const config_pap*>(m_inner)) {
|
|
||||||
// <InnerAuthenticationMethod>/<NonEAPAuthMethod>
|
|
||||||
if ((dwResult = eapxml::put_element_value(pDoc, pXmlElInnerAuthenticationMethod, bstr(L"NonEAPAuthMethod"), bstrNamespace, bstr(L"PAP"))) != ERROR_SUCCESS) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <NonEAPAuthMethod> element."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// <InnerAuthenticationMethod>/...
|
|
||||||
if ((dwResult = m_inner->save(pDoc, pXmlElInnerAuthenticationMethod, ppEapError)) != ERROR_SUCCESS)
|
|
||||||
return dwResult;
|
|
||||||
} else
|
|
||||||
return dwResult = ERROR_NOT_SUPPORTED;
|
|
||||||
|
|
||||||
return config_tls::save(pDoc, pConfigRoot, ppEapError);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::config_ttls::load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
assert(ppEapError);
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
// Load inner authentication configuration (<InnerAuthenticationMethod>).
|
|
||||||
com_obj<IXMLDOMElement> pXmlElInnerAuthenticationMethod;
|
|
||||||
if ((dwResult = eapxml::select_element(pConfigRoot, bstr(L"eap-metadata:InnerAuthenticationMethod"), &pXmlElInnerAuthenticationMethod)) != ERROR_SUCCESS) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error selecting <InnerAuthenticationMethod> element."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine inner authentication type (<EAPMethod> and <NonEAPAuthMethod>).
|
|
||||||
//DWORD dwMethodID;
|
|
||||||
bstr bstrMethod;
|
|
||||||
/*if (eapxml::get_element_value(pXmlElInnerAuthenticationMethod, bstr(L"eap-metadata:EAPMethod"), &dwMethodID) == ERROR_SUCCESS &&
|
|
||||||
dwMethodID == EAP_TYPE_MSCHAPV2)
|
|
||||||
{
|
|
||||||
// MSCHAPv2
|
|
||||||
// TODO: Add MSCHAPv2 support.
|
|
||||||
return ERROR_NOT_SUPPORTED;
|
|
||||||
} else*/ if (eapxml::get_element_value(pXmlElInnerAuthenticationMethod, bstr(L"eap-metadata:NonEAPAuthMethod"), &bstrMethod) == ERROR_SUCCESS &&
|
|
||||||
CompareStringEx(LOCALE_NAME_INVARIANT, NORM_IGNORECASE, bstrMethod, bstrMethod.length(), L"PAP", -1, NULL, NULL, 0) == CSTR_EQUAL)
|
|
||||||
{
|
|
||||||
// PAP
|
|
||||||
assert(!m_inner);
|
|
||||||
m_inner = new eap::config_pap(m_module);
|
|
||||||
if ((dwResult = m_inner->load(pXmlElInnerAuthenticationMethod, ppEapError)) != ERROR_SUCCESS)
|
|
||||||
return dwResult;
|
|
||||||
} else {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = ERROR_NOT_SUPPORTED, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Unsupported inner authentication method."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
return config_tls::load(pConfigRoot, ppEapError);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::credentials_ttls
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::credentials_ttls::credentials_ttls(_In_ module &mod) : credentials_tls(mod)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_ttls::credentials_ttls(_In_ const credentials_ttls &other) :
|
|
||||||
m_inner(other.m_inner ? (credentials*)other.m_inner->clone() : NULL),
|
|
||||||
credentials_tls(other)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_ttls::credentials_ttls(_Inout_ credentials_ttls &&other) :
|
|
||||||
m_inner(other.m_inner),
|
|
||||||
credentials_tls(std::move(other))
|
|
||||||
{
|
|
||||||
other.m_inner = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_ttls& eap::credentials_ttls::operator=(_In_ const credentials_ttls &other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(credentials_tls&)*this = other;
|
|
||||||
|
|
||||||
if (m_inner) delete m_inner;
|
|
||||||
m_inner = other.m_inner ? (credentials*)other.m_inner->clone() : NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_ttls& eap::credentials_ttls::operator=(_Inout_ credentials_ttls &&other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(credentials_tls&)*this = std::move(other);
|
|
||||||
|
|
||||||
if (m_inner) delete m_inner;
|
|
||||||
m_inner = other.m_inner;
|
|
||||||
other.m_inner = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void eap::credentials_ttls::clear()
|
|
||||||
{
|
|
||||||
credentials_tls::clear();
|
|
||||||
if (m_inner)
|
|
||||||
m_inner->clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool eap::credentials_ttls::empty() const
|
|
||||||
{
|
|
||||||
return credentials_tls::empty() && (!m_inner || m_inner->empty());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_ttls::load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
assert(pConfigRoot);
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
if ((dwResult = credentials_tls::load(pConfigRoot, ppEapError)) != ERROR_SUCCESS)
|
|
||||||
return dwResult;
|
|
||||||
|
|
||||||
if (m_inner) {
|
|
||||||
com_obj<IXMLDOMNode> pXmlElInnerAuthenticationMethod;
|
|
||||||
if ((dwResult = eapxml::select_node(pConfigRoot, bstr(L"eap-metadata:InnerAuthenticationMethod"), &pXmlElInnerAuthenticationMethod)) != ERROR_SUCCESS) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = ERROR_NOT_FOUND, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error selecting <InnerAuthenticationMethod> element."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((dwResult = m_inner->load(pXmlElInnerAuthenticationMethod, ppEapError)) != ERROR_SUCCESS)
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_ttls::store(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) const
|
|
||||||
{
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
if ((dwResult = credentials_tls::store(pszTargetName, ppEapError)) != ERROR_SUCCESS)
|
|
||||||
return dwResult;
|
|
||||||
|
|
||||||
if (m_inner) {
|
|
||||||
if ((dwResult = m_inner->store(pszTargetName, ppEapError)) != ERROR_SUCCESS)
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_ttls::retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
if ((dwResult = credentials_tls::retrieve(pszTargetName, ppEapError)) != ERROR_SUCCESS)
|
|
||||||
return dwResult;
|
|
||||||
|
|
||||||
if (m_inner) {
|
|
||||||
if ((dwResult = m_inner->retrieve(pszTargetName, ppEapError)) != ERROR_SUCCESS)
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::session_ttls
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::session_ttls::session_ttls() : session()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::peer_ttls
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::peer_ttls::peer_ttls() : peer()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::peer_ttls::initialize(_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
// MSI's feature completeness check removed: It might invoke UI (prompt user for missing MSI),
|
|
||||||
// which would be disasterous in EapHost system service.
|
|
||||||
#if 0
|
|
||||||
// Perform the Microsoft Installer's feature completeness check manually.
|
|
||||||
// If execution got this far in the first place (dependent DLLs are present and loadable).
|
|
||||||
// Furthermore, this increments program usage counter.
|
|
||||||
if (MsiQueryFeatureState(_T(PRODUCT_VERSION_GUID), _T("featEAPTTLS")) != INSTALLSTATE_UNKNOWN)
|
|
||||||
MsiUseFeature(_T(PRODUCT_VERSION_GUID), _T("featEAPTTLS"));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::peer_ttls::shutdown(_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::peer_ttls::get_identity(
|
|
||||||
_In_ DWORD dwFlags,
|
|
||||||
_In_ DWORD dwConnectionDataSize,
|
|
||||||
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
|
|
||||||
_In_ DWORD dwUserDataSize,
|
|
||||||
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
|
||||||
_In_ HANDLE hTokenImpersonateUser,
|
|
||||||
_Out_ BOOL *pfInvokeUI,
|
|
||||||
_Out_ DWORD *pdwUserDataOutSize,
|
|
||||||
_Out_ BYTE **ppUserDataOut,
|
|
||||||
_Out_ WCHAR **ppwszIdentity,
|
|
||||||
_Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(dwFlags);
|
|
||||||
UNREFERENCED_PARAMETER(dwConnectionDataSize);
|
|
||||||
UNREFERENCED_PARAMETER(pConnectionData);
|
|
||||||
UNREFERENCED_PARAMETER(dwUserDataSize);
|
|
||||||
UNREFERENCED_PARAMETER(pUserData);
|
|
||||||
UNREFERENCED_PARAMETER(hTokenImpersonateUser);
|
|
||||||
UNREFERENCED_PARAMETER(pfInvokeUI);
|
|
||||||
UNREFERENCED_PARAMETER(pdwUserDataOutSize);
|
|
||||||
UNREFERENCED_PARAMETER(ppUserDataOut);
|
|
||||||
UNREFERENCED_PARAMETER(ppwszIdentity);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
DWORD dwResult = ERROR_NOT_SUPPORTED;
|
|
||||||
ETW_FN_DWORD(dwResult);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::peer_ttls::get_method_properties(
|
|
||||||
_In_ DWORD dwVersion,
|
|
||||||
_In_ DWORD dwFlags,
|
|
||||||
_In_ HANDLE hUserImpersonationToken,
|
|
||||||
_In_ DWORD dwEapConnDataSize,
|
|
||||||
_In_count_(dwEapConnDataSize) const BYTE *pEapConnData,
|
|
||||||
_In_ DWORD dwUserDataSize,
|
|
||||||
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
|
||||||
_Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
|
|
||||||
_Out_ EAP_ERROR **ppEapError) const
|
|
||||||
{
|
|
||||||
UNREFERENCED_PARAMETER(dwVersion);
|
|
||||||
UNREFERENCED_PARAMETER(dwFlags);
|
|
||||||
UNREFERENCED_PARAMETER(hUserImpersonationToken);
|
|
||||||
UNREFERENCED_PARAMETER(dwEapConnDataSize);
|
|
||||||
UNREFERENCED_PARAMETER(pEapConnData);
|
|
||||||
UNREFERENCED_PARAMETER(dwUserDataSize);
|
|
||||||
UNREFERENCED_PARAMETER(pUserData);
|
|
||||||
UNREFERENCED_PARAMETER(pMethodPropertyArray);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
DWORD dwResult = ERROR_NOT_SUPPORTED;
|
|
||||||
ETW_FN_DWORD(dwResult);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
@ -18,10 +18,26 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CredWrite", "CredWrite\CredWrite.vcxproj", "{2D3CE079-7EB1-4F47-B79E-F0310671ECCB}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CredWrite", "CredWrite\CredWrite.vcxproj", "{2D3CE079-7EB1-4F47-B79E-F0310671ECCB}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EAPMethodEvents", "EAPMethods\EAPMethodEvents\EAPMethodEvents.vcxproj", "{D63F24BD-92A0-4D6B-8B69-ED947E4D2B1B}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Events", "lib\Events\build\Events.vcxproj", "{D63F24BD-92A0-4D6B-8B69-ED947E4D2B1B}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EAPTTLSUI", "EAPMethods\EAPTTLSUI\EAPTTLSUI.vcxproj", "{DD7A97CA-F18E-43B7-95C4-D06E6A291624}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EAPTTLSUI", "EAPMethods\EAPTTLSUI\EAPTTLSUI.vcxproj", "{DD7A97CA-F18E-43B7-95C4-D06E6A291624}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EAPBase", "lib\EAPBase\build\EAPBase.vcxproj", "{AD6816A0-9600-4E01-8C49-39D03D1E791F}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EAPBase_UI", "lib\EAPBase_UI\build\EAPBase_UI.vcxproj", "{D4B54856-BE1F-4937-A8F7-495125BE76BE}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PAP", "lib\PAP\build\PAP.vcxproj", "{36B0CF8A-7794-46C3-8099-825BA962B4C7}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLS", "lib\TLS\build\TLS.vcxproj", "{4D40CB8A-812E-4F12-B23A-31AF743878E8}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TTLS", "lib\TTLS\build\TTLS.vcxproj", "{EE0EF0D9-A475-4038-8637-5754724F65B0}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PAP_UI", "lib\PAP_UI\build\PAP_UI.vcxproj", "{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLS_UI", "lib\TLS_UI\build\TLS_UI.vcxproj", "{9A25C261-8ADE-4938-8393-E857EF0E37E9}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TTLS_UI", "lib\TTLS_UI\build\TTLS_UI.vcxproj", "{42F0F0F4-C928-4860-A4E4-94991C2C3D90}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Win32 = Debug|Win32
|
Debug|Win32 = Debug|Win32
|
||||||
@ -70,15 +86,87 @@ Global
|
|||||||
{DD7A97CA-F18E-43B7-95C4-D06E6A291624}.Release|Win32.Build.0 = Release|Win32
|
{DD7A97CA-F18E-43B7-95C4-D06E6A291624}.Release|Win32.Build.0 = Release|Win32
|
||||||
{DD7A97CA-F18E-43B7-95C4-D06E6A291624}.Release|x64.ActiveCfg = Release|x64
|
{DD7A97CA-F18E-43B7-95C4-D06E6A291624}.Release|x64.ActiveCfg = Release|x64
|
||||||
{DD7A97CA-F18E-43B7-95C4-D06E6A291624}.Release|x64.Build.0 = Release|x64
|
{DD7A97CA-F18E-43B7-95C4-D06E6A291624}.Release|x64.Build.0 = Release|x64
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F}.Release|x64.Build.0 = Release|x64
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE}.Release|x64.Build.0 = Release|x64
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7}.Release|x64.Build.0 = Release|x64
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8}.Release|x64.Build.0 = Release|x64
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0}.Release|x64.Build.0 = Release|x64
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}.Release|x64.Build.0 = Release|x64
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9}.Release|x64.Build.0 = Release|x64
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(NestedProjects) = preSolution
|
GlobalSection(NestedProjects) = preSolution
|
||||||
{331B6077-E3E2-4867-B93E-9D3F57280DE7} = {60BAAC3D-DC98-4C19-BC40-1A86963DE86C}
|
{331B6077-E3E2-4867-B93E-9D3F57280DE7} = {60BAAC3D-DC98-4C19-BC40-1A86963DE86C}
|
||||||
{D63F24BD-92A0-4D6B-8B69-ED947E4D2B1B} = {60BAAC3D-DC98-4C19-BC40-1A86963DE86C}
|
|
||||||
{DD7A97CA-F18E-43B7-95C4-D06E6A291624} = {60BAAC3D-DC98-4C19-BC40-1A86963DE86C}
|
{DD7A97CA-F18E-43B7-95C4-D06E6A291624} = {60BAAC3D-DC98-4C19-BC40-1A86963DE86C}
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
{47399D91-7EB9-41DE-B521-514BA5DB0C43} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{D63F24BD-92A0-4D6B-8B69-ED947E4D2B1B} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{AD6816A0-9600-4E01-8C49-39D03D1E791F} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{D4B54856-BE1F-4937-A8F7-495125BE76BE} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{36B0CF8A-7794-46C3-8099-825BA962B4C7} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{4D40CB8A-812E-4F12-B23A-31AF743878E8} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{EE0EF0D9-A475-4038-8637-5754724F65B0} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{3D309C2E-64AB-4BC4-A16D-468571A2BC1A} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{9A25C261-8ADE-4938-8393-E857EF0E37E9} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
|
{42F0F0F4-C928-4860-A4E4-94991C2C3D90} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
|
||||||
{2D3CE079-7EB1-4F47-B79E-F0310671ECCB} = {7B5EC9B7-208C-426A-941D-DAF9271BD4A4}
|
{2D3CE079-7EB1-4F47-B79E-F0310671ECCB} = {7B5EC9B7-208C-426A-941D-DAF9271BD4A4}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
Binary file not shown.
12
lib/EAPBase/build/EAPBase.props
Normal file
12
lib/EAPBase/build/EAPBase.props
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
111
lib/EAPBase/build/EAPBase.vcxproj
Normal file
111
lib/EAPBase/build/EAPBase.vcxproj
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{AD6816A0-9600-4E01-8C49-39D03D1E791F}</ProjectGuid>
|
||||||
|
<RootNamespace>EAPBase</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="EAPBase.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="EAPBase.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="EAPBase.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="EAPBase.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\include\Config.h" />
|
||||||
|
<ClInclude Include="..\include\Credentials.h" />
|
||||||
|
<ClInclude Include="..\include\EAP.h" />
|
||||||
|
<ClInclude Include="..\include\EAPSerial.h" />
|
||||||
|
<ClInclude Include="..\include\EAPXML.h" />
|
||||||
|
<ClInclude Include="..\include\Module.h" />
|
||||||
|
<ClInclude Include="..\include\Session.h" />
|
||||||
|
<ClInclude Include="..\src\StdAfx.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\Config.cpp" />
|
||||||
|
<ClCompile Include="..\src\Credentials.cpp" />
|
||||||
|
<ClCompile Include="..\src\Module.cpp" />
|
||||||
|
<ClCompile Include="..\src\Session.cpp" />
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Events\build\Events.vcxproj">
|
||||||
|
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
56
lib/EAPBase/build/EAPBase.vcxproj.filters
Normal file
56
lib/EAPBase/build/EAPBase.vcxproj.filters
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\src\StdAfx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\EAP.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\EAPSerial.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\EAPXML.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Session.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Config.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Module.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Credentials.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Session.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Config.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Credentials.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Module.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
850
lib/EAPBase/include/Config.h
Normal file
850
lib/EAPBase/include/Config.h
Normal file
@ -0,0 +1,850 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sal.h>
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// Base class for configuration storage
|
||||||
|
///
|
||||||
|
class config;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base class for method configuration storage
|
||||||
|
///
|
||||||
|
class config_method;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Provider configuration
|
||||||
|
///
|
||||||
|
template <class _Tmeth> class config_provider;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Providers configuration
|
||||||
|
///
|
||||||
|
template <class _Tprov> class config_providers;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Password based method configuration
|
||||||
|
///
|
||||||
|
typedef config_method config_pass;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace eapserial
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// Packs a method configuration
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Configuration to pack
|
||||||
|
///
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_method &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a method configuration
|
||||||
|
///
|
||||||
|
/// \param[in] val Configuration to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
inline size_t get_pk_size(const eap::config_method &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a method configuration
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Configuration to unpack to
|
||||||
|
///
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_method &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Packs a provider configuration
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Configuration to pack
|
||||||
|
///
|
||||||
|
template <class _Tmeth> inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_provider<_Tmeth> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a provider configuration
|
||||||
|
///
|
||||||
|
/// \param[in] val Configuration to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
template <class _Tmeth> inline size_t get_pk_size(const eap::config_provider<_Tmeth> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a provider configuration
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Configuration to unpack to
|
||||||
|
///
|
||||||
|
template <class _Tmeth> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_provider<_Tmeth> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Packs a providers configuration
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Configuration to pack
|
||||||
|
///
|
||||||
|
template <class _Tprov> inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_providers<_Tprov> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a providers configuration
|
||||||
|
///
|
||||||
|
/// \param[in] val Configuration to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
template <class _Tprov> inline size_t get_pk_size(const eap::config_providers<_Tprov> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a providers configuration
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Configuration to unpack to
|
||||||
|
///
|
||||||
|
template <class _Tprov> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_providers<_Tprov> &val);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Module.h"
|
||||||
|
#include "EAPSerial.h"
|
||||||
|
#include "EAPXML.h"
|
||||||
|
|
||||||
|
#include <WinStd/COM.h>
|
||||||
|
#include <WinStd/Common.h>
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <eaptypes.h> // Must include after <Windows.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
class config
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs configuration
|
||||||
|
///
|
||||||
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
|
///
|
||||||
|
config(_In_ module &mod);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
config(_In_ const config &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
config(_Inout_ config &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Destructs configuration
|
||||||
|
///
|
||||||
|
virtual ~config();
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config& operator=(_In_ const config &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config& operator=(_Inout_ config &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Clones this configuration
|
||||||
|
///
|
||||||
|
/// \returns Pointer to cloned configuration
|
||||||
|
///
|
||||||
|
virtual config* clone() const = 0;
|
||||||
|
|
||||||
|
/// \name XML configuration management
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Save configuration to XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pDoc XML document
|
||||||
|
/// \param[in] pConfigRoot Suggested root element for saving configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load configuration from XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pConfigRoot Root element for loading configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) = 0;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
public:
|
||||||
|
module &m_module; ///< Reference of the EAP module
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class config_method : public config
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs configuration
|
||||||
|
///
|
||||||
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
|
///
|
||||||
|
config_method(_In_ module &mod);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
config_method(_In_ const config_method &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
config_method(_Inout_ config_method &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config_method& operator=(_In_ const config_method &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config_method& operator=(_Inout_ config_method &&other);
|
||||||
|
|
||||||
|
/// \name XML configuration management
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Save configuration to XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pDoc XML document
|
||||||
|
/// \param[in] pConfigRoot Suggested root element for saving configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load configuration from XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pConfigRoot Root element for loading configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns EAP method type of this configuration
|
||||||
|
///
|
||||||
|
/// \returns One of `eap::type_t` constants.
|
||||||
|
///
|
||||||
|
virtual type_t get_method_id() = 0;
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool m_allow_save; ///< Are credentials allowed to be saved to Windows Credential Manager?
|
||||||
|
std::wstring m_anonymous_identity; ///< Anonymous identity
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tmeth>
|
||||||
|
class config_provider : public config
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs configuration
|
||||||
|
///
|
||||||
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
|
///
|
||||||
|
config_provider(_In_ module &mod) : config(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
config_provider(_In_ const config_provider &other) :
|
||||||
|
m_id(other.m_id),
|
||||||
|
m_lbl_alt_credential(other.m_lbl_alt_credential),
|
||||||
|
m_lbl_alt_identity(other.m_lbl_alt_identity),
|
||||||
|
m_lbl_alt_password(other.m_lbl_alt_password),
|
||||||
|
m_methods(other.m_methods),
|
||||||
|
config(other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
config_provider(_Inout_ config_provider &&other) :
|
||||||
|
m_id(std::move(other.m_id)),
|
||||||
|
m_lbl_alt_credential(std::move(other.m_lbl_alt_credential)),
|
||||||
|
m_lbl_alt_identity(std::move(other.m_lbl_alt_identity)),
|
||||||
|
m_lbl_alt_password(std::move(other.m_lbl_alt_password)),
|
||||||
|
m_methods(std::move(other.m_methods)),
|
||||||
|
config(std::move(other))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config_provider& operator=(_In_ const config_provider &other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(config&)*this = other;
|
||||||
|
m_id = other.m_id;
|
||||||
|
m_lbl_alt_credential = other.m_lbl_alt_credential;
|
||||||
|
m_lbl_alt_identity = other.m_lbl_alt_identity;
|
||||||
|
m_lbl_alt_password = other.m_lbl_alt_password;
|
||||||
|
m_methods = other.m_methods;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config_provider& operator=(_Inout_ config_provider &&other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(config&&)*this = std::move(other);
|
||||||
|
m_id = std::move(other.m_id);
|
||||||
|
m_lbl_alt_credential = std::move(other.m_lbl_alt_credential);
|
||||||
|
m_lbl_alt_identity = std::move(other.m_lbl_alt_identity);
|
||||||
|
m_lbl_alt_password = std::move(other.m_lbl_alt_password);
|
||||||
|
m_methods = std::move(other.m_methods);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Clones configuration
|
||||||
|
///
|
||||||
|
/// \returns Pointer to cloned configuration
|
||||||
|
///
|
||||||
|
virtual config* clone() const { return new config_provider<_Tmeth>(*this); }
|
||||||
|
|
||||||
|
/// \name XML configuration management
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Save configuration to XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pDoc XML document
|
||||||
|
/// \param[in] pConfigRoot Suggested root element for saving configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const
|
||||||
|
{
|
||||||
|
const winstd::bstr bstrNamespace(L"urn:ietf:params:xml:ns:yang:ietf-eap-metadata");
|
||||||
|
DWORD dwResult;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
// <ID>
|
||||||
|
if (!m_id.empty())
|
||||||
|
if ((dwResult = eapxml::put_element_value(pDoc, pConfigRoot, winstd::bstr(L"ID"), bstrNamespace, winstd::bstr(m_id))) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <ID> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <ProviderInfo>
|
||||||
|
winstd::com_obj<IXMLDOMElement> pXmlElProviderInfo;
|
||||||
|
if ((dwResult = eapxml::create_element(pDoc, pConfigRoot, winstd::bstr(L"eap-metadata:ProviderInfo"), winstd::bstr(L"ProviderInfo"), bstrNamespace, &pXmlElProviderInfo)) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <ProviderInfo> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <ProviderInfo>/<CredentialPrompt>
|
||||||
|
if (!m_lbl_alt_credential.empty())
|
||||||
|
if ((dwResult = eapxml::put_element_value(pDoc, pXmlElProviderInfo, winstd::bstr(L"CredentialPrompt"), bstrNamespace, winstd::bstr(m_lbl_alt_credential))) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <CredentialPrompt> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <ProviderInfo>/<UserNameLabel>
|
||||||
|
if (!m_lbl_alt_identity.empty())
|
||||||
|
if ((dwResult = eapxml::put_element_value(pDoc, pXmlElProviderInfo, winstd::bstr(L"UserNameLabel"), bstrNamespace, winstd::bstr(m_lbl_alt_identity))) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <UserNameLabel> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <ProviderInfo>/<PasswordLabel>
|
||||||
|
if (!m_lbl_alt_password.empty())
|
||||||
|
if ((dwResult = eapxml::put_element_value(pDoc, pXmlElProviderInfo, winstd::bstr(L"PasswordLabel"), bstrNamespace, winstd::bstr(m_lbl_alt_password))) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <PasswordLabel> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <AuthenticationMethods>
|
||||||
|
winstd::com_obj<IXMLDOMElement> pXmlElAuthenticationMethods;
|
||||||
|
if ((dwResult = eapxml::create_element(pDoc, pConfigRoot, winstd::bstr(L"eap-metadata:AuthenticationMethods"), winstd::bstr(L"AuthenticationMethods"), bstrNamespace, &pXmlElAuthenticationMethods)) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <AuthenticationMethods> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::list<_Tmeth>::const_iterator method = m_methods.cbegin(), method_end = m_methods.cend(); method != method_end; ++method) {
|
||||||
|
// <AuthenticationMethod>
|
||||||
|
winstd::com_obj<IXMLDOMElement> pXmlElAuthenticationMethod;
|
||||||
|
if ((dwResult = eapxml::create_element(pDoc, winstd::bstr(L"AuthenticationMethod"), bstrNamespace, &pXmlElAuthenticationMethod))) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <AuthenticationMethod> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <AuthenticationMethod>/...
|
||||||
|
if ((dwResult = method->save(pDoc, pXmlElAuthenticationMethod, ppEapError)) != ERROR_SUCCESS)
|
||||||
|
return dwResult;
|
||||||
|
|
||||||
|
if (FAILED(hr = pXmlElAuthenticationMethods->appendChild(pXmlElAuthenticationMethod, NULL))) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = HRESULT_CODE(hr), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error appending <AuthenticationMethod> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load configuration from XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pConfigRoot Root element for loading configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
assert(pConfigRoot);
|
||||||
|
assert(ppEapError);
|
||||||
|
DWORD dwResult;
|
||||||
|
std::wstring lang;
|
||||||
|
LoadString(m_module.m_instance, 2, lang);
|
||||||
|
|
||||||
|
// <ID>
|
||||||
|
m_id.clear();
|
||||||
|
eapxml::get_element_value(pConfigRoot, winstd::bstr(L"eap-metadata:ID"), m_id);
|
||||||
|
|
||||||
|
// <ProviderInfo>
|
||||||
|
m_lbl_alt_credential.clear();
|
||||||
|
m_lbl_alt_identity.clear();
|
||||||
|
m_lbl_alt_password.clear();
|
||||||
|
winstd::com_obj<IXMLDOMElement> pXmlElProviderInfo;
|
||||||
|
if (eapxml::select_element(pConfigRoot, winstd::bstr(L"eap-metadata:ProviderInfo"), &pXmlElProviderInfo) == ERROR_SUCCESS) {
|
||||||
|
// <CredentialPrompt>
|
||||||
|
eapxml::get_element_localized(pXmlElProviderInfo, winstd::bstr(L"eap-metadata:CredentialPrompt"), lang.c_str(), m_lbl_alt_credential);
|
||||||
|
|
||||||
|
// <UserNameLabel>
|
||||||
|
eapxml::get_element_localized(pXmlElProviderInfo, winstd::bstr(L"eap-metadata:UserNameLabel"), lang.c_str(), m_lbl_alt_identity);
|
||||||
|
|
||||||
|
// <PasswordLabel>
|
||||||
|
eapxml::get_element_localized(pXmlElProviderInfo, winstd::bstr(L"eap-metadata:PasswordLabel"), lang.c_str(), m_lbl_alt_password);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Iterate authentication methods (<AuthenticationMethods>).
|
||||||
|
m_methods.clear();
|
||||||
|
winstd::com_obj<IXMLDOMNodeList> pXmlListMethods;
|
||||||
|
if ((dwResult = eapxml::select_nodes(pConfigRoot, winstd::bstr(L"eap-metadata:AuthenticationMethods/eap-metadata:AuthenticationMethod"), &pXmlListMethods)) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = ERROR_NOT_FOUND, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error selecting <AuthenticationMethods>/<AuthenticationMethod> elements."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
long lCount = 0;
|
||||||
|
pXmlListMethods->get_length(&lCount);
|
||||||
|
for (long i = 0; i < lCount; i++) {
|
||||||
|
winstd::com_obj<IXMLDOMNode> pXmlElMethod;
|
||||||
|
pXmlListMethods->get_item(i, &pXmlElMethod);
|
||||||
|
|
||||||
|
_Tmeth cfg(m_module);
|
||||||
|
|
||||||
|
// Check EAP method type (<EAPMethod>).
|
||||||
|
DWORD dwMethodID;
|
||||||
|
if (eapxml::get_element_value(pXmlElMethod, winstd::bstr(L"eap-metadata:EAPMethod"), &dwMethodID) == ERROR_SUCCESS) {
|
||||||
|
if ((type_t)dwMethodID != cfg.get_method_id()) {
|
||||||
|
// Wrong type.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load configuration.
|
||||||
|
dwResult = cfg.load(pXmlElMethod, ppEapError);
|
||||||
|
if (dwResult != ERROR_SUCCESS)
|
||||||
|
return dwResult;
|
||||||
|
|
||||||
|
// Add configuration to the list.
|
||||||
|
m_methods.push_back(std::move(cfg));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::wstring m_id; ///< Profile ID
|
||||||
|
winstd::tstring m_lbl_alt_credential; ///< Alternative label for credential prompt
|
||||||
|
winstd::tstring m_lbl_alt_identity; ///< Alternative label for identity prompt
|
||||||
|
winstd::tstring m_lbl_alt_password; ///< Alternative label for password prompt
|
||||||
|
std::list<_Tmeth> m_methods; ///< List of method configurations
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tprov>
|
||||||
|
class config_providers : public config
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs configuration
|
||||||
|
///
|
||||||
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
|
///
|
||||||
|
config_providers(_In_ module &mod) : config(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
config_providers(_In_ const config_providers &other) :
|
||||||
|
m_providers(other.m_providers),
|
||||||
|
config(other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
config_providers(_Inout_ config_providers &&other) :
|
||||||
|
m_providers(std::move(other.m_providers)),
|
||||||
|
config(std::move(other))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config_providers& operator=(_In_ const config_providers &other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(config&)*this = other;
|
||||||
|
m_providers = other.m_providers;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config_providers& operator=(_Inout_ config_providers &&other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(config&&)*this = std::move(other);
|
||||||
|
m_providers = std::move(other.m_providers);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Clones configuration
|
||||||
|
///
|
||||||
|
/// \returns Pointer to cloned configuration
|
||||||
|
///
|
||||||
|
virtual config* clone() const { return new config_providers<_Tprov>(*this); }
|
||||||
|
|
||||||
|
/// \name XML configuration management
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Save configuration to XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pDoc XML document
|
||||||
|
/// \param[in] pConfigRoot Suggested root element for saving configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const
|
||||||
|
{
|
||||||
|
const winstd::bstr bstrNamespace(L"urn:ietf:params:xml:ns:yang:ietf-eap-metadata");
|
||||||
|
DWORD dwResult;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
// Select <EAPIdentityProviderList> node.
|
||||||
|
winstd::com_obj<IXMLDOMNode> pXmlElIdentityProviderList;
|
||||||
|
if ((dwResult = eapxml::select_node(pConfigRoot, winstd::bstr(L"eap-metadata:EAPIdentityProviderList"), &pXmlElIdentityProviderList)) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = ERROR_NOT_FOUND, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error selecting <EAPIdentityProviderList> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::list<_Tprov>::const_iterator provider = m_providers.cbegin(), provider_end = m_providers.cend(); provider != provider_end; ++provider) {
|
||||||
|
// <EAPIdentityProvider>
|
||||||
|
winstd::com_obj<IXMLDOMElement> pXmlElIdentityProvider;
|
||||||
|
if ((dwResult = eapxml::create_element(pDoc, winstd::bstr(L"EAPIdentityProvider"), bstrNamespace, &pXmlElIdentityProvider))) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <EAPIdentityProvider> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <EAPIdentityProvider>/...
|
||||||
|
if ((dwResult = provider->save(pDoc, pXmlElIdentityProvider, ppEapError)) != ERROR_SUCCESS)
|
||||||
|
return dwResult;
|
||||||
|
|
||||||
|
if (FAILED(hr = pXmlElIdentityProviderList->appendChild(pXmlElIdentityProvider, NULL))) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = HRESULT_CODE(hr), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error appending <EAPIdentityProvider> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load configuration from XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pConfigRoot Root element for loading configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
assert(pConfigRoot);
|
||||||
|
assert(ppEapError);
|
||||||
|
DWORD dwResult;
|
||||||
|
|
||||||
|
// Iterate authentication providers (<EAPIdentityProvider>).
|
||||||
|
winstd::com_obj<IXMLDOMNodeList> pXmlListProviders;
|
||||||
|
if ((dwResult = eapxml::select_nodes(pConfigRoot, winstd::bstr(L"eap-metadata:EAPIdentityProviderList/eap-metadata:EAPIdentityProvider"), &pXmlListProviders)) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = ERROR_NOT_FOUND, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error selecting <EAPIdentityProviderList><EAPIdentityProvider> elements."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
long lCount = 0;
|
||||||
|
pXmlListProviders->get_length(&lCount);
|
||||||
|
for (long i = 0; i < lCount; i++) {
|
||||||
|
winstd::com_obj<IXMLDOMNode> pXmlElProvider;
|
||||||
|
pXmlListProviders->get_item(i, &pXmlElProvider);
|
||||||
|
|
||||||
|
_Tprov prov(m_module);
|
||||||
|
|
||||||
|
// Load provider.
|
||||||
|
dwResult = prov.load(pXmlElProvider, ppEapError);
|
||||||
|
if (dwResult != ERROR_SUCCESS)
|
||||||
|
return dwResult;
|
||||||
|
|
||||||
|
// Add provider to the list.
|
||||||
|
m_providers.push_back(std::move(prov));
|
||||||
|
}
|
||||||
|
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::list<_Tprov> m_providers; ///< List of provider configurations
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace eapserial
|
||||||
|
{
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_method &val)
|
||||||
|
{
|
||||||
|
pack(cursor, val.m_allow_save );
|
||||||
|
pack(cursor, val.m_anonymous_identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline size_t get_pk_size(const eap::config_method &val)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
get_pk_size(val.m_allow_save ) +
|
||||||
|
get_pk_size(val.m_anonymous_identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_method &val)
|
||||||
|
{
|
||||||
|
unpack(cursor, val.m_allow_save );
|
||||||
|
unpack(cursor, val.m_anonymous_identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tmeth>
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_provider<_Tmeth> &val)
|
||||||
|
{
|
||||||
|
pack(cursor, val.m_id );
|
||||||
|
pack(cursor, val.m_lbl_alt_credential);
|
||||||
|
pack(cursor, val.m_lbl_alt_identity );
|
||||||
|
pack(cursor, val.m_lbl_alt_password );
|
||||||
|
pack(cursor, val.m_methods );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tmeth>
|
||||||
|
inline size_t get_pk_size(const eap::config_provider<_Tmeth> &val)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
get_pk_size(val.m_id ) +
|
||||||
|
get_pk_size(val.m_lbl_alt_credential) +
|
||||||
|
get_pk_size(val.m_lbl_alt_identity ) +
|
||||||
|
get_pk_size(val.m_lbl_alt_password ) +
|
||||||
|
get_pk_size(val.m_methods );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tmeth>
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_provider<_Tmeth> &val)
|
||||||
|
{
|
||||||
|
unpack(cursor, val.m_id );
|
||||||
|
unpack(cursor, val.m_lbl_alt_credential);
|
||||||
|
unpack(cursor, val.m_lbl_alt_identity );
|
||||||
|
unpack(cursor, val.m_lbl_alt_password );
|
||||||
|
|
||||||
|
std::list<_Tmeth>::size_type count = *(const std::list<_Tmeth>::size_type*&)cursor;
|
||||||
|
cursor += sizeof(std::list<_Tmeth>::size_type);
|
||||||
|
val.m_methods.clear();
|
||||||
|
for (std::list<_Tmeth>::size_type i = 0; i < count; i++) {
|
||||||
|
_Tmeth el(val.m_module);
|
||||||
|
unpack(cursor, el);
|
||||||
|
val.m_methods.push_back(std::move(el));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tprov>
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_providers<_Tprov> &val)
|
||||||
|
{
|
||||||
|
pack(cursor, val.m_providers);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tprov>
|
||||||
|
inline size_t get_pk_size(const eap::config_providers<_Tprov> &val)
|
||||||
|
{
|
||||||
|
return get_pk_size(val.m_providers);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tprov>
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_providers<_Tprov> &val)
|
||||||
|
{
|
||||||
|
std::list<_Tprov>::size_type count = *(const std::list<_Tprov>::size_type*&)cursor;
|
||||||
|
cursor += sizeof(std::list<_Tprov>::size_type);
|
||||||
|
val.m_providers.clear();
|
||||||
|
for (std::list<_Tprov>::size_type i = 0; i < count; i++) {
|
||||||
|
_Tprov el(val.m_module);
|
||||||
|
unpack(cursor, el);
|
||||||
|
val.m_providers.push_back(std::move(el));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,137 +18,95 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "EAP.h"
|
#include <sal.h>
|
||||||
#include "EAPSerial.h"
|
|
||||||
|
|
||||||
namespace eap
|
namespace eap
|
||||||
{
|
{
|
||||||
class config_tls;
|
///
|
||||||
class credentials_tls;
|
/// Base class for method credential storage
|
||||||
|
///
|
||||||
|
class credentials;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Password based method credentials
|
||||||
|
///
|
||||||
|
class credentials_pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace eapserial
|
namespace eapserial
|
||||||
{
|
{
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_tls &val);
|
///
|
||||||
inline size_t get_pk_size(const eap::config_tls &val);
|
/// Packs a method credentials
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_tls &val);
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Credentials to pack
|
||||||
|
///
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::credentials &val);
|
||||||
|
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::credentials_tls &val);
|
///
|
||||||
inline size_t get_pk_size(const eap::credentials_tls &val);
|
/// Returns packed size of a method credentials
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::credentials_tls &val);
|
///
|
||||||
|
/// \param[in] val Credentials to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
inline size_t get_pk_size(const eap::credentials &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a method credentials
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Credentials to unpack to
|
||||||
|
///
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::credentials &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Packs a password based method credentials
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Credentials to pack
|
||||||
|
///
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::credentials_pass &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a password based method credentials
|
||||||
|
///
|
||||||
|
/// \param[in] val Credentials to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
inline size_t get_pk_size(const eap::credentials_pass &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a password based method credentials
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Credentials to unpack to
|
||||||
|
///
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::credentials_pass &val);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "Config.h"
|
||||||
|
#include "Module.h"
|
||||||
|
#include "EAPSerial.h"
|
||||||
|
|
||||||
|
#include "../../../include/Version.h"
|
||||||
|
|
||||||
|
#include <WinStd/Common.h>
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <eaptypes.h> // Must include after <Windows.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
#include <wincred.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
namespace eap
|
namespace eap
|
||||||
{
|
{
|
||||||
///
|
class credentials : public config
|
||||||
/// TLS configuration
|
|
||||||
///
|
|
||||||
class config_tls : public config_method
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
/// Constructs configuration
|
|
||||||
///
|
|
||||||
/// \param[in] mod Reference of the EAP module to use for global services
|
|
||||||
///
|
|
||||||
config_tls(_In_ module &mod);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Copies configuration
|
|
||||||
///
|
|
||||||
/// \param[in] other Configuration to copy from
|
|
||||||
///
|
|
||||||
config_tls(_In_ const config_tls &other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Moves configuration
|
|
||||||
///
|
|
||||||
/// \param[in] other Configuration to move from
|
|
||||||
///
|
|
||||||
config_tls(_Inout_ config_tls &&other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Copies configuration
|
|
||||||
///
|
|
||||||
/// \param[in] other Configuration to copy from
|
|
||||||
///
|
|
||||||
/// \returns Reference to this object
|
|
||||||
///
|
|
||||||
config_tls& operator=(_In_ const config_tls &other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Moves configuration
|
|
||||||
///
|
|
||||||
/// \param[in] other Configuration to move from
|
|
||||||
///
|
|
||||||
/// \returns Reference to this object
|
|
||||||
///
|
|
||||||
config_tls& operator=(_Inout_ config_tls &&other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Clones configuration
|
|
||||||
///
|
|
||||||
/// \returns Pointer to cloned configuration
|
|
||||||
///
|
|
||||||
virtual config* clone() const { return new config_tls(*this); }
|
|
||||||
|
|
||||||
/// \name XML configuration management
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Save configuration to XML document
|
|
||||||
///
|
|
||||||
/// \param[in] pDoc XML document
|
|
||||||
/// \param[in] pConfigRoot Suggested root element for saving configuration
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Load configuration from XML document
|
|
||||||
///
|
|
||||||
/// \param[in] pConfigRoot Root element for loading configuration
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError);
|
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns EAP method type of this configuration
|
|
||||||
///
|
|
||||||
/// \returns `eap::type_tls`
|
|
||||||
///
|
|
||||||
virtual eap::type_t get_method_id() { return eap::type_tls; }
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Adds CA to the list of trusted root CA's
|
|
||||||
///
|
|
||||||
/// \sa [CertCreateCertificateContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376033.aspx)
|
|
||||||
///
|
|
||||||
bool add_trusted_ca(_In_ DWORD dwCertEncodingType, _In_ const BYTE *pbCertEncoded, _In_ DWORD cbCertEncoded);
|
|
||||||
|
|
||||||
public:
|
|
||||||
std::list<winstd::cert_context> m_trusted_root_ca; ///< Trusted root CAs
|
|
||||||
std::list<std::string> m_server_names; ///< Acceptable authenticating server names
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// TLS credentials
|
|
||||||
///
|
|
||||||
class credentials_tls : public credentials
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
@ -156,21 +114,21 @@ namespace eap
|
|||||||
///
|
///
|
||||||
/// \param[in] mod Reference of the EAP module to use for global services
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
///
|
///
|
||||||
credentials_tls(_In_ module &mod);
|
credentials(_In_ module &mod);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Copies credentials
|
/// Copies credentials
|
||||||
///
|
///
|
||||||
/// \param[in] other Credentials to copy from
|
/// \param[in] other Credentials to copy from
|
||||||
///
|
///
|
||||||
credentials_tls(_In_ const credentials_tls &other);
|
credentials(_In_ const credentials &other);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Moves credentials
|
/// Moves credentials
|
||||||
///
|
///
|
||||||
/// \param[in] other Credentials to move from
|
/// \param[in] other Credentials to move from
|
||||||
///
|
///
|
||||||
credentials_tls(_Inout_ credentials_tls &&other);
|
credentials(_Inout_ credentials &&other);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Copies credentials
|
/// Copies credentials
|
||||||
@ -179,23 +137,16 @@ namespace eap
|
|||||||
///
|
///
|
||||||
/// \returns Reference to this object
|
/// \returns Reference to this object
|
||||||
///
|
///
|
||||||
credentials_tls& operator=(_In_ const credentials_tls &other);
|
credentials& operator=(_In_ const credentials &other);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Moves credentials
|
/// Moves credentials
|
||||||
///
|
///
|
||||||
/// \param[in] other Credentials to move from
|
/// \param[in] other Configuration to move from
|
||||||
///
|
///
|
||||||
/// \returns Reference to this object
|
/// \returns Reference to this object
|
||||||
///
|
///
|
||||||
credentials_tls& operator=(_Inout_ credentials_tls &&other);
|
credentials& operator=(_Inout_ credentials &&other);
|
||||||
|
|
||||||
///
|
|
||||||
/// Clones credentials
|
|
||||||
///
|
|
||||||
/// \returns Pointer to cloned credentials
|
|
||||||
///
|
|
||||||
virtual config* clone() const { return new credentials_tls(*this); }
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Resets credentials
|
/// Resets credentials
|
||||||
@ -210,6 +161,130 @@ namespace eap
|
|||||||
/// \name XML credentials management
|
/// \name XML credentials management
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Save credentials to XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pDoc XML document
|
||||||
|
/// \param[in] pConfigRoot Suggested root element for saving credentials
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns Always returns \c ERROR_NOT_SUPPORTED, as credentials are non-exportable.
|
||||||
|
///
|
||||||
|
virtual DWORD save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Storage
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Save credentials to Windows Credential Manager
|
||||||
|
///
|
||||||
|
/// \param[in] pszTargetName The name in Windows Credential Manager to store credentials as
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD store(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) const = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieve credentials from Windows Credential Manager
|
||||||
|
///
|
||||||
|
/// \param[in] pszTargetName The name in Windows Credential Manager to retrieve credentials from
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return target suffix for Windows Credential Manager credential name
|
||||||
|
///
|
||||||
|
virtual LPCTSTR target_suffix() const = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns target name for Windows Credential Manager credential name
|
||||||
|
///
|
||||||
|
/// \param[in] pszTargetName The name in Windows Credential Manager to retrieve credentials from
|
||||||
|
///
|
||||||
|
/// \returns Final target name to store/retrieve credentials in Windows Credential Manager
|
||||||
|
///
|
||||||
|
inline winstd::tstring target_name(_In_ LPCTSTR pszTargetName) const
|
||||||
|
{
|
||||||
|
winstd::tstring target_name(_T(PRODUCT_NAME_STR) _T("/"));
|
||||||
|
target_name += pszTargetName;
|
||||||
|
target_name += _T('/');
|
||||||
|
target_name += target_suffix();
|
||||||
|
assert(target_name.length() < CRED_MAX_GENERIC_TARGET_NAME_LENGTH);
|
||||||
|
return target_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::wstring m_identity; ///< Identity (username\@domain, certificate name etc.)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class credentials_pass : public credentials
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs credentials
|
||||||
|
///
|
||||||
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
|
///
|
||||||
|
credentials_pass(_In_ module &mod);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to copy from
|
||||||
|
///
|
||||||
|
credentials_pass(_In_ const credentials_pass &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to move from
|
||||||
|
///
|
||||||
|
credentials_pass(_Inout_ credentials_pass &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to copy from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
credentials_pass& operator=(_In_ const credentials_pass &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to move from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
credentials_pass& operator=(_Inout_ credentials_pass &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Resets credentials
|
||||||
|
///
|
||||||
|
virtual void clear();
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Test credentials if blank
|
||||||
|
///
|
||||||
|
virtual bool empty() const;
|
||||||
|
|
||||||
|
/// \name XML configuration management
|
||||||
|
/// @{
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Load credentials from XML document
|
/// Load credentials from XML document
|
||||||
///
|
///
|
||||||
@ -251,102 +326,56 @@ namespace eap
|
|||||||
///
|
///
|
||||||
virtual DWORD retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError);
|
virtual DWORD retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
///
|
|
||||||
/// Return target suffix for Windows Credential Manager credential name
|
|
||||||
///
|
|
||||||
virtual LPCTSTR target_suffix() const { return _T("TLS"); }
|
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<unsigned char> m_cert_hash; ///< Client certificate hash (certificates are kept in Personal Certificate Storage)
|
winstd::sanitizing_wstring m_password; ///< Password
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace eapserial
|
namespace eapserial
|
||||||
{
|
{
|
||||||
///
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::credentials &val)
|
||||||
/// Packs a TLS method configuration
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[in] val Configuration to pack
|
|
||||||
///
|
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_tls &val)
|
|
||||||
{
|
{
|
||||||
pack(cursor, (const eap::config_method&)val);
|
pack(cursor, (const eap::config&)val);
|
||||||
pack(cursor, val.m_trusted_root_ca );
|
pack(cursor, val.m_identity );
|
||||||
pack(cursor, val.m_server_names );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
inline size_t get_pk_size(const eap::credentials &val)
|
||||||
/// Returns packed size of a TLS method configuration
|
|
||||||
///
|
|
||||||
/// \param[in] val Configuration to pack
|
|
||||||
///
|
|
||||||
/// \returns Size of data when packed (in bytes)
|
|
||||||
///
|
|
||||||
inline size_t get_pk_size(const eap::config_tls &val)
|
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
get_pk_size((const eap::config_method&)val) +
|
get_pk_size((const eap::config&)val) +
|
||||||
get_pk_size(val.m_trusted_root_ca ) +
|
get_pk_size(val.m_identity );
|
||||||
get_pk_size(val.m_server_names );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::credentials &val)
|
||||||
/// Unpacks a TLS method configuration
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val Configuration to unpack to
|
|
||||||
///
|
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_tls &val)
|
|
||||||
{
|
{
|
||||||
unpack(cursor, (eap::config_method&)val );
|
unpack(cursor, (eap::config&)val);
|
||||||
unpack(cursor, val.m_trusted_root_ca);
|
unpack(cursor, val.m_identity );
|
||||||
unpack(cursor, val.m_server_names );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::credentials_pass &val)
|
||||||
/// Packs a TLS method credentials
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[in] val Credentials to pack
|
|
||||||
///
|
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::credentials_tls &val)
|
|
||||||
{
|
{
|
||||||
pack(cursor, (const eap::credentials&)val);
|
pack(cursor, (const eap::credentials&)val);
|
||||||
pack(cursor, val.m_cert_hash );
|
pack(cursor, val.m_password );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
inline size_t get_pk_size(const eap::credentials_pass &val)
|
||||||
/// Returns packed size of a TLS method credentials
|
|
||||||
///
|
|
||||||
/// \param[in] val Credentials to pack
|
|
||||||
///
|
|
||||||
/// \returns Size of data when packed (in bytes)
|
|
||||||
///
|
|
||||||
inline size_t get_pk_size(const eap::credentials_tls &val)
|
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
get_pk_size((const eap::credentials&)val) +
|
get_pk_size((const eap::credentials&)val) +
|
||||||
get_pk_size(val.m_cert_hash );
|
get_pk_size(val.m_password );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::credentials_pass &val)
|
||||||
/// Unpacks a TLS method credentials
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val Credentials to unpack to
|
|
||||||
///
|
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::credentials_tls &val)
|
|
||||||
{
|
{
|
||||||
unpack(cursor, (eap::credentials&)val);
|
unpack(cursor, (eap::credentials&)val);
|
||||||
unpack(cursor, val.m_cert_hash );
|
unpack(cursor, val.m_password );
|
||||||
}
|
}
|
||||||
}
|
}
|
52
lib/EAPBase/include/EAP.h
Normal file
52
lib/EAPBase/include/EAP.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IDR_EAP_KEY_PUBLIC 1
|
||||||
|
#define IDR_EAP_KEY_PRIVATE 2
|
||||||
|
|
||||||
|
#if !defined(RC_INVOKED) && !defined(MIDL_PASS)
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// EAP method numbers
|
||||||
|
///
|
||||||
|
/// \sa [Extensible Authentication Protocol (EAP) Registry (Chapter: Method Types)](https://www.iana.org/assignments/eap-numbers/eap-numbers.xhtml#eap-numbers-4)
|
||||||
|
///
|
||||||
|
enum type_t;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
enum type_t {
|
||||||
|
type_undefined = 0, ///< Undefined EAP type
|
||||||
|
type_tls = 13, ///< EAP-TLS
|
||||||
|
type_ttls = 21, ///< EAP-TTLS
|
||||||
|
type_peap = 25, ///< EAP-PEAP
|
||||||
|
type_mschapv2 = 26, ///< EAP-MSCHAPv2
|
||||||
|
type_pap = 192, ///< PAP (Not actually an EAP method; Moved to the Unassigned area)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -20,40 +20,12 @@
|
|||||||
|
|
||||||
#include <WinStd/Crypt.h>
|
#include <WinStd/Crypt.h>
|
||||||
|
|
||||||
|
#include <sal.h>
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace eapserial
|
|
||||||
{
|
|
||||||
template <class T> inline void pack(_Inout_ unsigned char *&cursor, _In_ const T &val);
|
|
||||||
template <class T> inline size_t get_pk_size(_In_ const T &val);
|
|
||||||
template <class T> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ T &val);
|
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline size_t get_pk_size(const std::basic_string<_Elem, _Traits, _Ax> &val);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::basic_string<_Elem, _Traits, _Ax> &val);
|
|
||||||
|
|
||||||
template<class _Traits, class _Ax> inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val);
|
|
||||||
template<class _Traits, class _Ax> inline size_t get_pk_size(const std::basic_string<wchar_t, _Traits, _Ax> &val);
|
|
||||||
template<class _Traits, class _Ax> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &val);
|
|
||||||
|
|
||||||
template<class _Ty, class _Ax> inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::vector<_Ty, _Ax> &val);
|
|
||||||
template<class _Ty, class _Ax> inline size_t get_pk_size(const std::vector<_Ty, _Ax> &val);
|
|
||||||
template<class _Ty, class _Ax> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::vector<_Ty, _Ax> &val);
|
|
||||||
|
|
||||||
template<class _Ty, class _Ax> inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::list<_Ty, _Ax> &val);
|
|
||||||
template<class _Ty, class _Ax> inline size_t get_pk_size(const std::list<_Ty, _Ax> &val);
|
|
||||||
template<class _Ty, class _Ax> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::list<_Ty, _Ax> &val);
|
|
||||||
|
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const winstd::cert_context &val);
|
|
||||||
inline size_t get_pk_size(const winstd::cert_context &val);
|
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ winstd::cert_context &val);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
namespace eapserial
|
namespace eapserial
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
@ -62,13 +34,7 @@ namespace eapserial
|
|||||||
/// \param[inout] cursor Memory cursor
|
/// \param[inout] cursor Memory cursor
|
||||||
/// \param[in] val Variable with data to pack
|
/// \param[in] val Variable with data to pack
|
||||||
///
|
///
|
||||||
template <class T>
|
template <class T> inline void pack(_Inout_ unsigned char *&cursor, _In_ const T &val);
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const T &val)
|
|
||||||
{
|
|
||||||
memcpy(cursor, &val, sizeof(T));
|
|
||||||
cursor += sizeof(T);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Returns packed size of a primitive data
|
/// Returns packed size of a primitive data
|
||||||
@ -77,6 +43,155 @@ namespace eapserial
|
|||||||
///
|
///
|
||||||
/// \returns Size of data when packed (in bytes)
|
/// \returns Size of data when packed (in bytes)
|
||||||
///
|
///
|
||||||
|
template <class T> inline size_t get_pk_size(_In_ const T &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a primitive data
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Variable to receive unpacked value
|
||||||
|
///
|
||||||
|
template <class T> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ T &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Packs a string
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val String to pack
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a string
|
||||||
|
///
|
||||||
|
/// \param[in] val String to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline size_t get_pk_size(const std::basic_string<_Elem, _Traits, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a string
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val String to unpack to
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::basic_string<_Elem, _Traits, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Packs a wide string
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val String to pack
|
||||||
|
///
|
||||||
|
template<class _Traits, class _Ax> inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a wide string
|
||||||
|
///
|
||||||
|
/// \param[in] val String to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
template<class _Traits, class _Ax> inline size_t get_pk_size(const std::basic_string<wchar_t, _Traits, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a wide string
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val String to unpack to
|
||||||
|
///
|
||||||
|
template<class _Traits, class _Ax> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Packs a vector
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Vector to pack
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::vector<_Ty, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a vector
|
||||||
|
///
|
||||||
|
/// \param[in] val Vector to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline size_t get_pk_size(const std::vector<_Ty, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a vector
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Vector to unpack to
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::vector<_Ty, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Packs a list
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val List to pack
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::list<_Ty, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a list
|
||||||
|
///
|
||||||
|
/// \param[in] val List to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline size_t get_pk_size(const std::list<_Ty, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a list
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val List to unpack to
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::list<_Ty, _Ax> &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Packs a certificate context
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Certificate context to pack
|
||||||
|
///
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const winstd::cert_context &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a certificate context
|
||||||
|
///
|
||||||
|
/// \param[in] val Certificate context to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
inline size_t get_pk_size(const winstd::cert_context &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a certificate context
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Certificate context to unpack to
|
||||||
|
///
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ winstd::cert_context &val);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
namespace eapserial
|
||||||
|
{
|
||||||
|
template <class T>
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const T &val)
|
||||||
|
{
|
||||||
|
memcpy(cursor, &val, sizeof(T));
|
||||||
|
cursor += sizeof(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline size_t get_pk_size(_In_ const T &val)
|
inline size_t get_pk_size(_In_ const T &val)
|
||||||
{
|
{
|
||||||
@ -85,12 +200,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Unpacks a primitive data
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val Variable to receive unpacked value
|
|
||||||
///
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ T &val)
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ T &val)
|
||||||
{
|
{
|
||||||
@ -99,12 +208,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Packs a string
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[in] val String to pack
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val)
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -118,13 +221,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns packed size of a string
|
|
||||||
///
|
|
||||||
/// \param[in] val String to pack
|
|
||||||
///
|
|
||||||
/// \returns Size of data when packed (in bytes)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline size_t get_pk_size(const std::basic_string<_Elem, _Traits, _Ax> &val)
|
inline size_t get_pk_size(const std::basic_string<_Elem, _Traits, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -132,12 +228,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Unpacks a string
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val String to unpack to
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::basic_string<_Elem, _Traits, _Ax> &val)
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::basic_string<_Elem, _Traits, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -149,12 +239,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Packs a wide string
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[in] val String to pack
|
|
||||||
///
|
|
||||||
template<class _Traits, class _Ax>
|
template<class _Traits, class _Ax>
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val)
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -164,13 +248,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns packed size of a wide string
|
|
||||||
///
|
|
||||||
/// \param[in] val String to pack
|
|
||||||
///
|
|
||||||
/// \returns Size of data when packed (in bytes)
|
|
||||||
///
|
|
||||||
template<class _Traits, class _Ax>
|
template<class _Traits, class _Ax>
|
||||||
inline size_t get_pk_size(const std::basic_string<wchar_t, _Traits, _Ax> &val)
|
inline size_t get_pk_size(const std::basic_string<wchar_t, _Traits, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -178,12 +255,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Unpacks a wide string
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val String to unpack to
|
|
||||||
///
|
|
||||||
template<class _Traits, class _Ax>
|
template<class _Traits, class _Ax>
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &val)
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -193,12 +264,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Packs a vector
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[in] val Vector to pack
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::vector<_Ty, _Ax> &val)
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::vector<_Ty, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -213,13 +278,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns packed size of a vector
|
|
||||||
///
|
|
||||||
/// \param[in] val Vector to pack
|
|
||||||
///
|
|
||||||
/// \returns Size of data when packed (in bytes)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline size_t get_pk_size(const std::vector<_Ty, _Ax> &val)
|
inline size_t get_pk_size(const std::vector<_Ty, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -232,12 +290,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Unpacks a vector
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val Vector to unpack to
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::vector<_Ty, _Ax> &val)
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::vector<_Ty, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -256,12 +308,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Packs a list
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[in] val List to pack
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::list<_Ty, _Ax> &val)
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const std::list<_Ty, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -276,13 +322,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns packed size of a list
|
|
||||||
///
|
|
||||||
/// \param[in] val List to pack
|
|
||||||
///
|
|
||||||
/// \returns Size of data when packed (in bytes)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline size_t get_pk_size(const std::list<_Ty, _Ax> &val)
|
inline size_t get_pk_size(const std::list<_Ty, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -295,12 +334,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Unpacks a list
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val List to unpack to
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::list<_Ty, _Ax> &val)
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ std::list<_Ty, _Ax> &val)
|
||||||
{
|
{
|
||||||
@ -318,12 +351,6 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Packs a certificate context
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[in] val Certificate context to pack
|
|
||||||
///
|
|
||||||
inline void pack(_Inout_ unsigned char *&cursor, _In_ const winstd::cert_context &val)
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const winstd::cert_context &val)
|
||||||
{
|
{
|
||||||
*(DWORD*&)cursor = val->dwCertEncodingType;
|
*(DWORD*&)cursor = val->dwCertEncodingType;
|
||||||
@ -337,25 +364,12 @@ namespace eapserial
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns packed size of a certificate context
|
|
||||||
///
|
|
||||||
/// \param[in] val Certificate context to pack
|
|
||||||
///
|
|
||||||
/// \returns Size of data when packed (in bytes)
|
|
||||||
///
|
|
||||||
inline size_t get_pk_size(const winstd::cert_context &val)
|
inline size_t get_pk_size(const winstd::cert_context &val)
|
||||||
{
|
{
|
||||||
return sizeof(DWORD) + sizeof(DWORD) + val->cbCertEncoded;
|
return sizeof(DWORD) + sizeof(DWORD) + val->cbCertEncoded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Unpacks a certificate context
|
|
||||||
///
|
|
||||||
/// \param[inout] cursor Memory cursor
|
|
||||||
/// \param[out] val Certificate context to unpack to
|
|
||||||
///
|
|
||||||
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ winstd::cert_context &val)
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ winstd::cert_context &val)
|
||||||
{
|
{
|
||||||
DWORD dwCertEncodingType = *(DWORD*&)cursor;
|
DWORD dwCertEncodingType = *(DWORD*&)cursor;
|
@ -18,11 +18,9 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <WinStd/Base64.h>
|
|
||||||
#include <WinStd/COM.h>
|
|
||||||
#include <WinStd/Hex.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <MsXml.h>
|
#include <MsXml.h>
|
||||||
|
#include <msxml6.h>
|
||||||
|
#include <sal.h>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -54,6 +52,12 @@ namespace eapxml
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <WinStd/Base64.h>
|
||||||
|
#include <WinStd/COM.h>
|
||||||
|
#include <WinStd/Hex.h>
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
|
||||||
namespace eapxml
|
namespace eapxml
|
||||||
{
|
{
|
313
lib/EAPBase/include/Module.h
Normal file
313
lib/EAPBase/include/Module.h
Normal file
@ -0,0 +1,313 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define ETW_ERROR(kw, f, ...) m_ep.write(TRACE_LEVEL_ERROR , kw, _T(__FUNCTION__) _T(" ") f, ##__VA_ARGS__)
|
||||||
|
#define ETW_WARNING(kw, f, ...) m_ep.write(TRACE_LEVEL_WARNING , kw, _T(__FUNCTION__) _T(" ") f, ##__VA_ARGS__)
|
||||||
|
#define ETW_INFO(kw, f, ...) m_ep.write(TRACE_LEVEL_INFORMATION, kw, _T(__FUNCTION__) _T(" ") f, ##__VA_ARGS__)
|
||||||
|
#define ETW_VERBOSE(kw, f, ...) m_ep.write(TRACE_LEVEL_VERBOSE , kw, _T(__FUNCTION__) _T(" ") f, ##__VA_ARGS__)
|
||||||
|
#define ETW_FN_VOID winstd::event_fn_auto < &EAPMETHOD_TRACE_EVT_FN_CALL, &EAPMETHOD_TRACE_EVT_FN_RETURN > _event_auto(m_ep, __FUNCTION__)
|
||||||
|
#define ETW_FN_DWORD(res) winstd::event_fn_auto_ret<DWORD , &EAPMETHOD_TRACE_EVT_FN_CALL, &EAPMETHOD_TRACE_EVT_FN_RETURN_DWORD > _event_auto(m_ep, __FUNCTION__, res)
|
||||||
|
#define ETW_FN_HRESULT(res) winstd::event_fn_auto_ret<HRESULT, &EAPMETHOD_TRACE_EVT_FN_CALL, &EAPMETHOD_TRACE_EVT_FN_RETURN_HRESULT> _event_auto(m_ep, __FUNCTION__, res)
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// EAP module base class
|
||||||
|
///
|
||||||
|
/// Provides basic services to EAP methods.
|
||||||
|
///
|
||||||
|
class module;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAP peer base class
|
||||||
|
///
|
||||||
|
/// A group of methods all EAP peers must or should implement.
|
||||||
|
///
|
||||||
|
template <class _Tcfg, class _Tid, class _Tint, class _Tintres> class peer_base;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAP peer base class
|
||||||
|
///
|
||||||
|
/// A group of methods all EAP peers must or should implement.
|
||||||
|
///
|
||||||
|
template <class _Tcfg, class _Tid, class _Tint, class _Tintres> class peer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "EAP.h"
|
||||||
|
|
||||||
|
#include <WinStd/Win.h>
|
||||||
|
#include <WinStd/ETW.h>
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <eaptypes.h> // Must include after <Windows.h>
|
||||||
|
#include <sal.h>
|
||||||
|
|
||||||
|
#include <EventsETW.h> // Must include after <Windows.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
class module
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs a module for the given EAP type
|
||||||
|
///
|
||||||
|
module(_In_ type_t eap_method);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Destructs the module
|
||||||
|
///
|
||||||
|
virtual ~module();
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Allocate a EAP_ERROR and fill it according to dwErrorCode
|
||||||
|
///
|
||||||
|
EAP_ERROR* make_error(_In_ DWORD dwErrorCode, _In_ DWORD dwReasonCode, _In_ LPCGUID pRootCauseGuid, _In_ LPCGUID pRepairGuid, _In_ LPCGUID pHelpLinkGuid, _In_z_ LPCWSTR pszRootCauseString, _In_z_ LPCWSTR pszRepairString) const;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Allocate BLOB
|
||||||
|
///
|
||||||
|
BYTE* alloc_memory(_In_ size_t size);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Free BLOB allocated with this peer
|
||||||
|
///
|
||||||
|
void free_memory(_In_ BYTE *ptr);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Free EAP_ERROR allocated with `make_error()` method
|
||||||
|
///
|
||||||
|
void free_error_memory(_In_ EAP_ERROR *err);
|
||||||
|
|
||||||
|
public:
|
||||||
|
HINSTANCE m_instance; ///< Windows module instance
|
||||||
|
const type_t m_eap_method; ///< EAP method type
|
||||||
|
|
||||||
|
protected:
|
||||||
|
winstd::heap m_heap; ///< Heap
|
||||||
|
mutable winstd::event_provider m_ep; ///< Event Provider
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tcfg, class _Tid, class _Tint, class _Tintres>
|
||||||
|
class peer_base : public module
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Configuration data type
|
||||||
|
///
|
||||||
|
typedef config_providers<config_provider<_Tcfg> > config_type;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Identity data type
|
||||||
|
///
|
||||||
|
typedef _Tid identity_type;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Interactive request data type
|
||||||
|
///
|
||||||
|
typedef _Tint interactive_request_type;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Interactive response data type
|
||||||
|
///
|
||||||
|
typedef _Tintres interactive_response_type;
|
||||||
|
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs a EAP peer module for the given EAP type
|
||||||
|
///
|
||||||
|
peer_base(_In_ type_t eap_method) : module(eap_method) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <class _Tcfg, class _Tid, class _Tint, class _Tintres>
|
||||||
|
class peer : public peer_base<_Tcfg, _Tid, _Tint, _Tintres>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs a EAP peer module for the given EAP type
|
||||||
|
///
|
||||||
|
peer(_In_ type_t eap_method) : peer_base<_Tcfg, _Tid, _Tint, _Tintres>(eap_method) {}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Initializes an EAP peer method for EAPHost.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerGetInfo function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363613.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD initialize(_Out_ EAP_ERROR **ppEapError) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Shuts down the EAP method and prepares to unload its corresponding DLL.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerShutdown function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363627.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD shutdown(_Out_ EAP_ERROR **ppEapError) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns the user data and user identity after being called by EAPHost.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerGetIdentity function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363607.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD get_identity(
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ DWORD dwConnectionDataSize,
|
||||||
|
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
|
||||||
|
_In_ DWORD dwUserDataSize,
|
||||||
|
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
||||||
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
|
_Out_ BOOL *pfInvokeUI,
|
||||||
|
_Out_ DWORD *pdwUserDataOutSize,
|
||||||
|
_Out_ BYTE **ppUserDataOut,
|
||||||
|
_Out_ WCHAR **ppwszIdentity,
|
||||||
|
_Out_ EAP_ERROR **ppEapError) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Defines the implementation of an EAP method-specific function that retrieves the properties of an EAP method given the connection and user data.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerGetMethodProperties function](https://msdn.microsoft.com/en-us/library/windows/desktop/hh706636.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD get_method_properties(
|
||||||
|
_In_ DWORD dwVersion,
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ HANDLE hUserImpersonationToken,
|
||||||
|
_In_ DWORD dwEapConnDataSize,
|
||||||
|
_In_count_(dwEapConnDataSize) const BYTE *pEapConnData,
|
||||||
|
_In_ DWORD dwUserDataSize,
|
||||||
|
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
||||||
|
_Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
|
||||||
|
_Out_ EAP_ERROR **ppEapError) const = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Defines the implementation of an EAP method-specific function that obtains the EAP Single-Sign-On (SSO) credential input fields for an EAP method.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerQueryCredentialInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363622.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD query_credential_input_fields(
|
||||||
|
_In_ HANDLE hUserImpersonationToken,
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ DWORD dwEapConnDataSize,
|
||||||
|
_In_count_(dwEapConnDataSize) const BYTE *pEapConnData,
|
||||||
|
_Out_ EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldsArray,
|
||||||
|
_Out_ EAP_ERROR **ppEapError) const
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(hUserImpersonationToken);
|
||||||
|
UNREFERENCED_PARAMETER(dwFlags);
|
||||||
|
UNREFERENCED_PARAMETER(dwEapConnDataSize);
|
||||||
|
UNREFERENCED_PARAMETER(pEapConnData);
|
||||||
|
UNREFERENCED_PARAMETER(pEapConfigInputFieldsArray);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
DWORD dwResult = ERROR_NOT_SUPPORTED;
|
||||||
|
ETW_FN_DWORD(dwResult);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Defines the implementation of an EAP method function that obtains the user BLOB data provided in an interactive Single-Sign-On (SSO) UI raised on the supplicant.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerQueryUserBlobFromCredentialInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204697.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD query_user_blob_from_credential_input_fields(
|
||||||
|
_In_ HANDLE hUserImpersonationToken,
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ DWORD dwEapConnDataSize,
|
||||||
|
_In_count_(dwEapConnDataSize) const BYTE *pEapConnData,
|
||||||
|
_In_ const EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldArray,
|
||||||
|
_Inout_ DWORD *pdwUsersBlobSize,
|
||||||
|
_Inout_ BYTE **ppUserBlob,
|
||||||
|
_Out_ EAP_ERROR **ppEapError) const
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(hUserImpersonationToken);
|
||||||
|
UNREFERENCED_PARAMETER(dwFlags);
|
||||||
|
UNREFERENCED_PARAMETER(dwEapConnDataSize);
|
||||||
|
UNREFERENCED_PARAMETER(pEapConnData);
|
||||||
|
UNREFERENCED_PARAMETER(pEapConfigInputFieldArray);
|
||||||
|
UNREFERENCED_PARAMETER(pdwUsersBlobSize);
|
||||||
|
UNREFERENCED_PARAMETER(ppUserBlob);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
DWORD dwResult = ERROR_NOT_SUPPORTED;
|
||||||
|
ETW_FN_DWORD(dwResult);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Defines the implementation of an EAP method API that provides the input fields for interactive UI components to be raised on the supplicant.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerQueryInteractiveUIInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204695.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD query_interactive_ui_input_fields(
|
||||||
|
_In_ DWORD dwVersion,
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ DWORD dwUIContextDataSize,
|
||||||
|
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
|
||||||
|
_Out_ EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
|
||||||
|
_Out_ EAP_ERROR **ppEapError,
|
||||||
|
_Inout_ LPVOID *pvReserved) const
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(dwVersion);
|
||||||
|
UNREFERENCED_PARAMETER(dwFlags);
|
||||||
|
UNREFERENCED_PARAMETER(dwUIContextDataSize);
|
||||||
|
UNREFERENCED_PARAMETER(pUIContextData);
|
||||||
|
UNREFERENCED_PARAMETER(pEapInteractiveUIData);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
UNREFERENCED_PARAMETER(pvReserved);
|
||||||
|
|
||||||
|
DWORD dwResult = ERROR_NOT_SUPPORTED;
|
||||||
|
ETW_FN_DWORD(dwResult);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Converts user information into a user BLOB that can be consumed by EAPHost run-time functions.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerQueryUIBlobFromInteractiveUIInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204696.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD query_ui_blob_from_interactive_ui_input_fields(
|
||||||
|
_In_ DWORD dwVersion,
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ DWORD dwUIContextDataSize,
|
||||||
|
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
|
||||||
|
_In_ const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
|
||||||
|
_Out_ DWORD *pdwDataFromInteractiveUISize,
|
||||||
|
_Out_ BYTE **ppDataFromInteractiveUI,
|
||||||
|
_Out_ EAP_ERROR **ppEapError,
|
||||||
|
_Inout_ LPVOID *ppvReserved) const
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(dwVersion);
|
||||||
|
UNREFERENCED_PARAMETER(dwFlags);
|
||||||
|
UNREFERENCED_PARAMETER(dwUIContextDataSize);
|
||||||
|
UNREFERENCED_PARAMETER(pUIContextData);
|
||||||
|
UNREFERENCED_PARAMETER(pEapInteractiveUIData);
|
||||||
|
UNREFERENCED_PARAMETER(pdwDataFromInteractiveUISize);
|
||||||
|
UNREFERENCED_PARAMETER(ppDataFromInteractiveUI);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
UNREFERENCED_PARAMETER(ppvReserved);
|
||||||
|
|
||||||
|
DWORD dwResult = ERROR_NOT_SUPPORTED;
|
||||||
|
ETW_FN_DWORD(dwResult);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
164
lib/EAPBase/include/Session.h
Normal file
164
lib/EAPBase/include/Session.h
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// EAP session
|
||||||
|
///
|
||||||
|
class session;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <eaptypes.h> // Must include after <Windows.h>
|
||||||
|
extern "C" {
|
||||||
|
#include <eapmethodpeerapis.h>
|
||||||
|
}
|
||||||
|
#include <sal.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
class session
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs a session
|
||||||
|
///
|
||||||
|
session();
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Destructs the session
|
||||||
|
///
|
||||||
|
virtual ~session();
|
||||||
|
|
||||||
|
/// \name Session start/end
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Starts an EAP authentication session on the peer EAPHost using the EAP method.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerBeginSession function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363600.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD begin(
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
|
_In_ DWORD dwConnectionDataSize,
|
||||||
|
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
|
||||||
|
_In_ DWORD dwUserDataSize,
|
||||||
|
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
||||||
|
_In_ DWORD dwMaxSendPacketSize,
|
||||||
|
_Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Ends an EAP authentication session for the EAP method.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerEndSession function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363604.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD end(_Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Packet processing
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Processes a packet received by EAPHost from a supplicant.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerProcessRequestPacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363621.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD process_request_packet(
|
||||||
|
_In_ DWORD dwReceivedPacketSize,
|
||||||
|
_In_bytecount_(dwReceivedPacketSize) const EapPacket *pReceivedPacket,
|
||||||
|
_Out_ EapPeerMethodOutput *pEapOutput,
|
||||||
|
_Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Obtains a response packet from the EAP method.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerGetResponsePacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363610.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD get_response_packet(
|
||||||
|
_Inout_ DWORD *pdwSendPacketSize,
|
||||||
|
_Inout_bytecap_(*dwSendPacketSize) EapPacket *pSendPacket,
|
||||||
|
_Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Obtains the result of an authentication session from the EAP method.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerGetResult function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363611.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD get_result(_In_ EapPeerMethodResultReason reason, _Out_ EapPeerMethodResult *ppResult, _Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name UI interaction
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Obtains the user interface context from the EAP method.
|
||||||
|
///
|
||||||
|
/// \note This function is always followed by the `EapPeerInvokeInteractiveUI()` function, which is followed by the `EapPeerSetUIContext()` function.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerGetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363612.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD get_ui_context(
|
||||||
|
_Out_ DWORD *pdwUIContextDataSize,
|
||||||
|
_Out_ BYTE **ppUIContextData,
|
||||||
|
_Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Provides a user interface context to the EAP method.
|
||||||
|
///
|
||||||
|
/// \note This function is called after the UI has been raised through the `EapPeerGetUIContext()` function.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerSetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363626.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD set_ui_context(
|
||||||
|
_In_ DWORD dwUIContextDataSize,
|
||||||
|
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
|
||||||
|
_In_ const EapPeerMethodOutput *pEapOutput,
|
||||||
|
_Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Response attributes
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Obtains an array of EAP response attributes from the EAP method.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerGetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363609.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD get_response_attributes(_Out_ EapAttributes *pAttribs, _Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Provides an updated array of EAP response attributes to the EAP method.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerSetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363625.aspx)
|
||||||
|
///
|
||||||
|
virtual DWORD set_response_attributes(const _In_ EapAttributes *pAttribs, _Out_ EapPeerMethodOutput *pEapOutput, _Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
};
|
||||||
|
}
|
168
lib/EAPBase/src/Config.cpp
Normal file
168
lib/EAPBase/src/Config.cpp
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace winstd;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::config
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::config::config(_In_ module &mod) :
|
||||||
|
m_module(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config::config(_In_ const config &other) :
|
||||||
|
m_module(other.m_module)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config::config(_Inout_ config &&other) :
|
||||||
|
m_module(other.m_module)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config::~config()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config& eap::config::operator=(_In_ const config &other)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(other);
|
||||||
|
assert(&m_module == &other.m_module); // Copy configuration within same module only!
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config& eap::config::operator=(_Inout_ config &&other)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(other);
|
||||||
|
assert(&m_module == &other.m_module); // Copy configuration within same module only!
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::config_method
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::config_method::config_method(_In_ module &mod) :
|
||||||
|
m_allow_save(true),
|
||||||
|
config(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config_method::config_method(_In_ const config_method &other) :
|
||||||
|
m_allow_save(other.m_allow_save),
|
||||||
|
m_anonymous_identity(other.m_anonymous_identity),
|
||||||
|
config(other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config_method::config_method(_Inout_ config_method &&other) :
|
||||||
|
m_allow_save(std::move(other.m_allow_save)),
|
||||||
|
m_anonymous_identity(std::move(other.m_anonymous_identity)),
|
||||||
|
config(std::move(other))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config_method& eap::config_method::operator=(_In_ const config_method &other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(config&)*this = other;
|
||||||
|
m_allow_save = other.m_allow_save;
|
||||||
|
m_anonymous_identity = other.m_anonymous_identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config_method& eap::config_method::operator=(_Inout_ config_method &&other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(config&&)*this = std::move(other);
|
||||||
|
m_allow_save = std::move(other.m_allow_save);
|
||||||
|
m_anonymous_identity = std::move(other.m_anonymous_identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::config_method::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const
|
||||||
|
{
|
||||||
|
const bstr bstrNamespace(L"urn:ietf:params:xml:ns:yang:ietf-eap-metadata");
|
||||||
|
DWORD dwResult;
|
||||||
|
|
||||||
|
// <ClientSideCredential>
|
||||||
|
com_obj<IXMLDOMElement> pXmlElClientSideCredential;
|
||||||
|
if ((dwResult = eapxml::create_element(pDoc, pConfigRoot, bstr(L"eap-metadata:ClientSideCredential"), bstr(L"ClientSideCredential"), bstrNamespace, &pXmlElClientSideCredential)) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <ClientSideCredential> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <ClientSideCredential>/<allow-save>
|
||||||
|
if ((dwResult = eapxml::put_element_value(pDoc, pXmlElClientSideCredential, bstr(L"allow-save"), bstrNamespace, m_allow_save)) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <allow-save> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <ClientSideCredential>/<AnonymousIdentity>
|
||||||
|
if (!m_anonymous_identity.empty())
|
||||||
|
if ((dwResult = eapxml::put_element_value(pDoc, pXmlElClientSideCredential, bstr(L"AnonymousIdentity"), bstrNamespace, bstr(m_anonymous_identity))) != ERROR_SUCCESS) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Error creating <AnonymousIdentity> element."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::config_method::load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
m_allow_save = true;
|
||||||
|
m_anonymous_identity.clear();
|
||||||
|
|
||||||
|
// <ClientSideCredential>
|
||||||
|
com_obj<IXMLDOMElement> pXmlElClientSideCredential;
|
||||||
|
if (eapxml::select_element(pConfigRoot, bstr(L"eap-metadata:ClientSideCredential"), &pXmlElClientSideCredential) == ERROR_SUCCESS) {
|
||||||
|
// <allow-save>
|
||||||
|
eapxml::get_element_value(pXmlElClientSideCredential, bstr(L"eap-metadata:allow-save"), &m_allow_save);
|
||||||
|
|
||||||
|
// <AnonymousIdentity>
|
||||||
|
eapxml::get_element_value(pXmlElClientSideCredential, bstr(L"eap-metadata:AnonymousIdentity"), m_anonymous_identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
355
lib/EAPBase/src/Credentials.cpp
Normal file
355
lib/EAPBase/src/Credentials.cpp
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
#pragma comment(lib, "Crypt32.lib")
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace winstd;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::credentials
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::credentials::credentials(_In_ module &mod) : config(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials::credentials(_In_ const credentials &other) :
|
||||||
|
m_identity(other.m_identity),
|
||||||
|
config(other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials::credentials(_Inout_ credentials &&other) :
|
||||||
|
m_identity(std::move(other.m_identity)),
|
||||||
|
config(std::move(other))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials& eap::credentials::operator=(_In_ const credentials &other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(config&)*this = other;
|
||||||
|
m_identity = other.m_identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials& eap::credentials::operator=(_Inout_ credentials &&other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(config&)*this = std::move(other);
|
||||||
|
m_identity = std::move(other.m_identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void eap::credentials::clear()
|
||||||
|
{
|
||||||
|
m_identity.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool eap::credentials::empty() const
|
||||||
|
{
|
||||||
|
return m_identity.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::credentials::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(pDoc);
|
||||||
|
UNREFERENCED_PARAMETER(pConfigRoot);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
// Yeah, right!? Credentials are non-exportable!
|
||||||
|
return ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::credentials_pass
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::credentials_pass::credentials_pass(_In_ module &mod) : credentials(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_pass::credentials_pass(_In_ const credentials_pass &other) :
|
||||||
|
m_password(other.m_password),
|
||||||
|
credentials(other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_pass::credentials_pass(_Inout_ credentials_pass &&other) :
|
||||||
|
m_password(std::move(other.m_password)),
|
||||||
|
credentials(std::move(other))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_pass& eap::credentials_pass::operator=(_In_ const credentials_pass &other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(credentials&)*this = other;
|
||||||
|
m_password = other.m_password;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_pass& eap::credentials_pass::operator=(_Inout_ credentials_pass &&other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(credentials&)*this = std::move(other);
|
||||||
|
m_password = std::move(other.m_password);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void eap::credentials_pass::clear()
|
||||||
|
{
|
||||||
|
credentials::clear();
|
||||||
|
m_password.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool eap::credentials_pass::empty() const
|
||||||
|
{
|
||||||
|
return credentials::empty() && m_password.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::credentials_pass::load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
assert(pConfigRoot);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
eapxml::get_element_value(pConfigRoot, bstr(L"eap-metadata:UserName"), m_identity);
|
||||||
|
|
||||||
|
bstr pass;
|
||||||
|
if ((eapxml::get_element_value(pConfigRoot, bstr(L"eap-metadata:Password"), &pass)) == ERROR_SUCCESS)
|
||||||
|
m_password = pass;
|
||||||
|
SecureZeroMemory((BSTR)pass, sizeof(OLECHAR)*pass.length());
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::credentials_pass::store(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) const
|
||||||
|
{
|
||||||
|
assert(pszTargetName);
|
||||||
|
assert(ppEapError);
|
||||||
|
DWORD dwResult;
|
||||||
|
string password_enc;
|
||||||
|
|
||||||
|
// Prepare cryptographics provider.
|
||||||
|
crypt_prov cp;
|
||||||
|
if (!cp.create(NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CryptAcquireContext failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Import the public key.
|
||||||
|
HRSRC res = FindResource(m_module.m_instance, MAKEINTRESOURCE(IDR_EAP_KEY_PUBLIC), RT_RCDATA);
|
||||||
|
assert(res);
|
||||||
|
HGLOBAL res_handle = LoadResource(m_module.m_instance, res);
|
||||||
|
assert(res_handle);
|
||||||
|
crypt_key key;
|
||||||
|
unique_ptr<CERT_PUBLIC_KEY_INFO, LocalFree_delete<CERT_PUBLIC_KEY_INFO> > keyinfo_data;
|
||||||
|
DWORD keyinfo_size = 0;
|
||||||
|
if (!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_PUBLIC_KEY_INFO, (const BYTE*)::LockResource(res_handle), ::SizeofResource(m_module.m_instance, res), CRYPT_DECODE_ALLOC_FLAG, NULL, &keyinfo_data, &keyinfo_size)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CryptDecodeObjectEx failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!key.import_public(cp, X509_ASN_ENCODING, keyinfo_data.get())) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Public key import failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert password to UTF-8.
|
||||||
|
sanitizing_string password_utf8;
|
||||||
|
WideCharToMultiByte(CP_UTF8, 0, m_password.c_str(), (int)m_password.length(), password_utf8, NULL, NULL);
|
||||||
|
|
||||||
|
// Pre-allocate memory to allow space, as encryption will grow the data, and we need additional 16B at the end for MD5 hash.
|
||||||
|
DWORD dwBlockLen;
|
||||||
|
vector<char, sanitizing_allocator<char> > password(password_utf8.length());
|
||||||
|
memcpy(password.data(), password_utf8.c_str(), sizeof(char)*password_utf8.length());
|
||||||
|
if (!CryptGetKeyParam(key, KP_BLOCKLEN, dwBlockLen, 0)) dwBlockLen = 0;
|
||||||
|
password.reserve((password.size() + dwBlockLen - 1) / dwBlockLen * dwBlockLen + 16);
|
||||||
|
|
||||||
|
// Encrypt the password using our public key. Calculate MD5 hash and append it.
|
||||||
|
crypt_hash hash;
|
||||||
|
if (!hash.create(cp, CALG_MD5)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Creating MD5 hash failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
if (!CryptEncrypt(key, hash, TRUE, 0, password)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Encrypting password failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
vector<char> hash_bin;
|
||||||
|
CryptGetHashParam(hash, HP_HASHVAL, hash_bin, 0);
|
||||||
|
password.insert(password.end(), hash_bin.begin(), hash_bin.end());
|
||||||
|
|
||||||
|
// Convert encrypted password to Base64, since CredProtectA() fail for binary strings.
|
||||||
|
string password_base64;
|
||||||
|
base64_enc enc;
|
||||||
|
enc.encode(password_base64, password.data(), password.size());
|
||||||
|
|
||||||
|
// Encrypt the password using user's key.
|
||||||
|
CRED_PROTECTION_TYPE cpt;
|
||||||
|
if (!CredProtectA(TRUE, password_base64.c_str(), (DWORD)password_base64.length(), password_enc, &cpt)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredProtect failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
tstring target(target_name(pszTargetName));
|
||||||
|
|
||||||
|
// Write credentials.
|
||||||
|
assert(password_enc.size()*sizeof(char) < CRED_MAX_CREDENTIAL_BLOB_SIZE);
|
||||||
|
assert(m_identity.length() < CRED_MAX_USERNAME_LENGTH );
|
||||||
|
CREDENTIAL cred = {
|
||||||
|
0, // Flags
|
||||||
|
CRED_TYPE_GENERIC, // Type
|
||||||
|
(LPTSTR)target.c_str(), // TargetName
|
||||||
|
_T(""), // Comment
|
||||||
|
{ 0, 0 }, // LastWritten
|
||||||
|
(DWORD)password_enc.size()*sizeof(char), // CredentialBlobSize
|
||||||
|
(LPBYTE)password_enc.data(), // CredentialBlob
|
||||||
|
CRED_PERSIST_ENTERPRISE, // Persist
|
||||||
|
0, // AttributeCount
|
||||||
|
NULL, // Attributes
|
||||||
|
NULL, // TargetAlias
|
||||||
|
(LPTSTR)m_identity.c_str() // UserName
|
||||||
|
};
|
||||||
|
if (!CredWrite(&cred, 0)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredWrite failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::credentials_pass::retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
assert(pszTargetName);
|
||||||
|
DWORD dwResult;
|
||||||
|
|
||||||
|
// Read credentials.
|
||||||
|
unique_ptr<CREDENTIAL, CredFree_delete<CREDENTIAL> > cred;
|
||||||
|
if (!CredRead(target_name(pszTargetName).c_str(), CRED_TYPE_GENERIC, 0, (PCREDENTIAL*)&cred)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredRead failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_identity = cred->UserName;
|
||||||
|
|
||||||
|
// Decrypt the password using user's key.
|
||||||
|
string password_base64;
|
||||||
|
if (!CredUnprotectA(TRUE, (LPCSTR)(cred->CredentialBlob), cred->CredentialBlobSize/sizeof(char), password_base64)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredUnprotect failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert Base64 to binary encrypted password, since CredProtectA() fail for binary strings.
|
||||||
|
vector<char, sanitizing_allocator<char> > password;
|
||||||
|
base64_dec dec;
|
||||||
|
bool is_last;
|
||||||
|
dec.decode(password, is_last, password_base64.c_str(), password_base64.length());
|
||||||
|
|
||||||
|
// Prepare cryptographics provider.
|
||||||
|
crypt_prov cp;
|
||||||
|
if (!cp.create(NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CryptAcquireContext failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create hash.
|
||||||
|
crypt_hash hash;
|
||||||
|
if (!hash.create(cp, CALG_MD5)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Creating MD5 hash failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
DWORD dwHashSize, dwHashSizeSize = sizeof(dwHashSize);
|
||||||
|
CryptGetHashParam(hash, HP_HASHSIZE, (LPBYTE)&dwHashSize, &dwHashSizeSize, 0);
|
||||||
|
if (password.size() < dwHashSize) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = ERROR_INVALID_DATA, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Encrypted password too short."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Truncate hash from encrypted password.
|
||||||
|
vector<char> hash_bin;
|
||||||
|
size_t enc_size = password.size() - dwHashSize;
|
||||||
|
hash_bin.assign(password.begin() + enc_size, password.end());
|
||||||
|
password.resize(enc_size);
|
||||||
|
|
||||||
|
// Import the private key.
|
||||||
|
HRSRC res = FindResource(m_module.m_instance, MAKEINTRESOURCE(IDR_EAP_KEY_PRIVATE), RT_RCDATA);
|
||||||
|
assert(res);
|
||||||
|
HGLOBAL res_handle = LoadResource(m_module.m_instance, res);
|
||||||
|
assert(res_handle);
|
||||||
|
crypt_key key;
|
||||||
|
unique_ptr<unsigned char[], LocalFree_delete<unsigned char[]> > keyinfo_data;
|
||||||
|
DWORD keyinfo_size = 0;
|
||||||
|
if (!CryptDecodeObjectEx(X509_ASN_ENCODING, PKCS_RSA_PRIVATE_KEY, (const BYTE*)::LockResource(res_handle), ::SizeofResource(m_module.m_instance, res), CRYPT_DECODE_ALLOC_FLAG, NULL, &keyinfo_data, &keyinfo_size)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CryptDecodeObjectEx failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!key.import(cp, keyinfo_data.get(), keyinfo_size, NULL, 0)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Private key import failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decrypt the password using our private key. Calculate MD5 hash and verify it.
|
||||||
|
if (!CryptDecrypt(key, hash, TRUE, 0, password)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Decrypting password failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
vector<char> hash2_bin;
|
||||||
|
CryptGetHashParam(hash, HP_HASHVAL, hash2_bin, 0);
|
||||||
|
if (hash_bin != hash2_bin) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = ERROR_INVALID_DATA, 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" Invalid password data."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert password from UTF-8.
|
||||||
|
MultiByteToWideChar(CP_UTF8, 0, password.data(), (int)password.size(), m_password);
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
123
lib/EAPBase/src/Module.cpp
Normal file
123
lib/EAPBase/src/Module.cpp
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace winstd;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::module
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::module::module(type_t eap_method) :
|
||||||
|
m_eap_method(eap_method),
|
||||||
|
m_instance(NULL)
|
||||||
|
{
|
||||||
|
m_ep.create(&EAPMETHOD_TRACE_EVENT_PROVIDER);
|
||||||
|
m_ep.write(&EAPMETHOD_TRACE_EVT_MODULE_LOAD, event_data((BYTE)m_eap_method), event_data::blank);
|
||||||
|
|
||||||
|
m_heap.create(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::module::~module()
|
||||||
|
{
|
||||||
|
m_ep.write(&EAPMETHOD_TRACE_EVT_MODULE_UNLOAD, event_data((BYTE)m_eap_method), event_data::blank);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EAP_ERROR* eap::module::make_error(_In_ DWORD dwErrorCode, _In_ DWORD dwReasonCode, _In_ LPCGUID pRootCauseGuid, _In_ LPCGUID pRepairGuid, _In_ LPCGUID pHelpLinkGuid, _In_z_ LPCWSTR pszRootCauseString, _In_z_ LPCWSTR pszRepairString) const
|
||||||
|
{
|
||||||
|
// Calculate memory size requirement.
|
||||||
|
SIZE_T
|
||||||
|
nRootCauseSize = pszRootCauseString != NULL && pszRootCauseString[0] ? (wcslen(pszRootCauseString) + 1)*sizeof(WCHAR) : 0,
|
||||||
|
nRepairStringSize = pszRepairString != NULL && pszRepairString [0] ? (wcslen(pszRepairString ) + 1)*sizeof(WCHAR) : 0,
|
||||||
|
nEapErrorSize = sizeof(EAP_ERROR) + nRootCauseSize + nRepairStringSize;
|
||||||
|
|
||||||
|
EAP_ERROR *pError = (EAP_ERROR*)HeapAlloc(m_heap, 0, nEapErrorSize);
|
||||||
|
if (!pError)
|
||||||
|
return NULL;
|
||||||
|
BYTE *p = (BYTE*)(pError + 1);
|
||||||
|
|
||||||
|
// Fill the error descriptor.
|
||||||
|
pError->dwWinError = dwErrorCode;
|
||||||
|
pError->type.eapType.type = (BYTE)m_eap_method;
|
||||||
|
pError->type.eapType.dwVendorId = 0;
|
||||||
|
pError->type.eapType.dwVendorType = 0;
|
||||||
|
pError->type.dwAuthorId = 67532;
|
||||||
|
pError->dwReasonCode = dwReasonCode;
|
||||||
|
pError->rootCauseGuid = pRootCauseGuid != NULL ? *pRootCauseGuid : GUID_NULL;
|
||||||
|
pError->repairGuid = pRepairGuid != NULL ? *pRepairGuid : GUID_NULL;
|
||||||
|
pError->helpLinkGuid = pHelpLinkGuid != NULL ? *pHelpLinkGuid : GUID_NULL;
|
||||||
|
if (nRootCauseSize) {
|
||||||
|
pError->pRootCauseString = (LPWSTR)p;
|
||||||
|
memcpy(pError->pRootCauseString, pszRootCauseString, nRootCauseSize);
|
||||||
|
p += nRootCauseSize;
|
||||||
|
} else
|
||||||
|
pError->pRootCauseString = NULL;
|
||||||
|
if (nRepairStringSize) {
|
||||||
|
pError->pRepairString = (LPWSTR)p;
|
||||||
|
memcpy(pError->pRepairString, pszRepairString, nRepairStringSize);
|
||||||
|
p += nRepairStringSize;
|
||||||
|
} else
|
||||||
|
pError->pRepairString = NULL;
|
||||||
|
|
||||||
|
// Write trace event.
|
||||||
|
vector<EVENT_DATA_DESCRIPTOR> evt_desc;
|
||||||
|
evt_desc.reserve(8);
|
||||||
|
evt_desc.push_back(event_data(pError->dwWinError));
|
||||||
|
evt_desc.push_back(event_data(pError->type.eapType.type));
|
||||||
|
evt_desc.push_back(event_data(pError->dwReasonCode));
|
||||||
|
evt_desc.push_back(event_data(&(pError->rootCauseGuid), sizeof(GUID)));
|
||||||
|
evt_desc.push_back(event_data(&(pError->repairGuid), sizeof(GUID)));
|
||||||
|
evt_desc.push_back(event_data(&(pError->helpLinkGuid), sizeof(GUID)));
|
||||||
|
evt_desc.push_back(event_data(pError->pRootCauseString));
|
||||||
|
evt_desc.push_back(event_data(pError->pRepairString));
|
||||||
|
m_ep.write(&EAPMETHOD_TRACE_EAP_ERROR, (ULONG)evt_desc.size(), evt_desc.data());
|
||||||
|
|
||||||
|
return pError;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BYTE* eap::module::alloc_memory(_In_ size_t size)
|
||||||
|
{
|
||||||
|
return (BYTE*)HeapAlloc(m_heap, 0, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void eap::module::free_memory(_In_ BYTE *ptr)
|
||||||
|
{
|
||||||
|
ETW_FN_VOID;
|
||||||
|
|
||||||
|
// Since we do security here and some of the BLOBs contain credentials, sanitize every memory block before freeing.
|
||||||
|
SecureZeroMemory(ptr, HeapSize(m_heap, 0, ptr));
|
||||||
|
HeapFree(m_heap, 0, ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void eap::module::free_error_memory(_In_ EAP_ERROR *err)
|
||||||
|
{
|
||||||
|
ETW_FN_VOID;
|
||||||
|
|
||||||
|
// pRootCauseString and pRepairString always trail the ppEapError to reduce number of (de)allocations.
|
||||||
|
HeapFree(m_heap, 0, err);
|
||||||
|
}
|
156
lib/EAPBase/src/Session.cpp
Normal file
156
lib/EAPBase/src/Session.cpp
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace winstd;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::session
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::session::session()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::session::~session()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::begin(
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ const EapAttributes *pAttributeArray,
|
||||||
|
_In_ HANDLE hTokenImpersonateUser,
|
||||||
|
_In_ DWORD dwConnectionDataSize,
|
||||||
|
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
|
||||||
|
_In_ DWORD dwUserDataSize,
|
||||||
|
_In_count_(dwUserDataSize) const BYTE *pUserData,
|
||||||
|
_In_ DWORD dwMaxSendPacketSize,
|
||||||
|
_Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(dwFlags);
|
||||||
|
UNREFERENCED_PARAMETER(pAttributeArray);
|
||||||
|
UNREFERENCED_PARAMETER(hTokenImpersonateUser);
|
||||||
|
UNREFERENCED_PARAMETER(dwConnectionDataSize);
|
||||||
|
UNREFERENCED_PARAMETER(pConnectionData);
|
||||||
|
UNREFERENCED_PARAMETER(dwUserDataSize);
|
||||||
|
UNREFERENCED_PARAMETER(pUserData);
|
||||||
|
UNREFERENCED_PARAMETER(dwMaxSendPacketSize);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::end(_Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::process_request_packet(
|
||||||
|
_In_ DWORD dwReceivedPacketSize,
|
||||||
|
_In_bytecount_(dwReceivedPacketSize) const EapPacket *pReceivedPacket,
|
||||||
|
_Out_ EapPeerMethodOutput *pEapOutput,
|
||||||
|
_Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(dwReceivedPacketSize);
|
||||||
|
UNREFERENCED_PARAMETER(pReceivedPacket);
|
||||||
|
UNREFERENCED_PARAMETER(pEapOutput);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::get_response_packet(
|
||||||
|
_Inout_ DWORD *pdwSendPacketSize,
|
||||||
|
_Inout_bytecap_(*dwSendPacketSize) EapPacket *pSendPacket,
|
||||||
|
_Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(pdwSendPacketSize);
|
||||||
|
UNREFERENCED_PARAMETER(pSendPacket);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::get_result(_In_ EapPeerMethodResultReason reason, _Out_ EapPeerMethodResult *ppResult, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(reason);
|
||||||
|
UNREFERENCED_PARAMETER(ppResult);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::get_ui_context(
|
||||||
|
_Out_ DWORD *pdwUIContextDataSize,
|
||||||
|
_Out_ BYTE **ppUIContextData,
|
||||||
|
_Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(pdwUIContextDataSize);
|
||||||
|
UNREFERENCED_PARAMETER(ppUIContextData);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::set_ui_context(
|
||||||
|
_In_ DWORD dwUIContextDataSize,
|
||||||
|
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
|
||||||
|
_In_ const EapPeerMethodOutput *pEapOutput,
|
||||||
|
_Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(dwUIContextDataSize);
|
||||||
|
UNREFERENCED_PARAMETER(pUIContextData);
|
||||||
|
UNREFERENCED_PARAMETER(pEapOutput);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::get_response_attributes(_Out_ EapAttributes *pAttribs, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(pAttribs);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::session::set_response_attributes(const _In_ EapAttributes *pAttribs, _Out_ EapPeerMethodOutput *pEapOutput, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(pAttribs);
|
||||||
|
UNREFERENCED_PARAMETER(pEapOutput);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
return ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
21
lib/EAPBase/src/StdAfx.cpp
Normal file
21
lib/EAPBase/src/StdAfx.cpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
35
lib/EAPBase/src/StdAfx.h
Normal file
35
lib/EAPBase/src/StdAfx.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../include/Config.h"
|
||||||
|
#include "../include/Credentials.h"
|
||||||
|
#include "../include/Module.h"
|
||||||
|
#include "../include/Session.h"
|
||||||
|
|
||||||
|
#include "../include/EAP.h"
|
||||||
|
#include "../include/EAPSerial.h"
|
||||||
|
#include "../include/EAPXML.h"
|
||||||
|
|
||||||
|
#include <WinStd/Cred.h>
|
||||||
|
#include <WinStd/ETW.h>
|
||||||
|
|
||||||
|
#include <EventsETW.h>
|
2
lib/EAPBase_UI/build/.gitignore
vendored
Normal file
2
lib/EAPBase_UI/build/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/temp
|
||||||
|
/*.user
|
12
lib/EAPBase_UI/build/EAPBase_UI.props
Normal file
12
lib/EAPBase_UI/build/EAPBase_UI.props
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
108
lib/EAPBase_UI/build/EAPBase_UI.vcxproj
Normal file
108
lib/EAPBase_UI/build/EAPBase_UI.vcxproj
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{D4B54856-BE1F-4937-A8F7-495125BE76BE}</ProjectGuid>
|
||||||
|
<RootNamespace>EAPBase_UI</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="EAPBase_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="EAPBase_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="EAPBase_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="EAPBase_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\include\EAP_UI.h" />
|
||||||
|
<ClInclude Include="..\include\Module.h" />
|
||||||
|
<ClInclude Include="..\res\wxEAP_UI.h" />
|
||||||
|
<ClInclude Include="..\src\StdAfx.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\res\wxEAP_UI.cpp" />
|
||||||
|
<ClCompile Include="..\src\EAP_UI.cpp" />
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\res\wxEAP_UI.fbp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Events\build\Events.vcxproj">
|
||||||
|
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
47
lib/EAPBase_UI/build/EAPBase_UI.vcxproj.filters
Normal file
47
lib/EAPBase_UI/build/EAPBase_UI.vcxproj.filters
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\src\StdAfx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\EAP_UI.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\res\wxEAP_UI.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Module.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\EAP_UI.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\res\wxEAP_UI.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\res\wxEAP_UI.fbp">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -18,117 +18,66 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "EAP.h"
|
|
||||||
#include "../res/wxEAP_UI.h"
|
|
||||||
|
|
||||||
#include <WinStd/Cred.h>
|
|
||||||
|
|
||||||
#include <wx/dialog.h>
|
|
||||||
#include <wx/icon.h>
|
#include <wx/icon.h>
|
||||||
#include <wx/log.h>
|
#include <wx/statbmp.h>
|
||||||
#include <CommCtrl.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
namespace eap
|
|
||||||
{
|
|
||||||
template <class _Tmeth, class _Tid, class _Tint, class _Tintres> class peer_ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class _Tcfg, class _wxT> class wxEAPConfigDialog;
|
|
||||||
class wxEAPCredentialsDialog;
|
|
||||||
class wxEAPBannerPanel;
|
|
||||||
template <class _Tcfg, class _Tcred, class _Tpanel> class wxEAPCredentialsConfigPanel;
|
|
||||||
template <class _Tbase, class _Tcred> class wxCredentialsPanel;
|
|
||||||
class wxPasswordCredentialsPanel;
|
|
||||||
|
|
||||||
inline bool wxSetIconFromResource(wxStaticBitmap *bmp, wxIcon &icon, HINSTANCE hinst, PCWSTR pszName);
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
namespace eap
|
|
||||||
{
|
|
||||||
///
|
|
||||||
/// EAP UI peer base abstract class template
|
|
||||||
///
|
|
||||||
/// A group of methods all EAP UI peers must or should implement.
|
|
||||||
///
|
|
||||||
template <class _Tcfg, class _Tid, class _Tint, class _Tintres>
|
|
||||||
class peer_ui : public peer_base<_Tcfg, _Tid, _Tint, _Tintres>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
/// Constructor
|
|
||||||
///
|
|
||||||
peer_ui() : peer_base<_Tcfg, _Tid, _Tint, _Tintres>() {}
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Raises the EAP method's specific connection configuration user interface dialog on the client.
|
|
||||||
///
|
|
||||||
/// \sa [EapPeerInvokeConfigUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363614.aspx)
|
|
||||||
///
|
|
||||||
/// \param[in] hwndParent Parent window
|
|
||||||
/// \param[inout] cfg Configuration to edit
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD invoke_config_ui(
|
|
||||||
_In_ HWND hwndParent,
|
|
||||||
_Inout_ config_type &cfg,
|
|
||||||
_Out_ EAP_ERROR **ppEapError) = 0;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Raises a custom interactive user interface dialog to obtain user identity information for the EAP method on the client.
|
|
||||||
///
|
|
||||||
/// \sa [EapPeerInvokeIdentityUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363615.aspx)
|
|
||||||
///
|
|
||||||
/// \param[in] hwndParent Parent window
|
|
||||||
/// \param[in] dwFlags Flags passed to `EapPeerInvokeIdentityUI()` call
|
|
||||||
/// \param[inout] cfg Configuration
|
|
||||||
/// \param[inout] usr User data to edit
|
|
||||||
/// \param[out] ppwszIdentity Pointer to user identity. Free using `module::free_memory()`.
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD invoke_identity_ui(
|
|
||||||
_In_ HWND hwndParent,
|
|
||||||
_In_ DWORD dwFlags,
|
|
||||||
_Inout_ config_type &cfg,
|
|
||||||
_Inout_ identity_type &usr,
|
|
||||||
_Out_ LPWSTR *ppwszIdentity,
|
|
||||||
_Out_ EAP_ERROR **ppEapError) = 0;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Raises a custom interactive user interface dialog for the EAP method on the client.
|
|
||||||
///
|
|
||||||
/// \sa [EapPeerInvokeInteractiveUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363616.aspx)
|
|
||||||
///
|
|
||||||
/// \param[in] hwndParent Parent window
|
|
||||||
/// \param[in] req Interactive request
|
|
||||||
/// \param[out] res Interactive response
|
|
||||||
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
|
||||||
///
|
|
||||||
/// \returns
|
|
||||||
/// - \c ERROR_SUCCESS if succeeded
|
|
||||||
/// - error code otherwise
|
|
||||||
///
|
|
||||||
virtual DWORD invoke_interactive_ui(
|
|
||||||
_In_ HWND hwndParent,
|
|
||||||
_In_ const interactive_request_type &req,
|
|
||||||
_Out_ interactive_response_type &res,
|
|
||||||
_Out_ EAP_ERROR **ppEapError) = 0;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// EAP configuration dialog
|
/// EAP configuration dialog
|
||||||
///
|
///
|
||||||
|
template <class _Tcfg, class _wxT> class wxEAPConfigDialog;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAP credentials dialog
|
||||||
|
///
|
||||||
|
class wxEAPCredentialsDialog;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAP dialog banner
|
||||||
|
///
|
||||||
|
class wxEAPBannerPanel;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base template for credentials configuration panel
|
||||||
|
///
|
||||||
|
template <class _Tcfg, class _Tcred, class _Tpanel> class wxEAPCredentialsConfigPanel;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base template for all credential panels
|
||||||
|
///
|
||||||
|
template <class _Tbase, class _Tcred> class wxCredentialsPanel;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Password credentials panel
|
||||||
|
///
|
||||||
|
class wxPasswordCredentialsPanel;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Sets icon from resource
|
||||||
|
///
|
||||||
|
inline bool wxSetIconFromResource(wxStaticBitmap *bmp, wxIcon &icon, HINSTANCE hinst, PCWSTR pszName);
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <wx/msw/winundef.h> // Fixes `CreateDialog` name collision
|
||||||
|
#include "../res/wxEAP_UI.h"
|
||||||
|
|
||||||
|
#include "../../EAPBase/include/Config.h"
|
||||||
|
#include "../../EAPBase/include/Credentials.h"
|
||||||
|
|
||||||
|
#include <WinStd/Common.h>
|
||||||
|
#include <WinStd/Cred.h>
|
||||||
|
#include <WinStd/Win.h>
|
||||||
|
|
||||||
|
#include <wx/log.h>
|
||||||
|
|
||||||
|
#include <CommCtrl.h>
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
template <class _Tmeth, class _wxT>
|
template <class _Tmeth, class _wxT>
|
||||||
class wxEAPConfigDialog : public wxEAPConfigDialogBase
|
class wxEAPConfigDialog : public wxEAPConfigDialogBase
|
||||||
{
|
{
|
||||||
@ -198,9 +147,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EAP credentials dialog
|
|
||||||
///
|
|
||||||
class wxEAPCredentialsDialog : public wxEAPCredentialsDialogBase
|
class wxEAPCredentialsDialog : public wxEAPCredentialsDialogBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -221,9 +167,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EAP dialog banner
|
|
||||||
///
|
|
||||||
class wxEAPBannerPanel : public wxEAPBannerPanelBase
|
class wxEAPBannerPanel : public wxEAPBannerPanelBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -239,9 +182,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Base template for credentials configuration panel
|
|
||||||
///
|
|
||||||
template <class _Tcfg, class _Tcred, class _Tpanel>
|
template <class _Tcfg, class _Tcred, class _Tpanel>
|
||||||
class wxEAPCredentialsConfigPanel : public wxEAPCredentialsConfigPanelBase
|
class wxEAPCredentialsConfigPanel : public wxEAPCredentialsConfigPanelBase
|
||||||
{
|
{
|
||||||
@ -318,9 +258,6 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Base template for all credential panels
|
|
||||||
///
|
|
||||||
template <class _Tbase, class _Tcred>
|
template <class _Tbase, class _Tcred>
|
||||||
class wxCredentialsPanel : public _Tbase
|
class wxCredentialsPanel : public _Tbase
|
||||||
{
|
{
|
||||||
@ -396,9 +333,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Password credentials panel
|
|
||||||
///
|
|
||||||
class wxPasswordCredentialsPanel : public wxCredentialsPanel<wxPasswordCredentialsPanelBase, eap::credentials_pass>
|
class wxPasswordCredentialsPanel : public wxCredentialsPanel<wxPasswordCredentialsPanelBase, eap::credentials_pass>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -427,9 +361,6 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Sets icon from resource
|
|
||||||
///
|
|
||||||
inline bool wxSetIconFromResource(wxStaticBitmap *bmp, wxIcon &icon, HINSTANCE hinst, PCWSTR pszName)
|
inline bool wxSetIconFromResource(wxStaticBitmap *bmp, wxIcon &icon, HINSTANCE hinst, PCWSTR pszName)
|
||||||
{
|
{
|
||||||
wxASSERT(bmp);
|
wxASSERT(bmp);
|
109
lib/EAPBase_UI/include/Module.h
Normal file
109
lib/EAPBase_UI/include/Module.h
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// EAP UI peer base abstract class template
|
||||||
|
///
|
||||||
|
/// A group of methods all EAP UI peers must or should implement.
|
||||||
|
///
|
||||||
|
template <class _Tmeth, class _Tid, class _Tint, class _Tintres> class peer_ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../EAPBase/include/Module.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
template <class _Tcfg, class _Tid, class _Tint, class _Tintres>
|
||||||
|
class peer_ui : public peer_base<_Tcfg, _Tid, _Tint, _Tintres>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs a EAP UI peer module for the given EAP type
|
||||||
|
///
|
||||||
|
peer_ui(_In_ type_t eap_method) : peer_base<_Tcfg, _Tid, _Tint, _Tintres>(eap_method) {}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Raises the EAP method's specific connection configuration user interface dialog on the client.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerInvokeConfigUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363614.aspx)
|
||||||
|
///
|
||||||
|
/// \param[in] hwndParent Parent window
|
||||||
|
/// \param[inout] cfg Configuration to edit
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD invoke_config_ui(
|
||||||
|
_In_ HWND hwndParent,
|
||||||
|
_Inout_ config_type &cfg,
|
||||||
|
_Out_ EAP_ERROR **ppEapError) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Raises a custom interactive user interface dialog to obtain user identity information for the EAP method on the client.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerInvokeIdentityUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363615.aspx)
|
||||||
|
///
|
||||||
|
/// \param[in] hwndParent Parent window
|
||||||
|
/// \param[in] dwFlags Flags passed to `EapPeerInvokeIdentityUI()` call
|
||||||
|
/// \param[inout] cfg Configuration
|
||||||
|
/// \param[inout] usr User data to edit
|
||||||
|
/// \param[out] ppwszIdentity Pointer to user identity. Free using `module::free_memory()`.
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD invoke_identity_ui(
|
||||||
|
_In_ HWND hwndParent,
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_Inout_ config_type &cfg,
|
||||||
|
_Inout_ identity_type &usr,
|
||||||
|
_Out_ LPWSTR *ppwszIdentity,
|
||||||
|
_Out_ EAP_ERROR **ppEapError) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Raises a custom interactive user interface dialog for the EAP method on the client.
|
||||||
|
///
|
||||||
|
/// \sa [EapPeerInvokeInteractiveUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363616.aspx)
|
||||||
|
///
|
||||||
|
/// \param[in] hwndParent Parent window
|
||||||
|
/// \param[in] req Interactive request
|
||||||
|
/// \param[out] res Interactive response
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD invoke_interactive_ui(
|
||||||
|
_In_ HWND hwndParent,
|
||||||
|
_In_ const interactive_request_type &req,
|
||||||
|
_Out_ interactive_response_type &res,
|
||||||
|
_Out_ EAP_ERROR **ppEapError) = 0;
|
||||||
|
};
|
||||||
|
}
|
@ -18,7 +18,7 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <StdAfx.h>
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
21
lib/EAPBase_UI/src/StdAfx.cpp
Normal file
21
lib/EAPBase_UI/src/StdAfx.cpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
26
lib/EAPBase_UI/src/StdAfx.h
Normal file
26
lib/EAPBase_UI/src/StdAfx.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS // Prevent warnings from wxWidgets headers
|
||||||
|
|
||||||
|
#include "../include/EAP_UI.h"
|
||||||
|
#include "../include/Module.h"
|
9
lib/Events/MSIBuild/.gitignore
vendored
Normal file
9
lib/Events/MSIBuild/.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/*-1.idt
|
||||||
|
/*-2.idt
|
||||||
|
/*-2.idtx
|
||||||
|
/*.Binary-1
|
||||||
|
/*.Binary-2
|
||||||
|
/*.Icon-1
|
||||||
|
/*.Icon-2
|
||||||
|
/*.lst
|
||||||
|
/*.msm
|
BIN
lib/Events/MSIBuild/Makefile
Normal file
BIN
lib/Events/MSIBuild/Makefile
Normal file
Binary file not shown.
2
lib/Events/build/.gitignore
vendored
Normal file
2
lib/Events/build/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/temp
|
||||||
|
/*.user
|
@ -15,12 +15,12 @@
|
|||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuild Include="..\res\EAPMethodETW.man">
|
<CustomBuild Include="..\res\EventsETW.man">
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="EAPMethodEvents.rc">
|
<ResourceCompile Include="Events.rc">
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
16
lib/Events/build/Events.props
Normal file
16
lib/Events/build/Events.props
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="..\..\..\include\ResourceDLL.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutDir>..\..\..\output\$(Platform).$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>temp\Events.$(Platform).$(Configuration).$(PlatformToolset);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
Binary file not shown.
@ -21,7 +21,7 @@
|
|||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{D63F24BD-92A0-4D6B-8B69-ED947E4D2B1B}</ProjectGuid>
|
<ProjectGuid>{D63F24BD-92A0-4D6B-8B69-ED947E4D2B1B}</ProjectGuid>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<RootNamespace>EAPMethodEvents</RootNamespace>
|
<RootNamespace>Events</RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
@ -51,27 +51,27 @@
|
|||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
<Import Project="..\..\include\Win32.props" />
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
<Import Project="..\..\include\Debug.props" />
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
<Import Project="EAPMethodEvents.props" />
|
<Import Project="Events.props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
<Import Project="..\..\include\x64.props" />
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
<Import Project="..\..\include\Debug.props" />
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
<Import Project="EAPMethodEvents.props" />
|
<Import Project="Events.props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
<Import Project="..\..\include\Win32.props" />
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
<Import Project="..\..\include\Release.props" />
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
<Import Project="EAPMethodEvents.props" />
|
<Import Project="Events.props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
<Import Project="..\..\include\x64.props" />
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
<Import Project="..\..\include\Release.props" />
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
<Import Project="EAPMethodEvents.props" />
|
<Import Project="Events.props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
@ -79,7 +79,7 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuild Include="..\res\EAPMethodETW.man">
|
<CustomBuild Include="..\res\EventsETW.man">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mc.exe "%(Identity)" -u -b -e "h" -h "$(IntDir)." -r "$(IntDir)."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mc.exe "%(Identity)" -u -b -e "h" -h "$(IntDir)." -r "$(IntDir)."</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mc.exe "%(Identity)" -u -b -e "h" -h "$(IntDir)." -r "$(IntDir)."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mc.exe "%(Identity)" -u -b -e "h" -h "$(IntDir)." -r "$(IntDir)."</Command>
|
||||||
@ -89,14 +89,14 @@
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compiling manifest...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compiling manifest...</Message>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling manifest...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling manifest...</Message>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling manifest...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling manifest...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)EAPMethodETW.h;$(IntDir)EAPMethodETW.rc;$(IntDir)EAPMethodETW_MSG00001.bin;$(IntDir)EAPMethodETWTEMP.BIN;%(Outputs)</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)EventsETW.h;$(IntDir)EventsETW.rc;$(IntDir)EventsETW_MSG00001.bin;$(IntDir)EventsETWTEMP.BIN;%(Outputs)</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)EAPMethodETW.h;$(IntDir)EAPMethodETW.rc;$(IntDir)EAPMethodETW_MSG00001.bin;$(IntDir)EAPMethodETWTEMP.BIN;%(Outputs)</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)EventsETW.h;$(IntDir)EventsETW.rc;$(IntDir)EventsETW_MSG00001.bin;$(IntDir)EventsETWTEMP.BIN;%(Outputs)</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)EAPMethodETW.h;$(IntDir)EAPMethodETW.rc;$(IntDir)EAPMethodETW_MSG00001.bin;$(IntDir)EAPMethodETWTEMP.BIN;%(Outputs)</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)EventsETW.h;$(IntDir)EventsETW.rc;$(IntDir)EventsETW_MSG00001.bin;$(IntDir)EventsETWTEMP.BIN;%(Outputs)</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)EAPMethodETW.h;$(IntDir)EAPMethodETW.rc;$(IntDir)EAPMethodETW_MSG00001.bin;$(IntDir)EAPMethodETWTEMP.BIN;%(Outputs)</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)EventsETW.h;$(IntDir)EventsETW.rc;$(IntDir)EventsETW_MSG00001.bin;$(IntDir)EventsETWTEMP.BIN;%(Outputs)</Outputs>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="EAPMethodEvents.rc" />
|
<ResourceCompile Include="Events.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
Binary file not shown.
2
lib/PAP/build/.gitignore
vendored
Normal file
2
lib/PAP/build/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/temp
|
||||||
|
/*.user
|
12
lib/PAP/build/PAP.props
Normal file
12
lib/PAP/build/PAP.props
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
99
lib/PAP/build/PAP.vcxproj
Normal file
99
lib/PAP/build/PAP.vcxproj
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{36B0CF8A-7794-46C3-8099-825BA962B4C7}</ProjectGuid>
|
||||||
|
<RootNamespace>PAP</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="PAP.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="PAP.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="PAP.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="PAP.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\include\Config.h" />
|
||||||
|
<ClInclude Include="..\include\Credentials.h" />
|
||||||
|
<ClInclude Include="..\src\StdAfx.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\Config.cpp" />
|
||||||
|
<ClCompile Include="..\src\Credentials.cpp" />
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
35
lib/PAP/build/PAP.vcxproj.filters
Normal file
35
lib/PAP/build/PAP.vcxproj.filters
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\src\StdAfx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Config.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Credentials.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Config.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Credentials.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -18,13 +18,14 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "EAP.h"
|
#include <sal.h>
|
||||||
|
|
||||||
|
|
||||||
namespace eap
|
namespace eap
|
||||||
{
|
{
|
||||||
|
///
|
||||||
|
/// PAP configuration
|
||||||
|
///
|
||||||
class config_pap;
|
class config_pap;
|
||||||
class credentials_pap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace eapserial
|
namespace eapserial
|
||||||
@ -36,12 +37,15 @@ namespace eapserial
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../EAPBase/include/Config.h"
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <sal.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
|
||||||
|
|
||||||
namespace eap
|
namespace eap
|
||||||
{
|
{
|
||||||
///
|
|
||||||
/// PAP configuration
|
|
||||||
///
|
|
||||||
class config_pap : public config_pass
|
class config_pap : public config_pass
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -98,70 +102,6 @@ namespace eap
|
|||||||
///
|
///
|
||||||
virtual eap::type_t get_method_id() { return eap::type_pap; }
|
virtual eap::type_t get_method_id() { return eap::type_pap; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// PAP credentials
|
|
||||||
///
|
|
||||||
class credentials_pap : public credentials_pass
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
/// Constructs credentials
|
|
||||||
///
|
|
||||||
/// \param[in] mod Reference of the EAP module to use for global services
|
|
||||||
///
|
|
||||||
credentials_pap(_In_ module &mod);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Copies credentials
|
|
||||||
///
|
|
||||||
/// \param[in] other Credentials to copy from
|
|
||||||
///
|
|
||||||
credentials_pap(_In_ const credentials_pap &other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Moves credentials
|
|
||||||
///
|
|
||||||
/// \param[in] other Credentials to move from
|
|
||||||
///
|
|
||||||
credentials_pap(_Inout_ credentials_pap &&other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Copies credentials
|
|
||||||
///
|
|
||||||
/// \param[in] other Credentials to copy from
|
|
||||||
///
|
|
||||||
/// \returns Reference to this object
|
|
||||||
///
|
|
||||||
credentials_pap& operator=(_In_ const credentials_pap &other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Moves credentials
|
|
||||||
///
|
|
||||||
/// \param[in] other Credentials to move from
|
|
||||||
///
|
|
||||||
/// \returns Reference to this object
|
|
||||||
///
|
|
||||||
credentials_pap& operator=(_Inout_ credentials_pap &&other);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Clones credentials
|
|
||||||
///
|
|
||||||
/// \returns Pointer to cloned credentials
|
|
||||||
///
|
|
||||||
virtual config* clone() const { return new credentials_pap(*this); }
|
|
||||||
|
|
||||||
/// \name Storage
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Return target suffix for Windows Credential Manager credential name
|
|
||||||
///
|
|
||||||
virtual LPCTSTR target_suffix() const { return _T("PAP"); }
|
|
||||||
|
|
||||||
/// @}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
102
lib/PAP/include/Credentials.h
Normal file
102
lib/PAP/include/Credentials.h
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../EAPBase/include/EAP.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// PAP credentials
|
||||||
|
///
|
||||||
|
class credentials_pap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../EAPBase/include/Credentials.h"
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <sal.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
class credentials_pap : public credentials_pass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs credentials
|
||||||
|
///
|
||||||
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
|
///
|
||||||
|
credentials_pap(_In_ module &mod);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to copy from
|
||||||
|
///
|
||||||
|
credentials_pap(_In_ const credentials_pap &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to move from
|
||||||
|
///
|
||||||
|
credentials_pap(_Inout_ credentials_pap &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to copy from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
credentials_pap& operator=(_In_ const credentials_pap &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to move from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
credentials_pap& operator=(_Inout_ credentials_pap &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Clones credentials
|
||||||
|
///
|
||||||
|
/// \returns Pointer to cloned credentials
|
||||||
|
///
|
||||||
|
virtual config* clone() const { return new credentials_pap(*this); }
|
||||||
|
|
||||||
|
/// \name Storage
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return target suffix for Windows Credential Manager credential name
|
||||||
|
///
|
||||||
|
virtual LPCTSTR target_suffix() const { return _T("PAP"); }
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
};
|
||||||
|
}
|
62
lib/PAP/src/Config.cpp
Normal file
62
lib/PAP/src/Config.cpp
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::config_pap
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::config_pap::config_pap(_In_ module &mod) : config_pass(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config_pap::config_pap(_In_ const config_pap &other) :
|
||||||
|
config_pass(other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config_pap::config_pap(_Inout_ config_pap &&other) :
|
||||||
|
config_pass(std::move(other))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config_pap& eap::config_pap::operator=(_In_ const config_pap &other)
|
||||||
|
{
|
||||||
|
if (this != &other)
|
||||||
|
(config_pass&)*this = other;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::config_pap& eap::config_pap::operator=(_Inout_ config_pap &&other)
|
||||||
|
{
|
||||||
|
if (this != &other)
|
||||||
|
(config_pass&&)*this = std::move(other);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
60
lib/PAP/src/Credentials.cpp
Normal file
60
lib/PAP/src/Credentials.cpp
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::credentials_pap
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::credentials_pap::credentials_pap(_In_ module &mod) : credentials_pass(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_pap::credentials_pap(_In_ const credentials_pap &other) :
|
||||||
|
credentials_pass(other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_pap::credentials_pap(_Inout_ credentials_pap &&other) :
|
||||||
|
credentials_pass(std::move(other))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_pap& eap::credentials_pap::operator=(_In_ const credentials_pap &other)
|
||||||
|
{
|
||||||
|
if (this != &other)
|
||||||
|
(credentials_pass&)*this = other;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_pap& eap::credentials_pap::operator=(_Inout_ credentials_pap &&other)
|
||||||
|
{
|
||||||
|
if (this != &other)
|
||||||
|
(credentials_pass&&)*this = std::move(other);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
@ -18,46 +18,7 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <StdAfx.h>
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::config_pap
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::config_pap::config_pap(_In_ module &mod) : config_pass(mod)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_pap::config_pap(_In_ const config_pap &other) :
|
|
||||||
config_pass(other)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_pap::config_pap(_Inout_ config_pap &&other) :
|
|
||||||
config_pass(std::move(other))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_pap& eap::config_pap::operator=(_In_ const config_pap &other)
|
|
||||||
{
|
|
||||||
if (this != &other)
|
|
||||||
(config_pass&)*this = other;
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::config_pap& eap::config_pap::operator=(_Inout_ config_pap &&other)
|
|
||||||
{
|
|
||||||
if (this != &other)
|
|
||||||
(config_pass&&)*this = std::move(other);
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
21
lib/PAP/src/StdAfx.cpp
Normal file
21
lib/PAP/src/StdAfx.cpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
24
lib/PAP/src/StdAfx.h
Normal file
24
lib/PAP/src/StdAfx.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../include/Config.h"
|
||||||
|
#include "../include/Credentials.h"
|
2
lib/PAP_UI/build/.gitignore
vendored
Normal file
2
lib/PAP_UI/build/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/temp
|
||||||
|
/*.user
|
12
lib/PAP_UI/build/PAP_UI.props
Normal file
12
lib/PAP_UI/build/PAP_UI.props
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
102
lib/PAP_UI/build/PAP_UI.vcxproj
Normal file
102
lib/PAP_UI/build/PAP_UI.vcxproj
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{3D309C2E-64AB-4BC4-A16D-468571A2BC1A}</ProjectGuid>
|
||||||
|
<RootNamespace>PAP_UI</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="PAP_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="PAP_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="PAP_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="PAP_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\include\PAP_UI.h" />
|
||||||
|
<ClInclude Include="..\src\StdAfx.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\PAP_UI.cpp" />
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Events\build\Events.vcxproj">
|
||||||
|
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
33
lib/PAP_UI/build/PAP_UI.vcxproj.filters
Normal file
33
lib/PAP_UI/build/PAP_UI.vcxproj.filters
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\src\StdAfx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\PAP_UI.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\PAP_UI.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -18,17 +18,28 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "PAP.h"
|
#include "../../EAPBase_UI/include/EAP_UI.h"
|
||||||
|
#include "../../PAP/include/Config.h"
|
||||||
|
#include "../../PAP/include/Credentials.h"
|
||||||
|
|
||||||
|
///
|
||||||
|
/// PAP credentials configuration panel
|
||||||
|
///
|
||||||
typedef wxEAPCredentialsConfigPanel<eap::config_pap, eap::credentials_pap, wxPasswordCredentialsPanel> wxPAPCredentialsConfigPanel;
|
typedef wxEAPCredentialsConfigPanel<eap::config_pap, eap::credentials_pap, wxPasswordCredentialsPanel> wxPAPCredentialsConfigPanel;
|
||||||
class wxPAPConfigPanel;
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// PAP configuration panel
|
/// PAP configuration panel
|
||||||
///
|
///
|
||||||
|
class wxPAPConfigPanel;
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <wx/panel.h>
|
||||||
|
#include <wx/stattext.h>
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
|
||||||
class wxPAPConfigPanel : public wxPanel
|
class wxPAPConfigPanel : public wxPanel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
@ -18,7 +18,7 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <StdAfx.h>
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
21
lib/PAP_UI/src/StdAfx.cpp
Normal file
21
lib/PAP_UI/src/StdAfx.cpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
25
lib/PAP_UI/src/StdAfx.h
Normal file
25
lib/PAP_UI/src/StdAfx.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS // Prevent warnings from wxWidgets headers
|
||||||
|
|
||||||
|
#include "../include/PAP_UI.h"
|
2
lib/TLS/build/.gitignore
vendored
Normal file
2
lib/TLS/build/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/temp
|
||||||
|
/*.user
|
12
lib/TLS/build/TLS.props
Normal file
12
lib/TLS/build/TLS.props
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
99
lib/TLS/build/TLS.vcxproj
Normal file
99
lib/TLS/build/TLS.vcxproj
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{4D40CB8A-812E-4F12-B23A-31AF743878E8}</ProjectGuid>
|
||||||
|
<RootNamespace>TLS</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="TLS.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="TLS.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="TLS.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="TLS.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\include\Config.h" />
|
||||||
|
<ClInclude Include="..\include\Credentials.h" />
|
||||||
|
<ClInclude Include="..\src\StdAfx.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\Config.cpp" />
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Credentials.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
35
lib/TLS/build/TLS.vcxproj.filters
Normal file
35
lib/TLS/build/TLS.vcxproj.filters
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\src\StdAfx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Config.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Credentials.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Config.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Credentials.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
198
lib/TLS/include/Config.h
Normal file
198
lib/TLS/include/Config.h
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sal.h>
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// TLS configuration
|
||||||
|
///
|
||||||
|
class config_tls;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace eapserial
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// Packs a TLS method configuration
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Configuration to pack
|
||||||
|
///
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_tls &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a TLS method configuration
|
||||||
|
///
|
||||||
|
/// \param[in] val Configuration to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
inline size_t get_pk_size(const eap::config_tls &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a TLS method configuration
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Configuration to unpack to
|
||||||
|
///
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_tls &val);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../EAPBase/include/Config.h"
|
||||||
|
|
||||||
|
#include <WinStd/Crypt.h>
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
class config_tls : public config_method
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs configuration
|
||||||
|
///
|
||||||
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
|
///
|
||||||
|
config_tls(_In_ module &mod);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
config_tls(_In_ const config_tls &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
config_tls(_Inout_ config_tls &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to copy from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config_tls& operator=(_In_ const config_tls &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves configuration
|
||||||
|
///
|
||||||
|
/// \param[in] other Configuration to move from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
config_tls& operator=(_Inout_ config_tls &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Clones configuration
|
||||||
|
///
|
||||||
|
/// \returns Pointer to cloned configuration
|
||||||
|
///
|
||||||
|
virtual config* clone() const { return new config_tls(*this); }
|
||||||
|
|
||||||
|
/// \name XML configuration management
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Save configuration to XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pDoc XML document
|
||||||
|
/// \param[in] pConfigRoot Suggested root element for saving configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError) const;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load configuration from XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pConfigRoot Root element for loading configuration
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns EAP method type of this configuration
|
||||||
|
///
|
||||||
|
/// \returns `eap::type_tls`
|
||||||
|
///
|
||||||
|
virtual eap::type_t get_method_id() { return eap::type_tls; }
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Adds CA to the list of trusted root CA's
|
||||||
|
///
|
||||||
|
/// \sa [CertCreateCertificateContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376033.aspx)
|
||||||
|
///
|
||||||
|
bool add_trusted_ca(_In_ DWORD dwCertEncodingType, _In_ const BYTE *pbCertEncoded, _In_ DWORD cbCertEncoded);
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::list<winstd::cert_context> m_trusted_root_ca; ///< Trusted root CAs
|
||||||
|
std::list<std::string> m_server_names; ///< Acceptable authenticating server names
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace eapserial
|
||||||
|
{
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::config_tls &val)
|
||||||
|
{
|
||||||
|
pack(cursor, (const eap::config_method&)val);
|
||||||
|
pack(cursor, val.m_trusted_root_ca );
|
||||||
|
pack(cursor, val.m_server_names );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline size_t get_pk_size(const eap::config_tls &val)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
get_pk_size((const eap::config_method&)val) +
|
||||||
|
get_pk_size(val.m_trusted_root_ca ) +
|
||||||
|
get_pk_size(val.m_server_names );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::config_tls &val)
|
||||||
|
{
|
||||||
|
unpack(cursor, (eap::config_method&)val );
|
||||||
|
unpack(cursor, val.m_trusted_root_ca);
|
||||||
|
unpack(cursor, val.m_server_names );
|
||||||
|
}
|
||||||
|
}
|
207
lib/TLS/include/Credentials.h
Normal file
207
lib/TLS/include/Credentials.h
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sal.h>
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// TLS credentials
|
||||||
|
///
|
||||||
|
class credentials_tls;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace eapserial
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// Packs a TLS method credentials
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[in] val Credentials to pack
|
||||||
|
///
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::credentials_tls &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns packed size of a TLS method credentials
|
||||||
|
///
|
||||||
|
/// \param[in] val Credentials to pack
|
||||||
|
///
|
||||||
|
/// \returns Size of data when packed (in bytes)
|
||||||
|
///
|
||||||
|
inline size_t get_pk_size(const eap::credentials_tls &val);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Unpacks a TLS method credentials
|
||||||
|
///
|
||||||
|
/// \param[inout] cursor Memory cursor
|
||||||
|
/// \param[out] val Credentials to unpack to
|
||||||
|
///
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::credentials_tls &val);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../EAPBase/include/Credentials.h"
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
class credentials_tls : public credentials
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs credentials
|
||||||
|
///
|
||||||
|
/// \param[in] mod Reference of the EAP module to use for global services
|
||||||
|
///
|
||||||
|
credentials_tls(_In_ module &mod);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to copy from
|
||||||
|
///
|
||||||
|
credentials_tls(_In_ const credentials_tls &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to move from
|
||||||
|
///
|
||||||
|
credentials_tls(_Inout_ credentials_tls &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copies credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to copy from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
credentials_tls& operator=(_In_ const credentials_tls &other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Moves credentials
|
||||||
|
///
|
||||||
|
/// \param[in] other Credentials to move from
|
||||||
|
///
|
||||||
|
/// \returns Reference to this object
|
||||||
|
///
|
||||||
|
credentials_tls& operator=(_Inout_ credentials_tls &&other);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Clones credentials
|
||||||
|
///
|
||||||
|
/// \returns Pointer to cloned credentials
|
||||||
|
///
|
||||||
|
virtual config* clone() const { return new credentials_tls(*this); }
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Resets credentials
|
||||||
|
///
|
||||||
|
virtual void clear();
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Test credentials if blank
|
||||||
|
///
|
||||||
|
virtual bool empty() const;
|
||||||
|
|
||||||
|
/// \name XML credentials management
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load credentials from XML document
|
||||||
|
///
|
||||||
|
/// \param[in] pConfigRoot Root element for loading credentials
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Storage
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Save credentials to Windows Credential Manager
|
||||||
|
///
|
||||||
|
/// \param[in] pszTargetName The name in Windows Credential Manager to store credentials as
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD store(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) const;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieve credentials from Windows Credential Manager
|
||||||
|
///
|
||||||
|
/// \param[in] pszTargetName The name in Windows Credential Manager to retrieve credentials from
|
||||||
|
/// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c ERROR_SUCCESS if succeeded
|
||||||
|
/// - error code otherwise
|
||||||
|
///
|
||||||
|
virtual DWORD retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return target suffix for Windows Credential Manager credential name
|
||||||
|
///
|
||||||
|
virtual LPCTSTR target_suffix() const { return _T("TLS"); }
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::vector<unsigned char> m_cert_hash; ///< Client certificate hash (certificates are kept in Personal Certificate Storage)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace eapserial
|
||||||
|
{
|
||||||
|
inline void pack(_Inout_ unsigned char *&cursor, _In_ const eap::credentials_tls &val)
|
||||||
|
{
|
||||||
|
pack(cursor, (const eap::credentials&)val);
|
||||||
|
pack(cursor, val.m_cert_hash );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline size_t get_pk_size(const eap::credentials_tls &val)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
get_pk_size((const eap::credentials&)val) +
|
||||||
|
get_pk_size(val.m_cert_hash );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void unpack(_Inout_ const unsigned char *&cursor, _Out_ eap::credentials_tls &val)
|
||||||
|
{
|
||||||
|
unpack(cursor, (eap::credentials&)val);
|
||||||
|
unpack(cursor, val.m_cert_hash );
|
||||||
|
}
|
||||||
|
}
|
@ -18,7 +18,7 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <StdAfx.h>
|
#include "StdAfx.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace winstd;
|
using namespace winstd;
|
||||||
@ -199,131 +199,3 @@ bool eap::config_tls::add_trusted_ca(_In_ DWORD dwCertEncodingType, _In_ const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// eap::credentials_tls
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
eap::credentials_tls::credentials_tls(_In_ module &mod) : credentials(mod)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_tls::credentials_tls(_In_ const credentials_tls &other) :
|
|
||||||
m_cert_hash(other.m_cert_hash),
|
|
||||||
credentials(other)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_tls::credentials_tls(_Inout_ credentials_tls &&other) :
|
|
||||||
m_cert_hash(std::move(m_cert_hash)),
|
|
||||||
credentials(std::move(other))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_tls& eap::credentials_tls::operator=(_In_ const credentials_tls &other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(credentials&)*this = other;
|
|
||||||
m_cert_hash = other.m_cert_hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eap::credentials_tls& eap::credentials_tls::operator=(_Inout_ credentials_tls &&other)
|
|
||||||
{
|
|
||||||
if (this != &other) {
|
|
||||||
(credentials&)*this = std::move(other);
|
|
||||||
m_cert_hash = std::move(other.m_cert_hash);
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void eap::credentials_tls::clear()
|
|
||||||
{
|
|
||||||
credentials::clear();
|
|
||||||
m_cert_hash.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool eap::credentials_tls::empty() const
|
|
||||||
{
|
|
||||||
return credentials::empty() && m_cert_hash.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_tls::load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
assert(pConfigRoot);
|
|
||||||
UNREFERENCED_PARAMETER(ppEapError);
|
|
||||||
|
|
||||||
eapxml::get_element_hex(pConfigRoot, bstr(L"CertHash"), m_cert_hash);
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_tls::store(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) const
|
|
||||||
{
|
|
||||||
assert(pszTargetName);
|
|
||||||
assert(ppEapError);
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
tstring target(target_name(pszTargetName));
|
|
||||||
|
|
||||||
// Write credentials.
|
|
||||||
assert(m_cert_hash.size()*sizeof(char) < CRED_MAX_CREDENTIAL_BLOB_SIZE);
|
|
||||||
assert(m_identity.length() < CRED_MAX_USERNAME_LENGTH );
|
|
||||||
CREDENTIAL cred = {
|
|
||||||
0, // Flags
|
|
||||||
CRED_TYPE_GENERIC, // Type
|
|
||||||
(LPTSTR)target.c_str(), // TargetName
|
|
||||||
_T(""), // Comment
|
|
||||||
{ 0, 0 }, // LastWritten
|
|
||||||
(DWORD)m_cert_hash.size()*sizeof(char), // CredentialBlobSize
|
|
||||||
(LPBYTE)m_cert_hash.data(), // CredentialBlob
|
|
||||||
CRED_PERSIST_ENTERPRISE, // Persist
|
|
||||||
0, // AttributeCount
|
|
||||||
NULL, // Attributes
|
|
||||||
NULL, // TargetAlias
|
|
||||||
(LPTSTR)m_identity.c_str() // UserName
|
|
||||||
};
|
|
||||||
if (!CredWrite(&cred, 0)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredWrite failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD eap::credentials_tls::retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError)
|
|
||||||
{
|
|
||||||
assert(pszTargetName && _tcslen(pszTargetName) < CRED_MAX_GENERIC_TARGET_NAME_LENGTH);
|
|
||||||
DWORD dwResult;
|
|
||||||
|
|
||||||
// Read credentials.
|
|
||||||
unique_ptr<CREDENTIAL, CredFree_delete<CREDENTIAL> > cred;
|
|
||||||
if (!CredRead(target_name(pszTargetName).c_str(), CRED_TYPE_GENERIC, 0, (PCREDENTIAL*)&cred)) {
|
|
||||||
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredRead failed."), NULL);
|
|
||||||
return dwResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cred->UserName)
|
|
||||||
m_identity = cred->UserName;
|
|
||||||
else
|
|
||||||
m_identity.clear();
|
|
||||||
|
|
||||||
m_cert_hash.assign(cred->CredentialBlob, cred->CredentialBlob + cred->CredentialBlobSize);
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
152
lib/TLS/src/Credentials.cpp
Normal file
152
lib/TLS/src/Credentials.cpp
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace winstd;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// eap::credentials_tls
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
eap::credentials_tls::credentials_tls(_In_ module &mod) : credentials(mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_tls::credentials_tls(_In_ const credentials_tls &other) :
|
||||||
|
m_cert_hash(other.m_cert_hash),
|
||||||
|
credentials(other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_tls::credentials_tls(_Inout_ credentials_tls &&other) :
|
||||||
|
m_cert_hash(std::move(m_cert_hash)),
|
||||||
|
credentials(std::move(other))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_tls& eap::credentials_tls::operator=(_In_ const credentials_tls &other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(credentials&)*this = other;
|
||||||
|
m_cert_hash = other.m_cert_hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eap::credentials_tls& eap::credentials_tls::operator=(_Inout_ credentials_tls &&other)
|
||||||
|
{
|
||||||
|
if (this != &other) {
|
||||||
|
(credentials&)*this = std::move(other);
|
||||||
|
m_cert_hash = std::move(other.m_cert_hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void eap::credentials_tls::clear()
|
||||||
|
{
|
||||||
|
credentials::clear();
|
||||||
|
m_cert_hash.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool eap::credentials_tls::empty() const
|
||||||
|
{
|
||||||
|
return credentials::empty() && m_cert_hash.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::credentials_tls::load(_In_ IXMLDOMNode *pConfigRoot, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
assert(pConfigRoot);
|
||||||
|
UNREFERENCED_PARAMETER(ppEapError);
|
||||||
|
|
||||||
|
eapxml::get_element_hex(pConfigRoot, bstr(L"CertHash"), m_cert_hash);
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::credentials_tls::store(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError) const
|
||||||
|
{
|
||||||
|
assert(pszTargetName);
|
||||||
|
assert(ppEapError);
|
||||||
|
DWORD dwResult;
|
||||||
|
|
||||||
|
tstring target(target_name(pszTargetName));
|
||||||
|
|
||||||
|
// Write credentials.
|
||||||
|
assert(m_cert_hash.size()*sizeof(char) < CRED_MAX_CREDENTIAL_BLOB_SIZE);
|
||||||
|
assert(m_identity.length() < CRED_MAX_USERNAME_LENGTH );
|
||||||
|
CREDENTIAL cred = {
|
||||||
|
0, // Flags
|
||||||
|
CRED_TYPE_GENERIC, // Type
|
||||||
|
(LPTSTR)target.c_str(), // TargetName
|
||||||
|
_T(""), // Comment
|
||||||
|
{ 0, 0 }, // LastWritten
|
||||||
|
(DWORD)m_cert_hash.size()*sizeof(char), // CredentialBlobSize
|
||||||
|
(LPBYTE)m_cert_hash.data(), // CredentialBlob
|
||||||
|
CRED_PERSIST_ENTERPRISE, // Persist
|
||||||
|
0, // AttributeCount
|
||||||
|
NULL, // Attributes
|
||||||
|
NULL, // TargetAlias
|
||||||
|
(LPTSTR)m_identity.c_str() // UserName
|
||||||
|
};
|
||||||
|
if (!CredWrite(&cred, 0)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredWrite failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD eap::credentials_tls::retrieve(_In_ LPCTSTR pszTargetName, _Out_ EAP_ERROR **ppEapError)
|
||||||
|
{
|
||||||
|
assert(pszTargetName && _tcslen(pszTargetName) < CRED_MAX_GENERIC_TARGET_NAME_LENGTH);
|
||||||
|
DWORD dwResult;
|
||||||
|
|
||||||
|
// Read credentials.
|
||||||
|
unique_ptr<CREDENTIAL, CredFree_delete<CREDENTIAL> > cred;
|
||||||
|
if (!CredRead(target_name(pszTargetName).c_str(), CRED_TYPE_GENERIC, 0, (PCREDENTIAL*)&cred)) {
|
||||||
|
*ppEapError = m_module.make_error(dwResult = GetLastError(), 0, NULL, NULL, NULL, _T(__FUNCTION__) _T(" CredRead failed."), NULL);
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cred->UserName)
|
||||||
|
m_identity = cred->UserName;
|
||||||
|
else
|
||||||
|
m_identity.clear();
|
||||||
|
|
||||||
|
m_cert_hash.assign(cred->CredentialBlob, cred->CredentialBlob + cred->CredentialBlobSize);
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
21
lib/TLS/src/StdAfx.cpp
Normal file
21
lib/TLS/src/StdAfx.cpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "StdAfx.h"
|
28
lib/TLS/src/StdAfx.h
Normal file
28
lib/TLS/src/StdAfx.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of GÉANTLink.
|
||||||
|
|
||||||
|
GÉANTLink is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
GÉANTLink is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../include/Config.h"
|
||||||
|
#include "../include/Credentials.h"
|
||||||
|
|
||||||
|
#include "../../EAPBase/include/EAPXML.h"
|
||||||
|
|
||||||
|
#include <WinStd/Cred.h>
|
2
lib/TLS_UI/build/.gitignore
vendored
Normal file
2
lib/TLS_UI/build/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/temp
|
||||||
|
/*.user
|
12
lib/TLS_UI/build/TLS_UI.props
Normal file
12
lib/TLS_UI/build/TLS_UI.props
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
107
lib/TLS_UI/build/TLS_UI.vcxproj
Normal file
107
lib/TLS_UI/build/TLS_UI.vcxproj
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{9A25C261-8ADE-4938-8393-E857EF0E37E9}</ProjectGuid>
|
||||||
|
<RootNamespace>TLS_UI</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="TLS_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Debug.props" />
|
||||||
|
<Import Project="TLS_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\Win32.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="TLS_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\..\include\x64.props" />
|
||||||
|
<Import Project="..\..\..\include\Release.props" />
|
||||||
|
<Import Project="TLS_UI.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\include\TLS_UI.h" />
|
||||||
|
<ClInclude Include="..\res\wxTLS_UI.h" />
|
||||||
|
<ClInclude Include="..\src\StdAfx.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\res\wxTLS_UI.cpp" />
|
||||||
|
<ClCompile Include="..\src\TLS_UI.cpp" />
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\res\wxTLS_UI.fbp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Events\build\Events.vcxproj">
|
||||||
|
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
44
lib/TLS_UI/build/TLS_UI.vcxproj.filters
Normal file
44
lib/TLS_UI/build/TLS_UI.vcxproj.filters
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\src\StdAfx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\TLS_UI.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\res\wxTLS_UI.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\StdAfx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\TLS_UI.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\res\wxTLS_UI.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\res\wxTLS_UI.fbp">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -18,36 +18,86 @@
|
|||||||
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "TLS.h"
|
#include "../../EAPBase_UI/include/EAP_UI.h"
|
||||||
#include "../res/wxTLS_UI.h"
|
#include "../../TLS/include/Config.h"
|
||||||
|
#include "../../TLS/include/Credentials.h"
|
||||||
|
|
||||||
#include <wx/icon.h>
|
#include <WinStd/Common.h>
|
||||||
#include <wx/validate.h>
|
|
||||||
|
|
||||||
#include <vector>
|
#include <Windows.h>
|
||||||
|
#include <WinCrypt.h> // Must include after <Windows.h>
|
||||||
class wxCertificateClientData;
|
|
||||||
class wxCertificateSelectionClientData;
|
|
||||||
class wxHostNameValidator;
|
|
||||||
class wxFQDNValidator;
|
|
||||||
class wxFQDNListValidator;
|
|
||||||
|
|
||||||
class wxEAPTLSCredentialsPanel;
|
|
||||||
class wxEAPTLSServerTrustPanel;
|
|
||||||
typedef wxEAPCredentialsConfigPanel<eap::config_tls, eap::credentials_tls, wxEAPTLSCredentialsPanel> wxEAPTLSCredentialsConfigPanel;
|
|
||||||
class wxEAPTLSConfigPanel;
|
|
||||||
|
|
||||||
namespace eap
|
|
||||||
{
|
|
||||||
void get_cert_title(PCCERT_CONTEXT cert, winstd::tstring &title);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Helper class for auto-destroyable certificates used in wxWidget's item containers
|
/// Helper class for auto-destroyable certificates used in wxWidget's item containers
|
||||||
///
|
///
|
||||||
|
class wxCertificateClientData;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Helper class for auto-destroyable certificates used in wxWidget's item containers
|
||||||
|
///
|
||||||
|
class wxCertificateSelectionClientData;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Validator for host name
|
||||||
|
///
|
||||||
|
class wxHostNameValidator;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Validator for FQDN
|
||||||
|
///
|
||||||
|
class wxFQDNValidator;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Validator for FQDN lists
|
||||||
|
///
|
||||||
|
class wxFQDNListValidator;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAPTLS credential panel
|
||||||
|
///
|
||||||
|
class wxEAPTLSCredentialsPanel;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAPTLS server trust configuration panel
|
||||||
|
///
|
||||||
|
class wxEAPTLSServerTrustPanel;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// TLS credentials configuration panel
|
||||||
|
///
|
||||||
|
typedef wxEAPCredentialsConfigPanel<eap::config_tls, eap::credentials_tls, wxEAPTLSCredentialsPanel> wxEAPTLSCredentialsConfigPanel;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAPTLS configuration panel
|
||||||
|
///
|
||||||
|
class wxEAPTLSConfigPanel;
|
||||||
|
|
||||||
|
namespace eap
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// Helper function to compile human-readable certificate name for UI display
|
||||||
|
///
|
||||||
|
void get_cert_title(PCCERT_CONTEXT cert, winstd::tstring &title);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../res/wxTLS_UI.h"
|
||||||
|
|
||||||
|
#include <WinStd/Win.h>
|
||||||
|
|
||||||
|
#include <wx/clntdata.h>
|
||||||
|
#include <wx/icon.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
#include <wx/validate.h>
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
class wxCertificateClientData : public wxClientData
|
class wxCertificateClientData : public wxClientData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -66,9 +116,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Helper class for auto-destroyable certificates used in wxWidget's item containers
|
|
||||||
///
|
|
||||||
class wxCertificateSelectionClientData : public wxClientData
|
class wxCertificateSelectionClientData : public wxClientData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -108,9 +155,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Validator for host name
|
|
||||||
///
|
|
||||||
class wxHostNameValidator : public wxValidator
|
class wxHostNameValidator : public wxValidator
|
||||||
{
|
{
|
||||||
wxDECLARE_DYNAMIC_CLASS(wxHostNameValidator);
|
wxDECLARE_DYNAMIC_CLASS(wxHostNameValidator);
|
||||||
@ -157,9 +201,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Validator for FQDN
|
|
||||||
///
|
|
||||||
class wxFQDNValidator : public wxValidator
|
class wxFQDNValidator : public wxValidator
|
||||||
{
|
{
|
||||||
wxDECLARE_DYNAMIC_CLASS(wxFQDNValidator);
|
wxDECLARE_DYNAMIC_CLASS(wxFQDNValidator);
|
||||||
@ -206,9 +247,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Validator for FQDN lists
|
|
||||||
///
|
|
||||||
class wxFQDNListValidator : public wxValidator
|
class wxFQDNListValidator : public wxValidator
|
||||||
{
|
{
|
||||||
wxDECLARE_DYNAMIC_CLASS(wxFQDNListValidator);
|
wxDECLARE_DYNAMIC_CLASS(wxFQDNListValidator);
|
||||||
@ -255,9 +293,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EAPTLS credential panel
|
|
||||||
///
|
|
||||||
class wxEAPTLSCredentialsPanel : public wxCredentialsPanel<wxEAPTLSCredentialsPanelBase, eap::credentials_tls>
|
class wxEAPTLSCredentialsPanel : public wxCredentialsPanel<wxEAPTLSCredentialsPanelBase, eap::credentials_tls>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -279,9 +314,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EAPTLS server trust configuration panel
|
|
||||||
///
|
|
||||||
class wxEAPTLSServerTrustPanel : public wxEAPTLSServerTrustConfigPanelBase
|
class wxEAPTLSServerTrustPanel : public wxEAPTLSServerTrustConfigPanelBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -319,9 +351,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EAPTLS configuration panel
|
|
||||||
///
|
|
||||||
class wxEAPTLSConfigPanel : public wxPanel
|
class wxEAPTLSConfigPanel : public wxPanel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user