Compare commits

...

330 Commits
1.1h ... master

Author SHA1 Message Date
5293dfc1a7 Upgrade code signing
This adds support for Microsoft Azure Trusted Signing and removes
signing of the Debug binaries to minimize the Trusted Signing API
volume.

Signed-off-by: Simon Rozman <simon@rozman.si>
2024-11-19 10:49:17 +01:00
2a918254f6 WinStd, stdex, wxExtend: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2024-11-19 10:44:41 +01:00
0f3070033f Stop reusing winstd::eap_attr after moved from
MSVC C26800 warned us an object is not guaranteed to be cleared after
being moved from. At least in std C++ implementations.

Thou winstd does clear all objects after being moved from, we could just
silence C26800 warning. But what if some day winstd behavior changes and
with us having this warning silenced?

std::eap_attr has no clear() method, therefore revert to using scope and
temporary object. It achieves the same effect as clear after moved from
does.

Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-28 14:07:00 +02:00
887129ccc0 WinStd: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-28 14:04:59 +02:00
511b8c04ea WinStd: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-13 12:39:47 +02:00
a174e42b3b Preset version to 1.3h
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-03 19:35:40 +02:00
0ad6f61e15 WinStd, stdex: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-03 19:09:37 +02:00
5cffd63cf5 MSI: Install WLANManager.exe to user computer
It was being deployed as a satellite assembly since GÉANT didn't really
use it. For other deployments it proves useful. It is required to run it
on the user computer anyway, so no harm if the WLANManager.exe gets
installed.

Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-03 19:09:37 +02:00
3215cc0cc7 Makefile: Discontinue publishing binaries to GitHub
Publishing binaries to https://github.com/Amebis/GEANTLink-dist was a
customer requirement. As GÉANT is no longer deploying GÉANTLink, this
makes no sense any more.

Should anybody require this feature, please contact me.

Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-03 19:09:37 +02:00
97958040a3 Makefile: Cleanup
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-03 19:09:37 +02:00
4f69180e3d Update translations from Transifex
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-03 19:09:37 +02:00
232b374488 Preset version to 1.3g
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-10-03 19:09:37 +02:00
b049b7eeb8 Set version to 1.3f
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-04-07 08:58:57 +02:00
4d67075ff4 Update translations from Transifex
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-04-07 08:56:55 +02:00
af7bbb5ae4 WinStd: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-04-07 08:52:22 +02:00
b0a7c5fd16 Enable MSVC Spectre mitigation
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-03-21 09:17:11 +01:00
53845c6abe MSI: Simplify ProgramFiles(64)Folder property use
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-03-14 11:37:33 +01:00
609d55cfeb stdex: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-03-07 11:46:45 +01:00
a2cab07a30 WinStd: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-03-03 18:02:31 +01:00
831dcf680c wxExtend: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-03-02 15:43:50 +01:00
52b29a48b8 MSIBuild: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-03-02 15:43:48 +01:00
8304e666a3 MSI: Discontinue prefixed row IDs in tables
humanSimon, is this really you? 😉

Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-15 12:50:30 +01:00
05d51ce6b6 WinStd: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-15 12:49:08 +01:00
4ed294171e WinStd, stdex: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-04 14:46:54 +01:00
db34e71705 Move vector_queue from WinStd to stdex
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-04 14:45:07 +01:00
280e9206f2 stdex: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-03 15:42:04 +01:00
47b602e1fa WinStd: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-03 15:42:04 +01:00
19c523509b Move Hex from WinStd to stdex
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-03 15:42:04 +01:00
a254dd527a Move Base64 from WinStd to stdex
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-03 14:16:47 +01:00
6f92e82598 WinStd: Update
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-02-03 13:03:59 +01:00
5e7f55880a Update Copyright and build year
Signed-off-by: Simon Rozman <simon@rozman.si>
2022-01-07 11:21:33 +01:00
84fae77ed3 Prepare PDB.zip file locally
The GEANTLink-dist repo is hosted on GitHub and hit the file size limit.

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 15:35:36 +01:00
48ef747388 Set version to 1.3e
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 15:06:11 +01:00
4bd38d5d89 Address ICE warnings
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 15:06:11 +01:00
ce2cc15cc6 Discontinue PRODUCT_VERSION
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 14:12:42 +01:00
4ef4ec6f31 Introduce PDB packaging
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 13:48:45 +01:00
358dd021db Hardcode MSIBUILD_OUTPUT_DIR and MSIBUILD_ROOT
KISS!!!

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 13:24:40 +01:00
d0d0174576 MSIBuild: bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 12:32:42 +01:00
b44aeb7a79 Open-code CAB.mak
All other MSI compilations are open-coded but this one.

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 12:32:07 +01:00
4c4cb35bce Hardcode output folder name
KISS!!!

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 10:26:55 +01:00
0e7a9c7448 Redirect output files to the output folder
Thou linker can locate the output .lib file of referenced projects
wherever .lib is just fine, this helps us to gather all .pdb files in
the output folder.

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 07:20:50 +01:00
0d905f414e Cleanup project files
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 06:28:32 +01:00
4fce7f58e1 MSIBuild: bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-23 14:52:26 +01:00
174baa36c1 Rebuild credentials if EapPeerBeginSession() did not provide them
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-23 14:11:57 +01:00
67805dc9d1 Add missing data length check
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-23 13:35:48 +01:00
83ad0ef45d Preset version to 1.3d
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-23 10:10:50 +01:00
f144b85047 Set version to 1.3c
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-22 15:42:00 +01:00
b55ddd7d86 Update Copyright and build year
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-22 15:31:23 +01:00
b96ebfbce4 Switch to SPDX license notice
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-22 15:20:57 +01:00
0b7b16396a Include full event source registration in Event Monitor MSI too
Should user install EAP methods other than using GÉANTLink provided MSI
files, the event source was only partially registered causing incomplete
event display.

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-22 15:20:56 +01:00
12ef3059e9 Backport EAPSup code changes
This introduces some PEAP/EAP-TTLS split code, but helps maintain shared
code base.

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-22 15:20:56 +01:00
1994da974a Backport EAPSup project changes
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-20 08:17:12 +01:00
2862faba73 Fix UTF-8 encoding
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-20 08:14:44 +01:00
ddf6ce6997 Update translations from Transifex
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-19 16:18:16 +01:00
e1707cfb01 Use environment to detect MSI tools path
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-19 15:58:57 +01:00
b00f379655 Resolve charset .idtx/.idt confusion
NMake inline files are always created using ACP. The "1252" in the .idtx
header has no effect on this. However, we must encode the .idt files
using correct charset/codepage regardless the ACP being used on the
building machine.

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-19 15:55:31 +01:00
44e02e51e3 Remove excessive semicolon 2021-11-19 15:48:48 +01:00
1f6716b279 Cleanup WINSTD_NOVTABLE/__declspec(novtable)
This was originally intended as a compiler hint.

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-19 15:48:06 +01:00
71976a8a0b wxExtend: bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2021-11-19 15:46:04 +01:00
78478a203f Delegate memory leak detection to CRT
_CrtDumpMemoryLeaks() direct call misreports heap allocations owned by
globally initialized objects.

Using _CRTDBG_LEAK_CHECK_DF delays the memory leak check until after
globally initialized objects are destroyed.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-06-29 15:46:00 +02:00
682dc048e9 Migrate manual DLL registration to DllRegisterServer()
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-06-29 15:45:44 +02:00
51fa08cc71 wxExtend: bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-06-29 15:40:15 +02:00
2e9f073e94 Fix Events project and move .rc to res
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-06-29 15:40:15 +02:00
dd9cd83400 Output error text when event information retrieval fails
In some cases Event Monitor reported blank event text. I am suspecting
the TdhGetEventInformation() fails for some reason resulting in a silent
failure to return event text.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-06-29 15:40:15 +02:00
d113388a69 Remove TortoiseGit settings
Git client choice is not a thing of the repository, but individual
developer.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-06-29 15:40:14 +02:00
d62089d5bd Fix initial keyboard focus
After rearranging the configuration dialog panels, the inner
authentication (PAP) is no longer the topmost panel/control.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-05-13 09:07:54 +02:00
a6bdb42ece Deprecate encrypted BLOB checksum
The MD5 checksum was calculated on unencrypted data. This offered a
possibility for a dictionary attack.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-05-13 08:26:07 +02:00
7897d0716c MSIBuild: Bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-05-13 07:33:42 +02:00
842f46dac8 Pre-set version to 1.3b
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-20 16:38:53 +02:00
b2373c10c7 Import translations from Transifex
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-20 16:17:27 +02:00
3f4afdcb9a Add support for Romanian
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-20 16:17:27 +02:00
45ee84f9ac Hide GTC response while typing
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-20 11:28:49 +02:00
96b104f0a6 Prevent empty GTC responses
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-20 11:28:49 +02:00
8b8690c71a Touch-up radio button and checkbox spacing
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-17 15:48:41 +02:00
d945ccac73 Prevent empty credentials
Always require identity (username).

Zero passwords are no security. Prevent zero passwords too.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-17 14:56:26 +02:00
63db62453a Add TortoiseGit settings
This unifies language (spell-checking), Signed-off-by requirement and
icon branding across all clones and working copies.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-17 14:45:47 +02:00
a7dc7d2525 Make Wingdings icons non-localizable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-17 07:01:11 +02:00
ae0085cfdf Update documentation
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-14 11:19:52 +02:00
fdc1e5cb73 Resolve C5205 warning
Reference: https://developercommunity.visualstudio.com/content/problem/893960/compiling-atlsecurityh-raises-several-c5205-warnin.html
Reference: https://developercommunity.visualstudio.com/idea/937938/msvc-version-1650-preview-20-introduces-a-new-c-wa.html
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-04-14 08:51:34 +02:00
9671daecf4 Update documentation
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-03-16 10:12:55 +01:00
7d53ec52b7 Makefile: PackageGUID.mak moved to %TEMP%
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-03-03 13:48:31 +01:00
709a9e8709 Makefile: Stop digitally signing intermediate packaging files
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-03-03 13:48:31 +01:00
e8ff739ca5 Makefile: Simplify intermediate packaging filenames
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-03-03 13:30:54 +01:00
5b452a25fe Makefile: Optimize cleaning
NMAKE invocations are costly (slow, no-parallel support).

Rather than pinpoint cleaning of each combination of $(LANG), $(PLAT)
and $(CFG) related files, we do the wildcard cleaning of all packaging
files.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-03-03 13:28:14 +01:00
90e21bd6e6 Makefile: Optimize building
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-03-03 13:28:13 +01:00
8b9d99a944 Pre-set version to 1.3a
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-03-03 12:47:15 +01:00
c81af549bf Set version to 1.3
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 14:12:59 +01:00
1286bd0b87 Automate source publishing
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 14:12:59 +01:00
f0e2d2d40d Revert back to "x64" platform designation of deliverables
Renaming MSI and other output files just to unify platform designation
doesn't justify the cause. Not to break other people's installers, the
"AMD64" was renamed back to "x64" in output filenames.

This partially reverts 152e3a9176203b0cc953bd55b1118caf75045c4a.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 13:37:19 +01:00
3fc0f89291 wxExtend: Bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 10:39:48 +01:00
96fede14ed Pull translations from Transifex
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 10:14:30 +01:00
aadd1c8472 MSI: Change upgrade GUID and perform major upgrade
As component GUIDs changed, but the component path remained, the minor
update will no longer work correctly.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 09:50:34 +01:00
14726b14d4 Makefile: Revise language list
To speed up building, remove untranslated and severly undertranslated
languages: Bulgarian, Czech, Welsh, Basque, Finnish, French, Gaelish,
Icelandic, Korean, Lithuanian, Dutch, Russian, Slovak, Swedish,
Vietnamese

Enable already translated, but overlooked languages: Hungarian,
Portuguese (Portugal), Turkish

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 09:33:38 +01:00
9c50c949b1 wxExtend: Bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 08:22:21 +01:00
61d3ef43ad WinStd: Bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-28 08:22:03 +01:00
152e3a9176 Unify platform designations
- .sln uses the same as .vcxproj and Makefile
- Output MSI files use the same as %PROCESSOR_ARCHITECTURE%

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-08 08:23:08 +01:00
ddaf4cc598 EAPMethods: Move build and src files one folder up
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 15:44:47 +01:00
8c2225992e TLS: Revise Schannel flags
- SCH_USE_STRONG_CRYPTO is now declared in the Windows SDK included with
  Visual Studio 2019. No need to enter this flag numerically any more.

- m_sc_ctx.initialize() and m_sc_ctx.process() should use same flags.
  They are actually. Rather than copy&paste them, declare them in a
  single place.

- Add ISC_REQ_USE_SUPPLIED_CREDS flag. Use the client certificate we
  supply or none at all.

- Add ISC_REQ_MANUAL_CRED_VALIDATION flag. We validate the server
  certificate.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:59 +01:00
dedaee0693 UI: Upgrade wxFromBuilder
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:59 +01:00
fdb1340b9d EAP-GTC UI: Prevent wxChoicebook from stretching pages
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:59 +01:00
f98996c13d UI: Reorder outer and inner configuration panels
This follows the natural workflow.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:58 +01:00
0aab5f2e94 UI touch-up
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:58 +01:00
8d42db2f56 TLS: Use protocol version enabled on the system by default
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:58 +01:00
4dad574377 Rename StdAfx.h to PCH.h
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:58 +01:00
cd0a99c518 wxUICanceller: Move upstream and make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:58 +01:00
3bd2d1fd09 credentials_tls: Update documentation
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:57 +01:00
d4c01a5345 config_method_tls: Cleanup
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:57 +01:00
6e97a04bfe credentials_tls: Keep thumbprint rather than client certificate
By storing the client certificate the certificate became detached from
its private key stored in user certificate store. This rendered client
certificates useless for client TLS authentication.

Now, the client certificate thumbprint is stored instead. The client
certificate is looked up in the user certificate store as required.

This breaks profile XML and BLOB backward compatibility. Since the
client certificate support was broken, nobody probably used those in
the settings before.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:57 +01:00
75488ba870 credentials: Move user impersonation to peer::get_identity()
To retrieve user credentials, EapHost provides us the interactive user's
token we can use to impersonate.

By doing the impersonation early in peer::get_identity(), we don't need
to pass the token down the lower methods. This is rather a
simplification than a performance optimization.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:57 +01:00
e2eb41e811 credentials_tls: Use WinCrypt to get client certificate name
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:57 +01:00
e8b1e157d9 module: Make make_config() pure virtual
It is important to implement this method in derived classes. When we
provided default implementation returning NULL, introducing new methods
might leave this method not implemented without a compiler error.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:57 +01:00
6511d826a0 peer: Move all generic methods upstream from peer_tls_base
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:57 +01:00
33e765adcd Cleanup
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:56 +01:00
5b02352f1a Resolve the make_...() methods
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:56 +01:00
5195b79eed method_ttls: Reintroduce
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:56 +01:00
d400901c52 Rename peer_tls to peer_tls_base
peer_tls is actually not a complete EAP-TLS implementation.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:38 +01:00
570eb83558 peer_tls: Move all applicable methods upstream to make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:38 +01:00
db056f5150 Cleanup
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:38 +01:00
1d558c939e Rename method_tls_tunnel to method_tls and move upstream
CRL checking was also moved upstream as method_tls triggers it.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:10:37 +01:00
5c0299197b method_defrag: Move upstream to make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:43 +01:00
383a85c18b method: Merge with method_tunnel
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:43 +01:00
3fa48c3650 MSIBuild: Bump
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:43 +01:00
c40f71462f ui_context: Merge with ui_context_tls_tunnel
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:43 +01:00
bef455e5a6 method_defrag: Check minimum send packet size and revise the calculation
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:43 +01:00
737f51b815 method_tls_tunnel: Cleanup
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:43 +01:00
7706e54294 method_tls_tunnel: Revise inner response packet generation
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:42 +01:00
d2a0c034c1 method_tls_tunnel: Declare authentication success according to EAP
It is usually the outer EAP-Success/Failure message that confirm the
authentication is gracefully over.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:42 +01:00
1290d83b9d method_eapmsg: Let inner method handle EAP-Identity packets
With EapHost inner method, this is a must.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:42 +01:00
b2edd74270 Introduce localization catalog domain name
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:42 +01:00
0a280975fb Rename method_ttls => method_tls_tunnel to make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:42 +01:00
1e9e5a99c3 peer_ttls: Split to make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:09:42 +01:00
41c2be77f5 Make EAP method logging dynamic
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:08:28 +01:00
4331de8605 wxTTLSConfigPanel: Split to make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:08:28 +01:00
bacd4fd8d8 Rename wxTTLSConfigPanel and move upstream
wxTTLSConfigPanel is about anonymizing inner identity and was renamed to
wxEAPIdentityConfigPanel and moved upstream to make reusable.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:08:28 +01:00
18184a2762 peer_ui: Move config_xml2blob and config_blob2xml upstream
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:08:28 +01:00
fb8ca2de24 Rename ui_context_ttls => ui_context_tls_tunnel to make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:08:28 +01:00
248e15641a config_method_ttls: Split to make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:08:28 +01:00
a943a14d0f Rename credentials_ttls => credentials_tls_tunnel to make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:08:27 +01:00
04e6b7064f EapHost: Enable inner methods
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:53 +01:00
3e04ca5181 EapHost: Fix EapHostPeerGetSendPacket() call
The packet buffer returned by EapHostPeerGetSendPacket() shall not be
freed.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:53 +01:00
017766cb29 EapHost: Disambiguate from native EAP methods
When eap::config_method_eaphost::get_method_id() returns EAP-MSCHAPv2,
XML-to-BLOB gets confused and picks native EAP-MSCHAPv2 implementation.
Therefore, it was updated to always return unknown EAP type. Outer
method does not need to know the exact method implemented by EapHost
inner method.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:53 +01:00
213042339b EapHost: Do not reference the Eappprxy.lib when not used
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:53 +01:00
4da7785490 method_eap: Refactor
Instead of delayed response packet generation, the
method_eap::process_request_packet() prepares the response packet. This
eliminates the state machine.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:53 +01:00
7caa4b12a6 method_eap: tolerate empty request packets
TLS methods call process_request_packet(NULL, 0) to check on the inner
method for the payload to piggyback on the final handshake response.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:53 +01:00
2282a2c45f Explicitly check buffer length before touching it and unify exception
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:53 +01:00
9d0e261bbe method_eap: Add EAP Success/Failure support
Although, EapHost takes care for EAP Success and Failure packets for us,
it does so for the outer-most method only. When using EAP inside a TLS
tunnel, we are responsible for EAP Success and Failure packets ourselves.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:53 +01:00
e5e5f1c63e method_eap: Support EAP identity exchange
Although, EapHost takes care for EAP identity exchange for us, it does
so for the outer-most method only. When using EAP inside a TLS tunnel,
we are responsible for EAP identity exchange ourselves.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:52 +01:00
1c295360fc Double link inner-outer methods
This allows inner methods to access method_defrag to get negotiated
EAP-TTLS/PEAP protocol version.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:00 +01:00
0daa0579fe method_defrag: Merge EAP response/request flags
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:00 +01:00
b908ff3aa9 method_defrag: Add support for version negotiation
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-07 13:07:00 +01:00
4af1bdc935 method_defrag: Simplify data length calculation
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:42 +01:00
a18fb7826c MSCHAPv2: Adopt authentication success from EAP
It is usually the outer EAP-Success/Failure message that confirm the
authentication is gracefully over.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:42 +01:00
d8cc9636b5 MSCHAPv2: Set keying material the proper way
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:42 +01:00
f4e8ba88ae Omit "B" from reported sizes
There should be a space between the number and a unit. Since everything
is always reported in bytes, there is no need to have a unit.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:42 +01:00
9e9648c924 Make modules and methods non-copyable & non-movable
Modules and methods are never duplicated or moved in a memory. Moving
constructors and operators are dead code.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:42 +01:00
a75008891b Add ECDHEPHEM and NULL cipher friendly names
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:41 +01:00
72398339d3 Update PEAP name
It's PEAP, not EAP-PEAP.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:41 +01:00
6addc49df2 wxInitializerPeer: Move upstream and make reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:41 +01:00
c4fc8d184a config_method_with_cred: Move anonymous identity upstream
This might break BLOB backward compatibility.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:41 +01:00
a2a4d75745 method: Cleanup get_result()
fIsSuccess is already set to TRUE by module::get_result().

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:41 +01:00
b3291ff8b1 Remove excessive UTF-8 BOM marker
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:41 +01:00
5e99c8e1c7 Makefile: Parameterize platform and language component GUIDs
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:40 +01:00
14e48f9c8a Parameterize EAP module MSI building
Since this also changes GUIDs of some components, the "EAPTTLS" has been
changed to "EAP-TTLS" in filenames.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:40 +01:00
dfa8115883 Simplify EAPMETHOD_PEER(_UI) constants to match other EAPMETHOD... ones
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:40 +01:00
b49624fc28 Revise _CRT_SECURE_NO_WARNINGS coverage
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:40 +01:00
08a67c561a Make EAP method StdAfx(_UI).h and RC files reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:40 +01:00
d3760d33ca Makefile: Parameterize event provider GUID
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:40 +01:00
8b66c7ad8d Parameterize EAP method author ID
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:40 +01:00
6f4df3dfab Move reusable parts of .vcxproj to .props
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:39 +01:00
f05d3f8243 Make _UI suffix consistent
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:39 +01:00
1cc7b1a3a0 Simplify .vcxproj and .props
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:39 +01:00
33612b556c Reorganize EAPMethods projects to scale better
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:39 +01:00
b592ad0569 Makefile: Make EAP method module registration reusable
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:39 +01:00
68729cdcd9 Documentation update
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:39 +01:00
32254864d5 Remove std::move on const members
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:39 +01:00
5a7827e85e Make enums scoped
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:53:38 +01:00
6db816cd60 Match enum forward declaration
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:52:44 +01:00
840e055bf6 Relocate data encryption key
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:52:44 +01:00
40193b7a68 Re-add UTF-8 BOM where required
When no UTF-16 or UTF-8 BOM is present, MSVC will read source files
using current user charset.

Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:52:44 +01:00
98fa1a09a0 MSI: Merge PRODUCT_NAME into MSIBUILD_PRODUCT_NAME_ID
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:52:44 +01:00
8d68795461 Bump MSIBuild
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-06 11:52:43 +01:00
059710d83c Update Copyright year
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-02-05 11:45:51 +01:00
fac33ee0b1 Remove UTF-8 BOM
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-11-28 17:04:16 +01:00
55b8259fe9 Bump WinStd and wxExtend
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-11-28 16:40:19 +01:00
bbd5aa1490 Enable function level linking to allow LTCG
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-09-04 13:11:49 +02:00
6fb5cb88d2 Address code analysis warnings
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-09-04 13:11:48 +02:00
a459823beb Make ui_canceller cover more code
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-22 18:38:03 +02:00
9058dc75d9 Change GEANTLink-dist repo local path
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-22 15:31:08 +02:00
ab3ffc63f7 Cancel previous credential prompt if EapHost wants a new one
(fixes #27)

Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-14 16:02:32 +02:00
24a02e5adf Simplify UI flow
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-14 15:34:49 +02:00
b2d939011f Tolerate already registered monitor master and slave window classes
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-14 15:08:16 +02:00
2ce0c5d259 Optimize std::wstring (un)packing
The string is now converted to and from UTF-8 directly into or from
memory pointed by cursor. Extra buffer allocation and copy has been
dropped.

Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-14 13:22:57 +02:00
f3cc5b6064 Fix typo
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-14 08:56:01 +02:00
8a093c645e Make (un)packing of std C++ string explicit
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-14 08:55:32 +02:00
35fd9fbbac Move eap::monitor_ui to Module.h/cpp
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-14 08:50:02 +02:00
dfd26f214d Upgrade eap::monitor_ui's HWND to volatile
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-13 14:28:21 +02:00
009cd36fe2 Move parent HWND management to wxInitializerPeer
While reducing copy & pasted code, this also protects wxTopLevelWindows
list with a lock.

Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-13 12:47:27 +02:00
592d53d8bc Log failure status reason of last authentication failure
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-12 14:12:25 +02:00
e10923c7c2 Update translation templates
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-12 14:10:42 +02:00
d66ad98a49 Update documentation
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-12 13:18:51 +02:00
2e8bd4403f Fix typo 2019-06-14 11:51:09 +02:00
40ee89a04a Update translations
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-14 11:09:02 +02:00
0e69fb175c Upgrade to Visual Studio 2019
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-14 10:54:41 +02:00
8233992b76 Update documentation
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-14 09:57:48 +02:00
f88b966762 Bump wxExtend
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-14 09:57:48 +02:00
5a82dc2a25 Unify LPCBYTE
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-14 09:57:48 +02:00
638f2cf18d Bump WinStd
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-14 09:57:48 +02:00
38a7354ad9 Upgrade to compile with WIN32_LEAN_AND_MEAN
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-14 09:57:48 +02:00
672afbb918 Preset version to 1.2g
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-14 09:57:48 +02:00
ec908bbfe9 Update README.md 2018-12-06 08:34:09 +01:00
3396f9cf97 Force SHA-256 digest for timestamp signatures
Comodo timestamp server defaults to SHA-1. To make sure timestamp
signatures are SHA-256, add appropriate signtool.exe flag.
2018-11-06 20:08:44 +01:00
f6ce76d384 Update translations and add Estonian translation 2018-11-06 20:08:08 +01:00
ee7a8ce6d1 Silence the missing shcore.dll warning on Windows 7 2018-11-06 20:06:41 +01:00
a53ceba97e Preset version to 1.2f 2018-11-06 20:06:13 +01:00
4d7538937b Update sub-modules
(fixes #25)
2018-09-30 16:54:53 +02:00
10297c7ab3 Make GUI DPI-aware 2018-09-17 11:43:19 +02:00
c7f1a66a4a Update sub-modules 2018-09-14 17:50:45 +02:00
c2426f26fd Clean-up 2018-09-08 01:10:43 +02:00
6069a25c75 Run MSBuild tasks in parallel 2018-09-07 12:54:43 +02:00
f07eed7882 Pre-set version to 1.2e 2018-09-07 12:53:46 +02:00
401b4cdc28 Set version to 1.2d 2018-09-07 12:43:33 +02:00
1879d00bf9 Add support for ARM64 platform 2018-09-07 10:39:20 +02:00
0602285220 Switch to Visual Studio 2017 2018-09-05 14:56:08 +02:00
1fe80bd0e0 Stop using internal unique_ptr::_Myptr member 2018-09-05 14:40:27 +02:00
b3e5c93f4b Add explicit constructors/operators to sanitizing_blob_(z)f
Otherwise the compiler might generate default ones - and delete them
too.
2018-09-05 14:32:03 +02:00
366e08899b Review implicit narrowing conversions 2018-09-05 14:29:49 +02:00
d5142aaf15 Distinguish or merge variables with same names
...to resolve C4457 warnings.
2018-09-05 14:27:59 +02:00
0b3e340dbe Update sub-modules 2018-09-05 13:22:59 +02:00
b655bd7d0b Register en_US language in nmake register
When "Language" setting is absent in registry, the initialization of
wxWidget localization raises asserts.
2018-09-05 13:16:59 +02:00
daeca67bee Force disable incremental linking
Incremental linking and reference optimization are mutually exclusive.
While VC2010 defaulted to non-incremental linking, this conflict was not
apparent.
2018-09-05 13:15:48 +02:00
d2b66563e1 Fix incorrect template parameter tolerated by VC2010 2018-09-05 13:13:14 +02:00
0d21610322 Remove MFC dependency 2018-09-05 13:11:14 +02:00
f75e72757e VS10Solution.sln => GEANTLink.sln 2018-09-05 13:06:21 +02:00
2e81aee089 Update MSIBuild sub-module 2018-09-05 13:03:54 +02:00
7a6b760845 Upgrade to wxWidgets 3.1.1 and wxFormBuilder 3.8.1 2018-09-03 13:59:18 +02:00
5fd1c3b60e Switch to SHA-256 signing of final MSI files
This breaks support for Windows Vista.
2018-07-04 11:27:13 +02:00
e2c9914ef9 Import translations from Transifex 2018-07-04 10:02:49 +02:00
34a8f1b155 Update translation template 2018-06-20 15:32:34 +02:00
47f0a41fb6 Update sub-modules 2018-06-20 15:00:53 +02:00
352ad4f9d2 Stop using <> parentheses to avoid XML/HTML markup
Transifex treats strings enclosed in <> as HTML.
2018-06-20 14:59:52 +02:00
fc40c44612 .gitignore output WLANManager.exe properly 2018-06-20 14:58:48 +02:00
9846d29d76 Switch to SHA-256 signing 2018-06-20 14:58:27 +02:00
502f26059d Preset version to 1.2c 2018-06-20 14:58:17 +02:00
d0e363b7c0 Enable Italian GUI 2018-06-20 14:57:07 +02:00
6259a80cf4 Update translations 2018-06-20 14:57:01 +02:00
83f975861c Auto-detect devenv.com path 2018-06-20 14:56:36 +02:00
7593a34ff4 Set version to 1.2b 2017-12-05 10:04:27 +01:00
8aae24d63d Translation update 2017-12-05 10:03:42 +01:00
dd29b58da6 Update wxExtend module 2017-12-05 10:03:33 +01:00
864b8177e5 Update WinStd module 2017-12-05 10:03:19 +01:00
8de444dadf Distribution folder changed 2017-11-20 12:04:11 +01:00
1db7e953e8 Issue with NULL-initialized new profile configuration fixed 2017-07-10 10:48:10 +02:00
8605dcc751 Sub-module update 2017-05-30 12:35:06 +02:00
9210f2a711 Translation update 2017-05-30 12:34:49 +02:00
5d5e14b724 Version set to 1.2a 2017-05-22 09:31:00 +02:00
1d583c39c9 daea1bba62ba514ed13d716ca5b5b1c89763c8f9 reverted 2017-05-22 09:14:09 +02:00
9926cd19ee WMI\Autologger records not installed any more, since they caused feature completeness check trouble: MsiUseFeature() reports feature broken, when it is denied access to any component folder or registry key 2017-05-22 09:13:40 +02:00
daea1bba62 MsiUseFeature() returning INSTALLSTATE_BROKEN is tolerated in non-elevated process now 2017-05-22 08:38:39 +02:00
f05f8dab76 Version set to 1.2 2017-05-17 13:10:54 +02:00
ba11abff1d WLANManager.exe now deployed as WLANManager-Win32.exe and WLANManager-x64.exe 2017-05-17 13:09:26 +02:00
22f578b451 Documentation update 2017-05-17 12:53:10 +02:00
7bc76ac54c Supported OS list update 2017-05-17 12:28:14 +02:00
5e35c5769a Documentation update 2017-05-17 12:25:39 +02:00
3f888dd781 Secondary error message pop-up removed 2017-05-17 10:26:41 +02:00
5b065bce3d Update README.md 2017-05-16 13:34:06 +02:00
d8a1fe95aa Sub-module update 2017-05-16 13:31:39 +02:00
f57ee6c0f8 Documentation update 2017-05-16 13:31:24 +02:00
3364719ba1 WLANManager support for multiple wireless interfaces 2017-05-16 13:11:10 +02:00
e46739a510 Indentation fix 2017-03-14 09:36:48 +01:00
adc860fa6e Version set to 1.2-beta2 2017-02-24 11:09:27 +01:00
d4cc3053a6 Clean-up 2017-02-23 12:09:00 +01:00
38c6189d5f AuthMode setting correctly logged now 2017-02-23 11:18:23 +01:00
bf4c4d846e Incorrect CoCreateInstance() result evaluation fixed 2017-02-23 11:05:13 +01:00
5040ebba8e Pop-up window single flash replaced with periodic flashing 2017-02-22 11:48:39 +01:00
4598528765 Debugging-related exception in WlanUIEditProfile() resolved 2017-02-22 11:11:57 +01:00
8fbcf27f6a Locale is dynamic now, since wxLocale does not support re-initialization (when module is reused) 2017-02-22 09:42:18 +01:00
48d46617d2 Pop-ups are no longer children of the GetForegroundWindow() when no parent window is specified. Instead, they are displayed as a standalone app. 2017-02-21 15:13:20 +01:00
e7d5ecb50b Documentation update 2017-02-21 12:01:54 +01:00
6a77f3f7b3 New version of wxExtend 2017-02-20 10:57:53 +01:00
a4673f9fb9 Compilation of debug MSI files fixed 2017-02-20 10:05:03 +01:00
c84a8b5a70 Documentation update 2017-02-13 08:00:07 +01:00
31a3b67cba 64-bit language detection removed from 32-bit MSI resolving ICE80 warning 2017-02-09 13:40:43 +01:00
b44cb66b2a Version set to 1.2-beta1 2017-02-09 13:20:33 +01:00
690a6d54d2 EAP-GTC authentication now split into two modes: Challenge/Response and Password 2017-02-09 13:18:46 +01:00
e7e57abf52 Uninitialized enum higher bytes when reading as unsigned char fixed 2017-02-09 11:38:57 +01:00
bda31a487f Revert "EAP-GTC method renamed to "EAP-GTC (Token Generator)""
This reverts commit 2908bc31a3ce309b866ab1b2eeae2b706a7feb29.
2017-02-09 09:33:39 +01:00
2908bc31a3 EAP-GTC method renamed to "EAP-GTC (Token Generator)" 2017-02-09 08:06:32 +01:00
66dd2bf283 eap::config split to eap::config and eap::packable 2017-02-07 09:33:29 +01:00
527d4271b1 Version set to 1.2-beta 2017-02-06 08:18:09 +01:00
36f6d04906 Translation update 2017-02-06 08:08:07 +01:00
e8758e9c41 Translation update 2017-02-02 18:17:07 +01:00
058ec398e6 __DANGEROUS__LOG_CONFIDENTIAL_DATA is now 0/1 #defined 2017-02-02 13:57:44 +01:00
5b79f5d849 EAP_INNER_EAPHOST is now 0/1 #defined 2017-02-02 13:57:16 +01:00
6f049d2692 EAP_USE_NATIVE_CREDENTIAL_CACHE is now 0/1 #defined 2017-02-02 13:25:24 +01:00
964bf4032a Doxygen settings updated 2017-02-02 12:39:51 +01:00
87e2296dde Documentation update 2017-02-02 12:17:52 +01:00
6284b6c29e EapHost support in invoke_interactive_ui() added 2017-02-02 11:36:12 +01:00
260b78025c EapHost credential prompt result evaluation fixed 2017-02-02 11:35:41 +01:00
6b81ea51d3 EapHost conditional compilation directive fixed 2017-02-02 11:26:15 +01:00
a07eb48174 EAP-GTC credential prompt fixed 2017-02-02 10:41:50 +01:00
0ec0e3579e EAP-GTC event logging and clean-up 2017-02-02 10:22:43 +01:00
a78901cb63 EAP-GTC challenge/response prompt now functional 2017-02-01 14:36:53 +01:00
27ae8baf3a eap::ui_context_ttls introduced 2017-02-01 14:35:33 +01:00
dd3da2f41a EAP-GTC response panel and dialog finished 2017-02-01 14:33:12 +01:00
6f3aa650b6 Clean-up 2017-02-01 14:32:00 +01:00
191e4abd9c eap::ui_context class for inter-process exchange introduced 2017-02-01 14:23:08 +01:00
386d852859 Clean-up 2017-02-01 13:11:27 +01:00
7977d04281 EapHost peer initialization conditional now 2017-02-01 11:02:41 +01:00
b632f0202f get_ui_context() upgraded 2017-02-01 10:52:57 +01:00
57372b8f95 Simple BLOB encryption/decryption added & comment updates 2017-02-01 10:23:07 +01:00
172cd18c16 Missing namespace added 2017-02-01 09:54:17 +01:00
cfc241d3a6 Initial version of GTC Challenge/Response panel added 2017-01-31 14:58:08 +01:00
4c1d4b0580 Identity and password credential panel icons distinguished 2017-01-31 14:42:36 +01:00
d508a6c398 EAP-GTC implementation continues... 2017-01-31 13:54:55 +01:00
f9083dc300 eap::credentials reverted back to abstract class (25934dd8c70ca399ff4c58fd9a06319de81611f3 undone), and eap::credentials_identity introduced, since identity-only credentials must fail when <UserName> absent 2017-01-31 13:54:27 +01:00
0b358acba7 Clean-up 2017-01-31 13:41:08 +01:00
cbe831f9f6 EAP errors now correctly displayed in Event Viewer 2017-01-31 12:36:24 +01:00
d7795ef054 Translation update 2017-01-31 11:12:05 +01:00
9b41c73e9d Incorrect RFC quote removed 2017-01-31 11:03:06 +01:00
e8d231d360 EAP-GTC implementation continues... 2017-01-31 10:40:11 +01:00
f6522b8fa7 wxPasswordCredentialsPanel<> split to wxIdentityCredentialsPanel<> and wxPasswordCredentialsPanel<> to provide support for identity-only credentials (i.e. EAP-GTC). 2017-01-31 10:36:53 +01:00
25934dd8c7 eap::credentials no longer pure virtual to allow identity-only credentials (i.e. EAP-GTC). 2017-01-31 10:33:15 +01:00
4b4578fd59 Both event channels are registered using Makefile disabled now, to prevent Events.dll getting constantly locked by Event Log service. 2017-01-31 10:30:29 +01:00
4ec366b23b "User ID" and "Password" labels vertically centered 2017-01-31 10:04:56 +01:00
4b40c4d217 EAP-GTC work continues... 2017-01-30 14:49:27 +01:00
a2a87ddc4c Additional clarification of UI context handling 2017-01-30 14:49:09 +01:00
bd73ea7914 EAP-GTC implementation started 2017-01-30 13:42:51 +01:00
5fada1b6a9 Comment fixed 2017-01-30 12:41:53 +01:00
5f28fc873c EAP types look-up extended 2017-01-30 12:14:19 +01:00
2cb9453209 Version set to 1.2-alpha 2017-01-30 09:09:11 +01:00
443 changed files with 32352 additions and 28182 deletions

5
.gitignore vendored
View File

@ -1,5 +1,2 @@
/*.opensdf
/*.suo
/*.sdf
/.vs
/doc
/ipch

3
.gitmodules vendored
View File

@ -7,3 +7,6 @@
[submodule "lib/wxExtend"]
path = lib/wxExtend
url = https://github.com/Amebis/wxExtend.git
[submodule "lib/stdex"]
path = lib/stdex
url = https://github.com/Amebis/stdex.git

View File

@ -1,14 +0,0 @@
<?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>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

Binary file not shown.

View File

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
@ -9,6 +13,10 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@ -20,78 +28,46 @@
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{2D3CE079-7EB1-4F47-B79E-F0310671ECCB}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>CredWrite</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'">
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'">
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets">
<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="CredWrite.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="CredWrite.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="CredWrite.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="CredWrite.props" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<PropertyGroup>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;..\lib\stdex\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="StdAfx.h" />
<ClInclude Include="PCH.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Main.cpp" />
<ClCompile Include="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 Include="PCH.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
@ -110,14 +86,10 @@
<ProjectReference Include="..\lib\TLS\build\TLS.vcxproj">
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\WinStd\build\WinStd.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="README.md" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ImportGroup Label="ExtensionTargets" />
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
@ -15,12 +15,12 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="StdAfx.h">
<ClInclude Include="PCH.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="StdAfx.cpp">
<ClCompile Include="PCH.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Main.cpp">

View File

@ -1,29 +1,18 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "StdAfx.h"
#include "PCH.h"
using namespace std;
using namespace stdex;
using namespace winstd;
eap::module g_module;
class module_dummy : public eap::module {
virtual eap::config_method* make_config() { return nullptr; }
} g_module;
static int CredWrite()
@ -116,15 +105,16 @@ static int CredWrite()
}
int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
_Use_decl_annotations_
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
UNREFERENCED_PARAMETER(nCmdShow);
_CrtSetDbgFlag(_crtDbgFlag | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF | _CRTDBG_LEAK_CHECK_DF);
g_module.m_instance = hInstance;
int res = CredWrite();
assert(!_CrtDumpMemoryLeaks());
return res;
}

7
CredWrite/PCH.cpp Normal file
View File

@ -0,0 +1,7 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"

22
CredWrite/PCH.h Normal file
View File

@ -0,0 +1,22 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#pragma once
#include "../lib/EAPBase/include/Config.h"
#include "../lib/EAPBase/include/Credentials.h"
#include "../lib/EAPBase/include/Module.h"
#include <WinStd/Common.h>
#include <WinStd/Win.h>
#include <stdex/base64.hpp>
#include <Windows.h>
#include <eaptypes.h> // Must include after <Windows.h>
#include <shellapi.h>
#include <tchar.h>
#include <memory>

View File

@ -1,7 +1,9 @@
#CredWrite
Imports given credentials to Windows Credential Manager for GÉANTLink use
# CredWrite
Imports given credentials to Windows Credential Manager for GÉANTLink use
## Usage
##Usage
```
CredWrite <username> <password> [<realm> [level]]
```
@ -13,8 +15,15 @@ CredWrite <username> <password> [<realm> [level]]
The credentials are stored to Windows Credential Manager in invoking user's roaming profile.
Return codes:
### Return codes
- -1 = Invalid parameters
- 0 = Success
- 1 = Error parsing command line
- 2 = Error encrypting password or writing credentials
### Example
```
CredWrite dXNlckBjb250b3NvLmNvbQ== cGFzc3dvcmQxMjM= urn:RFC4282:realm:contoso.com 1
```

View File

@ -1,21 +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"

View File

@ -1,34 +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/>.
*/
#pragma once
#include "../lib/EAPBase/include/Credentials.h"
#include "../lib/EAPBase/include/Module.h"
#include <WinStd/Common.h>
#include <WinStd/Base64.h>
#include <WinStd/Win.h>
#include <Windows.h>
#include <eaptypes.h> // Must include after <Windows.h>
#include <tchar.h>
#include <memory>

View File

@ -1,4 +1,4 @@
# Doxyfile 1.8.7
# Doxyfile 1.8.7
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
@ -44,7 +44,7 @@ PROJECT_NUMBER =
# 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.
PROJECT_BRIEF = "EAP Supplicant for Windows"
PROJECT_BRIEF = "Suite of EAP supplicants for Microsoft Windows - IEEE 802.1X clients for enterprise network authentication"
# 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
@ -794,6 +794,7 @@ EXCLUDE = \
EventMonitor\res \
lib\EAPBase_UI\res \
lib\EapHost_UI\res \
lib\GTC_UI\res \
lib\TLS_UI\res \
lib\TTLS_UI\res \
lib\WinStd \

24
EAPMethods/Common.props Normal file
View File

@ -0,0 +1,24 @@
<?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\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
</ImportGroup>
<PropertyGroup>
<_PropertySheetDisplayName>EAP Method Common</_PropertySheetDisplayName>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir);..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;..\lib\stdex\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<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>
</ItemGroup>
</Project>

View File

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<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|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</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>{331B6077-E3E2-4867-B93E-9D3F57280DE7}</ProjectGuid>
<RootNamespace>EAP-TTLS</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'">
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'">
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="EAPMethod.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="..\lib\EapHost\build\EapHost.vcxproj">
<Project>{b385ec2b-c3f4-48bb-9bac-8b996de7f754}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\GTC\build\GTC.vcxproj">
<Project>{114a70bb-8698-4a0c-8c90-58f22edd8129}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</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>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project>

View File

@ -1,40 +1,43 @@
<?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="StdAfx.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="StdAfx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\Main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EAPTTLS.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\build\EAPMethod.def">
<Filter>Source Files</Filter>
</None>
</ItemGroup>
<?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="PCH.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="PCH.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Register.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\EAPMethod.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="EAPMethod.def">
<Filter>Source Files</Filter>
</None>
</ItemGroup>
</Project>

View File

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<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|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</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>{DD7A97CA-F18E-43B7-95C4-D06E6A291624}</ProjectGuid>
<RootNamespace>EAP-TTLS_UI</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'">
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'">
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="EAPMethod_UI.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="..\lib\EapHost\build\EapHost.vcxproj">
<Project>{b385ec2b-c3f4-48bb-9bac-8b996de7f754}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\EapHost_UI\build\EapHost_UI.vcxproj">
<Project>{13d2d8b5-f6aa-459d-b5f7-29b95dd9d583}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\GTC\build\GTC.vcxproj">
<Project>{114a70bb-8698-4a0c-8c90-58f22edd8129}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\GTC_UI\build\GTC_UI.vcxproj">
<Project>{34680813-3a52-46fb-b5a8-1e4bbf770855}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\MSCHAPv2_UI\build\MSCHAPv2_UI.vcxproj">
<Project>{7af5b922-7c17-428a-97e0-09e3b41a684d}</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>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\include\xgettext.targets" />
</ImportGroup>
</Project>

View File

@ -1,136 +1,145 @@
<?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>
<Filter Include="Resource Files\Localization">
<UniqueIdentifier>{e43059ae-37ac-4b28-84fb-18d1b3972b30}</UniqueIdentifier>
<Extensions>po;pot</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="StdAfx.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="StdAfx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\Main_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EAPTTLSUI.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\build\EAPMethodUI.def">
<Filter>Source Files</Filter>
</None>
<None Include="..\locale\EAPMethods.pot">
<Filter>Resource Files\Localization</Filter>
</None>
</ItemGroup>
<ItemGroup>
<POCompile Include="..\locale\sl_SI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\bg_BG.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\ca_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\cs_CZ.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\cy_UK.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\de_DE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\el_GR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\es_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\eu_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\fi_FI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\fr_CA.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\fr_FR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\gl_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\hr_HR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\hu_HU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\is_IS.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\it_IT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\lt_LT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\nb_NO.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\nl_NL.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\pl_PL.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\pt_PT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\ru_RU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\sk_SK.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\sr_RS.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\sv_SE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\tr_TR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\vi_VN.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\ko_KR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
</ItemGroup>
<?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>
<Filter Include="Resource Files\Localization">
<UniqueIdentifier>{e43059ae-37ac-4b28-84fb-18d1b3972b30}</UniqueIdentifier>
<Extensions>po;pot</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="PCH_UI.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="PCH_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Main_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Register_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\EAPMethod_UI.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="EAPMethod_UI.def">
<Filter>Source Files</Filter>
</None>
<None Include="locale\EAPMethods.pot">
<Filter>Resource Files\Localization</Filter>
</None>
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\ro_RO.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sl_SI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\bg_BG.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\ca_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\cs_CZ.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\cy_UK.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\de_DE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\el_GR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\es_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\eu_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\fi_FI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\fr_CA.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\fr_FR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\gl_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\hr_HR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\hu_HU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\is_IS.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\it_IT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\lt_LT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\nb_NO.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\nl_NL.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\pl_PL.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\pt_PT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\ru_RU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sk_SK.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sr_RS.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sv_SE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\tr_TR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\vi_VN.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\ko_KR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\et_EE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
</ItemGroup>
</Project>

BIN
EAPMethods/EAPMethod.def Normal file

Binary file not shown.

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="Common.props" />
</ImportGroup>
<ItemDefinitionGroup>
<Link>
<ModuleDefinitionFile>EAPMethod.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="PCH.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Main.cpp" />
<ClCompile Include="PCH.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="Register.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="EAPMethod.def" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\EAPMethod.rc" />
</ItemGroup>
</Project>

BIN
EAPMethods/EAPMethod_UI.def Normal file

Binary file not shown.

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="Common.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeaderFile>PCH_UI.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<ModuleDefinitionFile>EAPMethod_UI.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="PCH_UI.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Main_UI.cpp" />
<ClCompile Include="PCH_UI.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="Register_UI.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="EAPMethod_UI.def" />
<None Include="locale\EAPMethods.pot" />
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\bg_BG.po" />
<POCompile Include="locale\ca_ES.po" />
<POCompile Include="locale\cs_CZ.po" />
<POCompile Include="locale\cy_UK.po" />
<POCompile Include="locale\de_DE.po" />
<POCompile Include="locale\el_GR.po" />
<POCompile Include="locale\es_ES.po" />
<POCompile Include="locale\et_EE.po" />
<POCompile Include="locale\eu_ES.po" />
<POCompile Include="locale\fi_FI.po" />
<POCompile Include="locale\fr_CA.po" />
<POCompile Include="locale\fr_FR.po" />
<POCompile Include="locale\gl_ES.po" />
<POCompile Include="locale\hr_HR.po" />
<POCompile Include="locale\hu_HU.po" />
<POCompile Include="locale\is_IS.po" />
<POCompile Include="locale\it_IT.po" />
<POCompile Include="locale\ko_KR.po" />
<POCompile Include="locale\lt_LT.po" />
<POCompile Include="locale\nb_NO.po" />
<POCompile Include="locale\nl_NL.po" />
<POCompile Include="locale\pl_PL.po" />
<POCompile Include="locale\pt_PT.po" />
<POCompile Include="locale\ru_RU.po" />
<POCompile Include="locale\sk_SK.po" />
<POCompile Include="locale\ro_RO.po" />
<POCompile Include="locale\sl_SI.po" />
<POCompile Include="locale\sr_RS.po" />
<POCompile Include="locale\sv_SE.po" />
<POCompile Include="locale\tr_TR.po" />
<POCompile Include="locale\vi_VN.po" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\EAPMethod_UI.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\lib\EAPBase_UI\build\EAPBase_UI.vcxproj">
<Project>{d4b54856-be1f-4937-a8f7-495125be76be}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj">
<Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project>
</ProjectReference>
</ItemGroup>
</Project>

View File

@ -1,17 +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="..\build\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<ModuleDefinitionFile>..\build\EAPMethod.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -1,128 +0,0 @@
<?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>{331B6077-E3E2-4867-B93E-9D3F57280DE7}</ProjectGuid>
<RootNamespace>EAPTTLS</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</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="EAPTTLS.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="EAPTTLS.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="EAPTTLS.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="EAPTTLS.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="StdAfx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\Main.cpp" />
<ClCompile Include="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>
<ResourceCompile Include="EAPTTLS.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\lib\EAPBase\build\EAPBase.vcxproj">
<Project>{ad6816a0-9600-4e01-8c49-39d03d1e791f}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\EapHost\build\EapHost.vcxproj">
<Project>{b385ec2b-c3f4-48bb-9bac-8b996de7f754}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</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">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="..\build\EAPMethod.def" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,21 +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"

View File

@ -1,24 +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/>.
*/
#pragma once
#include "../../lib/TTLS/include/Method.h"
#include "../../lib/TTLS/include/Module.h"

View File

@ -1,17 +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="..\build\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<ModuleDefinitionFile>..\build\EAPMethodUI.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -1,182 +0,0 @@
<?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>{DD7A97CA-F18E-43B7-95C4-D06E6A291624}</ProjectGuid>
<RootNamespace>EAPTTLSUI</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</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="EAPTTLSUI.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="EAPTTLSUI.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="EAPTTLSUI.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="EAPTTLSUI.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="StdAfx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\Main_UI.cpp" />
<ClCompile Include="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>
<ResourceCompile Include="EAPTTLSUI.rc" />
</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\EapHost\build\EapHost.vcxproj">
<Project>{b385ec2b-c3f4-48bb-9bac-8b996de7f754}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\EapHost_UI\build\EapHost_UI.vcxproj">
<Project>{13d2d8b5-f6aa-459d-b5f7-29b95dd9d583}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\MSCHAPv2_UI\build\MSCHAPv2_UI.vcxproj">
<Project>{7af5b922-7c17-428a-97e0-09e3b41a684d}</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">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\wxExtend\build\wxExtendLib.vcxproj">
<Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="..\build\EAPMethodUI.def" />
<None Include="..\locale\EAPMethods.pot" />
</ItemGroup>
<ItemGroup>
<POCompile Include="..\locale\bg_BG.po" />
<POCompile Include="..\locale\ca_ES.po" />
<POCompile Include="..\locale\cs_CZ.po" />
<POCompile Include="..\locale\cy_UK.po" />
<POCompile Include="..\locale\de_DE.po" />
<POCompile Include="..\locale\el_GR.po" />
<POCompile Include="..\locale\es_ES.po" />
<POCompile Include="..\locale\eu_ES.po" />
<POCompile Include="..\locale\fi_FI.po" />
<POCompile Include="..\locale\fr_CA.po" />
<POCompile Include="..\locale\fr_FR.po" />
<POCompile Include="..\locale\gl_ES.po" />
<POCompile Include="..\locale\hr_HR.po" />
<POCompile Include="..\locale\hu_HU.po" />
<POCompile Include="..\locale\is_IS.po" />
<POCompile Include="..\locale\it_IT.po" />
<POCompile Include="..\locale\ko_KR.po" />
<POCompile Include="..\locale\lt_LT.po" />
<POCompile Include="..\locale\nb_NO.po" />
<POCompile Include="..\locale\nl_NL.po" />
<POCompile Include="..\locale\pl_PL.po" />
<POCompile Include="..\locale\pt_PT.po" />
<POCompile Include="..\locale\ru_RU.po" />
<POCompile Include="..\locale\sk_SK.po" />
<POCompile Include="..\locale\sl_SI.po" />
<POCompile Include="..\locale\sr_RS.po" />
<POCompile Include="..\locale\sv_SE.po" />
<POCompile Include="..\locale\tr_TR.po" />
<POCompile Include="..\locale\vi_VN.po" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\..\include\xgettext.targets" />
</ImportGroup>
</Project>

View File

@ -1,21 +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"

View File

@ -1,23 +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/>.
*/
#pragma once
#include "../../lib/TTLS_UI/include/Module.h"

View File

@ -0,0 +1,9 @@
/*-1.idt
/*-2.idt
/*-2.idtx
/*.Binary-1
/*.Binary-2
/*.Icon-1
/*.Icon-2
/*.lst
/*.msm

Binary file not shown.

Binary file not shown.

Binary file not shown.

895
EAPMethods/Main.cpp Normal file
View File

@ -0,0 +1,895 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"
#pragma comment(lib, "Ws2_32.lib")
using namespace std;
using namespace winstd;
EAPMETHOD_PEER g_peer;
///
/// DLL main entry point
///
/// \sa [DllMain entry point](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx)
///
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
#ifdef _DEBUG
//Sleep(10000);
_CrtSetDbgFlag(_crtDbgFlag | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
g_peer.m_instance = hinstDLL;
}
return TRUE;
}
///
/// Releases all memory associated with an opaque user interface context data buffer.
///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
///
_Use_decl_annotations_
VOID WINAPI EapPeerFreeMemory(void *pUIContextData)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (pUIContextData)
g_peer.free_memory((BYTE*)pUIContextData);
}
///
/// Releases error-specific memory allocated by the EAP peer method.
///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
///
_Use_decl_annotations_
VOID WINAPI EapPeerFreeErrorMemory(EAP_ERROR *ppEapError)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (ppEapError)
g_peer.free_error_memory(ppEapError);
}
///
/// Obtains a set of function pointers for an implementation of the EAP peer method currently loaded on the EapHost service.
///
/// \sa [EapPeerGetInfo function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363608.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerGetInfo(EAP_TYPE* pEapType, EAP_PEER_METHOD_ROUTINES* pEapPeerMethodRoutines, EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapPeerMethodRoutines)
memset(pEapPeerMethodRoutines, 0, sizeof(*pEapPeerMethodRoutines));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pEapType || !pEapPeerMethodRoutines)
return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->type != EAPMETHOD_TYPE)
return dwResult = ERROR_NOT_SUPPORTED;
pEapPeerMethodRoutines->dwVersion =
((PRODUCT_VERSION_MAJ & 0xff) << 24) |
((PRODUCT_VERSION_MIN & 0xff) << 16) |
((PRODUCT_VERSION_REV & 0xff) << 8) |
(PRODUCT_VERSION_BUILD & 0xff);
pEapPeerMethodRoutines->pEapType = NULL;
pEapPeerMethodRoutines->EapPeerInitialize = EapPeerInitialize;
pEapPeerMethodRoutines->EapPeerShutdown = EapPeerShutdown;
pEapPeerMethodRoutines->EapPeerBeginSession = EapPeerBeginSession;
pEapPeerMethodRoutines->EapPeerEndSession = EapPeerEndSession;
pEapPeerMethodRoutines->EapPeerSetCredentials = NULL; // Always NULL unless we want to use generic credential UI
pEapPeerMethodRoutines->EapPeerGetIdentity = EapPeerGetIdentity;
pEapPeerMethodRoutines->EapPeerProcessRequestPacket = EapPeerProcessRequestPacket;
pEapPeerMethodRoutines->EapPeerGetResponsePacket = EapPeerGetResponsePacket;
pEapPeerMethodRoutines->EapPeerGetResult = EapPeerGetResult;
pEapPeerMethodRoutines->EapPeerGetUIContext = EapPeerGetUIContext;
pEapPeerMethodRoutines->EapPeerSetUIContext = EapPeerSetUIContext;
pEapPeerMethodRoutines->EapPeerGetResponseAttributes = EapPeerGetResponseAttributes;
pEapPeerMethodRoutines->EapPeerSetResponseAttributes = EapPeerSetResponseAttributes;
return dwResult;
}
#pragma warning(push)
#pragma warning(disable: 4702) // Compiler is smart enough to find out the initialize() method is empty => never throws an exception.
///
/// Initializes an EAP peer method for EapHost.
///
/// \sa [EapPeerInitialize function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363613.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerInitialize(EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
try {
g_peer.initialize();
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
#pragma warning(pop)
#pragma warning(push)
#pragma warning(disable: 4702) // Compiler is smart enough to find out the shutdown() method is empty => never throws an exception.
///
/// 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)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerShutdown(EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
try {
g_peer.shutdown();
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
#pragma warning(pop)
///
/// 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)
///
_Use_decl_annotations_
DWORD APIENTRY EapPeerGetIdentity(
DWORD dwFlags,
DWORD dwConnectionDataSize,
const BYTE *pConnectionData,
DWORD dwUserDataSize,
const BYTE *pUserData,
HANDLE hTokenImpersonateUser,
BOOL *pfInvokeUI,
DWORD *pdwUserDataOutSize,
BYTE **ppUserDataOut,
WCHAR **ppwszIdentity,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pfInvokeUI)
*pfInvokeUI = FALSE;
if (pdwUserDataOutSize)
*pdwUserDataOutSize = 0;
if (ppUserDataOut)
*ppUserDataOut = NULL;
if (ppwszIdentity)
*ppwszIdentity = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !pfInvokeUI || !pdwUserDataOutSize || !ppUserDataOut || !ppwszIdentity)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_identity(dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, hTokenImpersonateUser, pfInvokeUI, ppwszIdentity);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerBeginSession(
DWORD dwFlags,
const EapAttributes *pAttributeArray,
HANDLE hTokenImpersonateUser,
DWORD dwConnectionDataSize,
/*const*/ BYTE *pConnectionData,
DWORD dwUserDataSize,
/*const*/ BYTE *pUserData,
DWORD dwMaxSendPacketSize,
EAP_SESSION_HANDLE *phSession,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (phSession)
*phSession = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !phSession)
return dwResult = ERROR_INVALID_PARAMETER;
try {
*phSession = g_peer.begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, dwMaxSendPacketSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Ends an EAP authentication session for the EAP method.
///
/// \sa [EapPeerEndSession function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363604.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerEndSession(
EAP_SESSION_HANDLE hSession,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.end_session(hSession);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Processes a packet received by EapHost from a supplicant.
///
/// \sa [EapPeerProcessRequestPacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363621.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerProcessRequestPacket(
EAP_SESSION_HANDLE hSession,
DWORD dwReceivedPacketSize,
/*const*/ EapPacket *pReceivedPacket,
EapPeerMethodOutput *pEapOutput,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapOutput)
memset(pEapOutput, 0, sizeof(*pEapOutput));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pReceivedPacket || dwReceivedPacketSize < sizeof(EapPacket) || pReceivedPacket->Data[0] != EAPMETHOD_TYPE || !pEapOutput)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.process_request_packet(hSession, pReceivedPacket, dwReceivedPacketSize, pEapOutput);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Obtains a response packet from the EAP method.
///
/// \sa [EapPeerGetResponsePacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363610.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerGetResponsePacket(
EAP_SESSION_HANDLE hSession,
DWORD *pdwSendPacketSize,
EapPacket *pSendPacket,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pdwSendPacketSize || !pSendPacket && *pdwSendPacketSize)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_response_packet(hSession, pSendPacket, pdwSendPacketSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerGetResult(
EAP_SESSION_HANDLE hSession,
EapPeerMethodResultReason reason,
EapPeerMethodResult *pResult,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pResult)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_result(hSession, reason, pResult);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerGetUIContext(
EAP_SESSION_HANDLE hSession,
DWORD *pdwUIContextDataSize,
BYTE **ppUIContextData,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwUIContextDataSize)
*pdwUIContextDataSize = 0;
if (ppUIContextData)
*ppUIContextData = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pdwUIContextDataSize || !ppUIContextData)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_ui_context(hSession, ppUIContextData, pdwUIContextDataSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerSetUIContext(
EAP_SESSION_HANDLE hSession,
DWORD dwUIContextDataSize,
const BYTE *pUIContextData,
EapPeerMethodOutput *pEapOutput,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapOutput)
memset(pEapOutput, 0, sizeof(*pEapOutput));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pUIContextData && dwUIContextDataSize || !pEapOutput)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.set_ui_context(hSession, pUIContextData, dwUIContextDataSize, pEapOutput);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerGetResponseAttributes(
EAP_SESSION_HANDLE hSession,
EapAttributes *pAttribs,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pAttribs)
memset(pAttribs, 0, sizeof(*pAttribs));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pAttribs)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_response_attributes(hSession, pAttribs);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerSetResponseAttributes(
EAP_SESSION_HANDLE hSession,
/*const*/ EapAttributes *pAttribs,
EapPeerMethodOutput *pEapOutput,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapOutput)
memset(pEapOutput, 0, sizeof(*pEapOutput));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pEapOutput)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.set_response_attributes(hSession, pAttribs, pEapOutput);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerGetMethodProperties(
DWORD dwVersion,
DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType,
HANDLE hUserImpersonationToken,
DWORD dwConnectionDataSize,
/*const*/ BYTE *pConnectionData,
DWORD dwUserDataSize,
/*const*/ BYTE *pUserData,
EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pMethodPropertyArray)
memset(pMethodPropertyArray, 0, sizeof(*pMethodPropertyArray));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !pMethodPropertyArray)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_method_properties(dwVersion, dwFlags, hUserImpersonationToken, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, pMethodPropertyArray);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Converts XML into the configuration BLOB. The XML based credentials can come from group policy or from a system administrator.
///
/// \sa [EapPeerCredentialsXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363603.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerCredentialsXml2Blob(
DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType,
IXMLDOMDocument2 *pCredentialsDoc,
const BYTE *pConnectionData,
DWORD dwConnectionDataSize,
BYTE **ppCredentialsOut,
DWORD *pdwCredentialsOutSize,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppCredentialsOut)
*ppCredentialsOut = NULL;
if (pdwCredentialsOutSize)
*pdwCredentialsOutSize = 0;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pCredentialsDoc || !pConnectionData && dwConnectionDataSize || !ppCredentialsOut || !pdwCredentialsOutSize)
return dwResult = ERROR_INVALID_PARAMETER;
// <Credentials>
com_obj<IXMLDOMNode> pXmlElCredentials;
if (FAILED(eapxml::select_node(pCredentialsDoc, bstr(L"//EapHostUserCredentials/Credentials"), pXmlElCredentials)))
return dwResult = g_peer.log_error(ppEapError, ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <EapHostUserCredentials><Credentials> element."));
// Load credentials.
pCredentialsDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
try {
g_peer.credentials_xml2blob(dwFlags, pXmlElCredentials, pConnectionData, dwConnectionDataSize, ppCredentialsOut, pdwCredentialsOutSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerQueryCredentialInputFields(
HANDLE hUserImpersonationToken,
EAP_METHOD_TYPE eapMethodType,
DWORD dwFlags,
DWORD dwConnectionDataSize,
/*const*/ BYTE *pConnectionData,
EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldsArray,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapConfigInputFieldsArray)
memset(pEapConfigInputFieldsArray, 0, sizeof(*pEapConfigInputFieldsArray));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !pEapConfigInputFieldsArray)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.query_credential_input_fields(hUserImpersonationToken, dwFlags, dwConnectionDataSize, pConnectionData, pEapConfigInputFieldsArray);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
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)
///
#pragma warning(suppress: 6101) // Function is incorrectly annotated and code analysis gets confused
_Use_decl_annotations_
DWORD WINAPI EapPeerQueryUserBlobFromCredentialInputFields(
HANDLE hUserImpersonationToken,
EAP_METHOD_TYPE eapMethodType,
DWORD dwFlags,
DWORD dwConnectionDataSize,
/*const*/ BYTE *pConnectionData,
const EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldArray,
DWORD *pdwUsersBlobSize,
BYTE **ppUserBlob,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !pEapConfigInputFieldArray || !pdwUsersBlobSize || !ppUserBlob)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.query_user_blob_from_credential_input_fields(hUserImpersonationToken, dwFlags, dwConnectionDataSize, pConnectionData, pEapConfigInputFieldArray, pdwUsersBlobSize, ppUserBlob);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
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)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerQueryInteractiveUIInputFields(
DWORD dwVersion,
DWORD dwFlags,
DWORD dwUIContextDataSize,
const BYTE *pUIContextData,
EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
EAP_ERROR **ppEapError,
LPVOID *ppvReserved)
{
UNREFERENCED_PARAMETER(ppvReserved);
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapInteractiveUIData)
memset(pEapInteractiveUIData, 0, sizeof(*pEapInteractiveUIData));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pUIContextData && dwUIContextDataSize || !pEapInteractiveUIData)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.query_interactive_ui_input_fields(dwVersion, dwFlags, dwUIContextDataSize, pUIContextData, pEapInteractiveUIData);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
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)
///
#pragma warning(suppress: 6387) // Function is incorrectly annotated and code analysis gets confused
#pragma warning(suppress: 28196)
_Use_decl_annotations_
DWORD WINAPI EapPeerQueryUIBlobFromInteractiveUIInputFields(
DWORD dwVersion,
DWORD dwFlags,
DWORD dwUIContextDataSize,
const BYTE *pUIContextData,
const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
DWORD *pdwDataFromInteractiveUISize,
BYTE **ppDataFromInteractiveUI,
EAP_ERROR **ppEapError,
LPVOID *ppvReserved)
{
UNREFERENCED_PARAMETER(ppvReserved);
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwDataFromInteractiveUISize)
*pdwDataFromInteractiveUISize = 0;
if (ppDataFromInteractiveUI)
*ppDataFromInteractiveUI = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pUIContextData && dwUIContextDataSize || !pEapInteractiveUIData || !pdwDataFromInteractiveUISize || !ppDataFromInteractiveUI)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.query_ui_blob_from_interactive_ui_input_fields(dwVersion, dwFlags, dwUIContextDataSize, pUIContextData, pEapInteractiveUIData, pdwDataFromInteractiveUISize, ppDataFromInteractiveUI);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}

359
EAPMethods/Main_UI.cpp Normal file
View File

@ -0,0 +1,359 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH_UI.h"
#pragma comment(lib, "msxml6.lib")
using namespace std;
using namespace winstd;
HANDLE g_act_ctx = NULL;
EAPMETHOD_PEER_UI g_peer;
///
/// DLL main entry point
///
/// \sa [DllMain entry point](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx)
///
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
#ifdef _DEBUG
//Sleep(10000);
_CrtSetDbgFlag(_crtDbgFlag | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
g_peer.m_instance = hinstDLL;
#if _WIN32_WINNT >= _WIN32_WINNT_VISTA
// Declare our DllHost process as DPI-aware.
SetProcessDPIAware();
#endif
// Save current activation context, as proper activation context is set at this time only (LoadLibrary() call).
GetCurrentActCtx(&g_act_ctx);
} else if (fdwReason == DLL_PROCESS_DETACH) {
if (g_act_ctx)
ReleaseActCtx(g_act_ctx);
}
return TRUE;
}
///
/// Releases all memory associated with an opaque user interface context data buffer.
///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
///
_Use_decl_annotations_
VOID WINAPI EapPeerFreeMemory(void *pUIContextData)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (pUIContextData)
g_peer.free_memory((BYTE*)pUIContextData);
}
///
/// Releases error-specific memory allocated by the EAP peer method.
///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
///
_Use_decl_annotations_
VOID WINAPI EapPeerFreeErrorMemory(EAP_ERROR *ppEapError)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (ppEapError)
g_peer.free_error_memory(ppEapError);
}
///
/// Converts XML into the configuration BLOB.
///
/// \sa [EapPeerConfigXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363602.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerConfigXml2Blob(
DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType,
IXMLDOMDocument2 *pConfigDoc,
BYTE **pConnectionDataOut,
DWORD *pdwConnectionDataOutSize,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pConnectionDataOut)
*pConnectionDataOut = NULL;
if (pdwConnectionDataOutSize)
*pdwConnectionDataOutSize = 0;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConfigDoc || !pConnectionDataOut || !pdwConnectionDataOutSize)
return dwResult = ERROR_INVALID_PARAMETER;
// Configure XML selection namespaces used.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\" xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
// <Config>
com_obj<IXMLDOMElement> pXmlElConfig;
if (FAILED(eapxml::select_element(pConfigDoc, bstr(L"//eaphostconfig:Config"), pXmlElConfig)))
return dwResult = g_peer.log_error(ppEapError, ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" Error reading <Config> element."));
// Load configuration.
try {
g_peer.config_xml2blob(dwFlags, pXmlElConfig, pConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Converts the configuration BLOB to XML.
///
/// The configuration BLOB is returned in the ppConnectionDataOut parameter of the EapPeerInvokeConfigUI function.
///
/// \sa [EapPeerConfigBlob2Xml function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363601.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerConfigBlob2Xml(
DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType,
const BYTE *pConnectionData,
DWORD dwConnectionDataSize,
IXMLDOMDocument2 **ppConfigDoc,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppConfigDoc)
*ppConfigDoc = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !ppConfigDoc)
return dwResult = ERROR_INVALID_PARAMETER;
HRESULT hr;
// Create configuration XML document.
com_obj<IXMLDOMDocument2> pConfigDoc;
if (FAILED(hr = CoCreateInstance(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, pConfigDoc)))
return dwResult = g_peer.log_error(ppEapError, HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error creating XML document."));
pConfigDoc->put_async(VARIANT_FALSE);
// Load empty XML configuration.
VARIANT_BOOL isSuccess = VARIANT_FALSE;
if (FAILED((hr = pConfigDoc->loadXML(L"<Config xmlns=\"http://www.microsoft.com/provisioning/EapHostConfig\"></Config>", &isSuccess))))
return dwResult = g_peer.log_error(ppEapError, HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error loading XML document template."));
if (!isSuccess)
return dwResult = g_peer.log_error(ppEapError, ERROR_XML_PARSE_ERROR, _T(__FUNCTION__) _T(" Loading XML template failed."));
// Configure XML selection namespaces used.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\" xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
// Select <Config> node.
com_obj<IXMLDOMNode> pXmlElConfig;
if (FAILED(eapxml::select_node(pConfigDoc, bstr(L"eaphostconfig:Config"), pXmlElConfig)))
return dwResult = g_peer.log_error(ppEapError, ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <Config> element."));
// Save configuration.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
try {
g_peer.config_blob2xml(dwFlags, pConnectionData, dwConnectionDataSize, pConfigDoc, pXmlElConfig);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
return dwResult = ERROR_INVALID_DATA;
}
*ppConfigDoc = pConfigDoc.detach();
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeConfigUI(
const EAP_METHOD_TYPE *pEapType,
HWND hwndParent,
DWORD dwFlags,
DWORD dwConnectionDataInSize,
const BYTE *pConnectionDataIn,
DWORD *pdwConnectionDataOutSize,
BYTE **ppConnectionDataOut,
EAP_ERROR **ppEapError)
{
UNREFERENCED_PARAMETER(dwFlags);
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwConnectionDataOutSize)
*pdwConnectionDataOutSize = 0;
if (ppConnectionDataOut)
*ppConnectionDataOut = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pEapType || !pConnectionDataIn && dwConnectionDataInSize || !pdwConnectionDataOutSize || !ppConnectionDataOut)
return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
try {
g_peer.invoke_config_ui(hwndParent, pConnectionDataIn, dwConnectionDataInSize, ppConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeIdentityUI(
const EAP_METHOD_TYPE *pEapType,
DWORD dwFlags,
HWND hwndParent,
DWORD dwConnectionDataSize,
const BYTE *pConnectionData,
DWORD dwUserDataSize,
const BYTE *pUserData,
DWORD *pdwUserDataOutSize,
BYTE **ppUserDataOut,
LPWSTR *ppwszIdentity,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwUserDataOutSize)
*pdwUserDataOutSize = 0;
if (ppUserDataOut)
*ppUserDataOut = NULL;
if (ppwszIdentity)
*ppwszIdentity = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pEapType || !pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !pdwUserDataOutSize || !ppUserDataOut || !ppwszIdentity)
return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
try {
g_peer.invoke_identity_ui(hwndParent, dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, ppwszIdentity);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// 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)
///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeInteractiveUI(
const EAP_METHOD_TYPE *pEapType,
HWND hwndParent,
DWORD dwUIContextDataSize,
const BYTE *pUIContextData,
DWORD *pdwDataFromInteractiveUISize,
BYTE **ppDataFromInteractiveUI,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwDataFromInteractiveUISize)
*pdwDataFromInteractiveUISize = 0;
if (ppDataFromInteractiveUI)
*ppDataFromInteractiveUI = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pEapType || !pUIContextData && dwUIContextDataSize || !pdwDataFromInteractiveUISize || !ppDataFromInteractiveUI)
return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
try {
g_peer.invoke_interactive_ui(hwndParent, pUIContextData, dwUIContextDataSize, ppDataFromInteractiveUI, pdwDataFromInteractiveUISize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}

7
EAPMethods/PCH.cpp Normal file
View File

@ -0,0 +1,7 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"

17
EAPMethods/PCH.h Normal file
View File

@ -0,0 +1,17 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#pragma once
#if EAPMETHOD_TYPE == 21
#include "../lib/TTLS/include/Method.h"
#include "../lib/TTLS/include/Module.h"
#define EAPMETHOD_PEER eap::peer_ttls
#else
#error Unknown EAP Method type.
#endif
extern EAPMETHOD_PEER g_peer;

7
EAPMethods/PCH_UI.cpp Normal file
View File

@ -0,0 +1,7 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH_UI.h"

19
EAPMethods/PCH_UI.h Normal file
View File

@ -0,0 +1,19 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#pragma once
// Prevent warnings from wxWidgets headers
#define _CRT_SECURE_NO_WARNINGS
#if EAPMETHOD_TYPE == 21
#include "../lib/TTLS_UI/include/Module.h"
#define EAPMETHOD_PEER_UI eap::peer_ttls_ui
#else
#error Unknown EAP Method type.
#endif
extern EAPMETHOD_PEER_UI g_peer;

89
EAPMethods/Register.cpp Normal file
View File

@ -0,0 +1,89 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2020-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"
using namespace std;
using namespace winstd;
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ LPCTSTR sValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_SZ, reinterpret_cast<LPCBYTE>(sValue), (DWORD)((_tcslen(sValue) + 1) * sizeof(tstring::value_type)));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ const tstring &sValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_SZ, reinterpret_cast<LPCBYTE>(sValue.c_str()), (DWORD)((sValue.length() + 1) * sizeof(tstring::value_type)));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ DWORD dwValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_DWORD, reinterpret_cast<LPCBYTE>(&dwValue), sizeof(dwValue));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
///
/// Registers method in EapHost registry
///
/// \returns S_OK if successful; E_FAIL otherwise
///
STDAPI DllRegisterServer()
{
try {
tstring sz, sz2;
reg_key key_methods, key_author, key_method;
LSTATUS s = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\services\\EapHost\\Methods"), 0, KEY_CREATE_SUB_KEY, key_methods);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
sprintf(sz, _T("%u"), EAPMETHOD_AUTHOR_ID);
s = RegCreateKeyEx(key_methods, sz.c_str(), NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, key_author, NULL);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
set_value(key_author, NULL, _T(PRODUCT_NAME_STR));
sprintf(sz, _T("%u"), EAPMETHOD_TYPE);
s = RegCreateKeyEx(key_author, sz.c_str(), NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, key_method, NULL);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
if (!GetModuleFileName(g_peer.m_instance, sz)) throw win_runtime_error("GetModuleFileName failed.");
sprintf(sz2, _T("@%s,-1"), sz.c_str());
set_value(key_method, _T("PeerDllPath") , sz);
set_value(key_method, _T("PeerFriendlyName"), sz2);
set_value(key_method, _T("Properties") , (DWORD)389871807);
return S_OK;
} catch(win_runtime_error &err) {
OutputDebugStr(_T("%hs (error %u)\n"), err.what(), err.number());
return E_FAIL;
} catch(...) {
OutputDebugStr(_T("Registering DLL failed.\n"));
return E_FAIL;
}
}
///
/// Unregisters method from EapHost registry
///
/// \returns Always S_OK
///
STDAPI DllUnregisterServer()
{
try {
tstring sz;
reg_key key_methods;
LSTATUS s = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\services\\EapHost\\Methods"), 0, KEY_READ, key_methods);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
sprintf(sz, _T("%u\\%u"), EAPMETHOD_AUTHOR_ID, EAPMETHOD_TYPE);
if (!key_methods.delete_subkey(sz.c_str())) throw win_runtime_error();
} catch(...) {}
return S_OK;
}

View File

@ -0,0 +1,90 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2020-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH_UI.h"
using namespace std;
using namespace winstd;
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ LPCTSTR sValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_SZ, reinterpret_cast<LPCBYTE>(sValue), (DWORD)((_tcslen(sValue) + 1) * sizeof(tstring::value_type)));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ const tstring &sValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_SZ, reinterpret_cast<LPCBYTE>(sValue.c_str()), (DWORD)((sValue.length() + 1) * sizeof(tstring::value_type)));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ DWORD dwValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_DWORD, reinterpret_cast<LPCBYTE>(&dwValue), sizeof(dwValue));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
///
/// Registers method UI in EapHost registry
///
/// \returns S_OK if successful; E_FAIL otherwise
///
STDAPI DllRegisterServer()
{
try {
tstring sz;
reg_key key_methods, key_author, key_method;
LSTATUS s = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\services\\EapHost\\Methods"), 0, KEY_CREATE_SUB_KEY, key_methods);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
sprintf(sz, _T("%u"), EAPMETHOD_AUTHOR_ID);
s = RegCreateKeyEx(key_methods, sz.c_str(), NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, key_author, NULL);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
set_value(key_author, NULL, _T(PRODUCT_NAME_STR));
sprintf(sz, _T("%u"), EAPMETHOD_TYPE);
s = RegCreateKeyEx(key_author, sz.c_str(), NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, key_method, NULL);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
if (!GetModuleFileName(g_peer.m_instance, sz)) throw win_runtime_error("GetModuleFileName failed.");
set_value(key_method, _T("PeerConfigUIPath") , sz);
set_value(key_method, _T("PeerIdentityPath") , sz);
set_value(key_method, _T("PeerInteractiveUIPath") , sz);
set_value(key_method, _T("PeerInvokePasswordDialog"), (DWORD)0);
set_value(key_method, _T("PeerInvokeUsernameDialog"), (DWORD)0);
return S_OK;
} catch(win_runtime_error &err) {
OutputDebugStr(_T("%hs (error %u)\n"), err.what(), err.number());
return E_FAIL;
} catch(...) {
OutputDebugStr(_T("Registering DLL failed.\n"));
return E_FAIL;
}
}
///
/// Unregisters method UI from EapHost registry
///
/// \returns Always S_OK
///
STDAPI DllUnregisterServer()
{
try {
tstring sz;
reg_key key_methods;
LSTATUS s = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\services\\EapHost\\Methods"), 0, KEY_READ, key_methods);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
sprintf(sz, _T("%u\\%u"), EAPMETHOD_AUTHOR_ID, EAPMETHOD_TYPE);
key_methods.delete_subkey(sz.c_str());
} catch(...) {}
return S_OK;
}

View File

@ -1,15 +0,0 @@
<?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>
<_PropertySheetDisplayName>EAP Method Common</_PropertySheetDisplayName>
<OutDir>..\..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir);..\..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\include;..\..\lib\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

714
EAPMethods/locale/et_EE.po Normal file
View File

@ -0,0 +1,714 @@
#
# Translators:
# Indrek Rokk <indrek.rokk@eenet.ee>, 2018
# Simon Rozman <simon@rozman.si>, 2020
# Anne M <anne@eenet.ee>, 2021
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2020-04-17 14:55+0200\n"
"PO-Revision-Date: 2016-08-25 06:18+0000\n"
"Last-Translator: Anne M <anne@eenet.ee>, 2021\n"
"Language-Team: Estonian (https://www.transifex.com/eduroam_devel/teams/11799/et/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: et\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.3\n"
"X-Poedit-Basepath: ../..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: lib/EAPBase_UI\n"
"X-Poedit-SearchPath-1: lib/EapHost_UI\n"
"X-Poedit-SearchPath-2: lib/GTC_UI\n"
"X-Poedit-SearchPath-3: lib/MSCHAPv2_UI\n"
"X-Poedit-SearchPath-4: lib/PAP_UI\n"
"X-Poedit-SearchPath-5: lib/TLS_UI\n"
"X-Poedit-SearchPath-6: lib/TTLS_UI\n"
"X-Poedit-SearchPath-7: EAPMethods\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: lib/EAPBase_UI/include/EAP_UI.h:295
#, c-format
msgid ""
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Kas oled kindel, et soovid %s teenusepakkuja seadistusest püsivalt "
"eemaldada?"
#: lib/EAPBase_UI/include/EAP_UI.h:295
msgid "Warning"
msgstr "Hoiatus"
#: lib/EAPBase_UI/include/EAP_UI.h:381 lib/EAPBase_UI/res/wxEAP_UI.h:116
msgid "EAP Credentials"
msgstr "EAP kasutajakonto"
#: lib/EAPBase_UI/include/EAP_UI.h:725
msgid "Provider Settings"
msgstr "Teenusepakkuja seadistused"
#: lib/EAPBase_UI/include/EAP_UI.h:758 lib/EAPBase_UI/res/wxEAP_UI.cpp:229
#, c-format
msgid "%s User Credentials"
msgstr "%s kasutajakonto andmed"
#: lib/EAPBase_UI/include/EAP_UI.h:866 lib/TTLS_UI/src/Module.cpp:196
#: lib/TTLS_UI/src/Module.cpp:305
#, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr ""
"Viga kasutajakonto andmete kirjutamisel kasutajakonto halduris (Credential "
"Manager): %hs (viga %u)"
#: lib/EAPBase_UI/include/EAP_UI.h:869 lib/TTLS_UI/src/Module.cpp:198
#: lib/TTLS_UI/src/Module.cpp:307
msgid "Writing credentials failed."
msgstr "Kasutajakonto andmete kirjutamine ebaõnnestus"
#: lib/EAPBase_UI/include/EAP_UI.h:897
#, c-format
msgid "Deleting credentials failed (error %u)."
msgstr "Kasutajakonto andmete kustutamine ebaõnnestus (viga %u)."
#: lib/EAPBase_UI/include/EAP_UI.h:924 lib/EAPBase_UI/include/EAP_UI.h:943
#: lib/EAPBase_UI/include/EAP_UI.h:952
msgid "(none)"
msgstr "(ei midagi)"
#: lib/EAPBase_UI/include/EAP_UI.h:928
#, c-format
msgid "(error %u)"
msgstr "(viga %u)"
#: lib/EAPBase_UI/include/EAP_UI.h:932
msgid "(error)"
msgstr "(viga)"
#: lib/EAPBase_UI/include/EAP_UI.h:943 lib/EAPBase_UI/include/EAP_UI.h:952
msgid "(blank ID)"
msgstr "(tühi ID)"
#: lib/EAPBase_UI/include/EAP_UI.h:992
msgid "&Remember"
msgstr "&Jäta meelde"
#: lib/EAPBase_UI/include/EAP_UI.h:993
msgid "Check if you would like to save credentials"
msgstr "Linnuta, kui soovid kasutajakonto andmeid salvestada"
#: lib/EAPBase_UI/include/EAP_UI.h:1214
msgid "(Your Organization)"
msgstr "(Sinu asutus)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:37
msgid "+"
msgstr "+"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:38
msgid "Adds new provider"
msgstr "Lisab uue teenusepakkuja"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:42
msgid "-"
msgstr "-"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:43
msgid "Removes selected provider"
msgstr "Eemaldab valitud teenusepakkuja"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:47
msgid "Advanced..."
msgstr "Keerukam..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:48
msgid "Opens dialog with provider settings"
msgstr "Avab teenusepakkuja seadistuste dialoogi"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
"Vali koht, kuhu Su ühendumiseks kasutatud kasutajakonto andmed on "
"salvestatud."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:250
msgid "Use from Credential &Manager:"
msgstr "Kasuta andmeid kasutajakontode hal&durist (Credential Manager):"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:251
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Vali see võimalus, kui soovid kasutada Windowsi kasutajakontode halduris "
"(Windows Credential Manager) salvestatud kontoandmeid"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:258
msgid "Your present credentials stored in Windows Credential Manager"
msgstr ""
"Sinu praegused, Windowsi kasutajakontode halduris (Windows Credential "
"Manager) salvestatud kontoandmed"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:268
msgid "Use from &profile configuration:"
msgstr "Kasuta andmeid &profiili seadistusest:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:269
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Vali see võimalus, kui soovid salvestada kasutajakonto andmed profiili "
"seadistustesse."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Profile configuration credentials"
msgstr "Profiili seadistuse kasutajaandmed"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:289
msgid "&Clear Credentials"
msgstr "&Kustuta kasutajakonto andmed"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:290
msgid ""
"Click to clear your credentials from Credential Manager.\n"
"Note: You will be prompted to enter credentials when connecting."
msgstr ""
"Klõpsa. et kustutada oma andmed kasutajakonto haldurist.\n"
"Märkus: Ühendumisel lastakse Sul sisestada kasutajakonto andmed."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:294
msgid "&Set Credentials..."
msgstr "&Määra kasutajakonto andmed..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:295
msgid "Click here to set or modify your credentials"
msgstr "Klõpsa siin oma kasutajakonto andmete määramiseks või muutmiseks"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:332
msgid "User ID and Password"
msgstr "Kasutaja ID ja parool"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:342
msgid "Please provide your user ID and password."
msgstr "Palun sisesta oma kasutaja ID ja parool"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:352 lib/EAPBase_UI/res/wxEAP_UI.cpp:416
msgid "User ID:"
msgstr "Kasutaja ID:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:357 lib/EAPBase_UI/res/wxEAP_UI.cpp:421
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr "Sisesta siin oma kasutajanimi (nimi@domeen.ee, DOMEEN\\kasutaja vmt)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:361
msgid "Password:"
msgstr "Parool:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:366
msgid "Enter your password here"
msgstr "Sisesta siin oma parool"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:396
msgid "User ID"
msgstr "Kasutaja ID"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:406
msgid "Please provide your user ID."
msgstr "Palun sisesta oma kasutaja ID (kasutajanimi)."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:446
msgid "Your Organization"
msgstr "Sinu asutus"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:457
msgid ""
"Describe your organization to customize user prompts. When organization is "
"introduced, end-users find program messages easier to understand and act."
msgstr ""
"Kirjelda oma asutust, et seadistada kasutajaviibad. Kui asutus on "
"kirjeldatud, on lõppkasutajatel lihtsam programmi sõnumeid mõista ja neist "
"juhinduda."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:464
msgid "Your organization &name:"
msgstr "Sinu asutuse &nimi:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:469
msgid ""
"Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
"Sinu asutuse nimi, mida näidatakse kasutajatoega kontakteerumise teadetes"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:473
msgid "(Keep it short, please)"
msgstr "(Palun kirjuta lühidalt)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:483
msgid "Helpdesk contact &information:"
msgstr "Kasutajatoe k&ontaktteave:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:500
msgid "Your helpdesk website address"
msgstr "Sinu kasutajatoe veebiaadress"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:511
msgid "Your helpdesk e-mail address"
msgstr "Sinu kasutajatoe e-posti aadress"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:522
msgid "Your helpdesk phone number"
msgstr "Sinu kasutajatoe telefoninumber"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:550
msgid "Provider Unique Identifier"
msgstr "Teenusepakkuja unikaalne identifikaator"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:561
msgid ""
"Assign your organization a unique ID to allow sharing the same credential "
"set across different network profiles."
msgstr ""
"Määra oma asutusele unikaalne ID, et samu kontoandmeid saaks kasutada "
"erinevatel võrguprofiilidel."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:568
msgid "&Namespace:"
msgstr "&Nimeruum:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:572
msgid "urn:RFC4282:realm"
msgstr "urn:RFC4282:realm"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:572
msgid "urn:uuid"
msgstr "urn:uuid"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:584
msgid "Provider unique &identifier:"
msgstr "Teenusepakkuja unikaalne &identifikaator:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:589
msgid "Your organization ID to assign same credentials from other profiles"
msgstr "Sinu asutuse ID, et määrata samu kontoandmeid teistelt profiilidelt"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:614
msgid "Configuration Lock"
msgstr "Seadistuslukk"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:625
msgid ""
"Your configuration can be locked to prevent accidental modification by end-"
"users. Users will only be allowed to enter credentials."
msgstr ""
"Seadistuslukk ei lase lõppkasutajatel kogemata muudatusi teha. Kasutajad "
"saavad ainult kasutajakontoandmeid sisestada."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:632
msgid ""
"&Lock this configuration and prevent any further modification via user "
"interface."
msgstr ""
"&Lukusta see seadistus ja hoia ära selle muutmine kasutajaliidese kaudu"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:635
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr ""
"(Hoiatus: Lukustamise järel ei saa Sa seda dialoogi kasutades tehtut tagasi "
"pöörata!)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:700
msgid "Identity"
msgstr "Identiteet"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:711
msgid "Select the user ID supplicant introduces itself as to authenticator:"
msgstr "Vali kasutajanimi, mida pistikprogramm autentijale näitab:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:718
msgid "&True identity"
msgstr "&Tõene identiteet"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:719
msgid "Use my true user name"
msgstr "Kasuta mu tõest kasutajanime"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:723
msgid "Use &empty identity"
msgstr "Kasuta t&ühja identiteeti"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:724
msgid "Omit my user name and use @mydomain.org only"
msgstr "Jäta mu kasutajanimi ära ja kasuta ainult @minudomeeni"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:731
msgid "&Custom identity:"
msgstr "Kohandatud &identiteet:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:732
msgid "Specify custom identity"
msgstr "Määra kohandatud identiteet"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:737
msgid "Custom identity to use"
msgstr "Kohandatud identiteet kasutamiseks"
#: lib/EAPBase_UI/res/wxEAP_UI.h:66
msgid "EAP Connection Configuration"
msgstr "EAP ühenduse seadistus"
#: lib/EAPBase_UI/res/wxEAP_UI.h:329
msgid "EAP Identity Provider"
msgstr "EAP identiteedipakkuja"
#: lib/EAPBase_UI/src/EAP_UI.cpp:103
#, c-format
msgid "%s Credentials"
msgstr "%s kasutajakonto andmed"
#: lib/EAPBase_UI/src/EAP_UI.cpp:139
#, c-format
msgid "For additional help and instructions, please contact %s at:"
msgstr "Abi ja juhendite saamiseks võta palun ühendust: %s "
#: lib/EAPBase_UI/src/EAP_UI.cpp:140
msgid "your provider"
msgstr "sinu teenusepakkuja"
#: lib/EAPBase_UI/src/EAP_UI.cpp:159
msgid "Open the default web browser"
msgstr "Ava vaikimisi määratud veebilehitseja"
#: lib/EAPBase_UI/src/EAP_UI.cpp:170
msgid "Open your e-mail program"
msgstr "Ava oma e-postiprogramm"
#: lib/EAPBase_UI/src/EAP_UI.cpp:181
msgid "Dial the phone number"
msgstr "Vali telefoninumber"
#: lib/EAPBase_UI/src/EAP_UI.cpp:203
#, c-format
msgid ""
"%s has pre-set parts of this configuration. Those parts are locked to "
"prevent accidental modification."
msgstr ""
"%s omab selles seadistuses eelseatud osi, mis on juhuslike muudatuste eest "
"kaitsmiseks lukustatud."
#: lib/EAPBase_UI/src/EAP_UI.cpp:204
msgid "Your provider"
msgstr "Sinu teenusepakkuja"
#: lib/EAPBase_UI/src/EAP_UI.cpp:225
msgid "Previous attempt to connect reported invalid credentials."
msgstr "Eelmine ühendumiskatse oli mittekehtivate kasutajakonto andmetega."
#: lib/EAPBase_UI/src/EAP_UI.cpp:226
msgid "Previous attempt to connect reported your credentials expired."
msgstr "Eelmise ühendumiskatse kohaselt olid su kasutajakonto andmed aegunud."
#: lib/EAPBase_UI/src/EAP_UI.cpp:227
msgid ""
"Previous attempt to connect reported your credentials are being changed."
msgstr "Eelmise ühendumiskatse kohaselt on su kasutajakonto andmed muutmisel."
#: lib/EAPBase_UI/src/EAP_UI.cpp:228
msgid "Previous attempt to connect failed."
msgstr "Eelmine ühendumiskatse ebaõnnestus."
#: lib/EAPBase_UI/src/EAP_UI.cpp:229
msgid "Please, make sure your credentials are correct, or try again later."
msgstr ""
"Palun veendu, et Su kasutajakonto andmed on korrektsed, või proovi hiljem "
"uuesti."
#: lib/EAPBase_UI/src/EAP_UI.cpp:250
#, c-format
msgid ""
"The %s version installed on this computer logs credentials in visible and "
"easy to read way."
msgstr ""
"%s versioon selles arvutis logib kasutajakonto andmeid nähtavalt ja lihtsalt"
" loetavalt."
#: lib/EAPBase_UI/src/EAP_UI.cpp:251
msgid "Please, reconsider necessity to enter your credentials."
msgstr "Palun kaalu oma kasutajakonto andmete sisestamise vajalikkust."
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:17
msgid "Inner EAP Method"
msgstr "Sisemine EAP meetod"
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:28
msgid "Select and configure inner EAP method"
msgstr "Vali ja seadista sisemine EAP meetod"
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:40
msgid "&Settings"
msgstr "&Seadistused"
#: lib/EapHost_UI/src/EapHost_UI.cpp:59
#, c-format
msgid "Enumerating EAP methods failed (error %u, %s, %s)."
msgstr "EAP meetodite loetlemine ebaõnnestus (viga %u, %s, %s)."
#: lib/EapHost_UI/src/EapHost_UI.cpp:61
#, c-format
msgid "Enumerating EAP methods failed (error %u)."
msgstr "EAP meetodite loetlemine ebaõnnestus (viga %u)."
#: lib/EapHost_UI/src/EapHost_UI.cpp:136
#, c-format
msgid "Configuring EAP method failed (error %u, %s, %s)."
msgstr "EAP meetodi seadistamine ebaõnnestus (viga %u, %s, %s)."
#: lib/EapHost_UI/src/EapHost_UI.cpp:138
#, c-format
msgid "Configuring EAP method failed (error %u)."
msgstr "EAP meetodi seadistamine ebaõnnestus (viga %u)."
#: lib/GTC_UI/include/GTC_UI.h:114 lib/GTC_UI/res/wxGTC_UI.cpp:16
msgid "GTC Challenge"
msgstr "GTC pretensioon"
#: lib/GTC_UI/res/wxGTC_UI.cpp:26
msgid "Please provide your response."
msgstr "Palun sisesta oma vastus."
#: lib/GTC_UI/res/wxGTC_UI.cpp:38
msgid "Server challenge"
msgstr "Serveri pretensioon"
#: lib/GTC_UI/res/wxGTC_UI.cpp:43
msgid "Enter your response here"
msgstr "Sisesta siin oma vastus."
#: lib/GTC_UI/res/wxGTC_UI.cpp:70
msgid "EAP-GTC authentication &mode:"
msgstr "EAP-GTC &autentimisrežiim:"
#: lib/GTC_UI/res/wxGTC_UI.cpp:75
msgid "Select EAP-GTC authentication mode from the list"
msgstr "Vali loetelust EAP-GTC autentimisrežiim"
#: lib/GTC_UI/src/GTC_UI.cpp:39
msgid "Challenge/Response"
msgstr "Pretensioon/Vastus"
#: lib/GTC_UI/src/GTC_UI.cpp:41
msgid "Password"
msgstr "Parool"
#: lib/GTC_UI/src/GTC_UI.cpp:119
#, c-format
msgid "%s Challenge"
msgstr "%s pretensioon"
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr "MSCHAPv2 kasutajanimi ja parool"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr "PAP kasutajanimi ja parool"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
msgstr "Serveri usaldamine"
#: lib/TLS_UI/res/wxTLS_UI.cpp:28
msgid "Describe the servers you trust to prevent man-in-the-middle attacks."
msgstr "Loetle serverid, mida usaldad vahendusrünnete tõrjumiseks."
#: lib/TLS_UI/res/wxTLS_UI.cpp:35
msgid "Acceptable Certificate Authorities:"
msgstr "Lubatud sertifitseerimiskeskused:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:40
msgid ""
"Server's certificate must be issued by one of certificate authorities listed"
" here"
msgstr ""
"Serverisertifikaat peab olema väljastatud siin loetletud "
"sertifitseerimiskeskuse poolt"
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
msgid "Add CA from Store..."
msgstr "Lisa sertifikaadilaost CA..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:48
msgid ""
"Adds a new certificate authority from the certificate store to the list"
msgstr "Lisab sertikaadilaost nimekirja uue sertifitseerimiskeskuse"
#: lib/TLS_UI/res/wxTLS_UI.cpp:52
msgid "Add CA from File..."
msgstr "Lisa failist CA..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:53
msgid "Adds a new certificate authority from the file to the list"
msgstr "Lisab failist nimekirja uue sertifitseerimiskeskuse"
#: lib/TLS_UI/res/wxTLS_UI.cpp:57
msgid "&Remove CA"
msgstr "Eemalda &CA"
#: lib/TLS_UI/res/wxTLS_UI.cpp:58
msgid "Removes selected certificate authorities from the list"
msgstr "Eemaldab valitud sertifitseerimiskeskused nimekirjast"
#: lib/TLS_UI/res/wxTLS_UI.cpp:71
msgid "Acceptable server &names:"
msgstr "Lubatud serveri&nimed:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:76
msgid ""
"A semicolon delimited list of acceptable server FQDN names; blank to skip "
"name check; Unicode characters allowed"
msgstr ""
"Semikoolonitega eraldatult nimekiri lubatud serverite FQDN nimedest; "
"nimekontrolli vahelejätmiseks tühik; lubatud on Unicode märgistik"
#: lib/TLS_UI/res/wxTLS_UI.cpp:80
msgid "(Example: foo.bar.com;server2.bar.com)"
msgstr "(Näide: yks.näide.ee;2.teine.ee)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:118 lib/TLS_UI/src/TLS_UI.cpp:400
msgid "User Certificate"
msgstr "Kasutaja sertifikaat"
#: lib/TLS_UI/res/wxTLS_UI.cpp:128
msgid "Please select your &certificate to use for authentication."
msgstr "Palun vali autentimiseks oma serti&fikaat"
#: lib/TLS_UI/res/wxTLS_UI.cpp:135
msgid "Client certificate to use for authentication"
msgstr "Autentimisel kasutatav kliendisertifikaat"
#: lib/TLS_UI/res/wxTLS_UI.cpp:142
msgid "Custom &identity:"
msgstr "Kohandatud &identiteet:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:147
msgid ""
"Your identity (username@domain) to override one from certificate; or blank "
"to use one provided in certificate"
msgstr ""
"Sinu identiteet (kasutajanimi@domeen), millega kirjutatakse üle "
"sertifikaadis olev; kui jätad tühjaks, kasutatakse sertifikaadis olevat"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "No certificate selected"
msgstr "Sertifikaati ei ole valitud"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "Validation conflict"
msgstr "Valideerimiskonflikt"
#: lib/TLS_UI/src/TLS_UI.cpp:327
msgid "Add Certificate"
msgstr "Lisa sertifikaat"
#: lib/TLS_UI/src/TLS_UI.cpp:328
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
msgstr "Sertifikaadi failid (*.cer;*.crt;*.der;*.p7b;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:329
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
msgstr "X.509 sertifikaadi failid (*.cer;*.crt;*.der;*.p7b;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:330
msgid "PKCS #7 Certificate Files (*.p7b)"
msgstr "PKCS #7 sertifikaadi failid (*.p7b)"
#: lib/TLS_UI/src/TLS_UI.cpp:331
msgid "All Files (*.*)"
msgstr "Kõik failid (*.*)"
#: lib/TLS_UI/src/TLS_UI.cpp:345
#, c-format
msgid "Invalid or unsupported certificate file %s"
msgstr "Vigane või mittetoetatud sertifikaadifail %s"
#: lib/TLS_UI/src/TLS_UI.cpp:345
msgid "Error"
msgstr "Viga"
#: lib/TTLS_UI/src/Module.cpp:249
#, c-format
msgid "Invoking EAP identity UI failed (error %u, %s, %s)."
msgstr "EAP identiteedi UI aktiveerimine ebaõnnestus (viga %u, %s, %s)."
#: lib/TTLS_UI/src/Module.cpp:252
#, c-format
msgid "Invoking EAP identity UI failed (error %u)."
msgstr "EAP identiteedi UI aktiveerimine ebaõnnestus (viga %u)."
#: lib/TTLS_UI/src/Module.cpp:376
#, c-format
msgid "Invoking EAP interactive UI failed (error %u, %s, %s)."
msgstr "EAP interaktiivse UI aktiveerimine ebaõnnestus (viga %u, %s, %s)."
#: lib/TTLS_UI/src/Module.cpp:379
#, c-format
msgid "Invoking EAP interactive UI failed (error %u)."
msgstr "EAP interaktiivse UI aktiveerimine ebaõnnestus (viga %u)."
#: lib/TTLS_UI/src/TTLS_UI.cpp:37
msgid "Outer Authentication"
msgstr "Väline autentimine"
#: lib/TTLS_UI/src/TTLS_UI.cpp:50
msgid "Inner Authentication"
msgstr "Sisemine autentimine"
#: lib/TTLS_UI/src/TTLS_UI.cpp:56
msgid "Select inner authentication method from the list"
msgstr "Vali nimekirjast sisemise autentimise meetod"
#: lib/TTLS_UI/src/TTLS_UI.cpp:127
msgid "PAP"
msgstr "PAP"
#: lib/TTLS_UI/src/TTLS_UI.cpp:129
msgid "MSCHAPv2"
msgstr "MSCHAPv2"
#: lib/TTLS_UI/src/TTLS_UI.cpp:131
msgid "EAP-MSCHAPv2"
msgstr "EAP-MSCHAPv2"
#: lib/TTLS_UI/src/TTLS_UI.cpp:133
msgid "EAP-GTC"
msgstr "EAP-GTC"
#: lib/TTLS_UI/src/TTLS_UI.cpp:136
msgid "Other EAP methods..."
msgstr "Muud EAP meetodid..."
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP-TTLS"
msgstr "EAP-TTLS"
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP-TTLS Method"
msgstr "EAP-TTLS meetod"
#: EAPMethods/MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP Methods"
msgstr "EAP meetodid"
#: EAPMethods/MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Modules to support individual EAP methods"
msgstr "Moodulid individuaalsete EAP meetodite toeks"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

729
EAPMethods/locale/ro_RO.po Normal file
View File

@ -0,0 +1,729 @@
#
# Translators:
# Simon Rozman <simon@rozman.si>, 2020
# Raul Opruta <raul.opruta@roedu.net>, 2020
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2020-04-17 14:55+0200\n"
"PO-Revision-Date: 2016-08-25 06:18+0000\n"
"Last-Translator: Raul Opruta <raul.opruta@roedu.net>, 2020\n"
"Language-Team: Romanian (Romania) (https://www.transifex.com/eduroam_devel/teams/11799/ro_RO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
"X-Generator: Poedit 2.3\n"
"X-Poedit-Basepath: ../..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: lib/EAPBase_UI\n"
"X-Poedit-SearchPath-1: lib/EapHost_UI\n"
"X-Poedit-SearchPath-2: lib/GTC_UI\n"
"X-Poedit-SearchPath-3: lib/MSCHAPv2_UI\n"
"X-Poedit-SearchPath-4: lib/PAP_UI\n"
"X-Poedit-SearchPath-5: lib/TLS_UI\n"
"X-Poedit-SearchPath-6: lib/TTLS_UI\n"
"X-Poedit-SearchPath-7: EAPMethods\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: lib/EAPBase_UI/include/EAP_UI.h:295
#, c-format
msgid ""
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Sunteți sigur că doriți să eliminați definitiv furnizorul %s din "
"configurație?"
#: lib/EAPBase_UI/include/EAP_UI.h:295
msgid "Warning"
msgstr "Avertizare"
#: lib/EAPBase_UI/include/EAP_UI.h:381 lib/EAPBase_UI/res/wxEAP_UI.h:116
msgid "EAP Credentials"
msgstr "Credenţiale EAP"
#: lib/EAPBase_UI/include/EAP_UI.h:725
msgid "Provider Settings"
msgstr "Setări de provider"
#: lib/EAPBase_UI/include/EAP_UI.h:758 lib/EAPBase_UI/res/wxEAP_UI.cpp:229
#, c-format
msgid "%s User Credentials"
msgstr "%s Credenţiale utilizator"
#: lib/EAPBase_UI/include/EAP_UI.h:866 lib/TTLS_UI/src/Module.cpp:196
#: lib/TTLS_UI/src/Module.cpp:305
#, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr ""
"Eroare la scriere a credențialelor în Managerul de credențiale: % hs "
"(eroare%u)"
#: lib/EAPBase_UI/include/EAP_UI.h:869 lib/TTLS_UI/src/Module.cpp:198
#: lib/TTLS_UI/src/Module.cpp:307
msgid "Writing credentials failed."
msgstr " Scrierea credențialele nu au reușit."
#: lib/EAPBase_UI/include/EAP_UI.h:897
#, c-format
msgid "Deleting credentials failed (error %u)."
msgstr "Ştergerea credenţialelor eşuată (eroare %u)."
#: lib/EAPBase_UI/include/EAP_UI.h:924 lib/EAPBase_UI/include/EAP_UI.h:943
#: lib/EAPBase_UI/include/EAP_UI.h:952
msgid "(none)"
msgstr "(nici unul)"
#: lib/EAPBase_UI/include/EAP_UI.h:928
#, c-format
msgid "(error %u)"
msgstr "(eroare %u )"
#: lib/EAPBase_UI/include/EAP_UI.h:932
msgid "(error)"
msgstr "(eroare)"
#: lib/EAPBase_UI/include/EAP_UI.h:943 lib/EAPBase_UI/include/EAP_UI.h:952
msgid "(blank ID)"
msgstr "(ID gol)"
#: lib/EAPBase_UI/include/EAP_UI.h:992
msgid "&Remember"
msgstr "&Ţine minte"
#: lib/EAPBase_UI/include/EAP_UI.h:993
msgid "Check if you would like to save credentials"
msgstr " Verificați dacă doriți să salvați datele de acreditare"
#: lib/EAPBase_UI/include/EAP_UI.h:1214
msgid "(Your Organization)"
msgstr "(Organizaţia ta)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:37
msgid "+"
msgstr "+"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:38
msgid "Adds new provider"
msgstr "Adaugă un nou furnizor"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:42
msgid "-"
msgstr "-"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:43
msgid "Removes selected provider"
msgstr "Înlătură furnizorul selectat"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:47
msgid "Advanced..."
msgstr "Avansat..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:48
msgid "Opens dialog with provider settings"
msgstr "Deschide dialogul cu setările furnizorului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
"Selectați sursa în care sunt stocate datele de acreditare folosite pentru a "
"vă conecta."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:250
msgid "Use from Credential &Manager:"
msgstr "Utilizați de la Credențiale & Management:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:251
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Selectați această opțiune dacă doriți să utilizați credețialele stocate în "
"Windows Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:258
msgid "Your present credentials stored in Windows Credential Manager"
msgstr "Credențiele dvs. actuale sunt stocate în Windows Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:268
msgid "Use from &profile configuration:"
msgstr "Utilizați din configurarea profilului:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:269
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Selectați această opțiune dacă doriți să stocați credențialele ca parte a "
"configurației profilului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Profile configuration credentials"
msgstr " Credențialele de configurare a profilului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:289
msgid "&Clear Credentials"
msgstr "%Ştergere Credenţiale"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:290
msgid ""
"Click to clear your credentials from Credential Manager.\n"
"Note: You will be prompted to enter credentials when connecting."
msgstr ""
"Faceți clic pentru a șterge credențialele din Managerul de credenţiale.\n"
"Notă: Vi se va solicita să introduceți credențialele atunci când vă conectați."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:294
msgid "&Set Credentials..."
msgstr "&Setare credenţiale"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:295
msgid "Click here to set or modify your credentials"
msgstr "Apasă aici pentru a modifica credenţialele"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:332
msgid "User ID and Password"
msgstr "ID de utilizator și parolă"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:342
msgid "Please provide your user ID and password."
msgstr "Vă rugăm să furnizați ID-ul de utilizator și parola."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:352 lib/EAPBase_UI/res/wxEAP_UI.cpp:416
msgid "User ID:"
msgstr "ID utilizator:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:357 lib/EAPBase_UI/res/wxEAP_UI.cpp:421
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr ""
"Introduceți numele de utilizator aici (user@domain.org, DOMENIU \\ User "
"etc.)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:361
msgid "Password:"
msgstr "Parolă:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:366
msgid "Enter your password here"
msgstr "Introduceţi parola aici:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:396
msgid "User ID"
msgstr "ID Utilizator"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:406
msgid "Please provide your user ID."
msgstr "Vă rugăm să furnizați ID-ul de utilizator."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:446
msgid "Your Organization"
msgstr "Organizaţia dumneavostră"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:457
msgid ""
"Describe your organization to customize user prompts. When organization is "
"introduced, end-users find program messages easier to understand and act."
msgstr ""
"Descrieți organizația dumneavoastră pentru a personaliza solicitările "
"utilizatorilor. Când este introdusă organizația, utilizatorii finali găsesc "
"mesajele de program mai ușor de înțeles și de acționat."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:464
msgid "Your organization &name:"
msgstr "Numele organizaţiei dumneavoastră &:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:469
msgid ""
"Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
"Numele organizației dumneavoastră, așa cum va apărea în notificările de "
"contact ale helpdesk"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:473
msgid "(Keep it short, please)"
msgstr "(Păstrați-l scurt, vă rog)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:483
msgid "Helpdesk contact &information:"
msgstr "Contact și informații despre asistență:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:500
msgid "Your helpdesk website address"
msgstr "Adresa web de asistență"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:511
msgid "Your helpdesk e-mail address"
msgstr "Adresa de e-mail de asistență"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:522
msgid "Your helpdesk phone number"
msgstr "Numărul de telefon de asistență"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:550
msgid "Provider Unique Identifier"
msgstr "Identificator unic al furnizorului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:561
msgid ""
"Assign your organization a unique ID to allow sharing the same credential "
"set across different network profiles."
msgstr ""
"Alocați organizației dumneavostră un ID unic care să permită partajarea "
"aceluiași set de credințiale pe diferite profiluri de rețea."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:568
msgid "&Namespace:"
msgstr "&Spaţiu de nume:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:572
msgid "urn:RFC4282:realm"
msgstr "urn:RFC4282:realm"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:572
msgid "urn:uuid"
msgstr "urn:uuid"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:584
msgid "Provider unique &identifier:"
msgstr "Identificator unic și identificator:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:589
msgid "Your organization ID to assign same credentials from other profiles"
msgstr ""
"ID-ul organizației dumneavoastră pentru a atribui aceleași date de "
"acreditare de la alte profiluri"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:614
msgid "Configuration Lock"
msgstr "Configurare Blocată"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:625
msgid ""
"Your configuration can be locked to prevent accidental modification by end-"
"users. Users will only be allowed to enter credentials."
msgstr ""
"Configurația dumneavoastră poate fi blocată pentru a preveni modificarea "
"accidentală de către utilizatorii finali. Utilizatorii vor avea voie să "
"introducă numai datele de acreditare."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:632
msgid ""
"&Lock this configuration and prevent any further modification via user "
"interface."
msgstr ""
"& Blocați această configurație și preveniți alte modificări prin interfața "
"utilizatorului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:635
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr "(Avertisment: odată blocat, nu puteți reveni folosind acest dialog!)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:700
msgid "Identity"
msgstr "Identitate"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:711
msgid "Select the user ID supplicant introduces itself as to authenticator:"
msgstr ""
"Selectați ID-ul utilizatorului implicit care se introduce ca autentificator:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:718
msgid "&True identity"
msgstr "&Identitate adevărată"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:719
msgid "Use my true user name"
msgstr "Utilizați numele meu de utilizator adevărat"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:723
msgid "Use &empty identity"
msgstr "Utilizați & identitate goală"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:724
msgid "Omit my user name and use @mydomain.org only"
msgstr "Omiteți numele meu de utilizator si folositi doar @ mydomain.org"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:731
msgid "&Custom identity:"
msgstr "& Identitate personalizată:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:732
msgid "Specify custom identity"
msgstr "Precizați identitatea personalizată"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:737
msgid "Custom identity to use"
msgstr "Identitate personalizată de utilizat"
#: lib/EAPBase_UI/res/wxEAP_UI.h:66
msgid "EAP Connection Configuration"
msgstr "Configurare conexiune EAP"
#: lib/EAPBase_UI/res/wxEAP_UI.h:329
msgid "EAP Identity Provider"
msgstr "Furnizor de identitate EAP"
#: lib/EAPBase_UI/src/EAP_UI.cpp:103
#, c-format
msgid "%s Credentials"
msgstr "%s Credenţiale"
#: lib/EAPBase_UI/src/EAP_UI.cpp:139
#, c-format
msgid "For additional help and instructions, please contact %s at:"
msgstr ""
"Pentru ajutor și instrucțiuni suplimentare, vă rugăm să contactați %s la : "
#: lib/EAPBase_UI/src/EAP_UI.cpp:140
msgid "your provider"
msgstr "providerul dumneavoastră"
#: lib/EAPBase_UI/src/EAP_UI.cpp:159
msgid "Open the default web browser"
msgstr "Deschideți browserul web implicit"
#: lib/EAPBase_UI/src/EAP_UI.cpp:170
msgid "Open your e-mail program"
msgstr "Deschideți programul de e-mail"
#: lib/EAPBase_UI/src/EAP_UI.cpp:181
msgid "Dial the phone number"
msgstr "Apelează numărul de telefon"
#: lib/EAPBase_UI/src/EAP_UI.cpp:203
#, c-format
msgid ""
"%s has pre-set parts of this configuration. Those parts are locked to "
"prevent accidental modification."
msgstr ""
"%s are părți prestabilite ale acestei configurații. Aceste piese sunt "
"blocate pentru a preveni modificarea accidentală."
#: lib/EAPBase_UI/src/EAP_UI.cpp:204
msgid "Your provider"
msgstr "Furnizorul dumneavostră"
#: lib/EAPBase_UI/src/EAP_UI.cpp:225
msgid "Previous attempt to connect reported invalid credentials."
msgstr "Încercarea anterioară de conectare a raportat credențiale nevalide ."
#: lib/EAPBase_UI/src/EAP_UI.cpp:226
msgid "Previous attempt to connect reported your credentials expired."
msgstr ""
"Încercarea anterioară de conectare a raportat datele de acreditare expirate."
#: lib/EAPBase_UI/src/EAP_UI.cpp:227
msgid ""
"Previous attempt to connect reported your credentials are being changed."
msgstr ""
"Încercarea anterioară de conectare a raportat că datele de acreditare au "
"fost modificate."
#: lib/EAPBase_UI/src/EAP_UI.cpp:228
msgid "Previous attempt to connect failed."
msgstr "Încercarea anterioară de conectare a eșuat."
#: lib/EAPBase_UI/src/EAP_UI.cpp:229
msgid "Please, make sure your credentials are correct, or try again later."
msgstr ""
"Vă rugăm, asigurați-vă că datele de acreditare sunt corecte sau încercați "
"din nou mai târziu."
#: lib/EAPBase_UI/src/EAP_UI.cpp:250
#, c-format
msgid ""
"The %s version installed on this computer logs credentials in visible and "
"easy to read way."
msgstr ""
"Versiunea instalată %s pe acest computer înregistrează datele de acreditare "
"în mod vizibil și ușor de citit."
#: lib/EAPBase_UI/src/EAP_UI.cpp:251
msgid "Please, reconsider necessity to enter your credentials."
msgstr ""
"Vă rugăm să reconsiderați necesitatea de a introduce datele de acreditare."
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:17
msgid "Inner EAP Method"
msgstr "Metoda EAP interioară"
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:28
msgid "Select and configure inner EAP method"
msgstr "Selectați și configurați metoda EAP interioară"
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:40
msgid "&Settings"
msgstr "&Setări"
#: lib/EapHost_UI/src/EapHost_UI.cpp:59
#, c-format
msgid "Enumerating EAP methods failed (error %u, %s, %s)."
msgstr "Enumerarea metodelor EAP a eșuat (eroare %u , %s , %s )."
#: lib/EapHost_UI/src/EapHost_UI.cpp:61
#, c-format
msgid "Enumerating EAP methods failed (error %u)."
msgstr "Enumerarea metodelor EAP a eșuat (eroare %u )."
#: lib/EapHost_UI/src/EapHost_UI.cpp:136
#, c-format
msgid "Configuring EAP method failed (error %u, %s, %s)."
msgstr "Configurarea metodei EAP a eșuat (eroare %u,%s,%s)."
#: lib/EapHost_UI/src/EapHost_UI.cpp:138
#, c-format
msgid "Configuring EAP method failed (error %u)."
msgstr "Configurarea metodei EAP a eșuat (eroare %u )."
#: lib/GTC_UI/include/GTC_UI.h:114 lib/GTC_UI/res/wxGTC_UI.cpp:16
msgid "GTC Challenge"
msgstr "Provocarea GTC"
#: lib/GTC_UI/res/wxGTC_UI.cpp:26
msgid "Please provide your response."
msgstr "Vă rugăm să ne oferiți răspunsul."
#: lib/GTC_UI/res/wxGTC_UI.cpp:38
msgid "Server challenge"
msgstr "Provocarea serverului"
#: lib/GTC_UI/res/wxGTC_UI.cpp:43
msgid "Enter your response here"
msgstr "Introduceți răspunsul aici"
#: lib/GTC_UI/res/wxGTC_UI.cpp:70
msgid "EAP-GTC authentication &mode:"
msgstr "Autentificare și &mod EAP-GTC:"
#: lib/GTC_UI/res/wxGTC_UI.cpp:75
msgid "Select EAP-GTC authentication mode from the list"
msgstr "Selectați modul de autentificare EAP-GTC din listă"
#: lib/GTC_UI/src/GTC_UI.cpp:39
msgid "Challenge/Response"
msgstr "Provocare/Răspuns"
#: lib/GTC_UI/src/GTC_UI.cpp:41
msgid "Password"
msgstr "Parolă"
#: lib/GTC_UI/src/GTC_UI.cpp:119
#, c-format
msgid "%s Challenge"
msgstr "%s Provocare"
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr "MSCHAPv2 Utilizator şi Parolă"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr "PAP Utilizator şi Parolă"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
msgstr "Server de încredere"
#: lib/TLS_UI/res/wxTLS_UI.cpp:28
msgid "Describe the servers you trust to prevent man-in-the-middle attacks."
msgstr ""
"Descrieți serverele de încredere pentru a preveni atacurile de tipul man-in-"
"the-middle."
#: lib/TLS_UI/res/wxTLS_UI.cpp:35
msgid "Acceptable Certificate Authorities:"
msgstr "Autorități de certificare acceptate:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:40
msgid ""
"Server's certificate must be issued by one of certificate authorities listed"
" here"
msgstr ""
"Certificatul de server trebuie eliberat de una dintre autoritățile de "
"certificare enumerate aici"
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
msgid "Add CA from Store..."
msgstr "Adăugare CA din magazin..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:48
msgid ""
"Adds a new certificate authority from the certificate store to the list"
msgstr ""
"Adaugă o nouă autoritate de certificare din magazinul de certificate în "
"listă"
#: lib/TLS_UI/res/wxTLS_UI.cpp:52
msgid "Add CA from File..."
msgstr "Adăugare CA din fişier..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:53
msgid "Adds a new certificate authority from the file to the list"
msgstr "Adaugă o nouă autoritate de certificare din fișier în listă"
#: lib/TLS_UI/res/wxTLS_UI.cpp:57
msgid "&Remove CA"
msgstr "&Ştergere CA"
#: lib/TLS_UI/res/wxTLS_UI.cpp:58
msgid "Removes selected certificate authorities from the list"
msgstr "Îndepărtează autoritățile de certificare selectate din listă"
#: lib/TLS_UI/res/wxTLS_UI.cpp:71
msgid "Acceptable server &names:"
msgstr "Server și nume acceptate:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:76
msgid ""
"A semicolon delimited list of acceptable server FQDN names; blank to skip "
"name check; Unicode characters allowed"
msgstr ""
"Punct și virgulă delimitează lista de nume de servere FQDN ; lăsați spațiu "
"gol pentru a omite verificarea numelui; Caractere Unicode permise"
#: lib/TLS_UI/res/wxTLS_UI.cpp:80
msgid "(Example: foo.bar.com;server2.bar.com)"
msgstr "(Exemplu: foo.bar.com;server2.bar.com)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:118 lib/TLS_UI/src/TLS_UI.cpp:400
msgid "User Certificate"
msgstr "Certificatul de utilizator"
#: lib/TLS_UI/res/wxTLS_UI.cpp:128
msgid "Please select your &certificate to use for authentication."
msgstr ""
"Vă rugăm să selectați certificatul dumneavoastră de utilizat pentru "
"autentificare."
#: lib/TLS_UI/res/wxTLS_UI.cpp:135
msgid "Client certificate to use for authentication"
msgstr "Certificat de client de folosit pentru autentificare"
#: lib/TLS_UI/res/wxTLS_UI.cpp:142
msgid "Custom &identity:"
msgstr "Personalizare și identitate:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:147
msgid ""
"Your identity (username@domain) to override one from certificate; or blank "
"to use one provided in certificate"
msgstr ""
"Identitatea dumneavoastră (nume de utilizator @ domeniu) pentru a trece "
"peste un certificat; sau necompletat pentru a utiliza unul prevăzut în "
"certificat"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "No certificate selected"
msgstr "Niciun certificat selectat"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "Validation conflict"
msgstr "Conflict la validare"
#: lib/TLS_UI/src/TLS_UI.cpp:327
msgid "Add Certificate"
msgstr "Adaugă certificat"
#: lib/TLS_UI/src/TLS_UI.cpp:328
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
msgstr "Fişierele Certificat (*.cer;*.crt;*.der;*.p7b;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:329
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
msgstr "X.509 Fişierele Certificat (*.cer;*.crt;*.der;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:330
msgid "PKCS #7 Certificate Files (*.p7b)"
msgstr "PKCS #7 Fişierele Certificat (*.p7b)"
#: lib/TLS_UI/src/TLS_UI.cpp:331
msgid "All Files (*.*)"
msgstr "Toate filele (*.*)"
#: lib/TLS_UI/src/TLS_UI.cpp:345
#, c-format
msgid "Invalid or unsupported certificate file %s"
msgstr "Fișier de certificat %s nevalid sau neacceptat "
#: lib/TLS_UI/src/TLS_UI.cpp:345
msgid "Error"
msgstr "Eroare"
#: lib/TTLS_UI/src/Module.cpp:249
#, c-format
msgid "Invoking EAP identity UI failed (error %u, %s, %s)."
msgstr " Invocarea interfaței de identitate EAP a eșuat (eroare%u,%s,%s)."
#: lib/TTLS_UI/src/Module.cpp:252
#, c-format
msgid "Invoking EAP identity UI failed (error %u)."
msgstr "Invocarea interfaței de identitate EAP a eșuat (eroare%u)."
#: lib/TTLS_UI/src/Module.cpp:376
#, c-format
msgid "Invoking EAP interactive UI failed (error %u, %s, %s)."
msgstr "Invocarea EAP EI interactivă a eșuat (eroare %u,%s,%s)."
#: lib/TTLS_UI/src/Module.cpp:379
#, c-format
msgid "Invoking EAP interactive UI failed (error %u)."
msgstr "Invocarea EAP EI interactivă a eșuat (eroare %u)."
#: lib/TTLS_UI/src/TTLS_UI.cpp:37
msgid "Outer Authentication"
msgstr "Autentificare exterioară"
#: lib/TTLS_UI/src/TTLS_UI.cpp:50
msgid "Inner Authentication"
msgstr "Autentificare interioară"
#: lib/TTLS_UI/src/TTLS_UI.cpp:56
msgid "Select inner authentication method from the list"
msgstr "Selectați metoda de autentificare interioară din listă"
#: lib/TTLS_UI/src/TTLS_UI.cpp:127
msgid "PAP"
msgstr "PAP"
#: lib/TTLS_UI/src/TTLS_UI.cpp:129
msgid "MSCHAPv2"
msgstr "MSCHAPv2"
#: lib/TTLS_UI/src/TTLS_UI.cpp:131
msgid "EAP-MSCHAPv2"
msgstr "EAP-MSCHAPv2"
#: lib/TTLS_UI/src/TTLS_UI.cpp:133
msgid "EAP-GTC"
msgstr "EAP-GTC"
#: lib/TTLS_UI/src/TTLS_UI.cpp:136
msgid "Other EAP methods..."
msgstr "Alte metode EAP..."
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP-TTLS"
msgstr "EAP-TTLS"
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP-TTLS Method"
msgstr "Metoda EAP-TTLS"
#: EAPMethods/MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP Methods"
msgstr "Metodele EAP"
#: EAPMethods/MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Modules to support individual EAP methods"
msgstr "Module pentru a sprijini metodele individuale EAP"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,982 +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;
#pragma comment(lib, "Ws2_32.lib")
#if EAPMETHOD_TYPE==21
#define _EAPMETHOD_PEER eap::peer_ttls
#else
#error Unknown EAP Method type.
#endif
_EAPMETHOD_PEER g_peer;
///
/// DLL main entry point
///
/// \sa [DllMain entry point](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx)
///
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
#ifdef _DEBUG
//Sleep(10000);
#endif
g_peer.m_instance = hinstDLL;
} else if (fdwReason == DLL_PROCESS_DETACH)
assert(!_CrtDumpMemoryLeaks());
return TRUE;
}
///
/// Releases all memory associated with an opaque user interface context data buffer.
///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
///
VOID WINAPI EapPeerFreeMemory(_In_ void *pUIContextData)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (pUIContextData)
g_peer.free_memory((BYTE*)pUIContextData);
}
///
/// Releases error-specific memory allocated by the EAP peer method.
///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
///
VOID WINAPI EapPeerFreeErrorMemory(_In_ EAP_ERROR *ppEapError)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (ppEapError)
g_peer.free_error_memory(ppEapError);
}
///
/// Obtains a set of function pointers for an implementation of the EAP peer method currently loaded on the EapHost service.
///
/// \sa [EapPeerGetInfo function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363608.aspx)
///
DWORD WINAPI EapPeerGetInfo(_In_ EAP_TYPE* pEapType, _Out_ EAP_PEER_METHOD_ROUTINES* pEapPeerMethodRoutines, _Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pEapType)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
else if (pEapType->type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)pEapType->type, (int)EAPMETHOD_TYPE).c_str()));
else if (!pEapPeerMethodRoutines)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapPeerMethodRoutines is NULL.")));
else {
pEapPeerMethodRoutines->dwVersion = PRODUCT_VERSION;
pEapPeerMethodRoutines->pEapType = NULL;
pEapPeerMethodRoutines->EapPeerInitialize = EapPeerInitialize;
pEapPeerMethodRoutines->EapPeerShutdown = EapPeerShutdown;
pEapPeerMethodRoutines->EapPeerBeginSession = EapPeerBeginSession;
pEapPeerMethodRoutines->EapPeerEndSession = EapPeerEndSession;
pEapPeerMethodRoutines->EapPeerSetCredentials = NULL; // Always NULL unless we want to use generic credential UI
pEapPeerMethodRoutines->EapPeerGetIdentity = EapPeerGetIdentity;
pEapPeerMethodRoutines->EapPeerProcessRequestPacket = EapPeerProcessRequestPacket;
pEapPeerMethodRoutines->EapPeerGetResponsePacket = EapPeerGetResponsePacket;
pEapPeerMethodRoutines->EapPeerGetResult = EapPeerGetResult;
pEapPeerMethodRoutines->EapPeerGetUIContext = EapPeerGetUIContext;
pEapPeerMethodRoutines->EapPeerSetUIContext = EapPeerSetUIContext;
pEapPeerMethodRoutines->EapPeerGetResponseAttributes = EapPeerGetResponseAttributes;
pEapPeerMethodRoutines->EapPeerSetResponseAttributes = EapPeerSetResponseAttributes;
}
return dwResult;
}
#pragma warning(push)
#pragma warning(disable: 4702) // Compiler is smart enough to find out the initialize() method is empty => never throws an exception.
///
/// Initializes an EAP peer method for EapHost.
///
/// \sa [EapPeerGetInfo function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363613.aspx)
///
DWORD APIENTRY EapPeerInitialize(_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
try {
g_peer.initialize();
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
#pragma warning(pop)
#pragma warning(push)
#pragma warning(disable: 4702) // Compiler is smart enough to find out the shutdown() method is empty => never throws an exception.
///
/// 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)
///
DWORD APIENTRY EapPeerShutdown(_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
try {
g_peer.shutdown();
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
#pragma warning(pop)
///
/// 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)
///
DWORD APIENTRY EapPeerGetIdentity(
_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)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!pUserData && dwUserDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUserData is NULL.")));
else if (!pfInvokeUI)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pfInvokeUI is NULL.")));
else if (!pdwUserDataOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwUserDataOutSize is NULL.")));
else if (!ppUserDataOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppUserDataOut is NULL.")));
else if (!ppwszIdentity)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppwszIdentity is NULL.")));
else {
try {
g_peer.get_identity(dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, hTokenImpersonateUser, pfInvokeUI, ppwszIdentity);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD APIENTRY EapPeerBeginSession(
_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_SESSION_HANDLE *phSession,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!pUserData && dwUserDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUserData is NULL.")));
else if (!phSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" phSession is NULL.")));
else {
try {
*phSession = g_peer.begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, dwMaxSendPacketSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Ends an EAP authentication session for the EAP method.
///
/// \sa [EapPeerEndSession function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363604.aspx)
///
DWORD APIENTRY EapPeerEndSession(
_In_ EAP_SESSION_HANDLE hSession,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else {
try {
g_peer.end_session(hSession);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Processes a packet received by EapHost from a supplicant.
///
/// \sa [EapPeerProcessRequestPacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363621.aspx)
///
DWORD APIENTRY EapPeerProcessRequestPacket(
_In_ EAP_SESSION_HANDLE hSession,
_In_ DWORD dwReceivedPacketSize,
_In_bytecount_(dwReceivedPacketSize) /*const*/ EapPacket *pReceivedPacket,
_Out_ EapPeerMethodOutput *pEapOutput,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pReceivedPacket || dwReceivedPacketSize < 6)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pReceivedPacket is NULL or too short.")));
else if (pReceivedPacket->Data[0] != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, wstring_printf(_T(__FUNCTION__) _T(" Packet EAP type (%d) does not match the supported EAP type (%d)."), (int)pReceivedPacket->Data[0], (int)EAPMETHOD_TYPE).c_str()));
else if (!pEapOutput)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapOutput is NULL.")));
else {
try {
g_peer.process_request_packet(hSession, pReceivedPacket, dwReceivedPacketSize, pEapOutput);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Obtains a response packet from the EAP method.
///
/// \sa [EapPeerGetResponsePacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363610.aspx)
///
DWORD APIENTRY EapPeerGetResponsePacket(
_In_ EAP_SESSION_HANDLE hSession,
_Inout_ DWORD *pdwSendPacketSize,
_Inout_bytecap_(*dwSendPacketSize) EapPacket *pSendPacket,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pdwSendPacketSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwSendPacketSize is NULL.")));
else if (!pSendPacket && *pdwSendPacketSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pSendPacket is NULL.")));
else {
try {
g_peer.get_response_packet(hSession, pSendPacket, pdwSendPacketSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD APIENTRY EapPeerGetResult(
_In_ EAP_SESSION_HANDLE hSession,
_In_ EapPeerMethodResultReason reason,
_Out_ EapPeerMethodResult *pResult,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pResult)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pResult is NULL.")));
else {
try {
g_peer.get_result(hSession, reason, pResult);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD APIENTRY EapPeerGetUIContext(
_In_ EAP_SESSION_HANDLE hSession,
_Out_ DWORD *pdwUIContextDataSize,
_Out_ BYTE **ppUIContextData,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pdwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwUIContextDataSize is NULL.")));
else if (!ppUIContextData)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppUIContextData is NULL.")));
else {
try {
g_peer.get_ui_context(hSession, ppUIContextData, pdwUIContextDataSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD APIENTRY EapPeerSetUIContext(
_In_ EAP_SESSION_HANDLE hSession,
_In_ DWORD dwUIContextDataSize,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_Out_ EapPeerMethodOutput *pEapOutput,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pUIContextData && dwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUIContextData is NULL.")));
else if (!pEapOutput)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapOutput is NULL.")));
else {
try {
g_peer.set_ui_context(hSession, pUIContextData, dwUIContextDataSize, pEapOutput);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD APIENTRY EapPeerGetResponseAttributes(
_In_ EAP_SESSION_HANDLE hSession,
_Out_ EapAttributes *pAttribs,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pAttribs)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pAttribs is NULL.")));
else {
try {
g_peer.get_response_attributes(hSession, pAttribs);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD APIENTRY EapPeerSetResponseAttributes(
_In_ EAP_SESSION_HANDLE hSession,
_In_ /*const*/ EapAttributes *pAttribs,
_Out_ EapPeerMethodOutput *pEapOutput,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pEapOutput)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapOutput is NULL.")));
else {
try {
g_peer.set_response_attributes(hSession, pAttribs, pEapOutput);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD WINAPI EapPeerGetMethodProperties(
_In_ DWORD dwVersion,
_In_ DWORD dwFlags,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ HANDLE hUserImpersonationToken,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwUserDataSize,
_In_count_(dwUserDataSize) const BYTE *pUserData,
_Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)eapMethodType.eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (eapMethodType.dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!pUserData && dwUserDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUserData is NULL.")));
else if (!pMethodPropertyArray)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pMethodPropertyArray is NULL.")));
else {
try {
g_peer.get_method_properties(dwVersion, dwFlags, hUserImpersonationToken, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, pMethodPropertyArray);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Converts XML into the configuration BLOB. The XML based credentials can come from group policy or from a system administrator.
///
/// \sa [EapPeerCredentialsXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363603.aspx)
///
DWORD WINAPI EapPeerCredentialsXml2Blob(
_In_ DWORD dwFlags,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ IXMLDOMDocument2 *pCredentialsDoc,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwConnectionDataSize,
_Out_ BYTE **ppCredentialsOut,
_Out_ DWORD *pdwCredentialsOutSize,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)eapMethodType.eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (eapMethodType.dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pCredentialsDoc)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pCredentialsDoc is NULL.")));
else if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!ppCredentialsOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppCredentialsOut is NULL.")));
else if (!pdwCredentialsOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwCredentialsOutSize is NULL.")));
else {
// <Credentials>
com_obj<IXMLDOMNode> pXmlElCredentials;
if (FAILED(eapxml::select_node(pCredentialsDoc, bstr(L"//EapHostUserCredentials/Credentials"), pXmlElCredentials))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <EapHostUserCredentials><Credentials> element.")));
return dwResult;
}
// Load credentials.
pCredentialsDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
try {
g_peer.credentials_xml2blob(dwFlags, pXmlElCredentials, pConnectionData, dwConnectionDataSize, ppCredentialsOut, pdwCredentialsOutSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD WINAPI EapPeerQueryCredentialInputFields(
_In_ HANDLE hUserImpersonationToken,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ DWORD dwFlags,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_Out_ EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldsArray,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)eapMethodType.eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (eapMethodType.dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!pEapConfigInputFieldsArray)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapConfigInputFieldsArray is NULL.")));
else {
try {
g_peer.query_credential_input_fields(hUserImpersonationToken, dwFlags, dwConnectionDataSize, pConnectionData, pEapConfigInputFieldsArray);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
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)
///
DWORD WINAPI EapPeerQueryUserBlobFromCredentialInputFields(
_In_ HANDLE hUserImpersonationToken,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ DWORD dwFlags,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ const EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldArray,
_Inout_ DWORD *pdwUsersBlobSize,
_Inout_ BYTE **ppUserBlob,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)eapMethodType.eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (eapMethodType.dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!pEapConfigInputFieldArray)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapConfigInputFieldArray is NULL.")));
else if (!pdwUsersBlobSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwUsersBlobSize is NULL.")));
else if (!ppUserBlob)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppUserBlob is NULL.")));
else {
try {
g_peer.query_user_blob_from_credential_input_fields(hUserImpersonationToken, dwFlags, dwConnectionDataSize, pConnectionData, pEapConfigInputFieldArray, pdwUsersBlobSize, ppUserBlob);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
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)
///
DWORD WINAPI EapPeerQueryInteractiveUIInputFields(
_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 *ppvReserved)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pUIContextData && dwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUIContextData is NULL.")));
else if (!pUIContextData && dwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUIContextData is NULL.")));
else if (!pEapInteractiveUIData)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapInteractiveUIData is NULL.")));
else {
UNREFERENCED_PARAMETER(ppvReserved);
try {
g_peer.query_interactive_ui_input_fields(dwVersion, dwFlags, dwUIContextDataSize, pUIContextData, pEapInteractiveUIData);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
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)
///
DWORD WINAPI EapPeerQueryUIBlobFromInteractiveUIInputFields(
_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)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pUIContextData && dwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapConfigInputFieldArray is NULL.")));
else if (!pEapInteractiveUIData)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapInteractiveUIData is NULL.")));
else if (!pdwDataFromInteractiveUISize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwDataFromInteractiveUISize is NULL.")));
else if (!ppDataFromInteractiveUI)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppDataFromInteractiveUI is NULL.")));
else {
UNREFERENCED_PARAMETER(ppvReserved);
try {
g_peer.query_ui_blob_from_interactive_ui_input_fields(dwVersion, dwFlags, dwUIContextDataSize, pUIContextData, pEapInteractiveUIData, pdwDataFromInteractiveUISize, ppDataFromInteractiveUI);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}

View File

@ -1,413 +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, "msxml6.lib")
using namespace std;
using namespace winstd;
#if EAPMETHOD_TYPE==21
#define _EAPMETHOD_PEER_UI eap::peer_ttls_ui
#else
#error Unknown EAP Method type.
#endif
HANDLE g_act_ctx = NULL;
_EAPMETHOD_PEER_UI g_peer;
///
/// DLL main entry point
///
/// \sa [DllMain entry point](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx)
///
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
#ifdef _DEBUG
//Sleep(10000);
#endif
g_peer.m_instance = hinstDLL;
// Save current activation context, as proper activation context is set at this time only (LoadLibrary() call).
GetCurrentActCtx(&g_act_ctx);
} else if (fdwReason == DLL_PROCESS_DETACH) {
if (g_act_ctx)
ReleaseActCtx(g_act_ctx);
// wxWidgets library has some global objects allocating data on heap in constructors,
// causing false-positive memory leak reports.
//assert(!_CrtDumpMemoryLeaks());
}
return TRUE;
}
///
/// Releases all memory associated with an opaque user interface context data buffer.
///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
///
VOID WINAPI EapPeerFreeMemory(_In_ void *pUIContextData)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (pUIContextData)
g_peer.free_memory((BYTE*)pUIContextData);
}
///
/// Releases error-specific memory allocated by the EAP peer method.
///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
///
VOID WINAPI EapPeerFreeErrorMemory(_In_ EAP_ERROR *ppEapError)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (ppEapError)
g_peer.free_error_memory(ppEapError);
}
///
/// Converts XML into the configuration BLOB.
///
/// \sa [EapPeerConfigXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363602.aspx)
///
DWORD WINAPI EapPeerConfigXml2Blob(
_In_ DWORD dwFlags,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ IXMLDOMDocument2 *pConfigDoc,
_Out_ BYTE **pConnectionDataOut,
_Out_ DWORD *pdwConnectionDataOutSize,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)eapMethodType.eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (eapMethodType.dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pConfigDoc)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConfigDoc is NULL.")));
else if (!pConnectionDataOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionDataOut is NULL.")));
else if (!pdwConnectionDataOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwConnectionDataOutSize is NULL.")));
else {
// Configure XML selection namespaces used.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\" xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
// <Config>
com_obj<IXMLDOMElement> pXmlElConfig;
if (FAILED(eapxml::select_element(pConfigDoc, bstr(L"//eaphostconfig:Config"), pXmlElConfig))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" Error reading <Config> element.")));
return dwResult;
}
// Load configuration.
try {
g_peer.config_xml2blob(dwFlags, pXmlElConfig, pConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Converts the configuration BLOB to XML.
///
/// The configuration BLOB is returned in the ppConnectionDataOut parameter of the EapPeerInvokeConfigUI function.
///
/// \sa [EapPeerConfigBlob2Xml function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363601.aspx)
///
DWORD WINAPI EapPeerConfigBlob2Xml(
_In_ DWORD dwFlags,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwConnectionDataSize,
_Out_ IXMLDOMDocument2 **ppConfigDoc,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)eapMethodType.eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (eapMethodType.dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!ppConfigDoc)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppConfigDoc is NULL.")));
else {
HRESULT hr;
// Create configuration XML document.
com_obj<IXMLDOMDocument2> pConfigDoc;
if (FAILED(hr = pConfigDoc.create(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error creating XML document.")));
return dwResult;
}
pConfigDoc->put_async(VARIANT_FALSE);
// Load empty XML configuration.
VARIANT_BOOL isSuccess = VARIANT_FALSE;
if (FAILED((hr = pConfigDoc->loadXML(L"<Config xmlns=\"http://www.microsoft.com/provisioning/EapHostConfig\"></Config>", &isSuccess)))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error loading XML document template.")));
return dwResult;
}
if (!isSuccess) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_XML_PARSE_ERROR, _T(__FUNCTION__) _T(" Loading XML template failed.")));
return dwResult;
}
// Configure XML selection namespaces used.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\" xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
// Select <Config> node.
com_obj<IXMLDOMNode> pXmlElConfig;
if (FAILED(eapxml::select_node(pConfigDoc, bstr(L"eaphostconfig:Config"), pXmlElConfig))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <Config> element.")));
return dwResult;
}
// Save configuration.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
try {
g_peer.config_blob2xml(dwFlags, pConnectionData, dwConnectionDataSize, pConfigDoc, pXmlElConfig);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
return dwResult = (*ppEapError)->dwWinError;
} catch (...) {
return dwResult = ERROR_INVALID_DATA;
}
*ppConfigDoc = pConfigDoc.detach();
}
return dwResult;
}
///
/// 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)
///
DWORD WINAPI EapPeerInvokeConfigUI(
_In_ const EAP_METHOD_TYPE *pEapType,
_In_ HWND hwndParent,
_In_ DWORD dwFlags,
_In_ DWORD dwConnectionDataInSize,
_In_count_(dwConnectionDataInSize) const BYTE *pConnectionDataIn,
_Out_ DWORD *pdwConnectionDataOutSize,
_Out_ BYTE **ppConnectionDataOut,
_Out_ EAP_ERROR **ppEapError)
{
UNREFERENCED_PARAMETER(dwFlags);
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pEapType)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
else if (pEapType->eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)pEapType->eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (pEapType->dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)pEapType->dwAuthorId, (int)67532).c_str()));
else if (!pConnectionDataIn && dwConnectionDataInSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionDataIn is NULL.")));
else if (!pdwConnectionDataOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwConnectionDataOutSize is NULL.")));
else if (!ppConnectionDataOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppConnectionDataOut is NULL.")));
else {
try {
g_peer.invoke_config_ui(hwndParent, pConnectionDataIn, dwConnectionDataInSize, ppConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD WINAPI EapPeerInvokeIdentityUI(
_In_ const EAP_METHOD_TYPE *pEapType,
_In_ DWORD dwFlags,
_In_ HWND hwndParent,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwUserDataSize,
_In_count_(dwUserDataSize) const BYTE *pUserData,
_Out_ DWORD *pdwUserDataOutSize,
_Out_ BYTE **ppUserDataOut,
_Out_ LPWSTR *ppwszIdentity,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pEapType)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
else if (pEapType->eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)pEapType->eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (pEapType->dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)pEapType->dwAuthorId, (int)67532).c_str()));
else if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!pUserData && dwUserDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUserData is NULL.")));
else if (!pdwUserDataOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwUserDataOutSize is NULL.")));
else if (!ppUserDataOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppUserDataOut is NULL.")));
else if (!ppwszIdentity)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppwszIdentity is NULL.")));
else {
try {
g_peer.invoke_identity_ui(hwndParent, dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, ppwszIdentity);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// 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)
///
DWORD WINAPI EapPeerInvokeInteractiveUI(
_In_ const EAP_METHOD_TYPE *pEapType,
_In_ HWND hwndParent,
_In_ DWORD dwUIContextDataSize,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_Out_ DWORD *pdwDataFromInteractiveUISize,
_Out_ BYTE **ppDataFromInteractiveUI,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pEapType)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
else if (pEapType->eapType.type != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)pEapType->eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (pEapType->dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)pEapType->dwAuthorId, (int)67532).c_str()));
else if (!pUIContextData && dwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUIContextData is NULL.")));
else if (!pdwDataFromInteractiveUISize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwDataFromInteractiveUISize is NULL.")));
else if (!ppDataFromInteractiveUI)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppDataFromInteractiveUI is NULL.")));
else {
try {
g_peer.invoke_interactive_ui(hwndParent, pUIContextData, dwUIContextDataSize, ppDataFromInteractiveUI, pdwDataFromInteractiveUISize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}

View File

@ -1,24 +1,10 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "StdAfx.h"
#include "PCH.h"
#if defined(__WXMSW__)
#pragma comment(lib, "msi.lib")
#endif
@ -28,6 +14,7 @@
// wxEventMonitorApp
//////////////////////////////////////////////////////////////////////////
#pragma warning(suppress: 28251)
wxIMPLEMENT_APP(wxEventMonitorApp);

View File

@ -1,21 +1,7 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
///

View File

@ -1,24 +1,10 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "StdAfx.h"
#include "PCH.h"
#pragma comment(lib, "tdh.lib")
#pragma comment(lib, "Ws2_32.lib")
@ -78,8 +64,8 @@ wxEventTraceProcessorThread::wxEventTraceProcessorThread(wxEvtHandler *parent, c
for (size_t i = 0, i_end = sessions.GetCount(); i < i_end; i++) {
// Open trace.
tlf.LoggerName = const_cast<LPTSTR>((LPCTSTR)(sessions[i]));
event_trace trace;
if (!trace.create(&tlf)) {
event_trace trace(OpenTrace(&tlf));
if (!trace) {
wxLogError(_("Error opening event trace (error %u)."), GetLastError());
continue;
}
@ -132,11 +118,8 @@ VOID WINAPI wxEventTraceProcessorThread::EventRecordCallback(_In_ PEVENT_RECORD
wxASSERT_MSG(pEvent->UserContext, wxT("thread is NULL"));
wxEventTraceProcessorThread *_this = ((wxEventTraceProcessorThread*)pEvent->UserContext);
if (_this->TestDestroy()) {
// Event processing is pending destruction.
if (!_this || _this->TestDestroy())
return;
}
_this->m_parent->QueueEvent(new wxETWEvent(wxEVT_ETW_EVENT, *pEvent));
}
@ -168,17 +151,17 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
m_rec_idx(wxETWEVENT_RECORDS_MAX),
wxListCtrl(parent, id, pos, size, style, validator, name)
{
this->AppendColumn(_("Time" ), wxLIST_FORMAT_LEFT, 160);
this->AppendColumn(_("PID" ), wxLIST_FORMAT_LEFT, 50);
this->AppendColumn(_("TID" ), wxLIST_FORMAT_LEFT, 50);
this->AppendColumn(_("Source"), wxLIST_FORMAT_LEFT, 80);
this->AppendColumn(_("Event" ), wxLIST_FORMAT_LEFT, 350);
this->AppendColumn(_("Time" ), wxLIST_FORMAT_LEFT, FromDIP(160));
this->AppendColumn(_("PID" ), wxLIST_FORMAT_LEFT, FromDIP( 50));
this->AppendColumn(_("TID" ), wxLIST_FORMAT_LEFT, FromDIP( 50));
this->AppendColumn(_("Source"), wxLIST_FORMAT_LEFT, FromDIP( 80));
this->AppendColumn(_("Event" ), wxLIST_FORMAT_LEFT, FromDIP(350));
// Maximum expected column widths for pre-formatted row display
m_col_format_width[0] = 26;
m_col_format_width[1] = 5;
m_col_format_width[2] = 5;
m_col_format_width[3] = std::max<int>(std::max<int>(_countof("EapHost"), _countof("Schannel")), _countof(PRODUCT_NAME_STR)) - 1;
m_col_format_width[3] = std::max<size_t>(std::max<size_t>(_countof("EapHost"), _countof("Schannel")), _countof(PRODUCT_NAME_STR)) - 1;
m_col_format_width[4] = 0;
// Prepare all possible item attributes.
@ -204,11 +187,11 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
ULONG ulResult;
for (unsigned int i = 0; ; i++) {
//tstring log_file(tstring_printf(i ? _T("test.etl") : _T("test %u.etl"), i));
tstring name(tstring_printf(i ? _T(PRODUCT_NAME_STR) _T(" Event Monitor Session %u") : _T(PRODUCT_NAME_STR) _T(" Event Monitor Session"), i));
tstring session_name(tstring_printf(i ? _T(PRODUCT_NAME_STR) _T(" Event Monitor Session %u") : _T(PRODUCT_NAME_STR) _T(" Event Monitor Session"), i));
// Allocate session properties.
ULONG
ulSizeName = (ULONG)((name .length() + 1)*sizeof(TCHAR)),
ulSizeName = (ULONG)((session_name.length() + 1)*sizeof(TCHAR)),
//ulSizeLogFile = (ULONG)((log_file.length() + 1)*sizeof(TCHAR)),
ulSize = sizeof(EVENT_TRACE_PROPERTIES) + ulSizeName /*+ ulSizeLogFile*/;
unique_ptr<EVENT_TRACE_PROPERTIES> properties(reinterpret_cast<EVENT_TRACE_PROPERTIES*>(new char[ulSize]));
@ -219,20 +202,24 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
properties->Wnode.BufferSize = ulSize;
properties->Wnode.Flags = WNODE_FLAG_TRACED_GUID;
properties->Wnode.ClientContext = 1; //QPC clock resolution
CoCreateGuid(&(properties->Wnode.Guid));
HRESULT hr = CoCreateGuid(&(properties->Wnode.Guid));
if (FAILED(hr)) {
wxLogError(winstd::tstring_printf(wxT("error 0x%08x generating GUID"), hr).c_str());
continue;
}
properties->LogFileMode = /*EVENT_TRACE_FILE_MODE_SEQUENTIAL |*/ EVENT_TRACE_REAL_TIME_MODE;
properties->MaximumFileSize = 1; // 1 MB
properties->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
//properties->LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + ulSizeName;
//memcpy(reinterpret_cast<char*>(properties.get()) + properties->LogFileNameOffset, log_file.c_str(), ulSizeLogFile);
if ((ulResult = m_session.create(name.c_str(), properties.get())) == ERROR_SUCCESS) {
if ((ulResult = m_session.create(session_name.c_str(), properties.get())) == ERROR_SUCCESS) {
break;
} else if (ulResult == ERROR_ACCESS_DENIED) {
wxLogError(_("Access denied creating event session: you need administrative privileges (Run As Administrator) or be a member of Performance Log Users group to start event tracing session."));
return;
} else if (ulResult == ERROR_ALREADY_EXISTS) {
wxLogDebug(_("The %s event session already exists."), name);
wxLogDebug(_("The %s event session already exists."), session_name);
// Do not despair... Retry with a new session name and ID.
continue;
} else {
@ -607,33 +594,34 @@ wxString wxETWListCtrl::OnGetItemText(const winstd::event_rec &rec, long column)
// Get event meta-info.
unique_ptr<TRACE_EVENT_INFO> info;
ULONG ulResult;
if ((ulResult = TdhGetEventInformation((PEVENT_RECORD)&rec, 0, NULL, info)) == ERROR_SUCCESS) {
if (info->DecodingSource != DecodingSourceWPP) {
if (rec.EventHeader.Flags & EVENT_HEADER_FLAG_STRING_ONLY) {
// This is a string-only event. Print it.
return reinterpret_cast<LPCWSTR>(rec.UserData);
} else {
// This is not a string-only event. Prepare parameters.
if ((ulResult = TdhGetEventInformation((PEVENT_RECORD)&rec, 0, NULL, info)) != ERROR_SUCCESS)
return tstring_printf(_T("(Error getting event information (error %u))"), ulResult).c_str();
BYTE nPtrSize = (rec.EventHeader.Flags & EVENT_HEADER_FLAG_32_BIT_HEADER) ? 4 : 8;
vector<tstring> props;
vector<DWORD_PTR> props_msg;
props.reserve(info->TopLevelPropertyCount);
props_msg.reserve(info->TopLevelPropertyCount);
for (ULONG i = 0; i < info->TopLevelPropertyCount; i++) {
props.push_back(std::move(PropertyToString((PEVENT_RECORD)&rec, info.get(), i, NULL, 0, nPtrSize)));
props_msg.push_back((DWORD_PTR)props[i].c_str());
}
if (info->DecodingSource != DecodingSourceWPP) {
if (rec.EventHeader.Flags & EVENT_HEADER_FLAG_STRING_ONLY) {
// This is a string-only event. Print it.
return reinterpret_cast<LPCWSTR>(rec.UserData);
} else {
// This is not a string-only event. Prepare parameters.
if (info->EventMessageOffset) {
// Format the message.
return wstring_msg(0, reinterpret_cast<LPCTSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset), props_msg.data()).c_str();
}
BYTE nPtrSize = (rec.EventHeader.Flags & EVENT_HEADER_FLAG_32_BIT_HEADER) ? 4 : 8;
vector<tstring> props;
vector<DWORD_PTR> props_msg;
props.reserve(info->TopLevelPropertyCount);
props_msg.reserve(info->TopLevelPropertyCount);
for (ULONG i = 0; i < info->TopLevelPropertyCount; i++) {
props.push_back(std::move(PropertyToString((PEVENT_RECORD)&rec, info.get(), i, NULL, 0, nPtrSize)));
props_msg.push_back((DWORD_PTR)props[i].c_str());
}
if (info->EventMessageOffset) {
// Format the message.
return wstring_msg(0, reinterpret_cast<LPCTSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset), props_msg.data()).c_str();
}
} else if (info->EventMessageOffset) {
// This is a WPP event.
return reinterpret_cast<LPCWSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset);
}
} else if (info->EventMessageOffset) {
// This is a WPP event.
return reinterpret_cast<LPCWSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset);
}
}
}
@ -776,13 +764,13 @@ static tstring MapToString(_In_ const EVENT_MAP_INFO *pMapInfo, _In_ ULONG ulDat
((pMapInfo->Flag & EVENTMAP_INFO_FLAG_WBEM_VALUEMAP ) && (pMapInfo->Flag & ~EVENTMAP_INFO_FLAG_WBEM_VALUEMAP) != EVENTMAP_INFO_FLAG_WBEM_FLAG))
{
if ((pMapInfo->Flag & EVENTMAP_INFO_FLAG_WBEM_NO_MAP) == EVENTMAP_INFO_FLAG_WBEM_NO_MAP)
return tstring_printf(_T("%ls"), (PBYTE)pMapInfo + pMapInfo->MapEntryArray[ulData].OutputOffset);
return tstring_printf(_T("%ls"), (LPCWSTR)((PBYTE)pMapInfo + pMapInfo->MapEntryArray[ulData].OutputOffset));
else {
for (ULONG i = 0; ; i++) {
if (i >= pMapInfo->EntryCount)
return tstring_printf(_T("%lu"), ulData);
else if (pMapInfo->MapEntryArray[i].Value == ulData)
return tstring_printf(_T("%ls"), (PBYTE)pMapInfo + pMapInfo->MapEntryArray[i].OutputOffset);
return tstring_printf(_T("%ls"), (LPCWSTR)((PBYTE)pMapInfo + pMapInfo->MapEntryArray[i].OutputOffset));
}
}
} else if (
@ -805,7 +793,7 @@ static tstring MapToString(_In_ const EVENT_MAP_INFO *pMapInfo, _In_ ULONG ulDat
return out.empty() ? tstring_printf(_T("%lu"), ulData) : out;
}
return _T("<unknown map>");
return _T("(unknown map)");
}
@ -817,7 +805,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_UNICODESTRING:
case TDH_INTYPE_NONNULLTERMINATEDSTRING:
case TDH_INTYPE_UNICODECHAR:
return tstring_printf(_T("%.*ls"), nDataSize/sizeof(WCHAR), pData);
return tstring_printf(_T("%.*ls"), (unsigned int)(nDataSize/sizeof(WCHAR)), (LPCWSTR)pData);
case TDH_INTYPE_ANSISTRING:
case TDH_INTYPE_NONNULLTERMINATEDANSISTRING:
@ -918,6 +906,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_BINARY:
switch (OutType) {
case TDH_OUTTYPE_IPV6: {
#pragma warning(suppress: 6387) // ntdll.dll *must* exist.
auto RtlIpv6AddressToString = (LPTSTR(NTAPI*)(const IN6_ADDR*, LPTSTR))GetProcAddress(GetModuleHandle(_T("ntdll.dll")),
#ifdef _UNICODE
"RtlIpv6AddressToStringW"
@ -930,7 +919,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
RtlIpv6AddressToString((IN6_ADDR*)pData, szIPv6Addr);
return tstring_printf(_T("%s"), szIPv6Addr);
} else
return _T("<IPv6 address>");
return _T("(IPv6 address)");
}
default: {
tstring out;
@ -945,8 +934,12 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_GUID: {
assert(nDataSize >= sizeof(GUID));
WCHAR szGuid[39];
StringFromGUID2(*(GUID*)pData, szGuid, _countof(szGuid));
return tstring_printf(_T("%ls"), szGuid);
if (StringFromGUID2(*(GUID*)pData, szGuid, _countof(szGuid)))
return tstring_printf(_T("%ls"), szGuid);
else {
assert(0);
return _T("(GUID)");
}
}
case TDH_INTYPE_POINTER:
@ -956,7 +949,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case sizeof(ULONGLONG): return tstring_printf(_T("0x%016I64x"), *(PULONGLONG)pData);
default: // Unsupported pointer size.
assert(0);
return _T("<pointer>");
return _T("(pointer)");
}
case TDH_INTYPE_SIZET:
@ -966,7 +959,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case sizeof(ULONGLONG): return tstring_printf(_T("%I64u"), *(PULONGLONG)pData);
default: // Unsupported size_t size.
assert(0);
return _T("<size_t>");
return _T("(size_t)");
}
case TDH_INTYPE_FILETIME: {
@ -983,7 +976,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_OUTTYPE_CULTURE_INSENSITIVE_DATETIME: return tstring_printf(_T("%04d-%02d-%02d %02d:%02d:%02d.%03u"), ((PSYSTEMTIME)pData)->wYear, ((PSYSTEMTIME)pData)->wMonth, ((PSYSTEMTIME)pData)->wDay, ((PSYSTEMTIME)pData)->wHour, ((PSYSTEMTIME)pData)->wMinute, ((PSYSTEMTIME)pData)->wSecond, ((PSYSTEMTIME)pData)->wMilliseconds);
default: {
tstring out;
return GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, (PSYSTEMTIME)pData, NULL, out) ? out : tstring(_T("<time>"));
return GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, (PSYSTEMTIME)pData, NULL, out) ? out : tstring(_T("(time)"));
}}
case TDH_INTYPE_WBEMSID:
@ -995,7 +988,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
// 32-bit computer and 16 bytes on a 64-bit computer.
// Doubling the pointer size handles both cases.
assert(nDataSize >= (SIZE_T)nPtrSize * 2);
return (PULONG)pData > 0 ? DataToString(TDH_INTYPE_SID, OutType, pData + nPtrSize * 2, nDataSize - nPtrSize * 2, pMapInfo, nPtrSize) : _T("<WBEM SID>");
return (PULONG)pData > 0 ? DataToString(TDH_INTYPE_SID, OutType, pData + (SIZE_T)nPtrSize * 2, nDataSize - (SIZE_T)nPtrSize * 2, pMapInfo, nPtrSize) : _T("(WBEM SID)");
case TDH_INTYPE_SID: {
assert(nDataSize >= sizeof(SID));
@ -1009,14 +1002,14 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
ConvertSidToStringSid((PSID)pData, (LPTSTR*)&sid))
return tstring_printf(_T("%s"), sid.get());
else
return _T("<SID>");
return _T("(SID)");
}
}
default:
// It is not actually an error if we do not understand the given data type.
assert(0);
return _T("<unknown data type>");
return _T("(unknown data type)");
}
}
@ -1027,7 +1020,7 @@ static ULONG GetArraySize(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, ULONG i
ULONG ulResult;
// Get array count property.
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[pInfo->EventPropertyInfoArray[i].countPropertyIndex].NameOffset), ULONG_MAX };
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)pInfo + pInfo->EventPropertyInfoArray[pInfo->EventPropertyInfoArray[i].countPropertyIndex].NameOffset, ULONG_MAX };
vector<unsigned char> count;
if ((ulResult = TdhGetProperty(pEvent, 0, NULL, 1, &data_desc, count)) != ERROR_SUCCESS)
return ulResult;
@ -1053,7 +1046,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
// Get the size of the array if the property is an array.
ULONG ulArraySize = 0;
if ((ulResult = GetArraySize(pEvent, pInfo, ulPropIndex, &ulArraySize)) != ERROR_SUCCESS)
return tstring_printf(_T("<Error getting array size (error %u)>"), ulResult);;
return tstring_printf(_T("(Error getting array size (error %u))"), ulResult);
tstring out;
bool out_nonfirst = false;
@ -1067,7 +1060,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
if (out_nonfirst) out += _T(", "); else out_nonfirst = true;
out += _T('(');
for (USHORT j = pInfo->EventPropertyInfoArray[ulPropIndex].structType.StructStartIndex, usLastMember = pInfo->EventPropertyInfoArray[ulPropIndex].structType.StructStartIndex + pInfo->EventPropertyInfoArray[ulPropIndex].structType.NumOfStructMembers; j < usLastMember; j++) {
out += tstring_printf(_T("%ls: "), reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[j].NameOffset);
out += tstring_printf(_T("%ls: "), (LPCWSTR)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[j].NameOffset));
out += PropertyToString(pEvent, pInfo, j, reinterpret_cast<LPWSTR>(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k, nPtrSize);
}
out += _T(')');
@ -1078,7 +1071,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
// The TDH API does not support IPv6 addresses. If the output type is TDH_OUTTYPE_IPV6,
// you will not be able to consume the rest of the event. If you try to consume the
// remainder of the event, you will get ERROR_EVT_INVALID_EVENT_DATA.
return _T("<The event contains an IPv6 address. Skipping.>");
return _T("(The event contains an IPv6 address. Skipping.)");
} else {
vector<BYTE> data;
if (pStructureName) {
@ -1086,19 +1079,19 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
// The first descriptor in the array identifies the name of the structure and the second
// descriptor defines the member of the structure whose data you want to retrieve.
PROPERTY_DATA_DESCRIPTOR data_desc[2] = {
{ (ULONGLONG)pStructureName , ulStructIndex },
{ (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k }
{ (ULONGLONG)pStructureName , ulStructIndex },
{ (ULONGLONG)pInfo + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset, k }
};
ulResult = TdhGetProperty(pEvent, 0, NULL, _countof(data_desc), data_desc, data);
} else {
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k };
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)pInfo + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset, k };
ulResult = TdhGetProperty(pEvent, 0, NULL, 1, &data_desc, data);
}
if (ulResult == ERROR_EVT_INVALID_EVENT_DATA) {
// This happens with empty/NULL data. Not an error actually.
assert(data.empty());
} else if (ulResult != ERROR_SUCCESS)
return tstring_printf(_T("<Error getting property (error %u)>"), ulResult);
return tstring_printf(_T("(Error getting property (error %u))"), ulResult);
// Get the name/value mapping if the property specifies a value map.
unique_ptr<EVENT_MAP_INFO> map_info;
@ -1107,7 +1100,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
// name/value mapping not found. Not an error actually.
assert(!map_info);
} else if (ulResult != ERROR_SUCCESS)
return tstring_printf(_T("<Error getting map information (error %u)>"), ulResult);
return tstring_printf(_T("(Error getting map information (error %u))"), ulResult);
else if (pInfo->DecodingSource == DecodingSourceXMLFile) {
// The mapped string values defined in a manifest will contain a trailing space
// in the EVENT_MAP_ENTRY structure. Replace the trailing space with a null-
@ -1126,7 +1119,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
data.data(),
data.size(),
map_info.get(),
nPtrSize) : _T("<null>");
nPtrSize) : _T("(null)");
}
}
}

View File

@ -1,21 +1,7 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include <wx/event.h>
@ -45,6 +31,7 @@ class wxPersistentETWListCtrl;
#include <wx/persist/window.h>
#include <wx/thread.h>
#include <stdex/vector_queue.hpp>
#include <WinStd/ETW.h>
#include <memory>
@ -150,7 +137,7 @@ protected:
private:
/// \cond internal
static VOID WINAPI EventRecordCallback(PEVENT_RECORD pEvent);
static VOID WINAPI EventRecordCallback(_In_ PEVENT_RECORD pEvent);
/// \endcond
protected:
@ -168,7 +155,7 @@ protected:
///
/// Functor for GUID comparison
///
struct less_guid : public std::binary_function<GUID, GUID, bool>
struct less_guid
{
///
/// Compares two GUIDs
@ -321,8 +308,8 @@ protected:
guidset m_sources; ///< Set of enabled sources
wxListItemAttr m_item_attr[2][4]; ///< Current item attributes
winstd::vector_queue<winstd::event_rec> m_rec_db; ///< Event record database
winstd::vector_queue<size_t> m_rec_idx; ///< Event record database indices of shown records
stdex::vector_queue<winstd::event_rec> m_rec_db; ///< Event record database
stdex::vector_queue<size_t> m_rec_idx; ///< Event record database indices of shown records
size_t m_col_format_width[5]; ///< Column widths for pre-formatted row display (0 = unlimited)
};

View File

@ -1,17 +0,0 @@
<?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>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;..\lib\wxExtend\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

Binary file not shown.

View File

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
@ -9,6 +13,10 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@ -20,68 +28,42 @@
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{E0D0725B-B2FC-4225-9481-CA9B1B6306F2}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EventMonitor</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'">
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'">
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets">
<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="EventMonitor.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="EventMonitor.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="EventMonitor.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="EventMonitor.props" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<PropertyGroup>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;..\lib\stdex\include;..\lib\wxExtend\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ResourceCompile Include="EventMonitor.rc" />
</ItemGroup>
@ -90,7 +72,7 @@
<ClInclude Include="ETWLog.h" />
<ClInclude Include="Frame.h" />
<ClInclude Include="LogPanel.h" />
<ClInclude Include="StdAfx.h" />
<ClInclude Include="PCH.h" />
<ClInclude Include="res\wxEventMonitor_UI.h" />
</ItemGroup>
<ItemGroup>
@ -98,11 +80,8 @@
<ClCompile Include="ETWLog.cpp" />
<ClCompile Include="Frame.cpp" />
<ClCompile Include="LogPanel.cpp" />
<ClCompile Include="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 Include="PCH.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="res\wxEventMonitor_UI.cpp" />
</ItemGroup>
@ -110,9 +89,6 @@
<ProjectReference Include="..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\WinStd\build\WinStd.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj">
<Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project>
</ProjectReference>
@ -130,6 +106,7 @@
<POCompile Include="locale\de_DE.po" />
<POCompile Include="locale\el_GR.po" />
<POCompile Include="locale\es_ES.po" />
<POCompile Include="locale\et_EE.po" />
<POCompile Include="locale\eu_ES.po" />
<POCompile Include="locale\fi_FI.po" />
<POCompile Include="locale\fr_CA.po" />
@ -147,6 +124,7 @@
<POCompile Include="locale\pt_PT.po" />
<POCompile Include="locale\ru_RU.po" />
<POCompile Include="locale\sk_SK.po" />
<POCompile Include="locale\ro_RO.po" />
<POCompile Include="locale\sl_SI.po" />
<POCompile Include="locale\sr_RS.po" />
<POCompile Include="locale\sv_SE.po" />

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
@ -24,7 +24,7 @@
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="StdAfx.h">
<ClInclude Include="PCH.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="App.h">
@ -44,7 +44,7 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="StdAfx.cpp">
<ClCompile Include="PCH.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="App.cpp">
@ -75,6 +75,9 @@
</None>
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\ro_RO.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sl_SI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
@ -162,5 +165,8 @@
<POCompile Include="locale\ko_KR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\et_EE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
</ItemGroup>
</Project>

View File

@ -1,24 +1,10 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "StdAfx.h"
#include "PCH.h"
//////////////////////////////////////////////////////////////////////////
@ -26,10 +12,10 @@
//////////////////////////////////////////////////////////////////////////
wxEventMonitorFrame::wxEventMonitorFrame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name) :
wxFrame(parent, id, title, pos, size, style, name)
wxEventMonitorFrame::wxEventMonitorFrame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, long style, const wxString& name) :
wxFrame(parent, id, title, pos, parent->FromDIP(wxSize(600,400)), style, name)
{
this->SetSizeHints(wxSize(150,150), wxDefaultSize);
this->SetSizeHints(FromDIP(wxSize(150,150)), wxDefaultSize);
m_mgr.SetManagedWindow(this);
m_mgr.SetFlags(wxAUI_MGR_DEFAULT);
@ -47,14 +33,9 @@ wxEventMonitorFrame::wxEventMonitorFrame(wxWindow* parent, wxWindowID id, const
wxString prod_status_bar;
prod_status_bar.Printf(_("Toggles display of %s records"), wxT(PRODUCT_NAME_STR));
winstd::library lib_comres;
lib_comres.load(_T("comres.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE);
winstd::library lib_ieframe;
lib_ieframe.load(_T("ieframe.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE);
winstd::library lib_shell32;
lib_shell32.load(_T("shell32.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE);
winstd::library lib_comres(LoadLibraryEx(_T("comres.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE));
winstd::library lib_ieframe(LoadLibraryEx(_T("ieframe.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE));
winstd::library lib_shell32(LoadLibraryEx(_T("shell32.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE));
wxSize size_menu(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON));
wxSize size_tool(size_menu);

View File

@ -1,27 +1,13 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
class wxEventMonitorFrame;
class wxPersistentEventMonitorFrame;
#pragma once;
#pragma once
#include "LogPanel.h"
@ -34,6 +20,9 @@ class wxPersistentEventMonitorFrame;
#include <WinStd/Win.h>
#pragma warning(push)
#pragma warning(disable: 26444)
/// \addtogroup EventMonitor
/// @{
@ -72,7 +61,7 @@ public:
/// \param[in] style The window style. See `wxFrame` class description.
/// \param[in] name The name of the window. This parameter is used to associate a name with the item, allowing the application user to set Motif resource values for individual windows.
///
wxEventMonitorFrame(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Event Monitor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(600,400), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("EventMonitor"));
wxEventMonitorFrame(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Event Monitor"), const wxPoint& pos = wxDefaultPosition, long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("EventMonitor"));
///
/// Destructor
@ -173,3 +162,5 @@ inline wxPersistentObject *wxCreatePersistentObject(wxEventMonitorFrame *wnd)
}
/// @}
#pragma warning(pop)

View File

@ -1,24 +1,10 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "StdAfx.h"
#include "PCH.h"
//////////////////////////////////////////////////////////////////////////

View File

@ -1,21 +1,7 @@
/*
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/>.
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
class wxEventMonitorLogPanel;

Binary file not shown.

7
EventMonitor/PCH.cpp Normal file
View File

@ -0,0 +1,7 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"

39
EventMonitor/PCH.h Normal file
View File

@ -0,0 +1,39 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#pragma once
#include "App.h"
#include "ETWLog.h"
#include "Frame.h"
#include "LogPanel.h"
#include "../lib/EAPBase_UI/include/EAP_UI.h"
#include "../include/Version.h"
#include <wxex/common.h>
#include <wxex/object.h>
#include <wxex/persist/auimanager.h>
#include <WinStd/COM.h>
#include <WinStd/ETW.h>
#include <WinStd/Win.h>
#include <Windows.h>
#include <Msi.h>
#include <tchar.h>
#include <in6addr.h>
#include <MSTcpIP.h>
#include <Sddl.h>
#include <tchar.h>
#include <utility>
#include <vector>
#include <set>
#include <EventsETW.h> // Must include after <Windows.h>

View File

@ -1,21 +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"

View File

@ -1,53 +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/>.
*/
#pragma once
#include "App.h"
#include "ETWLog.h"
#include "Frame.h"
#include "LogPanel.h"
#include "../lib/EAPBase_UI/include/EAP_UI.h"
#include "../include/Version.h"
#include <wxex/common.h>
#include <wxex/object.h>
#include <wxex/persist/auimanager.h>
#include <WinStd/COM.h>
#include <WinStd/ETW.h>
#include <WinStd/Win.h>
#include <Windows.h>
#include <Msi.h>
#include <tchar.h>
#include <in6addr.h>
#include <MSTcpIP.h>
#include <Sddl.h>
#include <tchar.h>
#include <utility>
#include <vector>
#include <set>
#include <EventsETW.h> // Must include after <Windows.h>

View File

@ -2,269 +2,219 @@
msgid ""
msgstr ""
"Project-Id-Version: EventMonitor\n"
"POT-Creation-Date: 2016-11-08 11:55+0100\n"
"POT-Creation-Date: 2019-08-12 14:04+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.11\n"
"X-Poedit-Basepath: ../../..\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en_US\n"
"X-Generator: Poedit 2.2.3\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: master/EventMonitor\n"
"X-Poedit-SearchPath-1: ver1.0/EventMonitor\n"
"X-Poedit-SearchPath-0: .\n"
#: master/EventMonitor/App.cpp:61 ver1.0/EventMonitor/App.cpp:61
#: master/EventMonitor/Frame.h:75 ver1.0/EventMonitor/Frame.h:75
#: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: App.cpp:61 Frame.h:75 MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Event Monitor"
msgstr ""
#: master/EventMonitor/ETWLog.cpp:83 ver1.0/EventMonitor/ETWLog.cpp:83
#: ETWLog.cpp:83
#, c-format
msgid "Error opening event trace (error %u)."
msgstr ""
#: master/EventMonitor/ETWLog.cpp:171 ver1.0/EventMonitor/ETWLog.cpp:171
#: ETWLog.cpp:171
msgid "Time"
msgstr ""
#: master/EventMonitor/ETWLog.cpp:172 ver1.0/EventMonitor/ETWLog.cpp:172
#: ETWLog.cpp:172
msgid "PID"
msgstr ""
#: master/EventMonitor/ETWLog.cpp:173 ver1.0/EventMonitor/ETWLog.cpp:173
#: ETWLog.cpp:173
msgid "TID"
msgstr ""
#: master/EventMonitor/ETWLog.cpp:174 ver1.0/EventMonitor/ETWLog.cpp:174
#: ETWLog.cpp:174
msgid "Source"
msgstr ""
#: master/EventMonitor/ETWLog.cpp:175 ver1.0/EventMonitor/ETWLog.cpp:175
#: ETWLog.cpp:175
msgid "Event"
msgstr ""
#: master/EventMonitor/ETWLog.cpp:232 ver1.0/EventMonitor/ETWLog.cpp:232
#: ETWLog.cpp:232
msgid "Access denied creating event session: you need administrative privileges (Run As Administrator) or be a member of Performance Log Users group to start event tracing session."
msgstr ""
#: master/EventMonitor/ETWLog.cpp:235 ver1.0/EventMonitor/ETWLog.cpp:235
#: ETWLog.cpp:235
#, c-format
msgid "The %s event session already exists."
msgstr ""
#: master/EventMonitor/ETWLog.cpp:239 ver1.0/EventMonitor/ETWLog.cpp:239
#: ETWLog.cpp:239
#, c-format
msgid "Error creating event session (error %u)."
msgstr ""
#: master/EventMonitor/ETWLog.cpp:255 master/EventMonitor/ETWLog.cpp:271
#: master/EventMonitor/ETWLog.cpp:285 ver1.0/EventMonitor/ETWLog.cpp:255
#: ver1.0/EventMonitor/ETWLog.cpp:271 ver1.0/EventMonitor/ETWLog.cpp:285
#: ETWLog.cpp:255 ETWLog.cpp:271 ETWLog.cpp:285
#, c-format
msgid "Error enabling %s event provider (error %u)."
msgstr ""
#: master/EventMonitor/Frame.cpp:48 master/EventMonitor/Frame.cpp:108
#: master/EventMonitor/Frame.cpp:113 master/EventMonitor/Frame.cpp:168
#: master/EventMonitor/Frame.cpp:170 ver1.0/EventMonitor/Frame.cpp:48
#: ver1.0/EventMonitor/Frame.cpp:108 ver1.0/EventMonitor/Frame.cpp:113
#: ver1.0/EventMonitor/Frame.cpp:168 ver1.0/EventMonitor/Frame.cpp:170
#: Frame.cpp:48 Frame.cpp:108 Frame.cpp:113 Frame.cpp:168 Frame.cpp:170
#, c-format
msgid "Toggles display of %s records"
msgstr ""
#: master/EventMonitor/Frame.cpp:65 ver1.0/EventMonitor/Frame.cpp:65
#: Frame.cpp:65
msgid "E&xit"
msgstr ""
#: master/EventMonitor/Frame.cpp:65 ver1.0/EventMonitor/Frame.cpp:65
#: Frame.cpp:65
msgid "Quits this program"
msgstr ""
#: master/EventMonitor/Frame.cpp:69 ver1.0/EventMonitor/Frame.cpp:69
#: Frame.cpp:69
msgid "&Program"
msgstr ""
#: master/EventMonitor/Frame.cpp:73 ver1.0/EventMonitor/Frame.cpp:73
#: Frame.cpp:73
msgid "&Copy"
msgstr ""
#: master/EventMonitor/Frame.cpp:73 master/EventMonitor/Frame.cpp:154
#: ver1.0/EventMonitor/Frame.cpp:73 ver1.0/EventMonitor/Frame.cpp:154
#: Frame.cpp:73 Frame.cpp:154
msgid "Copies selected records to clipboard"
msgstr ""
#: master/EventMonitor/Frame.cpp:78 ver1.0/EventMonitor/Frame.cpp:78
#: Frame.cpp:78
msgid "Copy A&ll"
msgstr ""
#: master/EventMonitor/Frame.cpp:78 master/EventMonitor/Frame.cpp:156
#: ver1.0/EventMonitor/Frame.cpp:78 ver1.0/EventMonitor/Frame.cpp:156
#: Frame.cpp:78 Frame.cpp:156
msgid "Copies all records to clipboard (including hidden)"
msgstr ""
#: master/EventMonitor/Frame.cpp:83 master/EventMonitor/Frame.cpp:158
#: ver1.0/EventMonitor/Frame.cpp:83 ver1.0/EventMonitor/Frame.cpp:158
#: Frame.cpp:83 Frame.cpp:158
msgid "Clear"
msgstr ""
#: master/EventMonitor/Frame.cpp:83 master/EventMonitor/Frame.cpp:158
#: ver1.0/EventMonitor/Frame.cpp:83 ver1.0/EventMonitor/Frame.cpp:158
#: Frame.cpp:83 Frame.cpp:158
msgid "Clears all records from the log"
msgstr ""
#: master/EventMonitor/Frame.cpp:90 ver1.0/EventMonitor/Frame.cpp:90
#: Frame.cpp:90
msgid "Select &All"
msgstr ""
#: master/EventMonitor/Frame.cpp:90 ver1.0/EventMonitor/Frame.cpp:90
#: Frame.cpp:90
msgid "Selects all visible records"
msgstr ""
#: master/EventMonitor/Frame.cpp:94 ver1.0/EventMonitor/Frame.cpp:94
#: Frame.cpp:94
msgid "Select &None"
msgstr ""
#: master/EventMonitor/Frame.cpp:94 ver1.0/EventMonitor/Frame.cpp:94
#: Frame.cpp:94
msgid "Clears record selection"
msgstr ""
#: master/EventMonitor/Frame.cpp:97 master/EventMonitor/Frame.cpp:142
#: ver1.0/EventMonitor/Frame.cpp:97 ver1.0/EventMonitor/Frame.cpp:142
#: Frame.cpp:97 Frame.cpp:142
msgid "&Edit"
msgstr ""
#: master/EventMonitor/Frame.cpp:101 ver1.0/EventMonitor/Frame.cpp:101
#: Frame.cpp:101
msgid "Auto &Scroll"
msgstr ""
#: master/EventMonitor/Frame.cpp:101 master/EventMonitor/Frame.cpp:164
#: ver1.0/EventMonitor/Frame.cpp:101 ver1.0/EventMonitor/Frame.cpp:164
#: Frame.cpp:101 Frame.cpp:164
msgid "Automatically scrolls to the most recent records as they come-in"
msgstr ""
#: master/EventMonitor/Frame.cpp:123 master/EventMonitor/Frame.cpp:176
#: ver1.0/EventMonitor/Frame.cpp:123 ver1.0/EventMonitor/Frame.cpp:176
#: Frame.cpp:123 Frame.cpp:176
msgid "Verbose"
msgstr ""
#: master/EventMonitor/Frame.cpp:123 master/EventMonitor/Frame.cpp:176
#: ver1.0/EventMonitor/Frame.cpp:123 ver1.0/EventMonitor/Frame.cpp:176
#: Frame.cpp:123 Frame.cpp:176
msgid "Displays all levels of records"
msgstr ""
#: master/EventMonitor/Frame.cpp:127 master/EventMonitor/Frame.cpp:178
#: ver1.0/EventMonitor/Frame.cpp:127 ver1.0/EventMonitor/Frame.cpp:178
#: Frame.cpp:127 Frame.cpp:178
msgid "Informational"
msgstr ""
#: master/EventMonitor/Frame.cpp:127 master/EventMonitor/Frame.cpp:178
#: ver1.0/EventMonitor/Frame.cpp:127 ver1.0/EventMonitor/Frame.cpp:178
#: Frame.cpp:127 Frame.cpp:178
msgid "Displays all records up to informational level"
msgstr ""
#: master/EventMonitor/Frame.cpp:131 master/EventMonitor/Frame.cpp:180
#: ver1.0/EventMonitor/Frame.cpp:131 ver1.0/EventMonitor/Frame.cpp:180
#: Frame.cpp:131 Frame.cpp:180
msgid "Warning"
msgstr ""
#: master/EventMonitor/Frame.cpp:131 master/EventMonitor/Frame.cpp:180
#: ver1.0/EventMonitor/Frame.cpp:131 ver1.0/EventMonitor/Frame.cpp:180
#: Frame.cpp:131 Frame.cpp:180
msgid "Displays all records up to warning level"
msgstr ""
#: master/EventMonitor/Frame.cpp:135 master/EventMonitor/Frame.cpp:182
#: ver1.0/EventMonitor/Frame.cpp:135 ver1.0/EventMonitor/Frame.cpp:182
#: Frame.cpp:135 Frame.cpp:182
msgid "Error"
msgstr ""
#: master/EventMonitor/Frame.cpp:135 master/EventMonitor/Frame.cpp:182
#: ver1.0/EventMonitor/Frame.cpp:135 ver1.0/EventMonitor/Frame.cpp:182
#: Frame.cpp:135 Frame.cpp:182
msgid "Displays error level records only"
msgstr ""
#: master/EventMonitor/Frame.cpp:142 master/EventMonitor/Frame.cpp:146
#: ver1.0/EventMonitor/Frame.cpp:142 ver1.0/EventMonitor/Frame.cpp:146
#: Frame.cpp:142 Frame.cpp:146
#, c-format
msgid "%s toolbar"
msgstr ""
#: master/EventMonitor/Frame.cpp:142 master/EventMonitor/Frame.cpp:146
#: ver1.0/EventMonitor/Frame.cpp:142 ver1.0/EventMonitor/Frame.cpp:146
#: Frame.cpp:142 Frame.cpp:146
#, c-format
msgid "Toggles display of %s toolbar"
msgstr ""
#: master/EventMonitor/Frame.cpp:142 master/EventMonitor/Frame.cpp:146
#: master/EventMonitor/Frame.cpp:185 ver1.0/EventMonitor/Frame.cpp:142
#: ver1.0/EventMonitor/Frame.cpp:146 ver1.0/EventMonitor/Frame.cpp:185
#: Frame.cpp:142 Frame.cpp:146 Frame.cpp:185
msgid "View"
msgstr ""
#: master/EventMonitor/Frame.cpp:146 master/EventMonitor/Frame.cpp:149
#: ver1.0/EventMonitor/Frame.cpp:146 ver1.0/EventMonitor/Frame.cpp:149
#: Frame.cpp:146 Frame.cpp:149
msgid "&View"
msgstr ""
#: master/EventMonitor/Frame.cpp:154 ver1.0/EventMonitor/Frame.cpp:154
#: Frame.cpp:154
msgid "Copy"
msgstr ""
#: master/EventMonitor/Frame.cpp:156 ver1.0/EventMonitor/Frame.cpp:156
#: Frame.cpp:156
msgid "Copy All"
msgstr ""
#: master/EventMonitor/Frame.cpp:161 ver1.0/EventMonitor/Frame.cpp:161
#: Frame.cpp:161
msgid "Edit"
msgstr ""
#: master/EventMonitor/Frame.cpp:164 ver1.0/EventMonitor/Frame.cpp:164
#: Frame.cpp:164
msgid "Auto Scroll"
msgstr ""
#: master/EventMonitor/Frame.cpp:189 ver1.0/EventMonitor/Frame.cpp:189
#: Frame.cpp:189
msgid "Trace Log"
msgstr ""
#: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "Real-time display of internal events"
msgstr ""
#: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "EVENTM~1|GÉANTLink Event Monitor"
msgstr ""

Some files were not shown because too many files have changed in this diff Show More