Compare commits

...

60 Commits

Author SHA1 Message Date
e75d31dd9b Version set to 1.0 2016-11-07 13:56:12 +01:00
0b4e4571b6 WideCharToMultiByte() and MultiByteToWideChar() optimization 2016-11-07 13:53:17 +01:00
435157955e Documentation update 2016-11-07 13:00:17 +01:00
f155b93ac2 POT update 2016-11-07 12:58:46 +01:00
0865318278 Documentation update 2016-11-07 12:57:41 +01:00
271e062be2 Auditing of CryptProtectData() enabled 2016-11-07 11:06:33 +01:00
ebe12e5157 Password and certificate output to log is no longer conditioned by _DEBUG 2016-11-07 10:59:28 +01:00
f197c0c937 Doxygen documentation update 2016-11-07 09:26:55 +01:00
29d5769060 Excessive .c_str() removed 2016-11-07 09:20:29 +01:00
0afbdadea7 EventMonitor Doxygen documentation update 2016-11-07 09:10:35 +01:00
cebcf7506e Redundant std::string to const char* conversion in exception constructors cleaned 2016-11-04 14:50:12 +01:00
3fb92a0c30 Version set to 1.0-beta8 2016-11-04 14:24:50 +01:00
0c5a145ad8 MSI localized files contain and install own resources only now 2016-11-04 14:05:34 +01:00
cc069d0442 Non-ready localizations deactivated 2016-11-04 14:05:33 +01:00
060aada133 Sub-module update 2016-11-04 13:58:10 +01:00
ff2871f126 WIN1250 >> UTF-8 2016-11-01 07:02:45 +01:00
438395062b Orphaned PAP.cpp files removed 2016-11-01 06:57:41 +01:00
2ff425713b EventMonitor's wxFormBuilder resources moved to res sub-folder 2016-11-01 06:57:40 +01:00
aaeb6415ee Unable to set blank certificate credentials issue fixed
# Conflicts:
#	lib/WinStd
2016-10-25 14:15:20 +02:00
4bbc752995 Discrete output of credentials to event log centralized
# Conflicts:
#	lib/EapHost/src/Credentials.cpp
#	lib/EapHost/src/StdAfx.h
#	lib/Events/res/EventsETW.man
2016-10-25 13:45:00 +02:00
64c3837908 Zero-length event property data retrieval fixed 2016-10-25 13:40:59 +02:00
d5870f1252 Configuration value logging replaced with array variant instead of varadic event_provider::write() method for performance reasons 2016-10-25 13:05:44 +02:00
094fce2b2f event_data::blank redefined to prevent confusion with NULL values causing premature varadic argument termination leading to incomplete event data 2016-10-25 13:05:36 +02:00
26a7b7dab7 pEapOutput Prefast specifier for process_request_packet() methods changed
# Conflicts:
#	lib/EAPMsg/include/Method.h
#	lib/EAPMsg/src/Method.cpp
2016-10-24 14:58:17 +02:00
d08488d916 pEapOutput Prefast specifier for set_response_attributes() methods changed
# Conflicts:
#	lib/EAPBase/include/Method.h
#	lib/EAPBase/src/Method.cpp
#	lib/TTLS/include/Method.h
#	lib/TTLS/src/Method.cpp
2016-10-24 14:44:36 +02:00
f71ff1fb8c new wxExtend library version 2016-10-24 14:21:18 +02:00
4722c42903 Incorrect pEapOutput in method::set_ui_context() methods fixed
# Conflicts:
#	lib/EAPBase/include/Method.h
#	lib/EAPBase/src/Method.cpp
#	lib/TTLS/include/Method.h
#	lib/TTLS/src/Method.cpp
2016-10-24 14:18:11 +02:00
1ccf97b6d7 ppResult >> pResult 2016-10-24 13:35:46 +02:00
278bc46511 Sub-module update 2016-10-18 14:28:39 +02:00
d602a03cac Incorrect string template fixed 2016-10-17 16:40:09 +02:00
fd7b0a93c0 wxEAPGetProviderName() output fixed 2016-10-17 16:15:53 +02:00
1911b53c10 Missing type-cast preventing correct CA certificate file import fixed
(broken in 559ffc5ead)
2016-10-17 14:04:59 +02:00
0dcb8c04c5 Bulgarian translation included in final MSI 2016-10-17 10:28:47 +02:00
8c0fa1dc68 Merge branch 'master' of https://github.com/Amebis/GEANTLink 2016-10-17 10:17:06 +02:00
473070e567 Localization update 2016-10-17 10:16:53 +02:00
8b9ab89c04 Localization update 2016-10-17 10:15:41 +02:00
75ba227bca Sub-module update 2016-10-14 10:10:46 +02:00
2086653a7b Localization and compilation separated, as satisfied Localization target skipped building 2016-10-11 11:32:54 +02:00
39ddc6333d Norwegian Bokmål translations added to MSI 2016-10-10 17:37:27 +02:00
d7894acf7c Catalan translations added to MSI 2016-10-10 17:36:18 +02:00
9af304d57a Translation updated 2016-10-10 17:33:59 +02:00
c94d7897ca Serbian translation added to MSI
(Except from MSI setup, UI is completely translated to Serbian now)
2016-10-10 09:50:50 +02:00
e75e2dcce5 Translations update 2016-10-10 09:46:09 +02:00
e178d6d049 Sub-module update 2016-10-10 09:07:13 +02:00
f89f3eb4b9 Host name and FQDN validators moved to wxExtend; Incorrect FeatureComponent mappings of EventMonitor localization components fixed
# Conflicts:
#	lib/wxExtend
2016-10-10 09:07:03 +02:00
01a83faca6 wxInitializeLocale moved to wxExtend 2016-10-05 12:12:11 +02:00
896bff53cc Both XML selection namespaces (eap-metadata and eaphostconfig) are configured now 2016-10-04 12:41:41 +02:00
822cf92915 Some more C casting replaced with C++ dynamic casting 2016-10-04 12:41:01 +02:00
1d06d78294 Some more C casting replaced with C++ dynamic casting 2016-10-04 12:39:32 +02:00
6671c810f4 Documentation update 2016-10-04 12:38:42 +02:00
76729d51cc Code clean-up 2016-10-03 14:49:17 +02:00
3a6701452a 1.5.2 False positives from security audit resolved 2016-10-03 13:49:32 +02:00
c7b96c9aa3 ID 8. A typo in the comment from security audit resolved 2016-10-03 13:12:47 +02:00
b212d0abc6 ID 7. Commented out parts of the code from security audit partially resolved 2016-10-03 13:09:31 +02:00
bcba624dcb ID 5. Unused variables from security audit partially fixed 2016-10-03 12:50:24 +02:00
b3d4e6b085 ID 4. Possibility of method_tls class initialization list optimization from security audit fixed 2016-10-03 12:45:55 +02:00
c0b51f767c ID 3. C style pointer casting from security audit fixed 2016-10-03 11:40:30 +02:00
c768b44c56 ID 2. Missing functionality from security audit report partially fixed 2016-10-03 09:35:45 +02:00
82f5cd7507 ID 1. Variables shadowing from security audit report fixed 2016-10-03 09:35:14 +02:00
dcbe5410cd Sub-module update 2016-10-03 09:04:21 +02:00
96 changed files with 1896 additions and 1842 deletions

View File

@@ -51,7 +51,7 @@ PROJECT_BRIEF = "EAP Supplicant for Windows"
# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
# to the output directory.
PROJECT_LOGO =
PROJECT_LOGO = include\icon_ui.ico
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
@@ -694,7 +694,7 @@ CITE_BIB_FILES =
# messages are off.
# The default value is: NO.
QUIET = NO
QUIET = YES
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
@@ -718,7 +718,7 @@ WARN_IF_UNDOCUMENTED = YES
# markup commands wrongly.
# The default value is: YES.
WARN_IF_DOC_ERROR = NO
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
@@ -790,10 +790,16 @@ RECURSIVE = YES
# run.
EXCLUDE = \
CredWrite\README.md \
EventMonitor\res \
lib\EAPBase_UI\res \
lib\EapHost_UI\res \
lib\TLS_UI\res \
lib\TTLS_UI\res \
lib\WinStd
lib\WinStd \
lib\wxExtend \
MsiUseFeature\README.md \
WLANManager\README.md
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded

View File

@@ -130,6 +130,9 @@
<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" />

Binary file not shown.

View File

@@ -2,14 +2,14 @@
msgid ""
msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2016-09-28 13:27+0200\n"
"POT-Creation-Date: 2016-11-07 12:58+0100\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.9\n"
"X-Generator: Poedit 1.8.10\n"
"X-Poedit-Basepath: ../..\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
@@ -44,7 +44,7 @@ msgstr ""
msgid "Opens dialog with provider settings"
msgstr ""
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:229 lib/EAPBase_UI/include/EAP_UI.h:581
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:229 lib/EAPBase_UI/include/EAP_UI.h:605
#, c-format
msgid "%s User Credentials"
msgstr ""
@@ -211,66 +211,75 @@ msgstr ""
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:97
#: lib/EAPBase_UI/src/EAP_UI.cpp:99
#, c-format
msgid "%s Credentials"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:122 lib/EAPBase_UI/include/EAP_UI.h:355
#: lib/EAPBase_UI/include/EAP_UI.h:365 lib/EAPBase_UI/res/wxEAP_UI.h:119
#: lib/EAPBase_UI/src/EAP_UI.cpp:128 lib/EAPBase_UI/include/EAP_UI.h:367
#: lib/EAPBase_UI/include/EAP_UI.h:377 lib/EAPBase_UI/res/wxEAP_UI.h:119
msgid "EAP Credentials"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:165
#: lib/EAPBase_UI/src/EAP_UI.cpp:173
#, c-format
msgid "For additional help and instructions, please contact %s at:"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:166
#: lib/EAPBase_UI/src/EAP_UI.cpp:174
msgid "your provider"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:185
#: lib/EAPBase_UI/src/EAP_UI.cpp:193
msgid "Open the default web browser"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:196
#: lib/EAPBase_UI/src/EAP_UI.cpp:204
msgid "Open your e-mail program"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:207
#: lib/EAPBase_UI/src/EAP_UI.cpp:215
msgid "Dial the phone number"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:227
#: lib/EAPBase_UI/src/EAP_UI.cpp:235
#, c-format
msgid "%s has pre-set parts of this configuration. Those parts are locked to prevent accidental modification."
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:228
#: lib/EAPBase_UI/src/EAP_UI.cpp:236
msgid "Your provider"
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:249
#: lib/EAPBase_UI/src/EAP_UI.cpp:257
msgid "Previous attempt to connect reported invalid credentials."
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:250
#: lib/EAPBase_UI/src/EAP_UI.cpp:258
msgid "Previous attempt to connect reported your credentials expired."
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:251
#: lib/EAPBase_UI/src/EAP_UI.cpp:259
msgid "Previous attempt to connect reported your credentials are being changed."
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:252
#: lib/EAPBase_UI/src/EAP_UI.cpp:260
msgid "Previous attempt to connect failed."
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:253
#: lib/EAPBase_UI/src/EAP_UI.cpp:261
msgid "Please, make sure your credentials are correct, or try again later."
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:282
#, c-format
msgid "The %s version installed on this computer logs credentials in visible and easy to read way."
msgstr ""
#: lib/EAPBase_UI/src/EAP_UI.cpp:283
msgid "Please, reconsider necessity to enter your credentials."
msgstr ""
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr ""
@@ -331,7 +340,7 @@ msgstr ""
msgid "(Example: foo.bar.com;server2.bar.com)"
msgstr ""
#: lib/TLS_UI/res/wxTLS_UI.cpp:119 lib/TLS_UI/src/TLS_UI.cpp:571
#: lib/TLS_UI/res/wxTLS_UI.cpp:119 lib/TLS_UI/src/TLS_UI.cpp:317
msgid "User Certificate"
msgstr ""
@@ -351,46 +360,37 @@ msgstr ""
msgid "Your identity (username@domain) to override one from certificate; or blank to use one provided in certificate"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:118
#, c-format
msgid "Invalid character in host name found: %c"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "Validation conflict"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:327 lib/EAPBase_UI/include/EAP_UI.h:769
#: lib/EAPBase_UI/include/EAP_UI.h:778
#: lib/TLS_UI/src/TLS_UI.cpp:59 lib/EAPBase_UI/include/EAP_UI.h:803
#: lib/EAPBase_UI/include/EAP_UI.h:812
msgid "<empty>"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:500
#: lib/TLS_UI/src/TLS_UI.cpp:246
msgid "Add Certificate"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:501
#: lib/TLS_UI/src/TLS_UI.cpp:247
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:502
#: lib/TLS_UI/src/TLS_UI.cpp:248
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:503
#: lib/TLS_UI/src/TLS_UI.cpp:249
msgid "PKCS #7 Certificate Files (*.p7b)"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:504
#: lib/TLS_UI/src/TLS_UI.cpp:250
msgid "All Files (*.*)"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:520
#: lib/TLS_UI/src/TLS_UI.cpp:264
#, c-format
msgid "Invalid or unsupported certificate file %s"
msgstr ""
#: lib/TLS_UI/src/TLS_UI.cpp:520
#: lib/TLS_UI/src/TLS_UI.cpp:264
msgid "Error"
msgstr ""
@@ -431,76 +431,76 @@ msgid "Custom outer identity to use"
msgstr ""
#: lib/TTLS_UI/src/Module.cpp:274 lib/TTLS_UI/src/Module.cpp:284
#: lib/EAPBase_UI/include/EAP_UI.h:696
#: lib/EAPBase_UI/include/EAP_UI.h:724
#, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr ""
#: lib/TTLS_UI/src/Module.cpp:276 lib/TTLS_UI/src/Module.cpp:286
#: lib/EAPBase_UI/include/EAP_UI.h:699
#: lib/EAPBase_UI/include/EAP_UI.h:727
msgid "Writing credentials failed."
msgstr ""
#: lib/TTLS_UI/src/TTLS_UI.cpp:36 lib/TTLS_UI/src/TTLS_UI.cpp:181
#: lib/TTLS_UI/src/TTLS_UI.cpp:36 lib/TTLS_UI/src/TTLS_UI.cpp:182
msgid "Inner Authentication"
msgstr ""
#: lib/TTLS_UI/src/TTLS_UI.cpp:61 lib/TTLS_UI/src/TTLS_UI.cpp:196
#: lib/TTLS_UI/src/TTLS_UI.cpp:61 lib/TTLS_UI/src/TTLS_UI.cpp:197
msgid "Outer Authentication"
msgstr ""
#: lib/TTLS_UI/src/TTLS_UI.cpp:187
#: lib/TTLS_UI/src/TTLS_UI.cpp:188
msgid "Select inner authentication method from the list"
msgstr ""
#: lib/TTLS_UI/src/TTLS_UI.cpp:189
#: lib/TTLS_UI/src/TTLS_UI.cpp:190
msgid "PAP"
msgstr ""
#: lib/TTLS_UI/src/TTLS_UI.cpp:191
#: lib/TTLS_UI/src/TTLS_UI.cpp:192
msgid "MSCHAPv2"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:292
#: lib/EAPBase_UI/include/EAP_UI.h:302
#, c-format
msgid "Are you sure you want to permanently remove %ls provider from configuration?"
msgid "Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:292
#: lib/EAPBase_UI/include/EAP_UI.h:302
msgid "Warning"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:552
#: lib/EAPBase_UI/include/EAP_UI.h:576
msgid "Provider Settings"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:717
#: lib/EAPBase_UI/include/EAP_UI.h:747
#, c-format
msgid "Deleting credentials failed (error %u)."
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:754
#: lib/EAPBase_UI/include/EAP_UI.h:788
#, c-format
msgid "<error %u>"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:758
#: lib/EAPBase_UI/include/EAP_UI.h:792
msgid "<error>"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:769 lib/EAPBase_UI/include/EAP_UI.h:778
#: lib/EAPBase_UI/include/EAP_UI.h:803 lib/EAPBase_UI/include/EAP_UI.h:812
msgid "<blank ID>"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:820
#: lib/EAPBase_UI/include/EAP_UI.h:854
msgid "&Remember"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:821
#: lib/EAPBase_UI/include/EAP_UI.h:855
msgid "Check if you would like to save credentials"
msgstr ""
#: lib/EAPBase_UI/include/EAP_UI.h:964
#: lib/EAPBase_UI/include/EAP_UI.h:1000
msgid "<Your Organization>"
msgstr ""

View File

@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2016-09-28 13:27+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2016\n"
"Last-Translator: University of Ruse <support@uni-ruse.bg>, 2016\n"
"Language-Team: Bulgarian (Bulgaria) (https://www.transifex.com/eduroam_devel/teams/11799/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,133 +25,152 @@ msgstr ""
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:37
msgid "+"
msgstr ""
msgstr "+"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:38
msgid "Adds new provider"
msgstr ""
msgstr "Добавяне на нов доставчик"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:42
msgid "-"
msgstr ""
msgstr "-"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:43
msgid "Removes selected provider"
msgstr ""
msgstr "Премахване на избрания доставчик"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:47
msgid "Advanced..."
msgstr ""
msgstr "За напреднали ..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:48
msgid "Opens dialog with provider settings"
msgstr ""
msgstr "Отваряне на диалог за настройки на доставчика"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:229 lib/EAPBase_UI/include/EAP_UI.h:581
#, c-format
msgid "%s User Credentials"
msgstr ""
msgstr "%s Удостоверения за самолочност на потребителя"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
"Изберете източника, съхраняващ Вашите удостоверения за самоличност за "
"свързване."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr ""
msgstr "Използвайте удостоверения за самоличност от Credential &Manager:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:245
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Изберете тази опция, ако желаете да използвате удостоверения за "
"самосличност, съхранявани в Windows Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:253
msgid "Your present credentials stored in Windows Credential Manager"
msgstr ""
"Вашите настоящи удостоверения за самоличност са съхранени в Windows "
"Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:260
msgid "&Clear Credentials"
msgstr ""
msgstr "&Изчистете удостоверенията за самоличност"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:261
msgid ""
"Click to clear your credentials from Credential Manager.\n"
"Note: You will be prompted to enter credentials when connecting."
msgstr ""
"Кликнете, за да изчистите Вашите удостоверения за самоличност от Credential Manager.\n"
"\n"
"Забележка: Когато се свързвате, ще Ви бъде поискано да въведете удостоверения за самоличност."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:265 lib/EAPBase_UI/res/wxEAP_UI.cpp:292
msgid "&Set Credentials..."
msgstr ""
msgstr "&Настройте удостоверения за самоличност ..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:266 lib/EAPBase_UI/res/wxEAP_UI.cpp:293
msgid "Click here to set or modify your credentials"
msgstr ""
"Кликнете тук, за да настроите или модифицирате Вашите удостоверения за "
"самоличност"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr ""
"Използвайте удостоверения за самоличност от &конфигурацията на профила:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:277
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Изберете тази опция, ако желаете да съхраните удостоверенията за самоличност"
" като част от конфигурацията на профила"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:285
msgid "Profile configuration credentials"
msgstr ""
msgstr "Конфигуриране на удостоверенията за самоличност на профила"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:335
msgid "User ID and Password"
msgstr ""
msgstr "Потребителско ID и парола"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:345
msgid "Please provide your user ID and password."
msgstr ""
msgstr "Моля въведете Вашият потребителски ID и парола."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:355
msgid "User ID:"
msgstr ""
msgstr "Потребителско ID:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:360
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr ""
"Въведете Вашето потребителско име тук (user@domain.org, DOMAIN\\User, т.н.)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:364
msgid "Password:"
msgstr ""
msgstr "Парола:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:369
msgid "Enter your password here"
msgstr ""
msgstr "Въведете Вашата парола тук"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:400
msgid "Your Organization"
msgstr ""
msgstr "Вашата организация"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:411
msgid ""
"Describe your organization to customize user prompts. When organization is "
"introduced, end-users find program messages easier to understand and act."
msgstr ""
"Опишете Вашата организация, за да персонализираме подсказките за "
"потребителя. Когато е въведена организация, програмните съобщения ще бъдат "
"по-лесни за разбиране от крайния потербител."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:418
msgid "Your organization &name:"
msgstr ""
msgstr "Вашата организация &name:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:423
msgid ""
"Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
"Името на организацията Ви както ще бъде изписано в контактите за помощ"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:427
msgid "(Keep it short, please)"
msgstr ""
msgstr "(Бъдете кратки, моля)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:437
msgid "Helpdesk contact &information:"
msgstr ""
msgstr "Контакти за помощ &информация:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:447
msgid "¶"
@@ -159,7 +178,7 @@ msgstr "¶"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:454
msgid "Your helpdesk website address"
msgstr ""
msgstr "Уебсайт адреса за помощ"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:458
msgid "*"
@@ -167,7 +186,7 @@ msgstr "*"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:465
msgid "Your helpdesk e-mail address"
msgstr ""
msgstr "E-mail адреса за помощ"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:469
msgid ")"
@@ -175,21 +194,24 @@ msgstr ")"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:476
msgid "Your helpdesk phone number"
msgstr ""
msgstr "Телефонен номер за помощ"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:504
msgid "Provider Unique Identifier"
msgstr ""
msgstr "Доставчик на уникален идентификатор"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:515
msgid ""
"Assign your organization a unique ID to allow sharing the same credential "
"set across different network profiles."
msgstr ""
"Определете уникален ID на Вашата организация, за да разрешите споделяне на "
"същите удостоверения за самоличност, настроени между различните мрежови "
"профили."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:522
msgid "&Namespace:"
msgstr ""
msgstr "&Пространство от имена:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:526
msgid "urn:RFC4282:realm"
@@ -201,62 +223,71 @@ msgstr "urn:uuid"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:538
msgid "Provider unique &identifier:"
msgstr ""
msgstr "Доставчик на уникален &идентификатор:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:543
msgid "Your organization ID to assign same credentials from other profiles"
msgstr ""
"ID на Вашата организация за определяне на същите удостоверения за "
"самоличност от другите профили"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:568
msgid "Configuration Lock"
msgstr ""
msgstr "Заключване на конфигурацията"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:579
msgid ""
"Your configuration can be locked to prevent accidental modification by end-"
"users. Users will only be allowed to enter credentials."
msgstr ""
"Вашата конфигурация може да бъде заключена, за да се предотврати случайното "
"й модифициране от крайните потребители. На потребителите ще им бъде "
"позволено единствено да въвеждат удостоверения за самоличност. "
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:586
msgid ""
"&Lock this configuration and prevent any further modification via user "
"interface."
msgstr ""
"&Заключете тази конфигурация и предотвратете всякакви по-нататъшни "
"модификации посредством потребителския интерфейс."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:589
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr ""
"(Внимание: Веднъж заключен, не може да се върнете назад, използвайки този "
"диалог!)"
#: lib/EAPBase_UI/src/EAP_UI.cpp:97
#, c-format
msgid "%s Credentials"
msgstr ""
msgstr "%s Удостоверения за самоличност"
#: lib/EAPBase_UI/src/EAP_UI.cpp:122 lib/EAPBase_UI/include/EAP_UI.h:355
#: lib/EAPBase_UI/include/EAP_UI.h:365 lib/EAPBase_UI/res/wxEAP_UI.h:119
msgid "EAP Credentials"
msgstr ""
msgstr "EAP удостоверения за самоличност"
#: lib/EAPBase_UI/src/EAP_UI.cpp:165
#, c-format
msgid "For additional help and instructions, please contact %s at:"
msgstr ""
msgstr "За допълнителна помощ и инструкции, моля свържете се с %s на:"
#: lib/EAPBase_UI/src/EAP_UI.cpp:166
msgid "your provider"
msgstr ""
msgstr "Вашият доставчик"
#: lib/EAPBase_UI/src/EAP_UI.cpp:185
msgid "Open the default web browser"
msgstr ""
msgstr "Отворете уеб браузера по подразбиране"
#: lib/EAPBase_UI/src/EAP_UI.cpp:196
msgid "Open your e-mail program"
msgstr ""
msgstr "Отворете Вашата програма за електронна поща"
#: lib/EAPBase_UI/src/EAP_UI.cpp:207
msgid "Dial the phone number"
msgstr ""
msgstr "Наберете телефонният номер"
#: lib/EAPBase_UI/src/EAP_UI.cpp:227
#, c-format
@@ -264,303 +295,329 @@ msgid ""
"%s has pre-set parts of this configuration. Those parts are locked to "
"prevent accidental modification."
msgstr ""
"%s има предварително настроени части на тази конфигурация. Тези части са "
"заключени, за да се предотврати инцидентно модифициране."
#: lib/EAPBase_UI/src/EAP_UI.cpp:228
msgid "Your provider"
msgstr ""
msgstr "Вашият доставчик"
#: lib/EAPBase_UI/src/EAP_UI.cpp:249
msgid "Previous attempt to connect reported invalid credentials."
msgstr ""
"Предишният опит за свързване докладва невалидни удостоверения за "
"самоличност."
#: lib/EAPBase_UI/src/EAP_UI.cpp:250
msgid "Previous attempt to connect reported your credentials expired."
msgstr ""
"Предишният опит за свързване докладва, че Вашите удостоверения за "
"самоличност са изтекли."
#: lib/EAPBase_UI/src/EAP_UI.cpp:251
msgid ""
"Previous attempt to connect reported your credentials are being changed."
msgstr ""
"Предишният опит за свързване докладва, че Вашите удостоверения за "
"самоличност са били променени."
#: lib/EAPBase_UI/src/EAP_UI.cpp:252
msgid "Previous attempt to connect failed."
msgstr ""
msgstr "Предишният опит за свързване е неуспешен."
#: lib/EAPBase_UI/src/EAP_UI.cpp:253
msgid "Please, make sure your credentials are correct, or try again later."
msgstr ""
"Моля уверете се, че удостоверенията Ви за самоличност са коректни или "
"опитайте отново по-късно."
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr ""
msgstr "MSCHAPv2 потребителски ID и парола"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr ""
msgstr "PAP потребителски ID и парола"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
msgstr ""
msgstr "Верен сървър"
#: lib/TLS_UI/res/wxTLS_UI.cpp:28
msgid ""
"Describe the servers you trust to prevent credential interception in case of"
" man-in-the-middle attacks."
msgstr ""
"Опишете сървърите, на които вярвате, за да предотвратите прихващане на "
"удостоверения за самоличност, в случай на man-in-the-middle атаки."
#: lib/TLS_UI/res/wxTLS_UI.cpp:35
msgid "Acceptable Certificate Authorities:"
msgstr ""
msgstr "Допустими Certificate Authorities:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:40
msgid ""
"Server's certificate must be issued by one of certificate authorities listed"
" here"
msgstr ""
"Сертификатът на сървъра трябва да бъде издаден от един от изброените тук "
"certificate authorities"
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
msgid "Add CA from Store..."
msgstr ""
msgstr "Добавете CA от ..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:48
msgid ""
"Adds a new certificate authority from the certificate store to the list"
msgstr ""
"Добавяне към списъка на нов certificate authority от хранилището със "
"сертификати"
#: lib/TLS_UI/res/wxTLS_UI.cpp:52
msgid "Add CA from File..."
msgstr ""
msgstr "Добавете CA от файл ..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:53
msgid "Adds a new certificate authority from the file to the list"
msgstr ""
msgstr "Добавяне към списъка на нов certificate authority от файл"
#: lib/TLS_UI/res/wxTLS_UI.cpp:57
msgid "&Remove CA"
msgstr ""
msgstr "&Премахнете CA"
#: lib/TLS_UI/res/wxTLS_UI.cpp:59
msgid "Removes selected certificate authorities from the list"
msgstr ""
msgstr "Премахване на избраните certificate authorities от списъка"
#: lib/TLS_UI/res/wxTLS_UI.cpp:72
msgid "Acceptable server &names:"
msgstr ""
msgstr "Допустими сървър &имена:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:77
msgid ""
"A semicolon delimited list of acceptable server FQDN names; blank to skip "
"name check; Unicode characters allowed"
msgstr ""
"Допустимите FQDN имена на сървъри са разделени с точка и запетая; оставете "
"непопълнено, за да пропуснете проверката на името; позволени са уникод "
"символи"
#: lib/TLS_UI/res/wxTLS_UI.cpp:81
msgid "(Example: foo.bar.com;server2.bar.com)"
msgstr ""
msgstr "(Например: foo.bar.com;server2.bar.com)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:119 lib/TLS_UI/src/TLS_UI.cpp:571
msgid "User Certificate"
msgstr ""
msgstr "Потребителски сертификат"
#: lib/TLS_UI/res/wxTLS_UI.cpp:129
msgid "Please select your &certificate to use for authentication."
msgstr ""
msgstr "Моля изберете Вашия &сертификат, за да се аутентикирате."
#: lib/TLS_UI/res/wxTLS_UI.cpp:136
msgid "Client certificate to use for authentication"
msgstr ""
msgstr "Клиентски сертификат за аутентикация"
#: lib/TLS_UI/res/wxTLS_UI.cpp:143
msgid "Custom &identity:"
msgstr ""
msgstr "Клиентска &самоличност:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:148
msgid ""
"Your identity (username@domain) to override one from certificate; or blank "
"to use one provided in certificate"
msgstr ""
"Вашата самоличност (username@domain) да препокрие един от сертификатите; или"
" оставете непопълнено, за да използвате една от предоставените в сертификата"
#: lib/TLS_UI/src/TLS_UI.cpp:118
#, c-format
msgid "Invalid character in host name found: %c"
msgstr ""
msgstr "Открит е невалиден символ в името на хоста: %c"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "Validation conflict"
msgstr ""
msgstr "Проверка на конфликт"
#: lib/TLS_UI/src/TLS_UI.cpp:327 lib/EAPBase_UI/include/EAP_UI.h:769
#: lib/EAPBase_UI/include/EAP_UI.h:778
msgid "<empty>"
msgstr ""
msgstr "<празно>"
#: lib/TLS_UI/src/TLS_UI.cpp:500
msgid "Add Certificate"
msgstr ""
msgstr "Добавете сертификат"
#: lib/TLS_UI/src/TLS_UI.cpp:501
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
msgstr ""
msgstr "Файлове на сертификати (*.cer;*.crt;*.der;*.p7b;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:502
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
msgstr ""
msgstr "X.509 файлове на сертификати (*.cer;*.crt;*.der;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:503
msgid "PKCS #7 Certificate Files (*.p7b)"
msgstr ""
msgstr "PKCS #7 файлови сертификати (*.p7b)"
#: lib/TLS_UI/src/TLS_UI.cpp:504
msgid "All Files (*.*)"
msgstr ""
msgstr "Всички файлове (*.*)"
#: lib/TLS_UI/src/TLS_UI.cpp:520
#, c-format
msgid "Invalid or unsupported certificate file %s"
msgstr ""
msgstr "Невалиден или неподдържан файл на сертификат %s"
#: lib/TLS_UI/src/TLS_UI.cpp:520
msgid "Error"
msgstr ""
msgstr "Грешка"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:17
msgid "Outer Identity"
msgstr ""
msgstr "Външна самоличност"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:28
msgid "Select the user ID supplicant introduces itself as to authenticator:"
msgstr ""
msgstr "Изберете потребителски ID, за да се удостоверите:"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:35
msgid "&True identity"
msgstr ""
msgstr "&Истинска самоличност"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:36
msgid "Use my true user name"
msgstr ""
msgstr "Използвай моето истинско потребителско име"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:40
msgid "Use &empty outer identity (RFC 4822)"
msgstr ""
msgstr "Използвай &празна външна самоличност (RFC 4822)"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Ommit my user name and use @mydomain.org only"
msgstr ""
msgstr "Пропусни моето потребителско име и използвай само @mydomain.org"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:48
msgid "&Custom outer identity:"
msgstr ""
msgstr "&Клиентска външна самоличност:"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:49
msgid "Specify custom outer identity"
msgstr ""
msgstr "Специфицирай клиентска външна самоличност"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:54
msgid "Custom outer identity to use"
msgstr ""
msgstr "Клиентска външна самоличност да се използва"
#: lib/TTLS_UI/src/Module.cpp:274 lib/TTLS_UI/src/Module.cpp:284
#: lib/EAPBase_UI/include/EAP_UI.h:696
#, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr ""
"Грешка при запис на удостоверения за самоличност в Credential Manager: %hs "
"(error %u)"
#: lib/TTLS_UI/src/Module.cpp:276 lib/TTLS_UI/src/Module.cpp:286
#: lib/EAPBase_UI/include/EAP_UI.h:699
msgid "Writing credentials failed."
msgstr ""
msgstr "Записването на удостоверенията за самоличност е неуспешно "
#: lib/TTLS_UI/src/TTLS_UI.cpp:36 lib/TTLS_UI/src/TTLS_UI.cpp:181
msgid "Inner Authentication"
msgstr ""
msgstr "Вътрешна аутентикация"
#: lib/TTLS_UI/src/TTLS_UI.cpp:61 lib/TTLS_UI/src/TTLS_UI.cpp:196
msgid "Outer Authentication"
msgstr ""
msgstr "Външна аутентикация"
#: lib/TTLS_UI/src/TTLS_UI.cpp:187
msgid "Select inner authentication method from the list"
msgstr ""
msgstr "Изберете метод за вътрешна аутентикация от списъка"
#: lib/TTLS_UI/src/TTLS_UI.cpp:189
msgid "PAP"
msgstr ""
msgstr "PAP"
#: lib/TTLS_UI/src/TTLS_UI.cpp:191
msgid "MSCHAPv2"
msgstr ""
msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Сигурни ли сте, че искате да изтриете за постоянно %s доставчика от "
"конфигурацията?"
#: lib/EAPBase_UI/include/EAP_UI.h:292
msgid "Warning"
msgstr ""
msgstr "Предупреждение"
#: lib/EAPBase_UI/include/EAP_UI.h:552
msgid "Provider Settings"
msgstr ""
msgstr "Настройки на доставчика"
#: lib/EAPBase_UI/include/EAP_UI.h:717
#, c-format
msgid "Deleting credentials failed (error %u)."
msgstr ""
"Изтриването на удостоверенията за самоличност е неуспешно (грешка %u)."
#: lib/EAPBase_UI/include/EAP_UI.h:754
#, c-format
msgid "<error %u>"
msgstr ""
msgstr "<грешка %u>"
#: lib/EAPBase_UI/include/EAP_UI.h:758
msgid "<error>"
msgstr ""
msgstr "<грешка>"
#: lib/EAPBase_UI/include/EAP_UI.h:769 lib/EAPBase_UI/include/EAP_UI.h:778
msgid "<blank ID>"
msgstr ""
msgstr "<непопълнен ID>"
#: lib/EAPBase_UI/include/EAP_UI.h:820
msgid "&Remember"
msgstr ""
msgstr "&Запомнете"
#: lib/EAPBase_UI/include/EAP_UI.h:821
msgid "Check if you would like to save credentials"
msgstr ""
msgstr "Отметнете, ако желаете да запазите удостоверенията за замоличност"
#: lib/EAPBase_UI/include/EAP_UI.h:964
msgid "<Your Organization>"
msgstr ""
msgstr "<Вашата организация>"
#: lib/EAPBase_UI/res/wxEAP_UI.h:69
msgid "EAP Connection Configuration"
msgstr ""
msgstr "Конфигуриране на EAP свързване"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP Methods"
msgstr ""
msgstr "EAP методи"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Modules to support individual EAP methods"
msgstr ""
msgstr "Модули за поддръжка на индивидуални EAP методи"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:5
msgid "TTLS"
msgstr ""
msgstr "TTLS"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:5
msgid "Tunneled Transport Layer Security"
msgstr ""
msgstr "Tunneled Transport Layer Security"

View File

@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2016-09-28 13:27+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2016\n"
"Last-Translator: eduki <ecercos@xtec.cat>, 2016\n"
"Language-Team: Catalan (Spain) (https://www.transifex.com/eduroam_devel/teams/11799/ca_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,133 +25,146 @@ msgstr ""
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:37
msgid "+"
msgstr ""
msgstr "+"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:38
msgid "Adds new provider"
msgstr ""
msgstr "Afegir nou proveidor"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:42
msgid "-"
msgstr ""
msgstr "-"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:43
msgid "Removes selected provider"
msgstr ""
msgstr "Esborrar proveidor seleccionat"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:47
msgid "Advanced..."
msgstr ""
msgstr "Avançat..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:48
msgid "Opens dialog with provider settings"
msgstr ""
msgstr "Obre formulari amb ajustos de proveidor"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:229 lib/EAPBase_UI/include/EAP_UI.h:581
#, c-format
msgid "%s User Credentials"
msgstr ""
msgstr "%s Credencials d'usuari"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
msgstr "Selecciona la font on les credencials utilitzades es desen"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr ""
msgstr "Utilitzar credencials del Credential &Manager: "
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:245
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Seleccioneu aquesta opció si voleu utilitzar les credencials desades a "
"l'Administrador de Credencials de Windows"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:253
msgid "Your present credentials stored in Windows Credential Manager"
msgstr ""
"Les vostres credencials actuals a l'Administrador de Credencials de Windows"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:260
msgid "&Clear Credentials"
msgstr ""
msgstr "&Esborrar Credencials"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:261
msgid ""
"Click to clear your credentials from Credential Manager.\n"
"Note: You will be prompted to enter credentials when connecting."
msgstr ""
"Cliqueu per a esborrar les credencials de l'Administrador de Credencials.\n"
"Nota: Se us demanaran noves credencials en connectar."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:265 lib/EAPBase_UI/res/wxEAP_UI.cpp:292
msgid "&Set Credentials..."
msgstr ""
msgstr "&Desar Credencials..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:266 lib/EAPBase_UI/res/wxEAP_UI.cpp:293
msgid "Click here to set or modify your credentials"
msgstr ""
msgstr "Cliqueu aquí per a desar o modificar les vostres credencials"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr ""
msgstr "Utilitzeu les credencials de la configuració del vostre &perfil:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:277
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Escolliu aquesta opció si voleu desar les credencials com a part del perfil "
"de configuració"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:285
msgid "Profile configuration credentials"
msgstr ""
msgstr "Configuració de credencials del perfil"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:335
msgid "User ID and Password"
msgstr ""
msgstr "ID d'usuari i contrasenya"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:345
msgid "Please provide your user ID and password."
msgstr ""
msgstr "Sisplau introduiu el vostre ID d'usuari i contrasenya"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:355
msgid "User ID:"
msgstr ""
msgstr "ID d'usuari:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:360
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr ""
"Introduiu el vostre identificador aquí (identificador@domini.org, "
"DOMINI\\identificador, etc.)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:364
msgid "Password:"
msgstr ""
msgstr "Contrasenya:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:369
msgid "Enter your password here"
msgstr ""
msgstr "Introduiu la vostra contrasenya aquí"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:400
msgid "Your Organization"
msgstr ""
msgstr "La vostra organització"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:411
msgid ""
"Describe your organization to customize user prompts. When organization is "
"introduced, end-users find program messages easier to understand and act."
msgstr ""
"Descriviu la vostra organització per personalitzar la interfície. Quan s'hi "
"introdueix, l'usuari troba missatges més comprensibles i senzills de seguir."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:418
msgid "Your organization &name:"
msgstr ""
msgstr "El &nom de la vostra organització:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:423
msgid ""
"Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
"El nom de la vostra organització tal i com apareixerà en les notificacions "
"de contacte del SAU"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:427
msgid "(Keep it short, please)"
msgstr ""
msgstr "(Sigueu breus, sisplau)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:437
msgid "Helpdesk contact &information:"
msgstr ""
msgstr "Contacte d'ajuda i &informació:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:447
msgid "¶"
@@ -159,7 +172,7 @@ msgstr "¶"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:454
msgid "Your helpdesk website address"
msgstr ""
msgstr "Adreça web del centre de suport"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:458
msgid "*"
@@ -167,7 +180,7 @@ msgstr "*"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:465
msgid "Your helpdesk e-mail address"
msgstr ""
msgstr "Adreça de correu del centre de suport"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:469
msgid ")"
@@ -175,21 +188,23 @@ msgstr ")"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:476
msgid "Your helpdesk phone number"
msgstr ""
msgstr "Telèfon del centre de suport"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:504
msgid "Provider Unique Identifier"
msgstr ""
msgstr "Identificador únic del proveidor"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:515
msgid ""
"Assign your organization a unique ID to allow sharing the same credential "
"set across different network profiles."
msgstr ""
"Assigneu a la vostra organització un ID únic per a comparit el mateix joc de"
" credencials entre diferents perfils de xarxa."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:522
msgid "&Namespace:"
msgstr ""
msgstr "&Namespace:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:526
msgid "urn:RFC4282:realm"
@@ -201,62 +216,69 @@ msgstr "urn:uuid"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:538
msgid "Provider unique &identifier:"
msgstr ""
msgstr "&Identificador únic del proveidor:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:543
msgid "Your organization ID to assign same credentials from other profiles"
msgstr ""
"L'ID de la vostra organització per assignar les mateixes credencials des "
"d'altres perfils"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:568
msgid "Configuration Lock"
msgstr ""
msgstr "Bloqueig de configuració"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:579
msgid ""
"Your configuration can be locked to prevent accidental modification by end-"
"users. Users will only be allowed to enter credentials."
msgstr ""
"Podeu bloquejar la configuració per prevenir modificacions accidentals dels "
"usuaris finals. Els usuaris només podran introduir credencials."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:586
msgid ""
"&Lock this configuration and prevent any further modification via user "
"interface."
msgstr ""
"&Bloqueja la configuració i preveniu qualsevol modificació via interfície "
"d'usuari."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:589
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr ""
"(Alerta: un cop bloquejada, no ho podeu revertir des d'aquesta finestra!)"
#: lib/EAPBase_UI/src/EAP_UI.cpp:97
#, c-format
msgid "%s Credentials"
msgstr ""
msgstr "%s Credencials"
#: lib/EAPBase_UI/src/EAP_UI.cpp:122 lib/EAPBase_UI/include/EAP_UI.h:355
#: lib/EAPBase_UI/include/EAP_UI.h:365 lib/EAPBase_UI/res/wxEAP_UI.h:119
msgid "EAP Credentials"
msgstr ""
msgstr "Credencials EAP"
#: lib/EAPBase_UI/src/EAP_UI.cpp:165
#, c-format
msgid "For additional help and instructions, please contact %s at:"
msgstr ""
msgstr "Per instruccions i ajuda, sisplau contacteu amb %s a:"
#: lib/EAPBase_UI/src/EAP_UI.cpp:166
msgid "your provider"
msgstr ""
msgstr "el vostre proveidor"
#: lib/EAPBase_UI/src/EAP_UI.cpp:185
msgid "Open the default web browser"
msgstr ""
msgstr "Obriu el navegador per defecte"
#: lib/EAPBase_UI/src/EAP_UI.cpp:196
msgid "Open your e-mail program"
msgstr ""
msgstr "Obriu el programa de correu"
#: lib/EAPBase_UI/src/EAP_UI.cpp:207
msgid "Dial the phone number"
msgstr ""
msgstr "Marqueu el telèfon"
#: lib/EAPBase_UI/src/EAP_UI.cpp:227
#, c-format
@@ -264,303 +286,322 @@ msgid ""
"%s has pre-set parts of this configuration. Those parts are locked to "
"prevent accidental modification."
msgstr ""
"%s ha preconfigurat parts d'aquesta configuració. Aquestes parts estan "
"bloquejades per evitar modificacions accidentals."
#: lib/EAPBase_UI/src/EAP_UI.cpp:228
msgid "Your provider"
msgstr ""
msgstr "El vostre proveidor"
#: lib/EAPBase_UI/src/EAP_UI.cpp:249
msgid "Previous attempt to connect reported invalid credentials."
msgstr ""
msgstr "L'intent de connexió anterior ha informat de credencials no vàlides."
#: lib/EAPBase_UI/src/EAP_UI.cpp:250
msgid "Previous attempt to connect reported your credentials expired."
msgstr ""
msgstr "L'intent de connexió anterior indica que les credencials han caducat."
#: lib/EAPBase_UI/src/EAP_UI.cpp:251
msgid ""
"Previous attempt to connect reported your credentials are being changed."
msgstr ""
"L'intent de connexió anterior indica que les credencials han estat "
"modificades."
#: lib/EAPBase_UI/src/EAP_UI.cpp:252
msgid "Previous attempt to connect failed."
msgstr ""
msgstr "L'intent de connexió anterior ha fallat."
#: lib/EAPBase_UI/src/EAP_UI.cpp:253
msgid "Please, make sure your credentials are correct, or try again later."
msgstr ""
"Sisplau assegureu-vos que les vostres credencials són correctes, o proveu-ho"
" més tard."
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr ""
msgstr "ID d'usuari i contrasenya MSCHAPv2"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr ""
msgstr "ID usuari i contrasenya PAP"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
msgstr ""
msgstr "Servidors de confiança"
#: lib/TLS_UI/res/wxTLS_UI.cpp:28
msgid ""
"Describe the servers you trust to prevent credential interception in case of"
" man-in-the-middle attacks."
msgstr ""
"Descriu els servidors en que hi confieu per prevenir la intercepció de "
"credencials en cas d'atacs 'man-in-the-middle'."
#: lib/TLS_UI/res/wxTLS_UI.cpp:35
msgid "Acceptable Certificate Authorities:"
msgstr ""
msgstr "Autoritats de Certificació acceptades:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:40
msgid ""
"Server's certificate must be issued by one of certificate authorities listed"
" here"
msgstr ""
"El certificat del servidor ha d'haver estat emés per una de les autoritats "
"de certificació enumerades"
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
msgid "Add CA from Store..."
msgstr ""
msgstr "Afegir CA des del Repositori..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:48
msgid ""
"Adds a new certificate authority from the certificate store to the list"
msgstr ""
"Afegeix una nova autoritat de certificació des del repositori de certificats"
#: lib/TLS_UI/res/wxTLS_UI.cpp:52
msgid "Add CA from File..."
msgstr ""
msgstr "Afegir CA des d'un fitxer..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:53
msgid "Adds a new certificate authority from the file to the list"
msgstr ""
msgstr "Afegeix una nova autoritat de certificació des de d'un arxiu"
#: lib/TLS_UI/res/wxTLS_UI.cpp:57
msgid "&Remove CA"
msgstr ""
msgstr "&Eliminar CA"
#: lib/TLS_UI/res/wxTLS_UI.cpp:59
msgid "Removes selected certificate authorities from the list"
msgstr ""
msgstr "Elimina les autoritats de certificació seleccionades"
#: lib/TLS_UI/res/wxTLS_UI.cpp:72
msgid "Acceptable server &names:"
msgstr ""
msgstr "&Noms de servidors acceptats:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:77
msgid ""
"A semicolon delimited list of acceptable server FQDN names; blank to skip "
"name check; Unicode characters allowed"
msgstr ""
"Llista de noms de servidors acceptats, separats per ;, en blanc per no "
"comprovar noms. S'admeten caracters Unicode"
#: lib/TLS_UI/res/wxTLS_UI.cpp:81
msgid "(Example: foo.bar.com;server2.bar.com)"
msgstr ""
msgstr "(Per exemple: foo.bar.com;server2.bar.com)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:119 lib/TLS_UI/src/TLS_UI.cpp:571
msgid "User Certificate"
msgstr ""
msgstr "Certificat d'usuari"
#: lib/TLS_UI/res/wxTLS_UI.cpp:129
msgid "Please select your &certificate to use for authentication."
msgstr ""
msgstr "Sisplau escolliu el vostre &certificat per a l'autenticació."
#: lib/TLS_UI/res/wxTLS_UI.cpp:136
msgid "Client certificate to use for authentication"
msgstr ""
msgstr "Certificat de client per a l'autenticació"
#: lib/TLS_UI/res/wxTLS_UI.cpp:143
msgid "Custom &identity:"
msgstr ""
msgstr "Personalitzar la &identitat:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:148
msgid ""
"Your identity (username@domain) to override one from certificate; or blank "
"to use one provided in certificate"
msgstr ""
"La vostra identitat (identificador@domini) per substituir la indicada en el "
"certificat; o en blanc per fer servir la continguda en el mateix"
#: lib/TLS_UI/src/TLS_UI.cpp:118
#, c-format
msgid "Invalid character in host name found: %c"
msgstr ""
msgstr "S'ha trobat un caracter invàlid en el nom de servidor: %c"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "Validation conflict"
msgstr ""
msgstr "Conflicte de validació"
#: lib/TLS_UI/src/TLS_UI.cpp:327 lib/EAPBase_UI/include/EAP_UI.h:769
#: lib/EAPBase_UI/include/EAP_UI.h:778
msgid "<empty>"
msgstr ""
msgstr "<buit>"
#: lib/TLS_UI/src/TLS_UI.cpp:500
msgid "Add Certificate"
msgstr ""
msgstr "Afegir Certificat"
#: lib/TLS_UI/src/TLS_UI.cpp:501
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
msgstr ""
msgstr "Fitxers de certificat (*.cer;*.crt;*.der;*.p7b;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:502
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
msgstr ""
msgstr "Fitxers de certificat X.509 (*.cer;*.crt;*.der;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:503
msgid "PKCS #7 Certificate Files (*.p7b)"
msgstr ""
msgstr "Fitxers de certificat PKCS #7 (*.p7b)"
#: lib/TLS_UI/src/TLS_UI.cpp:504
msgid "All Files (*.*)"
msgstr ""
msgstr "Tots els fitxers (*.*)"
#: lib/TLS_UI/src/TLS_UI.cpp:520
#, c-format
msgid "Invalid or unsupported certificate file %s"
msgstr ""
msgstr "Fitxer de certificat no vàlid o no suportat %s"
#: lib/TLS_UI/src/TLS_UI.cpp:520
msgid "Error"
msgstr ""
msgstr "Error"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:17
msgid "Outer Identity"
msgstr ""
msgstr "Identitat externa"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:28
msgid "Select the user ID supplicant introduces itself as to authenticator:"
msgstr ""
"Seleccioneu l'ID d'usuari que presenta el propi client a l'autentitcador:"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:35
msgid "&True identity"
msgstr ""
msgstr "Identitat &real"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:36
msgid "Use my true user name"
msgstr ""
msgstr "Utitlitza el meu usuari real"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:40
msgid "Use &empty outer identity (RFC 4822)"
msgstr ""
msgstr "Utilitza una identitat externa &buida (RFC 4822)"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Ommit my user name and use @mydomain.org only"
msgstr ""
msgstr "Omet el meu identificador i utilitza només @elmeudomini.org"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:48
msgid "&Custom outer identity:"
msgstr ""
msgstr "Identitat externa &personalitzada:"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:49
msgid "Specify custom outer identity"
msgstr ""
msgstr "Especifiqueu la identitat externa personalitzada"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:54
msgid "Custom outer identity to use"
msgstr ""
msgstr "Identitat externa a utilitzar"
#: lib/TTLS_UI/src/Module.cpp:274 lib/TTLS_UI/src/Module.cpp:284
#: lib/EAPBase_UI/include/EAP_UI.h:696
#, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr ""
"Error escrivint les credencial a l'Administrador de credencials: %hs (error "
"%u)"
#: lib/TTLS_UI/src/Module.cpp:276 lib/TTLS_UI/src/Module.cpp:286
#: lib/EAPBase_UI/include/EAP_UI.h:699
msgid "Writing credentials failed."
msgstr ""
msgstr "Ha fallat l'escriptura de les credencials."
#: lib/TTLS_UI/src/TTLS_UI.cpp:36 lib/TTLS_UI/src/TTLS_UI.cpp:181
msgid "Inner Authentication"
msgstr ""
msgstr "Autenticació interna"
#: lib/TTLS_UI/src/TTLS_UI.cpp:61 lib/TTLS_UI/src/TTLS_UI.cpp:196
msgid "Outer Authentication"
msgstr ""
msgstr "Autenticació externa"
#: lib/TTLS_UI/src/TTLS_UI.cpp:187
msgid "Select inner authentication method from the list"
msgstr ""
msgstr "Escolliu de la llista el mètode d'autenticació externa"
#: lib/TTLS_UI/src/TTLS_UI.cpp:189
msgid "PAP"
msgstr ""
msgstr "PAP"
#: lib/TTLS_UI/src/TTLS_UI.cpp:191
msgid "MSCHAPv2"
msgstr ""
msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Segur que voleu esborrar permanentment el proveidor %s de la configuració?"
#: lib/EAPBase_UI/include/EAP_UI.h:292
msgid "Warning"
msgstr ""
msgstr "Alerta"
#: lib/EAPBase_UI/include/EAP_UI.h:552
msgid "Provider Settings"
msgstr ""
msgstr "Ajustos del proveidor"
#: lib/EAPBase_UI/include/EAP_UI.h:717
#, c-format
msgid "Deleting credentials failed (error %u)."
msgstr ""
msgstr "Ha fallat l'esborrat de credencials (error %u)."
#: lib/EAPBase_UI/include/EAP_UI.h:754
#, c-format
msgid "<error %u>"
msgstr ""
msgstr "<error %u>"
#: lib/EAPBase_UI/include/EAP_UI.h:758
msgid "<error>"
msgstr ""
msgstr "<error>"
#: lib/EAPBase_UI/include/EAP_UI.h:769 lib/EAPBase_UI/include/EAP_UI.h:778
msgid "<blank ID>"
msgstr ""
msgstr "<blank ID>"
#: lib/EAPBase_UI/include/EAP_UI.h:820
msgid "&Remember"
msgstr ""
msgstr "&Recordar"
#: lib/EAPBase_UI/include/EAP_UI.h:821
msgid "Check if you would like to save credentials"
msgstr ""
msgstr "Marqueu si voleu desar les credencials"
#: lib/EAPBase_UI/include/EAP_UI.h:964
msgid "<Your Organization>"
msgstr ""
msgstr "<La vostra organització>"
#: lib/EAPBase_UI/res/wxEAP_UI.h:69
msgid "EAP Connection Configuration"
msgstr ""
msgstr "Configuració de la connexió EAP"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP Methods"
msgstr ""
msgstr "Mètodes EAP"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Modules to support individual EAP methods"
msgstr ""
msgstr "Móduls per soportar mètodes EAP individuals"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:5
msgid "TTLS"
msgstr ""
msgstr "TTLS"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:5
msgid "Tunneled Transport Layer Security"
msgstr ""
msgstr "Tunneled Transport Layer Security"

View File

@@ -542,9 +542,9 @@ msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Sind Sie sicher, dass Sie den Identitätsprovider %ls aus der Konfiguration "
"Sind Sie sicher, dass Sie den Identitätsprovider %s aus der Konfiguration "
"löschen möchten?"
#: lib/EAPBase_UI/include/EAP_UI.h:292

View File

@@ -50,25 +50,30 @@ msgstr "Ανοίγει ένα παράθυρο διαλόγου με τις ρυ
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:229 lib/EAPBase_UI/include/EAP_UI.h:581
#, c-format
msgid "%s User Credentials"
msgstr ""
msgstr "%s Διαπιστευτήρια Χρήστη"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
"Επιλέξτε την πηγή όπου είναι αποθηκευμένα τα διαπιστευτήριά σας που "
"χρησιμοποιείται για τη σύνδεση."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr ""
msgstr "Χρησιμοποιήστε τα διαπιστευτήρια από τον Credential &Manager:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:245
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Επιλέξτε αυτήν την επιλογή αν θέλετε να χρησιμοποιήσετε τα διαπιστευτήρια "
"που αποθηκεύονται στο Windows Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:253
msgid "Your present credentials stored in Windows Credential Manager"
msgstr ""
"Τα παρόντα διαπιστευτήρια είναι αποθηκευμένα στο Windows Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:260
msgid "&Clear Credentials"
@@ -93,21 +98,23 @@ msgstr ""
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr ""
msgstr "Χρησιμοποιήστε τα διαπιστευτήρια από το &προφίλ ρύθμισης παραμέτρων:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:277
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Επιλέξτε αυτήν την επιλογή αν θέλετε να αποθηκεύσετε τα διαπιστευτήρια ως "
"μέρος της διαμόρφωσης προφίλ"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:285
msgid "Profile configuration credentials"
msgstr ""
msgstr "Προφίλ ρύθμισης διαπιστευτηρίων"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:335
msgid "User ID and Password"
msgstr ""
msgstr "ID χρήστη και κωδικός πρόσβασης"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:345
msgid "Please provide your user ID and password."
@@ -322,11 +329,11 @@ msgstr ""
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr ""
msgstr "MSCHAPv2 ID χρήστη και κωδικός πρόσβασης"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr ""
msgstr "PAP ID χρήστη και κωδικός πρόσβασης"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
@@ -349,6 +356,8 @@ msgid ""
"Server's certificate must be issued by one of certificate authorities listed"
" here"
msgstr ""
"Το πιστοποιητικό του διακομιστή πρέπει να εκδίδεται από μία από τις αρχές "
"έκδοσης πιστοποιητικών που αναφέρονται εδώ"
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
msgid "Add CA from Store..."
@@ -396,11 +405,13 @@ msgstr "(Παράδειγμα: foo.bar.com;server2.bar.com)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:119 lib/TLS_UI/src/TLS_UI.cpp:571
msgid "User Certificate"
msgstr ""
msgstr "Πιστοποιητικό χρήστη"
#: lib/TLS_UI/res/wxTLS_UI.cpp:129
msgid "Please select your &certificate to use for authentication."
msgstr ""
"Επιλέξτε το &πιστοποιητικό σας που θα χρησιμοποιηθεί για τον έλεγχο "
"ταυτότητας."
#: lib/TLS_UI/res/wxTLS_UI.cpp:136
msgid "Client certificate to use for authentication"
@@ -537,9 +548,9 @@ msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Είστε βέβαιοι ότι θέλετε να καταργήσετε οριστικά τον πάροχο %ls από τη "
"Είστε βέβαιοι ότι θέλετε να καταργήσετε οριστικά τον πάροχο %s από τη "
"διαμόρφωση;"
#: lib/EAPBase_UI/include/EAP_UI.h:292
@@ -574,7 +585,7 @@ msgstr "&Υπενθύμιση"
#: lib/EAPBase_UI/include/EAP_UI.h:821
msgid "Check if you would like to save credentials"
msgstr ""
msgstr "Ελέγξτε αν θέλετε να αποθηκεύσετε τα διαπιστευτήρια"
#: lib/EAPBase_UI/include/EAP_UI.h:964
msgid "<Your Organization>"

View File

@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2016-09-28 13:27+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: José Manuel Macías <jmanuel.macias@rediris.es>, 2016\n"
"Last-Translator: Alberto Martínez <alberto_martinez@deusto.es>, 2016\n"
"Language-Team: Spanish (https://www.transifex.com/eduroam_devel/teams/11799/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -50,25 +50,30 @@ msgstr "Abrir diálogo configuración de proveedores"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:229 lib/EAPBase_UI/include/EAP_UI.h:581
#, c-format
msgid "%s User Credentials"
msgstr ""
msgstr "Credenciales %s de usuario"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
"Selecciona el repositorio en el que se guardan las credenciales de conexión."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr ""
msgstr "Usa credenciales del &Administrador de Credenciales:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:245
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Selecciona esta opción si quieres usar credenciales guardadas en el "
"Administrador de Credenciales de Windows"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:253
msgid "Your present credentials stored in Windows Credential Manager"
msgstr ""
"Sus credenciales actuales guardadas en el Administrador de Credenciales de "
"Windows"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:260
msgid "&Clear Credentials"
@@ -92,21 +97,23 @@ msgstr "Haga clic aquí para establecer o modificar sus credenciales"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr ""
msgstr "Usa las credenciales de la configuración del &perfil:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:277
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Selecciona esta opción si quieres guardar credenciales como parte de la "
"configuración del perfil"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:285
msgid "Profile configuration credentials"
msgstr ""
msgstr "Credenciales de la configuración del perfil"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:335
msgid "User ID and Password"
msgstr ""
msgstr "Identificador de usuario y contraseña"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:345
msgid "Please provide your user ID and password."
@@ -321,11 +328,11 @@ msgstr ""
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr ""
msgstr "Identificador MSCHAPv2 de usuario y contraseña"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr ""
msgstr "Identificador PAP de usuario y contraseña"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
@@ -397,11 +404,11 @@ msgstr "(Ejemplo: foo.bar.com;servidor2.bar.com)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:119 lib/TLS_UI/src/TLS_UI.cpp:571
msgid "User Certificate"
msgstr ""
msgstr "Certificado de usuario"
#: lib/TLS_UI/res/wxTLS_UI.cpp:129
msgid "Please select your &certificate to use for authentication."
msgstr ""
msgstr "Por favor seleccione su &certificado a usar para la autenticación."
#: lib/TLS_UI/res/wxTLS_UI.cpp:136
msgid "Client certificate to use for authentication"
@@ -535,10 +542,10 @@ msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"¿está seguro de que quiere borrar permanentemente la configuración del "
"proveedor %ls?"
"proveedor %s?"
#: lib/EAPBase_UI/include/EAP_UI.h:292
msgid "Warning"
@@ -572,7 +579,7 @@ msgstr "&Recordar"
#: lib/EAPBase_UI/include/EAP_UI.h:821
msgid "Check if you would like to save credentials"
msgstr ""
msgstr "Marca si quieres guardar las credenciales"
#: lib/EAPBase_UI/include/EAP_UI.h:964
msgid "<Your Organization>"

View File

@@ -521,9 +521,9 @@ msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Da li ste sigurni da želite za stalno opbrisati davatelja usluge %ls iz "
"Da li ste sigurni da želite za stalno opbrisati davatelja usluge %s iz "
"konfiguracije ? "
#: lib/EAPBase_UI/include/EAP_UI.h:292

View File

@@ -527,9 +527,9 @@ msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Ar tikrai norite visam laikui pašalinti teikėją „%ls“ iš konfigūracijos?"
"Ar tikrai norite visam laikui pašalinti teikėją „%s“ iš konfigūracijos?"
#: lib/EAPBase_UI/include/EAP_UI.h:292
msgid "Warning"

View File

@@ -50,25 +50,27 @@ msgstr "Åpner dialog med tilbyder innstillinger"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:229 lib/EAPBase_UI/include/EAP_UI.h:581
#, c-format
msgid "%s User Credentials"
msgstr ""
msgstr "%s Påloggingsinformasjon"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
msgstr "Velg kilden for din påloggingsinformasjon"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr ""
msgstr "Bruk brukerdetaljer fra Credential &Manager:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:245
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Velg denne opsjonen om du vil bruke brukerinformasjon lagret i Windows "
"Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:253
msgid "Your present credentials stored in Windows Credential Manager"
msgstr ""
msgstr "Din nåværende brukerinformasjon i Windows Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:260
msgid "&Clear Credentials"
@@ -92,68 +94,74 @@ msgstr "Klikk her for å sette eller endre påloggingsinformasjon"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr ""
msgstr "Bruk brukerinformasjon fra &profil konfigurasjon:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:277
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Velg denne opsjonen om du vil lagre brukerinformasjon som en del av profil "
"konfigurasjon"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:285
msgid "Profile configuration credentials"
msgstr ""
msgstr "Profil konfigurasjon brukerinformasjon"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:335
msgid "User ID and Password"
msgstr ""
msgstr "Bruker ID og passord"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:345
msgid "Please provide your user ID and password."
msgstr ""
msgstr "Vennligst oppgi bruker ID og passord."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:355
msgid "User ID:"
msgstr ""
msgstr "Bruker ID:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:360
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr ""
msgstr "Oppgi ditt brukernavn (bruker@domain.org, DOMIAN\\User, etc)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:364
msgid "Password:"
msgstr ""
msgstr "Passord:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:369
msgid "Enter your password here"
msgstr ""
msgstr "Oppgi ditt passord"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:400
msgid "Your Organization"
msgstr ""
msgstr "Din organisasjon"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:411
msgid ""
"Describe your organization to customize user prompts. When organization is "
"introduced, end-users find program messages easier to understand and act."
msgstr ""
"Beskriv din organisasjon for å tilpasse ledetekster til brukere. Når "
"organisasjon introduseres vil sluttbrukere lettere forstå meldinger fra "
"programmet og kan gi korrekt respons."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:418
msgid "Your organization &name:"
msgstr ""
msgstr "Din organisasjons %navn:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:423
msgid ""
"Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
"Din organisasjons navn som det vil fremkomme på kontakt helpdesk varslinger"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:427
msgid "(Keep it short, please)"
msgstr ""
msgstr "(Vennligst, vær kort)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:437
msgid "Helpdesk contact &information:"
msgstr ""
msgstr "Helpdesk kontakt&informasjon:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:447
msgid "¶"
@@ -161,7 +169,7 @@ msgstr "¶"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:454
msgid "Your helpdesk website address"
msgstr ""
msgstr "Nettadresse til din helpdesk"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:458
msgid "*"
@@ -169,7 +177,7 @@ msgstr "*"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:465
msgid "Your helpdesk e-mail address"
msgstr ""
msgstr "E-post adresse til din helpdesk"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:469
msgid ")"
@@ -177,21 +185,23 @@ msgstr ")"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:476
msgid "Your helpdesk phone number"
msgstr ""
msgstr "Telefonnummer til din helpdesk"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:504
msgid "Provider Unique Identifier"
msgstr ""
msgstr "Oppgi unik identifikator"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:515
msgid ""
"Assign your organization a unique ID to allow sharing the same credential "
"set across different network profiles."
msgstr ""
"Tildel din organisasjon en unik ID for å tillate bruk av de samme "
"brukeropplysninger i forskjellige nettverksprofiler"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:522
msgid "&Namespace:"
msgstr ""
msgstr "&Namespace:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:526
msgid "urn:RFC4282:realm"
@@ -203,62 +213,67 @@ msgstr "urn:uuid"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:538
msgid "Provider unique &identifier:"
msgstr ""
msgstr "Oppgi unik &identifikator:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:543
msgid "Your organization ID to assign same credentials from other profiles"
msgstr ""
"Din organisasjons ID for å kunne bruke de samme brukeropplysninger i andre "
"profiler"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:568
msgid "Configuration Lock"
msgstr ""
msgstr "Konfigurasjonslås"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:579
msgid ""
"Your configuration can be locked to prevent accidental modification by end-"
"users. Users will only be allowed to enter credentials."
msgstr ""
"Din konfigurasjon kan låses for å hindre utilsiktet modifikasjon av "
"sluttbrukere. Brukere vil kun kunne oppgi brukerinformasjon."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:586
msgid ""
"&Lock this configuration and prevent any further modification via user "
"interface."
msgstr ""
"&Lås denne konfigurasjonen og hindre modifikasjon via brukergrensesnitt."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:589
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr ""
msgstr "(Advarsel: Når låst, kan du ikke gå tilbake til denne dialogen!)"
#: lib/EAPBase_UI/src/EAP_UI.cpp:97
#, c-format
msgid "%s Credentials"
msgstr ""
msgstr "%s Brukeropplysninger"
#: lib/EAPBase_UI/src/EAP_UI.cpp:122 lib/EAPBase_UI/include/EAP_UI.h:355
#: lib/EAPBase_UI/include/EAP_UI.h:365 lib/EAPBase_UI/res/wxEAP_UI.h:119
msgid "EAP Credentials"
msgstr ""
msgstr "EAP brukeropplysninger"
#: lib/EAPBase_UI/src/EAP_UI.cpp:165
#, c-format
msgid "For additional help and instructions, please contact %s at:"
msgstr ""
msgstr "For mer hjelp og instruksjoner, kontakt %s via:"
#: lib/EAPBase_UI/src/EAP_UI.cpp:166
msgid "your provider"
msgstr ""
msgstr "Din tilbyder"
#: lib/EAPBase_UI/src/EAP_UI.cpp:185
msgid "Open the default web browser"
msgstr ""
msgstr "Åpne standard nettleser"
#: lib/EAPBase_UI/src/EAP_UI.cpp:196
msgid "Open your e-mail program"
msgstr ""
msgstr "Åpne e-post program"
#: lib/EAPBase_UI/src/EAP_UI.cpp:207
msgid "Dial the phone number"
msgstr ""
msgstr "Ring telefon"
#: lib/EAPBase_UI/src/EAP_UI.cpp:227
#, c-format
@@ -266,303 +281,322 @@ msgid ""
"%s has pre-set parts of this configuration. Those parts are locked to "
"prevent accidental modification."
msgstr ""
"%s har pre-satt deler av denne konfigurasjonen. De delene er låst for å "
"hindre utilsiktet modifikasjon."
#: lib/EAPBase_UI/src/EAP_UI.cpp:228
msgid "Your provider"
msgstr ""
msgstr "Din tibyder"
#: lib/EAPBase_UI/src/EAP_UI.cpp:249
msgid "Previous attempt to connect reported invalid credentials."
msgstr ""
msgstr "Tidligere forsøk på tilkobling rapporterte feil brukeropplysninger."
#: lib/EAPBase_UI/src/EAP_UI.cpp:250
msgid "Previous attempt to connect reported your credentials expired."
msgstr ""
"Tidligere forsøk på tilkobling rapporterte brukeropplysninger utløpt på dato"
#: lib/EAPBase_UI/src/EAP_UI.cpp:251
msgid ""
"Previous attempt to connect reported your credentials are being changed."
msgstr ""
"Tidligere forsøk på tilkobling rapporterte at dine brukeropplysninger blir "
"endret. "
#: lib/EAPBase_UI/src/EAP_UI.cpp:252
msgid "Previous attempt to connect failed."
msgstr ""
msgstr "Tidligere forsøk på tilkobling feilet."
#: lib/EAPBase_UI/src/EAP_UI.cpp:253
msgid "Please, make sure your credentials are correct, or try again later."
msgstr ""
"Vennligst sjekk at dine brukeropplysninger er korrekt, eller prøv igjen "
"senere."
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr ""
msgstr "MSCHAPv2 bruker ID and passord"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr ""
msgstr "PAP bruker ID og passord"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
msgstr ""
msgstr "Server Trust"
#: lib/TLS_UI/res/wxTLS_UI.cpp:28
msgid ""
"Describe the servers you trust to prevent credential interception in case of"
" man-in-the-middle attacks."
msgstr ""
"Beskriv tjenere du stoler på for å hindre tyveri av brukeropplysninger i "
"tilfelle et man-in-the-middle angrep."
#: lib/TLS_UI/res/wxTLS_UI.cpp:35
msgid "Acceptable Certificate Authorities:"
msgstr ""
msgstr "Akseptable sertifikat utstedere:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:40
msgid ""
"Server's certificate must be issued by one of certificate authorities listed"
" here"
msgstr ""
"Tjeneren's sertifikat må være utstedt av en av sertifikat utstederene listet"
" her"
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
msgid "Add CA from Store..."
msgstr ""
msgstr "Legg til CA fra ..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:48
msgid ""
"Adds a new certificate authority from the certificate store to the list"
msgstr ""
msgstr "Legg til en ny sertifikat utsteder i listen"
#: lib/TLS_UI/res/wxTLS_UI.cpp:52
msgid "Add CA from File..."
msgstr ""
msgstr "Legg til CA fra fil..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:53
msgid "Adds a new certificate authority from the file to the list"
msgstr ""
msgstr "Legger til en ny CA fra filen til listen"
#: lib/TLS_UI/res/wxTLS_UI.cpp:57
msgid "&Remove CA"
msgstr ""
msgstr "&Fjern CA"
#: lib/TLS_UI/res/wxTLS_UI.cpp:59
msgid "Removes selected certificate authorities from the list"
msgstr ""
msgstr "Fjerner valgte CA fra listen"
#: lib/TLS_UI/res/wxTLS_UI.cpp:72
msgid "Acceptable server &names:"
msgstr ""
msgstr "Aksepterte tjener&navn:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:77
msgid ""
"A semicolon delimited list of acceptable server FQDN names; blank to skip "
"name check; Unicode characters allowed"
msgstr ""
"En semikolon separert liste med aksepterte tjener FQDN navn; blank for å "
"hoppe over navne sjekk; Unicode tegn er tillatt"
#: lib/TLS_UI/res/wxTLS_UI.cpp:81
msgid "(Example: foo.bar.com;server2.bar.com)"
msgstr ""
msgstr "(Eksempel: foo.bar.com;server2.bar.com)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:119 lib/TLS_UI/src/TLS_UI.cpp:571
msgid "User Certificate"
msgstr ""
msgstr "Bruker sertifikat"
#: lib/TLS_UI/res/wxTLS_UI.cpp:129
msgid "Please select your &certificate to use for authentication."
msgstr ""
msgstr "Vennligst velg ditt &sertifikat for autentisering."
#: lib/TLS_UI/res/wxTLS_UI.cpp:136
msgid "Client certificate to use for authentication"
msgstr ""
msgstr "Klientsertifikat for autentisering "
#: lib/TLS_UI/res/wxTLS_UI.cpp:143
msgid "Custom &identity:"
msgstr ""
msgstr "Tilpasset &identitet:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:148
msgid ""
"Your identity (username@domain) to override one from certificate; or blank "
"to use one provided in certificate"
msgstr ""
"Din identitet (brukernavn@domene) for overskriving av sertifikat; eller tomt"
" for å bruke den fra sertifikatet. "
#: lib/TLS_UI/src/TLS_UI.cpp:118
#, c-format
msgid "Invalid character in host name found: %c"
msgstr ""
msgstr "Ugyldig tegn funnet i navn: %c"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "Validation conflict"
msgstr ""
msgstr "Valideringskonflikt"
#: lib/TLS_UI/src/TLS_UI.cpp:327 lib/EAPBase_UI/include/EAP_UI.h:769
#: lib/EAPBase_UI/include/EAP_UI.h:778
msgid "<empty>"
msgstr ""
msgstr "<tom>"
#: lib/TLS_UI/src/TLS_UI.cpp:500
msgid "Add Certificate"
msgstr ""
msgstr "Legg til sertifikat"
#: lib/TLS_UI/src/TLS_UI.cpp:501
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
msgstr ""
msgstr "Sertifikat filer (*.cer;*.crt;*.der;*.p7b;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:502
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
msgstr ""
msgstr "X.509 sertifikat filer (*.cer;*.crt;*.der;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:503
msgid "PKCS #7 Certificate Files (*.p7b)"
msgstr ""
msgstr "PKCS #7 sertifikat filer (*.p7b)"
#: lib/TLS_UI/src/TLS_UI.cpp:504
msgid "All Files (*.*)"
msgstr ""
msgstr "Alle filer (*.*)"
#: lib/TLS_UI/src/TLS_UI.cpp:520
#, c-format
msgid "Invalid or unsupported certificate file %s"
msgstr ""
msgstr "Ugyldig eller ikke støttet sertifikat fil %s"
#: lib/TLS_UI/src/TLS_UI.cpp:520
msgid "Error"
msgstr ""
msgstr "Feil"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:17
msgid "Outer Identity"
msgstr ""
msgstr "Ytre identitet"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:28
msgid "Select the user ID supplicant introduces itself as to authenticator:"
msgstr ""
"Velg den bruker ID som supplikat introduserer seg som til autentikator:"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:35
msgid "&True identity"
msgstr ""
msgstr "&Faktisk identitet"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:36
msgid "Use my true user name"
msgstr ""
msgstr "Bruke mitt faktiske brukernavn"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:40
msgid "Use &empty outer identity (RFC 4822)"
msgstr ""
msgstr "Bruk &tom ytre identitet (RFC 4822)"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Ommit my user name and use @mydomain.org only"
msgstr ""
msgstr "Utelat mitt brukernavn og bruk kun @mydomian.org"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:48
msgid "&Custom outer identity:"
msgstr ""
msgstr "&Tilpasset ytre identitet:"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:49
msgid "Specify custom outer identity"
msgstr ""
msgstr "Spesifiser tilpasset ytre identitet"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:54
msgid "Custom outer identity to use"
msgstr ""
msgstr "Tilpasset ytre identitet som brukes"
#: lib/TTLS_UI/src/Module.cpp:274 lib/TTLS_UI/src/Module.cpp:284
#: lib/EAPBase_UI/include/EAP_UI.h:696
#, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr ""
"Feil under skriving av brukeropplysninger til Credential Manager: %hs (feil "
"%u)"
#: lib/TTLS_UI/src/Module.cpp:276 lib/TTLS_UI/src/Module.cpp:286
#: lib/EAPBase_UI/include/EAP_UI.h:699
msgid "Writing credentials failed."
msgstr ""
msgstr "Skriving av brukeropplysninger feilet."
#: lib/TTLS_UI/src/TTLS_UI.cpp:36 lib/TTLS_UI/src/TTLS_UI.cpp:181
msgid "Inner Authentication"
msgstr ""
msgstr "Indre autentisering"
#: lib/TTLS_UI/src/TTLS_UI.cpp:61 lib/TTLS_UI/src/TTLS_UI.cpp:196
msgid "Outer Authentication"
msgstr ""
msgstr "Ytre autentisering"
#: lib/TTLS_UI/src/TTLS_UI.cpp:187
msgid "Select inner authentication method from the list"
msgstr ""
msgstr "Velg den indre autentiseringsmetoden fra listen"
#: lib/TTLS_UI/src/TTLS_UI.cpp:189
msgid "PAP"
msgstr ""
msgstr "PAP"
#: lib/TTLS_UI/src/TTLS_UI.cpp:191
msgid "MSCHAPv2"
msgstr ""
msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Er du sikker på at du vil fjerne tilbyder %s permanent fra konfigurasjonen?"
#: lib/EAPBase_UI/include/EAP_UI.h:292
msgid "Warning"
msgstr ""
msgstr "Advarsel"
#: lib/EAPBase_UI/include/EAP_UI.h:552
msgid "Provider Settings"
msgstr ""
msgstr "Tilbyder innstillinger"
#: lib/EAPBase_UI/include/EAP_UI.h:717
#, c-format
msgid "Deleting credentials failed (error %u)."
msgstr ""
msgstr "Sletting av brukeropplysninger feilet (feil %u)"
#: lib/EAPBase_UI/include/EAP_UI.h:754
#, c-format
msgid "<error %u>"
msgstr ""
msgstr "<feil %u>"
#: lib/EAPBase_UI/include/EAP_UI.h:758
msgid "<error>"
msgstr ""
msgstr "<feil>"
#: lib/EAPBase_UI/include/EAP_UI.h:769 lib/EAPBase_UI/include/EAP_UI.h:778
msgid "<blank ID>"
msgstr ""
msgstr "<blank ID>"
#: lib/EAPBase_UI/include/EAP_UI.h:820
msgid "&Remember"
msgstr ""
msgstr "&Husk"
#: lib/EAPBase_UI/include/EAP_UI.h:821
msgid "Check if you would like to save credentials"
msgstr ""
msgstr "Huk av om du vil lagre brukeropplysninger "
#: lib/EAPBase_UI/include/EAP_UI.h:964
msgid "<Your Organization>"
msgstr ""
msgstr "<Din organisasjon>"
#: lib/EAPBase_UI/res/wxEAP_UI.h:69
msgid "EAP Connection Configuration"
msgstr ""
msgstr "Konfigurasjon av EAP forbindelse"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP Methods"
msgstr ""
msgstr "EAP Metoder"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Modules to support individual EAP methods"
msgstr ""
msgstr "Moduler for støtte av individuelle EAP metoder"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:5
msgid "TTLS"
msgstr ""
msgstr "TTLS"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:5
msgid "Tunneled Transport Layer Security"
msgstr ""
msgstr "Tunneled Transport Layer Security"

View File

@@ -526,9 +526,9 @@ msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Czy jesteś pewny, że chcesz usunąć konfigurację dostawcy tożsamości %ls?"
"Czy jesteś pewny, że chcesz usunąć konfigurację dostawcy tożsamości %s?"
#: lib/EAPBase_UI/include/EAP_UI.h:292
msgid "Warning"

View File

@@ -524,9 +524,9 @@ msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Ali ste prepričani, da želite trajno izbrisati ponudnika %ls iz "
"Ali ste prepričani, da želite trajno izbrisati ponudnika %s iz "
"konfiguracije?"
#: lib/EAPBase_UI/include/EAP_UI.h:292

View File

@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2016-09-28 13:27+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2016\n"
"Last-Translator: Marko Eremija <marko.eremija@amres.ac.rs>, 2016\n"
"Language-Team: Serbian (https://www.transifex.com/eduroam_devel/teams/11799/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,133 +25,146 @@ msgstr ""
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:37
msgid "+"
msgstr ""
msgstr "+"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:38
msgid "Adds new provider"
msgstr ""
msgstr "Dodaje novog provajdera"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:42
msgid "-"
msgstr ""
msgstr "-"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:43
msgid "Removes selected provider"
msgstr ""
msgstr "Uklanja izabranog provajdera"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:47
msgid "Advanced..."
msgstr ""
msgstr "Napredno..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:48
msgid "Opens dialog with provider settings"
msgstr ""
msgstr "Otvara dijalog sa podešavanjima za provajdera"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:229 lib/EAPBase_UI/include/EAP_UI.h:581
#, c-format
msgid "%s User Credentials"
msgstr ""
msgstr "%s korisnikovi kredencijali"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
msgstr "Izaberite izvor gde se nalaze vaši kredencijali za povezivanje."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr ""
msgstr "Koristi kredencijale iz &Manager kredencijala:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:245
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Odaberite ovu opciju ako želite da koristite kredencijale sačuvane u Windows"
" menadžeru kredencijala"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:253
msgid "Your present credentials stored in Windows Credential Manager"
msgstr ""
msgstr "Vaši trenutni kredencijali se čuvaju u Windows menadžeru kredencijala"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:260
msgid "&Clear Credentials"
msgstr ""
msgstr "&Clear kredencijale"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:261
msgid ""
"Click to clear your credentials from Credential Manager.\n"
"Note: You will be prompted to enter credentials when connecting."
msgstr ""
"Kliknite ovde kako biste ukolnili svoje kredencijale iz menadžera kredencijala.\n"
"Napomena: Biće vam traženo da unesete kredencijale prilikom povezivanja."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:265 lib/EAPBase_UI/res/wxEAP_UI.cpp:292
msgid "&Set Credentials..."
msgstr ""
msgstr "&Set kredencijale..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:266 lib/EAPBase_UI/res/wxEAP_UI.cpp:293
msgid "Click here to set or modify your credentials"
msgstr ""
msgstr "Kliknite ovde kako biste promenili svoje kredencijale"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr ""
msgstr "Koristi kredencijale iz konfiguracije &profila:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:277
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Odaberite ovu opciju ako želite da sačuvate kredencijale kao deo "
"konfiguracije profila"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:285
msgid "Profile configuration credentials"
msgstr ""
msgstr "Kredencijali za konfiguraciju profila"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:335
msgid "User ID and Password"
msgstr ""
msgstr "Korisničko ime i lozinka"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:345
msgid "Please provide your user ID and password."
msgstr ""
msgstr "Unesite vaše korisničko ime i lozinku."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:355
msgid "User ID:"
msgstr ""
msgstr "Korisničko ime:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:360
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr ""
"Unesite vaše korisničko ime ovde (korisnik@domen.ac.rs, DOMEN\\Korisnik, "
"itd.)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:364
msgid "Password:"
msgstr ""
msgstr "Lozinka:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:369
msgid "Enter your password here"
msgstr ""
msgstr "Unesite lozinku ovde"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:400
msgid "Your Organization"
msgstr ""
msgstr "Vaša organizacija"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:411
msgid ""
"Describe your organization to customize user prompts. When organization is "
"introduced, end-users find program messages easier to understand and act."
msgstr ""
"Opišite vašu organizaciju kako biste prilagodili vođenje korisnika kroz "
"instalaciju. Kada se organizacija predstavi, krajnji korisnici bolje "
"razumeju poruke koje program generiše i lakše mogu da preduzimaju akcije."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:418
msgid "Your organization &name:"
msgstr ""
msgstr "&name vaše organizacije:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:423
msgid ""
"Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
"Ime vaše institucije u formatu koji će se pojavljivati u obaveštenjima "
"službe za podršku korisnicima"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:427
msgid "(Keep it short, please)"
msgstr ""
msgstr "(budite kratki, molimo vas)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:437
msgid "Helpdesk contact &information:"
msgstr ""
msgstr "Helpdesk kontakt &information:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:447
msgid "¶"
@@ -159,7 +172,7 @@ msgstr "¶"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:454
msgid "Your helpdesk website address"
msgstr ""
msgstr "Web stranice službe za podršku korisnicima"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:458
msgid "*"
@@ -167,7 +180,7 @@ msgstr "*"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:465
msgid "Your helpdesk e-mail address"
msgstr ""
msgstr "e-mail adresa službe za podršku korisnicima"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:469
msgid ")"
@@ -175,21 +188,23 @@ msgstr ")"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:476
msgid "Your helpdesk phone number"
msgstr ""
msgstr "Broj telefona službe za podršku korisnicima"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:504
msgid "Provider Unique Identifier"
msgstr ""
msgstr "Jedinstveni identifikator provajdera"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:515
msgid ""
"Assign your organization a unique ID to allow sharing the same credential "
"set across different network profiles."
msgstr ""
"Dodelite jedinstven ID vašoj organizaciji kako bi se omogućilo deljenje "
"istog seta kredencijala u više različitih mrežnih profila."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:522
msgid "&Namespace:"
msgstr ""
msgstr "&Namespace:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:526
msgid "urn:RFC4282:realm"
@@ -201,62 +216,71 @@ msgstr "urn:uuid"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:538
msgid "Provider unique &identifier:"
msgstr ""
msgstr "Jedinstveni &identifier provajdera: "
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:543
msgid "Your organization ID to assign same credentials from other profiles"
msgstr ""
"ID vaše organizacije kako bi se dodelili isti kredencijali kao i na drugim "
"profilima"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:568
msgid "Configuration Lock"
msgstr ""
msgstr "Zaključavanje konfiguracije"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:579
msgid ""
"Your configuration can be locked to prevent accidental modification by end-"
"users. Users will only be allowed to enter credentials."
msgstr ""
"Vaša konfiguracija se može zaključati kako bi se sprečile slučajne "
"modifikacije od strane krajnjih korisnika. Korisnici će moći jedino da unesu"
" kredencijale. "
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:586
msgid ""
"&Lock this configuration and prevent any further modification via user "
"interface."
msgstr ""
"&Lock ovu konfiguraciju i sprečite bilo kakve nove izmene preko korisničkog "
"interfejsa."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:589
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr ""
"(Upozorenje: Kada se jednom zaključa, ne možete se vratiti na početna "
"podešavanja!)"
#: lib/EAPBase_UI/src/EAP_UI.cpp:97
#, c-format
msgid "%s Credentials"
msgstr ""
msgstr "%s kredencijali"
#: lib/EAPBase_UI/src/EAP_UI.cpp:122 lib/EAPBase_UI/include/EAP_UI.h:355
#: lib/EAPBase_UI/include/EAP_UI.h:365 lib/EAPBase_UI/res/wxEAP_UI.h:119
msgid "EAP Credentials"
msgstr ""
msgstr "EAP kredencijali"
#: lib/EAPBase_UI/src/EAP_UI.cpp:165
#, c-format
msgid "For additional help and instructions, please contact %s at:"
msgstr ""
msgstr "Za dodatnu pomoć i instrukcije, kontaktirajte %s na:"
#: lib/EAPBase_UI/src/EAP_UI.cpp:166
msgid "your provider"
msgstr ""
msgstr "vaš provajder"
#: lib/EAPBase_UI/src/EAP_UI.cpp:185
msgid "Open the default web browser"
msgstr ""
msgstr "Otvorite uobičajeni web brauzer"
#: lib/EAPBase_UI/src/EAP_UI.cpp:196
msgid "Open your e-mail program"
msgstr ""
msgstr "Otvorite vašeg mejl klijenta"
#: lib/EAPBase_UI/src/EAP_UI.cpp:207
msgid "Dial the phone number"
msgstr ""
msgstr "Pozovite broj"
#: lib/EAPBase_UI/src/EAP_UI.cpp:227
#, c-format
@@ -264,303 +288,326 @@ msgid ""
"%s has pre-set parts of this configuration. Those parts are locked to "
"prevent accidental modification."
msgstr ""
"%s ima predefinisane delove ove konfiguracije. Ti delovi su zaključani kako "
"bi se izbegla njihova slučajna izmena."
#: lib/EAPBase_UI/src/EAP_UI.cpp:228
msgid "Your provider"
msgstr ""
msgstr "Vaš provajder"
#: lib/EAPBase_UI/src/EAP_UI.cpp:249
msgid "Previous attempt to connect reported invalid credentials."
msgstr ""
"Prethodni pokušaj povezivanja je prijavio da ste uneli pogrešne "
"kredencijale."
#: lib/EAPBase_UI/src/EAP_UI.cpp:250
msgid "Previous attempt to connect reported your credentials expired."
msgstr ""
"Prethodni pokušaj povezivanja je prijavio da su vaši kredencijali istekli."
#: lib/EAPBase_UI/src/EAP_UI.cpp:251
msgid ""
"Previous attempt to connect reported your credentials are being changed."
msgstr ""
"Prethodni pokušaj povezivanja je prijavio da se vaši kredencijali trenutno "
"menjaju."
#: lib/EAPBase_UI/src/EAP_UI.cpp:252
msgid "Previous attempt to connect failed."
msgstr ""
msgstr "Prethodni pokušaj povezivanja nije bio uspešan."
#: lib/EAPBase_UI/src/EAP_UI.cpp:253
msgid "Please, make sure your credentials are correct, or try again later."
msgstr ""
"Proverite da li ste uneli ispravne kredencijale ili pokušajte ponovo "
"kasnije."
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr ""
msgstr "MSCHAPv2 korisničko ime i lozinka"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr ""
msgstr "PAP korisničko ime i lozinka"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
msgstr ""
msgstr "Serveri kojima se veruje"
#: lib/TLS_UI/res/wxTLS_UI.cpp:28
msgid ""
"Describe the servers you trust to prevent credential interception in case of"
" man-in-the-middle attacks."
msgstr ""
"Opišite servere kojima verujete kako bi se izbegla mogućnost krađe "
"kredencijala u slučaju man-in-the-middle napada."
#: lib/TLS_UI/res/wxTLS_UI.cpp:35
msgid "Acceptable Certificate Authorities:"
msgstr ""
msgstr "Prihvatljiva sertifikaciona tela:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:40
msgid ""
"Server's certificate must be issued by one of certificate authorities listed"
" here"
msgstr ""
"Sertifikat servera mora biti izdat od strane sertifikacionog tela koje je "
"izlistano ovde"
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
msgid "Add CA from Store..."
msgstr ""
msgstr "Dodaj CA sertifikat iz skladišta..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:48
msgid ""
"Adds a new certificate authority from the certificate store to the list"
msgstr ""
msgstr "Dodaje na listu novo sertifikaciono telo iz skladišta sertifikata"
#: lib/TLS_UI/res/wxTLS_UI.cpp:52
msgid "Add CA from File..."
msgstr ""
msgstr "Dodaj CA sertifikat iz fajla..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:53
msgid "Adds a new certificate authority from the file to the list"
msgstr ""
msgstr "Dodaje novo sertifikaciono telo iz fajla u listu"
#: lib/TLS_UI/res/wxTLS_UI.cpp:57
msgid "&Remove CA"
msgstr ""
msgstr "&Remove CA"
#: lib/TLS_UI/res/wxTLS_UI.cpp:59
msgid "Removes selected certificate authorities from the list"
msgstr ""
msgstr "Uklanja odabrano sertifikaciono telo sa liste"
#: lib/TLS_UI/res/wxTLS_UI.cpp:72
msgid "Acceptable server &names:"
msgstr ""
msgstr "Prihvatljiva &names servera"
#: lib/TLS_UI/res/wxTLS_UI.cpp:77
msgid ""
"A semicolon delimited list of acceptable server FQDN names; blank to skip "
"name check; Unicode characters allowed"
msgstr ""
"Lista prihvatljivih FQDN imena servera razdvojenih tačka-zarezom; ostaviti "
"prazno ukoliko nije potrebna provera imena servera; dozvoljeno je korišćenje"
" <i>unicode</i> karaktera"
#: lib/TLS_UI/res/wxTLS_UI.cpp:81
msgid "(Example: foo.bar.com;server2.bar.com)"
msgstr ""
msgstr "(npr: foo.bar.com;server2.bar.com)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:119 lib/TLS_UI/src/TLS_UI.cpp:571
msgid "User Certificate"
msgstr ""
msgstr "Korisnički sertifikat"
#: lib/TLS_UI/res/wxTLS_UI.cpp:129
msgid "Please select your &certificate to use for authentication."
msgstr ""
msgstr "Izaberite vaš &certificate koji ćete koristiti za autentifikaciju."
#: lib/TLS_UI/res/wxTLS_UI.cpp:136
msgid "Client certificate to use for authentication"
msgstr ""
msgstr "Klijentski sertifikat koji se koristi za autentifikaciju"
#: lib/TLS_UI/res/wxTLS_UI.cpp:143
msgid "Custom &identity:"
msgstr ""
msgstr "Proizvoljan &identity:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:148
msgid ""
"Your identity (username@domain) to override one from certificate; or blank "
"to use one provided in certificate"
msgstr ""
"Vaš identitet (korisničko_ime@domen.ac.rs) kako biste obrisali korisničko "
"ime iz sertifikata; ili prazno kako biste koristili ono koje se nalazi u "
"sertifikatu"
#: lib/TLS_UI/src/TLS_UI.cpp:118
#, c-format
msgid "Invalid character in host name found: %c"
msgstr ""
msgstr "Neispravan karakter je pronađen u DNS imenu: %c"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "Validation conflict"
msgstr ""
msgstr "Konflikt prilikom validacije"
#: lib/TLS_UI/src/TLS_UI.cpp:327 lib/EAPBase_UI/include/EAP_UI.h:769
#: lib/EAPBase_UI/include/EAP_UI.h:778
msgid "<empty>"
msgstr ""
msgstr "<prazno>"
#: lib/TLS_UI/src/TLS_UI.cpp:500
msgid "Add Certificate"
msgstr ""
msgstr "Dodaj sertifikat"
#: lib/TLS_UI/src/TLS_UI.cpp:501
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
msgstr ""
msgstr "Fajlovi sa sertifikatima (*.cer;*.crt;*.der;*.p7b;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:502
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
msgstr ""
msgstr "Fajlovi sa X.509 sertifikatima (*.cer;*.crt;*.der;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:503
msgid "PKCS #7 Certificate Files (*.p7b)"
msgstr ""
msgstr "Fajlovi sa PKCS #7 sertifikatima (*.p7b)"
#: lib/TLS_UI/src/TLS_UI.cpp:504
msgid "All Files (*.*)"
msgstr ""
msgstr "Svi fajlovi (*.*)"
#: lib/TLS_UI/src/TLS_UI.cpp:520
#, c-format
msgid "Invalid or unsupported certificate file %s"
msgstr ""
msgstr "Pogrešan ili nepodržan sertifikat %s"
#: lib/TLS_UI/src/TLS_UI.cpp:520
msgid "Error"
msgstr ""
msgstr "Greška"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:17
msgid "Outer Identity"
msgstr ""
msgstr "Spoljni identitet"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:28
msgid "Select the user ID supplicant introduces itself as to authenticator:"
msgstr ""
"Izaberite korisničko ime kojim se softver predstavlja autentifikatoru:"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:35
msgid "&True identity"
msgstr ""
msgstr "&True identitet"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:36
msgid "Use my true user name"
msgstr ""
msgstr "Koristi moje pravo korisničko ime"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:40
msgid "Use &empty outer identity (RFC 4822)"
msgstr ""
msgstr "Koristi &empty spoljni identitet (RFC 4822)"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Ommit my user name and use @mydomain.org only"
msgstr ""
msgstr "Izostavi korisničko ime i koristi samo @mojdomen.ac.rs"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:48
msgid "&Custom outer identity:"
msgstr ""
msgstr "&Custom spoljni identitet:"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:49
msgid "Specify custom outer identity"
msgstr ""
msgstr "Unesite proizvoljan spoljni identitet"
#: lib/TTLS_UI/res/wxTTLS_UI.cpp:54
msgid "Custom outer identity to use"
msgstr ""
msgstr "Koristi proizvoljan spoljni identitet"
#: lib/TTLS_UI/src/Module.cpp:274 lib/TTLS_UI/src/Module.cpp:284
#: lib/EAPBase_UI/include/EAP_UI.h:696
#, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr ""
"Greška prilikom upisa kredencijala u Menadžera kredencijala: %hs (greška %u)"
#: lib/TTLS_UI/src/Module.cpp:276 lib/TTLS_UI/src/Module.cpp:286
#: lib/EAPBase_UI/include/EAP_UI.h:699
msgid "Writing credentials failed."
msgstr ""
msgstr "Upis kredencijala je neuspešan."
#: lib/TTLS_UI/src/TTLS_UI.cpp:36 lib/TTLS_UI/src/TTLS_UI.cpp:181
msgid "Inner Authentication"
msgstr ""
msgstr "Unutrašnja autentifikacija"
#: lib/TTLS_UI/src/TTLS_UI.cpp:61 lib/TTLS_UI/src/TTLS_UI.cpp:196
msgid "Outer Authentication"
msgstr ""
msgstr "Spoljna autentifikacija"
#: lib/TTLS_UI/src/TTLS_UI.cpp:187
msgid "Select inner authentication method from the list"
msgstr ""
msgstr "Izaberite unutrašnji metod autentifikacije sa liste"
#: lib/TTLS_UI/src/TTLS_UI.cpp:189
msgid "PAP"
msgstr ""
msgstr "PAP"
#: lib/TTLS_UI/src/TTLS_UI.cpp:191
msgid "MSCHAPv2"
msgstr ""
msgstr "MSCHAPv2"
#: lib/EAPBase_UI/include/EAP_UI.h:292
#, c-format
msgid ""
"Are you sure you want to permanently remove %ls provider from configuration?"
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Da li ste sigurni da želite da trajno uklonite %s provajdera iz "
"konfiguracije?"
#: lib/EAPBase_UI/include/EAP_UI.h:292
msgid "Warning"
msgstr ""
msgstr "Upozorenje"
#: lib/EAPBase_UI/include/EAP_UI.h:552
msgid "Provider Settings"
msgstr ""
msgstr "Podešavanja provajdera"
#: lib/EAPBase_UI/include/EAP_UI.h:717
#, c-format
msgid "Deleting credentials failed (error %u)."
msgstr ""
msgstr "Brisanje kredencijala neuspešno (greška %u)."
#: lib/EAPBase_UI/include/EAP_UI.h:754
#, c-format
msgid "<error %u>"
msgstr ""
msgstr "<greška %u>"
#: lib/EAPBase_UI/include/EAP_UI.h:758
msgid "<error>"
msgstr ""
msgstr "<greška>"
#: lib/EAPBase_UI/include/EAP_UI.h:769 lib/EAPBase_UI/include/EAP_UI.h:778
msgid "<blank ID>"
msgstr ""
msgstr "<prazan ID>"
#: lib/EAPBase_UI/include/EAP_UI.h:820
msgid "&Remember"
msgstr ""
msgstr "&Zapamti"
#: lib/EAPBase_UI/include/EAP_UI.h:821
msgid "Check if you would like to save credentials"
msgstr ""
msgstr "Označite ako želite da sačuvate kredencijale"
#: lib/EAPBase_UI/include/EAP_UI.h:964
msgid "<Your Organization>"
msgstr ""
msgstr "<Vaša organizacija>"
#: lib/EAPBase_UI/res/wxEAP_UI.h:69
msgid "EAP Connection Configuration"
msgstr ""
msgstr "Podešavanja za EAP povezivanje"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP Methods"
msgstr ""
msgstr "EAP metodi"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Modules to support individual EAP methods"
msgstr ""
msgstr "Moduli podržani u određenim EAP metodima"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:5
msgid "TTLS"
msgstr ""
msgstr "TTLS"
#: EAPMethods/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Debug.Feature-2.idtx:5
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:5
msgid "Tunneled Transport Layer Security"
msgstr ""
msgstr "Tunneled Transport Layer Security"

View File

@@ -449,7 +449,7 @@ DWORD APIENTRY EapPeerGetResponsePacket(
DWORD APIENTRY EapPeerGetResult(
_In_ EAP_SESSION_HANDLE hSession,
_In_ EapPeerMethodResultReason reason,
_Out_ EapPeerMethodResult *ppResult,
_Out_ EapPeerMethodResult *pResult,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
@@ -466,11 +466,11 @@ DWORD APIENTRY EapPeerGetResult(
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!ppResult)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppResult 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, ppResult);
g_peer.get_result(hSession, reason, pResult);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
@@ -537,11 +537,11 @@ DWORD APIENTRY EapPeerGetUIContext(
/// \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,
_In_ /*const*/ EapPeerMethodOutput *pEapOutput,
_Out_ EAP_ERROR **ppEapError)
_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));

View File

@@ -130,8 +130,10 @@ DWORD WINAPI EapPeerConfigXml2Blob(
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>
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
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.")));
@@ -139,7 +141,6 @@ DWORD WINAPI EapPeerConfigXml2Blob(
}
// Load configuration.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
try {
g_peer.config_xml2blob(dwFlags, pXmlElConfig, pConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
@@ -212,9 +213,11 @@ DWORD WINAPI EapPeerConfigBlob2Xml(
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;
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
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;

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -52,7 +52,7 @@ bool wxEventMonitorApp::OnInit()
return false;
if (wxInitializeLocale(m_locale)) {
//wxVERIFY(m_locale.AddCatalog(wxT("wxExtend") wxT(wxExtendVersion)));
wxVERIFY(m_locale.AddCatalog(wxT("wxExtend") wxT(wxExtendVersion)));
wxVERIFY(m_locale.AddCatalog(wxT("EventMonitor")));
}
@@ -70,9 +70,9 @@ bool wxEventMonitorApp::OnInit()
}
#endif
m_mainWnd = new wxEventMonitorFrame(NULL);
wxPersistentRegisterAndRestore<wxEventMonitorFrame>(m_mainWnd);
m_mainWnd->Show();
wxEventMonitorFrame *mainWnd = new wxEventMonitorFrame(NULL);
wxPersistentRegisterAndRestore<wxEventMonitorFrame>(mainWnd);
mainWnd->Show();
return true;
}

View File

@@ -1,26 +1,28 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// EventMonitor application
/// \defgroup EventMonitor Event Monitor
/// Real-time log of application events
///
class wxEventMonitorApp;
#pragma once
@@ -32,6 +34,12 @@ class wxEventMonitorApp;
#include <wx/intl.h>
/// \addtogroup EventMonitor
/// @{
///
/// EventMonitor application
///
class wxEventMonitorApp : public wxApp
{
public:
@@ -54,8 +62,9 @@ public:
//virtual int OnExit();
public:
wxEventMonitorFrame *m_mainWnd; ///< Main window
wxLocale m_locale; ///< Current locale
};
/// @}
wxDECLARE_APP(wxEventMonitorApp);

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -77,7 +77,7 @@ wxEventTraceProcessorThread::wxEventTraceProcessorThread(wxEvtHandler *parent, c
for (size_t i = 0, i_end = sessions.GetCount(); i < i_end; i++) {
// Open trace.
tlf.LoggerName = (LPTSTR)(LPCTSTR)(sessions[i]);
tlf.LoggerName = const_cast<LPTSTR>((LPCTSTR)(sessions[i]));
event_trace trace;
if (!trace.create(&tlf)) {
wxLogError(_("Error opening event trace (error %u)."), GetLastError());
@@ -92,7 +92,7 @@ wxEventTraceProcessorThread::wxEventTraceProcessorThread(wxEvtHandler *parent, c
wxEventTraceProcessorThread::~wxEventTraceProcessorThread()
{
for (vector<TRACEHANDLE>::iterator trace = m_traces.begin(), trace_end = m_traces.end(); trace != trace_end; ++trace) {
for (auto trace = m_traces.begin(), trace_end = m_traces.end(); trace != trace_end; ++trace) {
TRACEHANDLE &h = *trace;
if (h) {
// Close trace.
@@ -104,7 +104,7 @@ wxEventTraceProcessorThread::~wxEventTraceProcessorThread()
void wxEventTraceProcessorThread::Abort()
{
for (vector<TRACEHANDLE>::iterator trace = m_traces.begin(), trace_end = m_traces.end(); trace != trace_end; ++trace) {
for (auto trace = m_traces.begin(), trace_end = m_traces.end(); trace != trace_end; ++trace) {
TRACEHANDLE &h = *trace;
if (h) {
// Close trace.
@@ -115,6 +115,8 @@ void wxEventTraceProcessorThread::Abort()
}
/// \cond internal
wxThread::ExitCode wxEventTraceProcessorThread::Entry()
{
// Process events.
@@ -139,6 +141,8 @@ VOID WINAPI wxEventTraceProcessorThread::EventRecordCallback(_In_ PEVENT_RECORD
_this->m_parent->QueueEvent(new wxETWEvent(wxEVT_ETW_EVENT, *pEvent));
}
/// \endcond
//////////////////////////////////////////////////////////////////////////
// wxETWListCtrl
@@ -207,7 +211,7 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
ulSizeName = (ULONG)((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((EVENT_TRACE_PROPERTIES*)new char[ulSize]);
unique_ptr<EVENT_TRACE_PROPERTIES> properties(reinterpret_cast<EVENT_TRACE_PROPERTIES*>(new char[ulSize]));
wxASSERT_MSG(properties, wxT("error allocating session properties memory"));
// Initialize properties.
@@ -220,7 +224,7 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
properties->MaximumFileSize = 1; // 1 MB
properties->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
//properties->LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + ulSizeName;
//memcpy((LPTSTR)((char*)properties.get() + properties->LogFileNameOffset), log_file.c_str(), ulSizeLogFile);
//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) {
break;
@@ -228,7 +232,7 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
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.c_str());
wxLogDebug(_("The %s event session already exists."), name);
// Do not despair... Retry with a new session name and ID.
continue;
} else {
@@ -415,7 +419,7 @@ void wxETWListCtrl::RebuildItems()
// Rebuild the index.
m_rec_idx.clear();
set<size_t>::const_iterator selection_end = selection.end(), focus_end = focus.end();
auto selection_end = selection.cend(), focus_end = focus.cend();
vector<long> selection_out, focus_out;
long center_out = -1;
for (size_t i = 0, n = m_rec_db.size(); i < n; i++) {
@@ -460,6 +464,8 @@ void wxETWListCtrl::RebuildItems()
}
/// \cond internal
bool wxETWListCtrl::IsVisible(const EVENT_RECORD &rec) const
{
return
@@ -561,7 +567,7 @@ wxString wxETWListCtrl::OnGetItemText(long item, long column) const
}
wxString wxETWListCtrl::OnGetItemText(const event_rec &rec, long column) const
wxString wxETWListCtrl::OnGetItemText(const winstd::event_rec &rec, long column) const
{
switch (column) {
case 0: {
@@ -605,7 +611,7 @@ wxString wxETWListCtrl::OnGetItemText(const event_rec &rec, long column) const
if (info->DecodingSource != DecodingSourceWPP) {
if (rec.EventHeader.Flags & EVENT_HEADER_FLAG_STRING_ONLY) {
// This is a string-only event. Print it.
return (LPCWSTR)rec.UserData;
return reinterpret_cast<LPCWSTR>(rec.UserData);
} else {
// This is not a string-only event. Prepare parameters.
@@ -621,12 +627,12 @@ wxString wxETWListCtrl::OnGetItemText(const event_rec &rec, long column) const
if (info->EventMessageOffset) {
// Format the message.
return wstring_msg(0, (LPCTSTR)((LPCBYTE)info.get() + info->EventMessageOffset), props_msg.data()).c_str();
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 (LPCWSTR)((LPCBYTE)info.get() + info->EventMessageOffset);
return reinterpret_cast<LPCWSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset);
}
}
}
@@ -678,6 +684,8 @@ void wxETWListCtrl::OnETWEvent(wxETWEvent& event)
}
}
/// \endcond
//////////////////////////////////////////////////////////////////////////
// wxPersistentETWListCtrl
@@ -703,13 +711,13 @@ void wxPersistentETWListCtrl::Save() const
col.SetMask(wxLIST_MASK_TEXT | wxLIST_MASK_WIDTH);
for (int i = 0, n = wnd->GetColumnCount(); i < n; i++) {
wnd->GetColumn(i, col);
SaveValue(wxString::Format(wxT("Column%sWidth"), col.GetText().c_str()), col.GetWidth());
SaveValue(wxString::Format(wxT("Column%sWidth"), col.GetText()), col.GetWidth());
}
SaveValue(wxT("ScrollAuto"), wnd->m_scroll_auto);
wxString data_str;
for (wxETWListCtrl::guidset::const_iterator src = wnd->m_sources.cbegin(), src_end = wnd->m_sources.cend(); src != src_end; ++src)
for (auto src = wnd->m_sources.cbegin(), src_end = wnd->m_sources.cend(); src != src_end; ++src)
data_str += tstring_guid(*src);
SaveValue(wxT("Sources"), data_str);
@@ -728,7 +736,7 @@ bool wxPersistentETWListCtrl::Restore()
wnd->GetColumn(i, col);
int width;
if (RestoreValue(wxString::Format(wxT("Column%sWidth"), col.GetText().c_str()), &width))
if (RestoreValue(wxString::Format(wxT("Column%sWidth"), col.GetText()), &width))
wnd->SetColumnWidth(i, width);
}
@@ -816,21 +824,21 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_ANSICHAR: {
// Convert strings from ANSI code page, all others (JSON, XML etc.) from UTF-8
wstring str;
MultiByteToWideChar(OutType == TDH_OUTTYPE_STRING ? CP_ACP : CP_UTF8, 0, (LPCSTR)pData, (int)nDataSize, str);
MultiByteToWideChar(OutType == TDH_OUTTYPE_STRING ? CP_ACP : CP_UTF8, 0, reinterpret_cast<LPCSTR>(pData), (int)nDataSize, str);
return tstring_printf(_T("%ls"), str.c_str());
}
case TDH_INTYPE_COUNTEDSTRING:
return DataToString(TDH_INTYPE_NONNULLTERMINATEDSTRING, OutType, (LPCBYTE)((PUSHORT)pData + 1), *(PUSHORT)pData, pMapInfo, nPtrSize);
return DataToString(TDH_INTYPE_NONNULLTERMINATEDSTRING, OutType, reinterpret_cast<LPCBYTE>((PUSHORT)pData + 1), *(PUSHORT)pData, pMapInfo, nPtrSize);
case TDH_INTYPE_COUNTEDANSISTRING:
return DataToString(TDH_INTYPE_NONNULLTERMINATEDANSISTRING, OutType, (LPCBYTE)((PUSHORT)pData + 1), *(PUSHORT)pData, pMapInfo, nPtrSize);
return DataToString(TDH_INTYPE_NONNULLTERMINATEDANSISTRING, OutType, reinterpret_cast<LPCBYTE>((PUSHORT)pData + 1), *(PUSHORT)pData, pMapInfo, nPtrSize);
case TDH_INTYPE_REVERSEDCOUNTEDSTRING:
return DataToString(TDH_INTYPE_NONNULLTERMINATEDSTRING, OutType, (LPCBYTE)((PUSHORT)pData + 1), MAKEWORD(HIBYTE(*(PUSHORT)pData), LOBYTE(*(PUSHORT)pData)), pMapInfo, nPtrSize);
return DataToString(TDH_INTYPE_NONNULLTERMINATEDSTRING, OutType, reinterpret_cast<LPCBYTE>((PUSHORT)pData + 1), MAKEWORD(HIBYTE(*(PUSHORT)pData), LOBYTE(*(PUSHORT)pData)), pMapInfo, nPtrSize);
case TDH_INTYPE_REVERSEDCOUNTEDANSISTRING:
return DataToString(TDH_INTYPE_NONNULLTERMINATEDANSISTRING, OutType, (LPCBYTE)((PUSHORT)pData + 1), MAKEWORD(HIBYTE(*(PUSHORT)pData), LOBYTE(*(PUSHORT)pData)), pMapInfo, nPtrSize);
return DataToString(TDH_INTYPE_NONNULLTERMINATEDANSISTRING, OutType, reinterpret_cast<LPCBYTE>((PUSHORT)pData + 1), MAKEWORD(HIBYTE(*(PUSHORT)pData), LOBYTE(*(PUSHORT)pData)), pMapInfo, nPtrSize);
case TDH_INTYPE_INT8:
assert(nDataSize >= sizeof(CHAR));
@@ -966,7 +974,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
SYSTEMTIME st, st_local;
FileTimeToSystemTime((PFILETIME)pData, &st);
SystemTimeToTzSpecificLocalTime(NULL, &st, &st_local);
return DataToString(TDH_INTYPE_SYSTEMTIME, OutType, (LPCBYTE)&st_local, sizeof(st_local), pMapInfo, nPtrSize);
return DataToString(TDH_INTYPE_SYSTEMTIME, OutType, reinterpret_cast<LPCBYTE>(&st_local), sizeof(st_local), pMapInfo, nPtrSize);
}
case TDH_INTYPE_SYSTEMTIME:
@@ -1019,7 +1027,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)((LPBYTE)pInfo + pInfo->EventPropertyInfoArray[pInfo->EventPropertyInfoArray[i].countPropertyIndex].NameOffset), ULONG_MAX };
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)(reinterpret_cast<LPBYTE>(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;
@@ -1059,8 +1067,8 @@ 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: "), (LPBYTE)pInfo + pInfo->EventPropertyInfoArray[j].NameOffset);
out += PropertyToString(pEvent, pInfo, j, (LPWSTR)((LPBYTE)(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k, nPtrSize);
out += tstring_printf(_T("%ls: "), 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(')');
} else {
@@ -1078,12 +1086,12 @@ 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)((LPBYTE)pInfo + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k }
{ (ULONGLONG)pStructureName , ulStructIndex },
{ (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k }
};
ulResult = TdhGetProperty(pEvent, 0, NULL, _countof(data_desc), data_desc, data);
} else {
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)((LPBYTE)pInfo + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k };
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k };
ulResult = TdhGetProperty(pEvent, 0, NULL, 1, &data_desc, data);
}
if (ulResult == ERROR_EVT_INVALID_EVENT_DATA) {
@@ -1094,7 +1102,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
// Get the name/value mapping if the property specifies a value map.
unique_ptr<EVENT_MAP_INFO> map_info;
ulResult = TdhGetEventMapInformation(pEvent, (LPWSTR)((LPBYTE)pInfo + pInfo->EventPropertyInfoArray[ulPropIndex].nonStructType.MapNameOffset), map_info);
ulResult = TdhGetEventMapInformation(pEvent, reinterpret_cast<LPWSTR>(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].nonStructType.MapNameOffset), map_info);
if (ulResult == ERROR_NOT_FOUND) {
// name/value mapping not found. Not an error actually.
assert(!map_info);
@@ -1105,7 +1113,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
// in the EVENT_MAP_ENTRY structure. Replace the trailing space with a null-
// terminating character, so that the bit mapped strings are correctly formatted.
for (ULONG i = 0; i < map_info->EntryCount; i++) {
LPWSTR str = (LPWSTR)((PBYTE)map_info.get() + map_info->MapEntryArray[i].OutputOffset);
LPWSTR str = reinterpret_cast<LPWSTR>((PBYTE)map_info.get() + map_info->MapEntryArray[i].OutputOffset);
SIZE_T len = wcslen(str);
if (len) str[len - 1] = 0;
}

View File

@@ -1,51 +1,42 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include <wx/event.h>
/// \addtogroup EventMonitor
/// @{
///
/// Maximum number of event records kept
///
#define wxETWEVENT_RECORDS_MAX 1000000
///
/// ETW event
///
/// @}
class wxETWEvent;
wxDECLARE_EVENT(wxEVT_ETW_EVENT, wxETWEvent);
#define wxETWEventHandler(func) wxEVENT_HANDLER_CAST(wxETWEventFunction, func)
#define EVT_ETW_EVENT(func) wx__DECLARE_EVT0(wxEVT_ETW_EVENT, wxETWEventHandler(func))
///
/// Event trace processor
///
class wxEventTraceProcessorThread;
///
/// Event list control
///
class wxETWListCtrl;
///
/// Supports saving/restoring wxETWListCtrl state
///
class wxPersistentETWListCtrl;
#pragma once
@@ -61,47 +52,106 @@ class wxPersistentETWListCtrl;
#include <set>
/// \addtogroup EventMonitor
/// @{
///
/// ETW event
///
class wxETWEvent : public wxEvent
{
public:
///
/// Creates ETW event
///
/// \param[in] type The unique type of event
/// \param[in] record ETW event record
///
wxETWEvent(wxEventType type = wxEVT_NULL, const EVENT_RECORD &record = s_record_null);
///
/// Copies an ETW event
///
/// \param[in] event ETW event to copy from
///
wxETWEvent(const wxETWEvent& event);
virtual wxEvent *Clone() const { return new wxETWEvent(*this); }
inline const winstd::event_rec& GetRecord() const { return m_record; }
inline winstd::event_rec& GetRecord() { return m_record; }
///
/// Clones the ETW event
///
/// \returns Event copy
///
virtual wxEvent *Clone() const
{
return new wxETWEvent(*this);
}
protected:
bool DoSetExtendedData(size_t extended_data_count, const EVENT_HEADER_EXTENDED_DATA_ITEM *extended_data);
bool DoSetUserData(size_t user_data_length, const void *user_data);
///
/// Returns ETW event record assosiated with event
///
inline const winstd::event_rec& GetRecord() const
{
return m_record;
}
///
/// Returns ETW event record assosiated with event
///
inline winstd::event_rec& GetRecord()
{
return m_record;
}
private:
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxETWEvent)
public:
static const EVENT_RECORD s_record_null;
static const EVENT_RECORD s_record_null; ///< Blank ETW event record
protected:
winstd::event_rec m_record; ///< ETW event record
};
///
/// Prototype of the function consuming `wxETWEvent` events
///
typedef void (wxEvtHandler::*wxETWEventFunction)(wxETWEvent&);
///
/// Monitors ETW events and forwards them as `wxETWEvent` event
///
class wxEventTraceProcessorThread : public wxThread
{
public:
///
/// A thread to process ETW events
///
/// \param[in] parent Event handler this thread will send record notifications
/// \param[in] sessions An array of sessions to monitor
///
wxEventTraceProcessorThread(wxEvtHandler *parent, const wxArrayString &sessions);
///
/// Destructor
///
virtual ~wxEventTraceProcessorThread();
///
/// Closes all session handles to allow graceful thread termination
///
void Abort();
protected:
/// \cond internal
virtual ExitCode Entry();
/// \endcond
private:
/// \cond internal
static VOID WINAPI EventRecordCallback(PEVENT_RECORD pEvent);
/// \endcond
protected:
std::vector<TRACEHANDLE> m_traces; ///< An array of tracing sessions this thread is monitoring
@@ -109,6 +159,9 @@ protected:
};
///
/// Event list control
///
class wxETWListCtrl : public wxListCtrl
{
protected:
@@ -117,6 +170,9 @@ protected:
///
struct less_guid : public std::binary_function<GUID, GUID, bool>
{
///
/// Compares two GUIDs
///
bool operator()(const GUID &a, const GUID &b) const
{
if (a.Data1 < b.Data1) return true;
@@ -136,6 +192,17 @@ protected:
typedef std::set<GUID, less_guid> guidset;
public:
///
/// Creates a list control for ETW log display
///
/// \param[in] parent Parent window. Must not be \c NULL.
/// \param[in] id Window identifier. The value \c wxID_ANY indicates a default value.
/// \param[in] pos Window position. If \c wxDefaultPosition is specified then a default position is chosen.
/// \param[in] size Window size. If \c wxDefaultSize is specified then the window is sized appropriately.
/// \param[in] style Window style. See \c wxListCtrl.
/// \param[in] validator Window validator
/// \param[in] name Window name
///
wxETWListCtrl(
wxWindow *parent,
wxWindowID id = wxID_ANY,
@@ -144,24 +211,73 @@ public:
long style = wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_VIRTUAL|wxNO_BORDER,
const wxValidator &validator = wxDefaultValidator,
const wxString &name = wxListCtrlNameStr);
///
/// Destructor
///
virtual ~wxETWListCtrl();
inline bool IsEmpty() const { return m_rec_db.empty(); }
///
/// Returns true if the list is empty
///
inline bool IsEmpty() const
{
return m_rec_db.empty();
}
///
/// Copies selected rows to clipboard
///
void CopySelected() const;
///
/// Copies all rows (including hidden ones) to clipboard
///
void CopyAll() const;
///
/// Empties the list
///
void ClearAll();
///
/// Selects all rows
///
void SelectAll();
///
/// Clears row selection
///
void SelectNone();
///
/// Rebuilds the list
///
void RebuildItems();
///
/// Checks if given ETW source is enabled
///
/// \param[in] guid GUID of ETW source
///
/// \returns
/// - \c true if ETW source with \p guid GUID is enabled;
/// - \c false otherwise.
///
inline bool IsSourceEnabled(const GUID &guid) const
{
return m_sources.find(guid) != m_sources.end();
}
///
/// Enables/Disables ETW source
///
/// \param[in] guid GUID of ETW source
/// \param[in] enable \c true to enable, \c false to disable
///
inline void EnableSource(const GUID &guid, bool enable = true)
{
guidset::iterator s = m_sources.find(guid);
auto s = m_sources.find(guid);
if (enable) {
if (s == m_sources.end()) {
m_sources.insert(guid);
@@ -178,6 +294,7 @@ public:
friend class wxPersistentETWListCtrl; // Allow saving/restoring window state.
protected:
/// \cond internal
bool IsVisible(const EVENT_RECORD &rec) const;
void FormatRow(const winstd::event_rec &rec, std::string &rowA, std::wstring &rowW) const;
bool CopyToClipboard(const std::string &dataA, const std::wstring &dataW) const;
@@ -186,6 +303,8 @@ protected:
virtual wxString OnGetItemText(long item, long column) const;
virtual wxString OnGetItemText(const winstd::event_rec &rec, long column) const;
void OnETWEvent(wxETWEvent& event);
/// \endcond
DECLARE_EVENT_TABLE()
public:
@@ -209,18 +328,48 @@ protected:
};
///
/// Supports saving/restoring `wxETWListCtrl` state
///
class wxPersistentETWListCtrl : public wxPersistentWindow<wxETWListCtrl>
{
public:
///
/// Constructor for a persistent window object
///
/// \param[in] wnd Window this object will save/restore
///
wxPersistentETWListCtrl(wxETWListCtrl *wnd);
///
/// Returns the string uniquely identifying the objects supported by this adapter.
///
/// \returns This implementation always returns `wxT(wxPERSIST_TLW_KIND)`
///
virtual wxString GetKind() const;
///
/// Saves the object properties
///
virtual void Save() const;
///
/// Restores the object properties
///
/// \returns
/// - \c true if the properties were successfully restored;
/// - \c false otherwise.
///
virtual bool Restore();
};
///
/// Creates persistent window object for `wxETWListCtrl` class window
///
inline wxPersistentObject *wxCreatePersistentObject(wxETWListCtrl *wnd)
{
return new wxPersistentETWListCtrl(wnd);
}
/// @}

View File

@@ -91,7 +91,7 @@
<ClInclude Include="Frame.h" />
<ClInclude Include="LogPanel.h" />
<ClInclude Include="StdAfx.h" />
<ClInclude Include="wxEventMonitor_UI.h" />
<ClInclude Include="res\wxEventMonitor_UI.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="App.cpp" />
@@ -104,7 +104,7 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="wxEventMonitor_UI.cpp" />
<ClCompile Include="res\wxEventMonitor_UI.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\lib\Events\build\Events.vcxproj">
@@ -120,7 +120,7 @@
<ItemGroup>
<None Include="locale\EventMonitor.pot" />
<None Include="res\EventMonitor.ico" />
<None Include="wxEventMonitor_UI.fbp" />
<None Include="res\wxEventMonitor_UI.fbp" />
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\bg_BG.po" />

View File

@@ -30,7 +30,7 @@
<ClInclude Include="App.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="wxEventMonitor_UI.h">
<ClInclude Include="res\wxEventMonitor_UI.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Frame.h">
@@ -50,7 +50,7 @@
<ClCompile Include="App.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="wxEventMonitor_UI.cpp">
<ClCompile Include="res\wxEventMonitor_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Frame.cpp">
@@ -64,7 +64,7 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="wxEventMonitor_UI.fbp">
<None Include="res\wxEventMonitor_UI.fbp">
<Filter>Resource Files</Filter>
</None>
<None Include="locale\EventMonitor.pot">

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -261,6 +261,8 @@ wxEventMonitorFrame::~wxEventMonitorFrame()
}
/// \cond internal
void wxEventMonitorFrame::OnExit(wxCommandEvent& event)
{
Close();
@@ -408,6 +410,8 @@ void wxEventMonitorFrame::OnViewToolbar(wxCommandEvent& event)
}
}
/// \endcond
//////////////////////////////////////////////////////////////////////////
// wxPersistentEventMonitorFrame

View File

@@ -1,39 +1,30 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// EventMonitor main frame
///
class wxEventMonitorFrame;
///
/// Supports saving/restoring wxEventMonitorFrame GUI state
///
class wxPersistentEventMonitorFrame;
#pragma once;
#include "LogPanel.h"
#include "wxEventMonitor_UI.h"
#include <wx/frame.h>
#include <wx/menu.h>
#include <wx/statusbr.h>
@@ -44,6 +35,12 @@ class wxPersistentEventMonitorFrame;
#include <WinStd/Win.h>
/// \addtogroup EventMonitor
/// @{
///
/// EventMonitor main frame
///
class wxEventMonitorFrame : public wxFrame
{
protected:
@@ -64,12 +61,28 @@ protected:
};
public:
///
/// Creates an EventMonitor frame window
///
/// \param[in] parent The window parent. This may be \c NULL. If it is non-NULL, the frame will always be displayed on top of the parent window on Windows.
/// \param[in] id The window identifier. It may take a value of \c wxID_ANY to indicate a default value.
/// \param[in] title The caption to be displayed on the frame's title bar.
/// \param[in] pos The window position. The value \c wxDefaultPosition indicates a default position, chosen by either the windowing system or wxWidgets, depending on platform.
/// \param[in] size The window size. The value \c wxDefaultSize indicates a default size, chosen by either the windowing system or wxWidgets, depending on platform.
/// \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"));
///
/// Destructor
///
~wxEventMonitorFrame();
friend class wxPersistentEventMonitorFrame;
protected:
/// \cond internal
void OnExit(wxCommandEvent& event);
void OnEditCopyUpdate(wxUpdateUIEvent& event);
void OnEditCopy(wxCommandEvent& event);
@@ -89,8 +102,10 @@ protected:
void OnViewLevel(wxCommandEvent& event);
void OnViewToolbarUpdate(wxUpdateUIEvent& event);
void OnViewToolbar(wxCommandEvent& event);
/// \endcond
protected:
/// \cond internal
wxMenuBar* m_menubar;
wxMenu* m_menuProgram;
wxMenu* m_menuEdit;
@@ -116,20 +131,45 @@ protected:
wxStatusBar* m_statusBar;
wxEventMonitorLogPanel* m_panel;
wxAuiManager m_mgr;
/// \endcond
};
///
/// Supports saving/restoring `wxEventMonitorFrame` GUI state
///
class wxPersistentEventMonitorFrame : public wxPersistentTLW
{
public:
///
/// Constructor for a persistent window object
///
/// \param[in] wnd Window this object will save/restore
///
wxPersistentEventMonitorFrame(wxEventMonitorFrame *wnd);
///
/// Saves the object properties
///
virtual void Save() const;
///
/// Restores the object properties
///
/// \returns
/// - \c true if the properties were successfully restored;
/// - \c false otherwise.
///
virtual bool Restore();
};
///
/// Creates persistent window object for `wxETWListCtrl` class window
///
inline wxPersistentObject *wxCreatePersistentObject(wxEventMonitorFrame *wnd)
{
return new wxPersistentEventMonitorFrame(wnd);
}
/// @}

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"

View File

@@ -1,60 +1,94 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// EventMonitor trace log panel
///
class wxEventMonitorLogPanel;
///
/// Supports saving/restoring wxEventMonitorLogPanel state
///
class wxPersistentEventMonitorLogPanel;
#pragma once
#include "wxEventMonitor_UI.h"
#include "res/wxEventMonitor_UI.h"
#include <wx/persist/window.h>
/// \addtogroup EventMonitor
/// @{
///
/// EventMonitor trace log panel
///
class wxEventMonitorLogPanel : public wxEventMonitorLogPanelBase
{
public:
///
/// Constructs EventMonitor log panel
///
/// \param[in] parent Parent window. Must not be \c NULL.
///
wxEventMonitorLogPanel(wxWindow* parent);
friend class wxPersistentEventMonitorLogPanel; // Allow saving/restoring window state.
};
///
/// Supports saving/restoring `wxEventMonitorLogPanel` state
///
class wxPersistentEventMonitorLogPanel : public wxPersistentWindow<wxEventMonitorLogPanel>
{
public:
///
/// Constructor for a persistent window object
///
/// \param[in] wnd Window this object will save/restore
///
wxPersistentEventMonitorLogPanel(wxEventMonitorLogPanel *wnd);
///
/// Returns the string uniquely identifying the objects supported by this adapter.
///
/// \returns This implementation always returns `wxT(wxPERSIST_TLW_KIND)`
///
virtual wxString GetKind() const;
///
/// Saves the object properties
///
virtual void Save() const;
///
/// Restores the object properties
///
/// \returns
/// - \c true if the properties were successfully restored;
/// - \c false otherwise.
///
virtual bool Restore();
};
///
/// Creates persistent window object for `wxEventMonitorLogPanel` class window
///
inline wxPersistentObject *wxCreatePersistentObject(wxEventMonitorLogPanel *wnd)
{
return new wxPersistentEventMonitorLogPanel(wnd);
}
/// @}

Binary file not shown.

View File

@@ -5,6 +5,7 @@ msgstr ""
"Project-Id-Version: EventMonitor\n"
"POT-Creation-Date: 2016-09-19 11:14+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: University of Ruse <support@uni-ruse.bg>, 2016\n"
"Language-Team: Bulgarian (Bulgaria) (https://www.transifex.com/eduroam_devel/teams/11799/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,32 +21,32 @@ msgstr ""
#: App.cpp:61 Frame.h:67 MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Event Monitor"
msgstr ""
msgstr "Следене на събития"
#: ETWLog.cpp:83
#, c-format
msgid "Error opening event trace (error %u)."
msgstr ""
msgstr "Грешка при отваряне проследяването на събитие (error %u)."
#: ETWLog.cpp:167
msgid "Time"
msgstr ""
msgstr "Време"
#: ETWLog.cpp:168
msgid "PID"
msgstr ""
msgstr "PID"
#: ETWLog.cpp:169
msgid "TID"
msgstr ""
msgstr "TID"
#: ETWLog.cpp:170
msgid "Source"
msgstr ""
msgstr "Източник"
#: ETWLog.cpp:171
msgid "Event"
msgstr ""
msgstr "Събитие"
#: ETWLog.cpp:228
msgid ""
@@ -53,169 +54,172 @@ msgid ""
"(Run As Administrator) or be a member of Performance Log Users group to "
"start event tracing session."
msgstr ""
"Достъпът до създаването сесия на събитие е отказан: необходимо е да имате "
"администраторски права (Run As Administrator) или да бъдете член на групата "
"Performance Log Users, за да стартирате сесия за проследяване на събитие."
#: ETWLog.cpp:231
#, c-format
msgid "The %s event session already exists."
msgstr ""
msgstr "Сесията на събитие %s вече съществува."
#: ETWLog.cpp:235
#, c-format
msgid "Error creating event session (error %u)."
msgstr ""
msgstr "Грешка при създаване сесията на събитие (error %u)."
#: ETWLog.cpp:251 ETWLog.cpp:267 ETWLog.cpp:281
#, c-format
msgid "Error enabling %s event provider (error %u)."
msgstr ""
msgstr "Грешка при разрешаване %s събитие на доставчик (error %u)."
#: Frame.cpp:48 Frame.cpp:108 Frame.cpp:113 Frame.cpp:168 Frame.cpp:170
#, c-format
msgid "Toggles display of %s records"
msgstr ""
msgstr "Сборно изобразяване на записи %s"
#: Frame.cpp:65
msgid "E&xit"
msgstr ""
msgstr "Из&ход"
#: Frame.cpp:65
msgid "Quits this program"
msgstr ""
msgstr "Излизане от тази програма"
#: Frame.cpp:69
msgid "&Program"
msgstr ""
msgstr "&Програма"
#: Frame.cpp:73
msgid "&Copy"
msgstr ""
msgstr "&Копиране"
#: Frame.cpp:73 Frame.cpp:154
msgid "Copies selected records to clipboard"
msgstr ""
msgstr "Копиране на избраните записи в клипборда"
#: Frame.cpp:78
msgid "Copy A&ll"
msgstr ""
msgstr "Копиране на Всич&ко"
#: Frame.cpp:78 Frame.cpp:156
msgid "Copies all records to clipboard (including hidden)"
msgstr ""
msgstr "Копиране на всички записи в клипборда (включително скритите)"
#: Frame.cpp:83 Frame.cpp:158
msgid "Clear"
msgstr ""
msgstr "Изчистване"
#: Frame.cpp:83 Frame.cpp:158
msgid "Clears all records from the log"
msgstr ""
msgstr "Изчистване на всички записи от лога"
#: Frame.cpp:90
msgid "Select &All"
msgstr ""
msgstr "Изберете &всичко"
#: Frame.cpp:90
msgid "Selects all visible records"
msgstr ""
msgstr "Изберете всички видими записи"
#: Frame.cpp:94
msgid "Select &None"
msgstr ""
msgstr "Изберете &Нищо"
#: Frame.cpp:94
msgid "Clears record selection"
msgstr ""
msgstr "Изчистете избраните записи"
#: Frame.cpp:97 Frame.cpp:142
msgid "&Edit"
msgstr ""
msgstr "&Редактиране"
#: Frame.cpp:101
msgid "Auto &Scroll"
msgstr ""
msgstr "Автоматичен &скрол"
#: Frame.cpp:101 Frame.cpp:164
msgid "Automatically scrolls to the most recent records as they come-in"
msgstr ""
msgstr "Автоматичен скрол на най-последните записи, така както са влезли"
#: Frame.cpp:123 Frame.cpp:176
msgid "Verbose"
msgstr ""
msgstr "Подробно"
#: Frame.cpp:123 Frame.cpp:176
msgid "Displays all levels of records"
msgstr ""
msgstr "Показва всички нива на записите"
#: Frame.cpp:127 Frame.cpp:178
msgid "Informational"
msgstr ""
msgstr "Информационен"
#: Frame.cpp:127 Frame.cpp:178
msgid "Displays all records up to informational level"
msgstr ""
msgstr "Показва всички записи, по-високи от информационното ниво"
#: Frame.cpp:131 Frame.cpp:180
msgid "Warning"
msgstr ""
msgstr "Предупреждение"
#: Frame.cpp:131 Frame.cpp:180
msgid "Displays all records up to warning level"
msgstr ""
msgstr "Показва всички записи, по-високи от ниво предупреждение"
#: Frame.cpp:135 Frame.cpp:182
msgid "Error"
msgstr ""
msgstr "Грешка"
#: Frame.cpp:135 Frame.cpp:182
msgid "Displays error level records only"
msgstr ""
msgstr "Показва само записи с ниво грешка"
#: Frame.cpp:142 Frame.cpp:146
#, c-format
msgid "%s toolbar"
msgstr ""
msgstr "%s лента с инструменти"
#: Frame.cpp:142 Frame.cpp:146
#, c-format
msgid "Toggles display of %s toolbar"
msgstr ""
msgstr "Сборно изобразяване на лентата с инструменти %s"
#: Frame.cpp:142 Frame.cpp:146 Frame.cpp:185
msgid "View"
msgstr ""
msgstr "Изглед"
#: Frame.cpp:146 Frame.cpp:149
msgid "&View"
msgstr ""
msgstr "&Изглед"
#: Frame.cpp:154
msgid "Copy"
msgstr ""
msgstr "Копиране"
#: Frame.cpp:156
msgid "Copy All"
msgstr ""
msgstr "Копиране на всичко"
#: Frame.cpp:161
msgid "Edit"
msgstr ""
msgstr "Редактиране"
#: Frame.cpp:164
msgid "Auto Scroll"
msgstr ""
msgstr "Автоматичен скрол"
#: Frame.cpp:189
msgid "Trace Log"
msgstr ""
msgstr "Лог с проследяване"
#: 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 ""
msgstr "Покзва в реално време вътрешни събития"
#: 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 ""
msgstr "EVENTM~1|GÉANTLink следене на събитие"

View File

@@ -5,6 +5,7 @@ msgstr ""
"Project-Id-Version: EventMonitor\n"
"POT-Creation-Date: 2016-09-19 11:14+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: eduki <ecercos@xtec.cat>, 2016\n"
"Language-Team: Catalan (Spain) (https://www.transifex.com/eduroam_devel/teams/11799/ca_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,32 +21,32 @@ msgstr ""
#: App.cpp:61 Frame.h:67 MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Event Monitor"
msgstr ""
msgstr "Monitor de Successos"
#: ETWLog.cpp:83
#, c-format
msgid "Error opening event trace (error %u)."
msgstr ""
msgstr "Error obrint la traça (error %u)."
#: ETWLog.cpp:167
msgid "Time"
msgstr ""
msgstr "Temps"
#: ETWLog.cpp:168
msgid "PID"
msgstr ""
msgstr "PID"
#: ETWLog.cpp:169
msgid "TID"
msgstr ""
msgstr "TID"
#: ETWLog.cpp:170
msgid "Source"
msgstr ""
msgstr "Font"
#: ETWLog.cpp:171
msgid "Event"
msgstr ""
msgstr "Succés"
#: ETWLog.cpp:228
msgid ""
@@ -53,169 +54,173 @@ msgid ""
"(Run As Administrator) or be a member of Performance Log Users group to "
"start event tracing session."
msgstr ""
"Accés denegat creant sessió de successos: necessiteu privilegis "
"administratius (Executa com Administrador) o bé ser membre del grup "
"d'usuaris del Log de Rendiment per iniciar una sessió de traces de "
"successos."
#: ETWLog.cpp:231
#, c-format
msgid "The %s event session already exists."
msgstr ""
msgstr "La sessió de successos %s ja existeix."
#: ETWLog.cpp:235
#, c-format
msgid "Error creating event session (error %u)."
msgstr ""
msgstr "Error creant la sessió de successos (error %u)."
#: ETWLog.cpp:251 ETWLog.cpp:267 ETWLog.cpp:281
#, c-format
msgid "Error enabling %s event provider (error %u)."
msgstr ""
msgstr "Error habilitant el proveidor de successos %s (error %u)."
#: Frame.cpp:48 Frame.cpp:108 Frame.cpp:113 Frame.cpp:168 Frame.cpp:170
#, c-format
msgid "Toggles display of %s records"
msgstr ""
msgstr "Canvia la visualització de %s registres"
#: Frame.cpp:65
msgid "E&xit"
msgstr ""
msgstr "S&ortida"
#: Frame.cpp:65
msgid "Quits this program"
msgstr ""
msgstr "Surt del programa"
#: Frame.cpp:69
msgid "&Program"
msgstr ""
msgstr "&Programa"
#: Frame.cpp:73
msgid "&Copy"
msgstr ""
msgstr "&Copia"
#: Frame.cpp:73 Frame.cpp:154
msgid "Copies selected records to clipboard"
msgstr ""
msgstr "Copia els registres seleccionats al portapapers"
#: Frame.cpp:78
msgid "Copy A&ll"
msgstr ""
msgstr "Copia T&ot"
#: Frame.cpp:78 Frame.cpp:156
msgid "Copies all records to clipboard (including hidden)"
msgstr ""
msgstr "Copia tots els registres al portapapers (incloent els amagats)"
#: Frame.cpp:83 Frame.cpp:158
msgid "Clear"
msgstr ""
msgstr "Neteja"
#: Frame.cpp:83 Frame.cpp:158
msgid "Clears all records from the log"
msgstr ""
msgstr "Esborra tots els registres del log"
#: Frame.cpp:90
msgid "Select &All"
msgstr ""
msgstr "Selecciona-ho &Tot"
#: Frame.cpp:90
msgid "Selects all visible records"
msgstr ""
msgstr "Selecciona tots els registres visibles"
#: Frame.cpp:94
msgid "Select &None"
msgstr ""
msgstr "&Esborrar selecció"
#: Frame.cpp:94
msgid "Clears record selection"
msgstr ""
msgstr "Esborra la selecció de registres"
#: Frame.cpp:97 Frame.cpp:142
msgid "&Edit"
msgstr ""
msgstr "&Edita"
#: Frame.cpp:101
msgid "Auto &Scroll"
msgstr ""
msgstr "Auto &Scroll"
#: Frame.cpp:101 Frame.cpp:164
msgid "Automatically scrolls to the most recent records as they come-in"
msgstr ""
msgstr "Mostra automàticament els registres més recents així que arriben"
#: Frame.cpp:123 Frame.cpp:176
msgid "Verbose"
msgstr ""
msgstr "Detallat"
#: Frame.cpp:123 Frame.cpp:176
msgid "Displays all levels of records"
msgstr ""
msgstr "Mostra tots els nivells de registre"
#: Frame.cpp:127 Frame.cpp:178
msgid "Informational"
msgstr ""
msgstr "Informatiu"
#: Frame.cpp:127 Frame.cpp:178
msgid "Displays all records up to informational level"
msgstr ""
msgstr "Mostra els registres fins al nivell informatiu"
#: Frame.cpp:131 Frame.cpp:180
msgid "Warning"
msgstr ""
msgstr "Alerta"
#: Frame.cpp:131 Frame.cpp:180
msgid "Displays all records up to warning level"
msgstr ""
msgstr "Mostra els registres fins al nivell d'alerta"
#: Frame.cpp:135 Frame.cpp:182
msgid "Error"
msgstr ""
msgstr "Error"
#: Frame.cpp:135 Frame.cpp:182
msgid "Displays error level records only"
msgstr ""
msgstr "Mostra només els registres d'error"
#: Frame.cpp:142 Frame.cpp:146
#, c-format
msgid "%s toolbar"
msgstr ""
msgstr "Barra %s"
#: Frame.cpp:142 Frame.cpp:146
#, c-format
msgid "Toggles display of %s toolbar"
msgstr ""
msgstr "Alterna la visió de la barra %s"
#: Frame.cpp:142 Frame.cpp:146 Frame.cpp:185
msgid "View"
msgstr ""
msgstr "Vista"
#: Frame.cpp:146 Frame.cpp:149
msgid "&View"
msgstr ""
msgstr "&Vista"
#: Frame.cpp:154
msgid "Copy"
msgstr ""
msgstr "Copia"
#: Frame.cpp:156
msgid "Copy All"
msgstr ""
msgstr "Copia-ho tot"
#: Frame.cpp:161
msgid "Edit"
msgstr ""
msgstr "Edita"
#: Frame.cpp:164
msgid "Auto Scroll"
msgstr ""
msgstr "Auto Scroll"
#: Frame.cpp:189
msgid "Trace Log"
msgstr ""
msgstr "Registre de traces"
#: 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 ""
msgstr "Mostra en temps real dels successos interns"
#: 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 ""
msgstr "EVENTM~1|GÉANTLink Monitor de successos"

View File

@@ -5,6 +5,7 @@ msgstr ""
"Project-Id-Version: EventMonitor\n"
"POT-Creation-Date: 2016-09-19 11:14+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Marko Eremija <marko.eremija@amres.ac.rs>, 2016\n"
"Language-Team: Serbian (https://www.transifex.com/eduroam_devel/teams/11799/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,32 +21,32 @@ msgstr ""
#: App.cpp:61 Frame.h:67 MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Event Monitor"
msgstr ""
msgstr "Monitor događaja"
#: ETWLog.cpp:83
#, c-format
msgid "Error opening event trace (error %u)."
msgstr ""
msgstr "Greška prilikom otvaranja log fajla za praćenje događaja (greška %u)."
#: ETWLog.cpp:167
msgid "Time"
msgstr ""
msgstr "Vreme"
#: ETWLog.cpp:168
msgid "PID"
msgstr ""
msgstr "PID"
#: ETWLog.cpp:169
msgid "TID"
msgstr ""
msgstr "TID"
#: ETWLog.cpp:170
msgid "Source"
msgstr ""
msgstr "Izvor"
#: ETWLog.cpp:171
msgid "Event"
msgstr ""
msgstr "Događaj"
#: ETWLog.cpp:228
msgid ""
@@ -53,169 +54,173 @@ msgid ""
"(Run As Administrator) or be a member of Performance Log Users group to "
"start event tracing session."
msgstr ""
"Pristup zabranjen prilikom kreiranja sesije: potrebne su vam "
"administratorske privilegije (\"Run As Administrator\") ili da budete član "
"\"Performance Log Users\" grupe kako biste mogli da počnete sa praćenjem ove"
" sesije."
#: ETWLog.cpp:231
#, c-format
msgid "The %s event session already exists."
msgstr ""
msgstr "Ova %s sesija već postoji."
#: ETWLog.cpp:235
#, c-format
msgid "Error creating event session (error %u)."
msgstr ""
msgstr "Greška prilikom kreiranja sesije (greška %u)."
#: ETWLog.cpp:251 ETWLog.cpp:267 ETWLog.cpp:281
#, c-format
msgid "Error enabling %s event provider (error %u)."
msgstr ""
msgstr "Greška prilikom omogućavanja %s provajdera (greška %u)."
#: Frame.cpp:48 Frame.cpp:108 Frame.cpp:113 Frame.cpp:168 Frame.cpp:170
#, c-format
msgid "Toggles display of %s records"
msgstr ""
msgstr "Isključuje prikaz %s zapisa"
#: Frame.cpp:65
msgid "E&xit"
msgstr ""
msgstr "E&xit"
#: Frame.cpp:65
msgid "Quits this program"
msgstr ""
msgstr "Prekida izvršavanje ovog programa"
#: Frame.cpp:69
msgid "&Program"
msgstr ""
msgstr "&Program"
#: Frame.cpp:73
msgid "&Copy"
msgstr ""
msgstr "&Copy"
#: Frame.cpp:73 Frame.cpp:154
msgid "Copies selected records to clipboard"
msgstr ""
msgstr "Kopira izabrane zapise na clipboard"
#: Frame.cpp:78
msgid "Copy A&ll"
msgstr ""
msgstr "Kopiraj A&ll"
#: Frame.cpp:78 Frame.cpp:156
msgid "Copies all records to clipboard (including hidden)"
msgstr ""
msgstr "Kopira sve zapise na clipboard (uključujući i skrivene)"
#: Frame.cpp:83 Frame.cpp:158
msgid "Clear"
msgstr ""
msgstr "Skloni"
#: Frame.cpp:83 Frame.cpp:158
msgid "Clears all records from the log"
msgstr ""
msgstr "Sklanja sve zapise iz log fajla"
#: Frame.cpp:90
msgid "Select &All"
msgstr ""
msgstr "Izaberi &All"
#: Frame.cpp:90
msgid "Selects all visible records"
msgstr ""
msgstr "Odabira sve vidljive zapise"
#: Frame.cpp:94
msgid "Select &None"
msgstr ""
msgstr "Odaberi &None"
#: Frame.cpp:94
msgid "Clears record selection"
msgstr ""
msgstr "Uklanja izbor zapisa"
#: Frame.cpp:97 Frame.cpp:142
msgid "&Edit"
msgstr ""
msgstr "&Edit"
#: Frame.cpp:101
msgid "Auto &Scroll"
msgstr ""
msgstr "Automatski &Scroll"
#: Frame.cpp:101 Frame.cpp:164
msgid "Automatically scrolls to the most recent records as they come-in"
msgstr ""
msgstr "Automatski skroluje na najnovije zapise kako se pojavljuju"
#: Frame.cpp:123 Frame.cpp:176
msgid "Verbose"
msgstr ""
msgstr "Detalj"
#: Frame.cpp:123 Frame.cpp:176
msgid "Displays all levels of records"
msgstr ""
msgstr "Prikazuje sve nivoe zapisa"
#: Frame.cpp:127 Frame.cpp:178
msgid "Informational"
msgstr ""
msgstr "Informacija"
#: Frame.cpp:127 Frame.cpp:178
msgid "Displays all records up to informational level"
msgstr ""
msgstr "Prikazuje sve zapise za određeni nivo informacija"
#: Frame.cpp:131 Frame.cpp:180
msgid "Warning"
msgstr ""
msgstr "Upozorenje"
#: Frame.cpp:131 Frame.cpp:180
msgid "Displays all records up to warning level"
msgstr ""
msgstr "Prikazuje sve zapise za određeni nivo upozorenja"
#: Frame.cpp:135 Frame.cpp:182
msgid "Error"
msgstr ""
msgstr "Greška"
#: Frame.cpp:135 Frame.cpp:182
msgid "Displays error level records only"
msgstr ""
msgstr "Prikazuje samo zapise za greške koje su se javile"
#: Frame.cpp:142 Frame.cpp:146
#, c-format
msgid "%s toolbar"
msgstr ""
msgstr "%s toolbar"
#: Frame.cpp:142 Frame.cpp:146
#, c-format
msgid "Toggles display of %s toolbar"
msgstr ""
msgstr "Isključuje prikaz %s toolbar"
#: Frame.cpp:142 Frame.cpp:146 Frame.cpp:185
msgid "View"
msgstr ""
msgstr "Prikaži"
#: Frame.cpp:146 Frame.cpp:149
msgid "&View"
msgstr ""
msgstr "&View"
#: Frame.cpp:154
msgid "Copy"
msgstr ""
msgstr "Kopiraj"
#: Frame.cpp:156
msgid "Copy All"
msgstr ""
msgstr "Kopiraj sve"
#: Frame.cpp:161
msgid "Edit"
msgstr ""
msgstr "Izmeni"
#: Frame.cpp:164
msgid "Auto Scroll"
msgstr ""
msgstr "Automaski skrol"
#: Frame.cpp:189
msgid "Trace Log"
msgstr ""
msgstr "Log fajl"
#: 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 ""
msgstr "Prikaz internih događaja u realnom vremenu"
#: 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 ""
msgstr "EVENTM~1|GÉANTLink Event Monitor"

View File

@@ -7,7 +7,7 @@
#include "StdAfx.h"
#include "ETWLog.h"
#include "../ETWLog.h"
#include "wxEventMonitor_UI.h"

View File

@@ -133,7 +133,7 @@
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_VIRTUAL</property>
<property name="subclass">wxETWListCtrl; ETWLog.h</property>
<property name="subclass">wxETWListCtrl; ../ETWLog.h</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>

Binary file not shown.

View File

@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: GÉANTLink MSI\n"
"POT-Creation-Date: 2016-09-19 11:20+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2016\n"
"Last-Translator: University of Ruse <support@uni-ruse.bg>, 2016\n"
"Language-Team: Bulgarian (Bulgaria) (https://www.transifex.com/eduroam_devel/teams/11799/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,12 +21,12 @@ msgstr ""
#: en_US.Win32.Release.LaunchCondition-2.idtx:4
#: en_US.x64.Release.LaunchCondition-2.idtx:4
msgid "[ProductName] requires Windows Vista or later version of Windows."
msgstr ""
msgstr "[ProductName] изисква Windows Vista или по-висока версия на Windows."
#: en_US.Win32.Release.Property-2.idtx:4 en_US.Win32.Release.Property-2.idtx:5
#: en_US.x64.Release.Property-2.idtx:4 en_US.x64.Release.Property-2.idtx:5
msgid "http://www.geant.org/"
msgstr ""
msgstr "http://www.geant.org/"
#: en_US.Win32.Release.Property-2.idtx:6 en_US.x64.Release.Property-2.idtx:6
msgid "https://github.com/Amebis/GEANTLink/releases"

View File

@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: GÉANTLink MSI\n"
"POT-Creation-Date: 2016-09-19 11:20+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2016\n"
"Last-Translator: eduki <ecercos@xtec.cat>, 2016\n"
"Language-Team: Catalan (Spain) (https://www.transifex.com/eduroam_devel/teams/11799/ca_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,12 +21,12 @@ msgstr ""
#: en_US.Win32.Release.LaunchCondition-2.idtx:4
#: en_US.x64.Release.LaunchCondition-2.idtx:4
msgid "[ProductName] requires Windows Vista or later version of Windows."
msgstr ""
msgstr "[ProductName] requereix Windows Vista o posterior"
#: en_US.Win32.Release.Property-2.idtx:4 en_US.Win32.Release.Property-2.idtx:5
#: en_US.x64.Release.Property-2.idtx:4 en_US.x64.Release.Property-2.idtx:5
msgid "http://www.geant.org/"
msgstr ""
msgstr "http://www.geant.org/"
#: en_US.Win32.Release.Property-2.idtx:6 en_US.x64.Release.Property-2.idtx:6
msgid "https://github.com/Amebis/GEANTLink/releases"

View File

@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: GÉANTLink MSI\n"
"POT-Creation-Date: 2016-09-19 11:20+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2016\n"
"Last-Translator: Marko Eremija <marko.eremija@amres.ac.rs>, 2016\n"
"Language-Team: Serbian (https://www.transifex.com/eduroam_devel/teams/11799/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,11 +22,13 @@ msgstr ""
#: en_US.x64.Release.LaunchCondition-2.idtx:4
msgid "[ProductName] requires Windows Vista or later version of Windows."
msgstr ""
"[ProductName] zahteva Windows Vista operativni sistem ili noviju verziju "
"Windows operativnog sistema."
#: en_US.Win32.Release.Property-2.idtx:4 en_US.Win32.Release.Property-2.idtx:5
#: en_US.x64.Release.Property-2.idtx:4 en_US.x64.Release.Property-2.idtx:5
msgid "http://www.geant.org/"
msgstr ""
msgstr "http://www.geant.org/"
#: en_US.Win32.Release.Property-2.idtx:6 en_US.x64.Release.Property-2.idtx:6
msgid "https://github.com/Amebis/GEANTLink/releases"

Binary file not shown.

BIN
Makefile

Binary file not shown.

View File

@@ -8,22 +8,22 @@ Suite of EAP supplicants for Windows - IEEE 802.1X plug-ins for enterprise netwo
- Microsoft Windows Vista or later
- Microsoft Visual Studio 2010 SP1
- _msgfmt.exe_ from [gettext](https://www.gnu.org/software/gettext/);
Hint: [Poedit](https://poedit.net/) contains up-to-date binary Win32 compiled gettext-utilities. Install it and add _GettextTools\bin_ folder to path.
Hint: [Poedit](https://poedit.net/) contains up-to-date binary Win32 compiled gettext-utilities. Install it and add `GettextTools\bin` folder to the system path.
- _sed.exe_ and _grep.exe_
- _MsiDb.Exe_ and other command line utilities for MSI packaging distributed as a part of Microsoft Windows SDK (installed with Visual Studio). Add SDK's _Bin_ folder to path.
- _MsiDb.Exe_ and other command line utilities for MSI packaging distributed as a part of Microsoft Windows SDK (installed with Visual Studio). Add SDK's `Bin` folder to the system path.
### wxWidgets
GÉANTLink is using wxWidgets v3.0.2 static libraries. Unfortunately, dynamic libraries (DLL) variant is available as a binary download only. Therefore static libraries needs to be compiled from [source](https://github.com/wxWidgets/wxWidgets).
GÉANTLink is using wxWidgets v3.0.2 static libraries. Unfortunately, only dynamic libraries (DLL) variant is available as a binary download. Therefore static libraries needs to be compiled from [source](https://github.com/wxWidgets/wxWidgets).
#### Compiling wxWidgets Win32 static libraries
1. Start _Visual Studio Command Prompt (2010)_
2. Change working directory to _build\msw_
2. Change working folder to `build\msw`
3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0`
4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 BUILD=release`
#### Compiling wxWidgets x64 static libraries
1. Start _Visual Studio x64 Cross Tools Command Prompt (2010)_
2. Change working directory to _build\msw_
2. Change working folder to `build\msw`
3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 TARGET_CPU=X64`
4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 TARGET_CPU=X64 BUILD=release`
@@ -43,6 +43,9 @@ Please note that only Release builds are configured for timestamp signing. Debug
### Building
#### Building in Visual Studio IDE
GÉANTLink has some submodules. When cloning Git repository, make sure to use `--recursive` Git switch to clone submodules too. Example:
`git clone --recursive "https://github.com/Amebis/GEANTLink.git" "C:\Projects\GEANTLink"`
GÉANTLink can be build and debugged opening _VS10Solution.sln_ in Visual C++ 2010 IDE.
Before one can attempt to debug EAP DLLs, you should run `nmake register` from an elevated command prompt. See _Building in command line_ chapter below.
@@ -52,17 +55,21 @@ Next, one must configure a network profile actually using GÉANTLink for the aut
GÉANTLink EAP modules are divided into two DLLs: backend (i.e. _EAPTTLS.dll_) and GUI (i.e. _EAPTTLSUI.dll_).
##### Backend DLL
The backend DLL is loaded by _Eap3Host.exe_ process when connecting to the network. One approach to debug the module is to start Visual C++ elevated, open _VS10Solution.sln_, and attach to running _Eap3Host.exe_ process.
On initial connection attempt _Eap3Host.exe_ will load the DLL and will not release it until _EapHost_ service is restarted.
To debug early life of our backend DLL, uncomment `Sleep(10000)` in `DllMain()` of the module, and set breakpoints. This should give you plenty of time to attach the debugger to _Eap3Host.exe_ process before our DLL starts servicing authentication.
The backend DLL is loaded by _Eap3Host.exe_ process when connecting to the network. One approach to debug the module is to start Visual C++ elevated, open _VS10Solution.sln_, and attach to the running _Eap3Host.exe_ process.
On initial connection attempt _Eap3Host.exe_ will load the DLL and will not release it until _EapHost_ service is restarted. To release our DLL (i.e. for rebuild) you have to restart _EapHost_ service manually or run `nmake register` again.
To debug early life of our backend DLL, uncomment `Sleep(10000)` in `DllMain()` of the module, and set breakpoints. This should give you plenty of time to catch emerging _Eap3Host.exe_ process and attach the debugger to it before our DLL starts servicing authentication.
##### GUI DLL
The GUI DLL is loaded by _DllHost.exe_ process on XML profile configuration import/export and when interactive user interface is required.
A few seconds after desired function call has finished, _DllHost.exe_ terminates and releases the DLL.
To debug early life of our GUI DLL, uncomment `Sleep(10000)` in `DllMain()` of the module, and set breakpoints. This should give you plenty of time to attach the debugger to _DllHost.exe_ process before our DLL starts.
#### Building in command line
Use of standard command prompt is recommended, providing that Microsoft Visual Studio 2010 folders containing _nmake.exe_ and _devenv.com_ are added to the path.
Use of standard command prompt is recommended, providing that Microsoft Visual Studio 2010 folders containing _nmake.exe_ and _devenv.com_ are added to the system path.
Use Microsoft NMAKE to build the project.
@@ -71,7 +78,7 @@ Command | Explanation
`nmake Clean` | Deletes all intermediate and output files.
`nmake Register` | Builds a debug version of project, registers DLLs, and adds Start Menu shortcuts. For testing and development purposes only! Requires elevated command prompt.
`nmake Unregister` | Removes Start Menu shortcuts, unregisters DLLs. For testing development purposes only! Requires elevated command prompt.
`nmake Setup` | Builds a release version of project and release MSI setup files. The resulting files can be found in _output\Setup_ folder.
`nmake SetupDebug` | Builds a debug version of project and debug MSI setup files. The resulting files can be found in _output\Setup_ folder.
`nmake Setup` | Builds a release version of project and release MSI setup files. The resulting files can be found in `output\Setup` folder.
`nmake SetupDebug` | Builds a debug version of project and debug MSI setup files. The resulting files can be found in `output\Setup` folder.
The `/ls` flag can be appended to the commands above to reduce NMAKEs verbosity. You can combine multiple targets (i.e. nmake Unregister Clean). Please, see NMAKE reference for further reading.

View File

@@ -5,6 +5,7 @@ msgstr ""
"Project-Id-Version: WLANManager\n"
"POT-Creation-Date: 2016-09-19 11:22+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: University of Ruse <support@uni-ruse.bg>, 2016\n"
"Language-Team: Bulgarian (Bulgaria) (https://www.transifex.com/eduroam_devel/teams/11799/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,7 +23,7 @@ msgstr ""
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "WLAN Manager"
msgstr ""
msgstr "Управление на WLAN"
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
@@ -31,3 +32,5 @@ msgstr ""
msgid ""
"Helper utility to support direct shortcuts to Wireless Network Properties"
msgstr ""
"Помощно средство, поддържащо директен пряк линк до Wireless Network "
"Properties"

View File

@@ -5,6 +5,7 @@ msgstr ""
"Project-Id-Version: WLANManager\n"
"POT-Creation-Date: 2016-09-19 11:22+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: eduki <ecercos@xtec.cat>, 2016\n"
"Language-Team: Catalan (Spain) (https://www.transifex.com/eduroam_devel/teams/11799/ca_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,7 +23,7 @@ msgstr ""
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "WLAN Manager"
msgstr ""
msgstr "Administrador de WLAN"
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
@@ -31,3 +32,5 @@ msgstr ""
msgid ""
"Helper utility to support direct shortcuts to Wireless Network Properties"
msgstr ""
"Utilitat d'ajuda per a accessos directes a les Propietats de Xarxa "
"inalàmbrica"

View File

@@ -5,6 +5,7 @@ msgstr ""
"Project-Id-Version: WLANManager\n"
"POT-Creation-Date: 2016-09-19 11:22+0200\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Marko Eremija <marko.eremija@amres.ac.rs>, 2016\n"
"Language-Team: Serbian (https://www.transifex.com/eduroam_devel/teams/11799/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,7 +23,7 @@ msgstr ""
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "WLAN Manager"
msgstr ""
msgstr "WLAN Manager"
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
@@ -31,3 +32,5 @@ msgstr ""
msgid ""
"Helper utility to support direct shortcuts to Wireless Network Properties"
msgstr ""
"Alat za podršku koji pomaže prilikom kreiranja direktnih prečica za bežične "
"mrežne profile"

Binary file not shown.

View File

@@ -29,7 +29,7 @@
// Product version as a single DWORD
// Note: Used for version comparison within C/C++ code.
//
#define PRODUCT_VERSION 0x00ff1900
#define PRODUCT_VERSION 0x01001b00
//
// Product version by components
@@ -37,28 +37,28 @@
// thus we need to specify major, minor and other version components
// separately.
//
#define PRODUCT_VERSION_MAJ 0
#define PRODUCT_VERSION_MIN 255
#define PRODUCT_VERSION_REV 25
#define PRODUCT_VERSION_MAJ 1
#define PRODUCT_VERSION_MIN 0
#define PRODUCT_VERSION_REV 27
#define PRODUCT_VERSION_BUILD 0
//
// Human readable product version and build year for UI
//
#define PRODUCT_VERSION_STR "1.0-beta7"
#define PRODUCT_VERSION_STR "1.0"
#define PRODUCT_BUILD_YEAR_STR "2016"
//
// Numerical version presentation for ProductVersion propery in
// MSI packages (syntax: N.N[.N[.N]])
//
#define PRODUCT_VERSION_INST "0.255.25"
#define PRODUCT_VERSION_INST "1.0.27"
//
// The product code for ProductCode property in MSI packages
// Replace with new on every version change, regardless how minor it is.
//
#define PRODUCT_VERSION_GUID "{603E4647-DA68-4F56-9503-9050756C3159}"
#define PRODUCT_VERSION_GUID "{8589167A-BEE3-4C2D-9B18-444699E95F42}"
//
// Product vendor

View File

@@ -720,7 +720,7 @@ namespace eap
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const bool &val)
{
eap::cursor_out::ptr_type ptr_end = cursor.ptr + 1;
auto ptr_end = cursor.ptr + 1;
assert(ptr_end <= cursor.ptr_end);
*cursor.ptr = val ? 1 : 0;
cursor.ptr = ptr_end;
@@ -736,7 +736,7 @@ inline size_t pksizeof(_In_ const bool &val)
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ bool &val)
{
eap::cursor_in::ptr_type ptr_end = cursor.ptr + 1;
auto ptr_end = cursor.ptr + 1;
assert(ptr_end <= cursor.ptr_end);
val = *cursor.ptr ? true : false;
cursor.ptr = ptr_end;
@@ -745,7 +745,7 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ bool &val)
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const unsigned char &val)
{
eap::cursor_out::ptr_type ptr_end = cursor.ptr + 1;
auto ptr_end = cursor.ptr + 1;
assert(ptr_end <= cursor.ptr_end);
*cursor.ptr = val;
cursor.ptr = ptr_end;
@@ -761,7 +761,7 @@ inline size_t pksizeof(_In_ const unsigned char &val)
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ unsigned char &val)
{
eap::cursor_in::ptr_type ptr_end = cursor.ptr + 1;
auto ptr_end = cursor.ptr + 1;
assert(ptr_end <= cursor.ptr_end);
val = *cursor.ptr;
cursor.ptr = ptr_end;
@@ -770,9 +770,9 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ unsigned char &val)
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const unsigned int &val)
{
eap::cursor_out::ptr_type ptr_end = cursor.ptr + sizeof(unsigned int);
auto ptr_end = cursor.ptr + sizeof(unsigned int);
assert(ptr_end <= cursor.ptr_end);
*(unsigned int*)cursor.ptr = val;
*reinterpret_cast<unsigned int*>(cursor.ptr) = val;
cursor.ptr = ptr_end;
}
@@ -786,9 +786,9 @@ inline size_t pksizeof(_In_ const unsigned int &val)
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ unsigned int &val)
{
eap::cursor_in::ptr_type ptr_end = cursor.ptr + sizeof(unsigned int);
auto ptr_end = cursor.ptr + sizeof(unsigned int);
assert(ptr_end <= cursor.ptr_end);
val = *(unsigned int*)cursor.ptr;
val = *reinterpret_cast<const unsigned int*>(cursor.ptr);
cursor.ptr = ptr_end;
}
@@ -796,7 +796,7 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ unsigned int &val)
#ifdef _WIN64
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const size_t &val)
{
eap::cursor_out::ptr_type ptr_end = cursor.ptr + sizeof(size_t);
auto ptr_end = cursor.ptr + sizeof(size_t);
assert(ptr_end <= cursor.ptr_end);
*(size_t*)cursor.ptr = val;
cursor.ptr = ptr_end;
@@ -812,7 +812,7 @@ inline size_t pksizeof(_In_ const size_t &val)
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ size_t &val)
{
eap::cursor_in::ptr_type ptr_end = cursor.ptr + sizeof(size_t);
auto ptr_end = cursor.ptr + sizeof(size_t);
assert(ptr_end <= cursor.ptr_end);
val = *(size_t*)cursor.ptr;
cursor.ptr = ptr_end;
@@ -823,10 +823,10 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ size_t &val)
template<class _Elem, class _Traits, class _Ax>
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val)
{
std::basic_string<_Elem, _Traits, _Ax>::size_type count = val.length();
size_t count = val.length();
assert(strlen(val.c_str()) == count); // String should not contain zero terminators.
size_t size = sizeof(_Elem)*(count + 1);
eap::cursor_out::ptr_type ptr_end = cursor.ptr + size;
auto ptr_end = cursor.ptr + size;
assert(ptr_end <= cursor.ptr_end);
memcpy(cursor.ptr, (const _Elem*)val.c_str(), size);
cursor.ptr = ptr_end;
@@ -844,7 +844,7 @@ template<class _Elem, class _Traits, class _Ax>
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::basic_string<_Elem, _Traits, _Ax> &val)
{
size_t count_max = cursor.ptr_end - cursor.ptr;
std::basic_string<_Elem, _Traits, _Ax>::size_type count = strnlen((const _Elem*&)cursor.ptr, count_max);
size_t count = strnlen((const _Elem*&)cursor.ptr, count_max);
assert(count < count_max); // String should be zero terminated.
val.assign((const _Elem*&)cursor.ptr, count);
cursor.ptr += sizeof(_Elem)*(count + 1);
@@ -855,7 +855,7 @@ template<class _Traits, class _Ax>
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val)
{
std::string val_utf8;
WideCharToMultiByte(CP_UTF8, 0, val.c_str(), (int)val.length(), val_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, val, val_utf8, NULL, NULL);
cursor << val_utf8;
}
@@ -872,20 +872,20 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::basic_string<w
{
std::string val_utf8;
cursor >> val_utf8;
MultiByteToWideChar(CP_UTF8, 0, val_utf8.c_str(), (int)val_utf8.length(), val);
MultiByteToWideChar(CP_UTF8, 0, val_utf8, val);
}
template<class _Ty, class _Ax>
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::vector<_Ty, _Ax> &val)
{
std::vector<_Ty, _Ax>::size_type count = val.size();
auto count = val.size();
cursor << count;
// Since we do not know wheter vector elements are primitives or objects, iterate instead of memcpy.
// For performance critical vectors of flat opaque data types write specialized template instantiation.
for (std::vector<_Ty, _Ax>::size_type i = 0; i < count; i++)
cursor << val[i];
for (auto i = val.cbegin(), i_end = val.cend(); i != i_end; ++i)
cursor << *i;
}
@@ -894,10 +894,10 @@ inline size_t pksizeof(const std::vector<_Ty, _Ax> &val)
{
// Since we do not know wheter vector elements are primitives or objects, iterate instead of sizeof().
// For performance critical vectors of flat opaque data types write specialized template instantiation.
std::vector<_Ty, _Ax>::size_type count = val.size();
auto count = val.size();
size_t size = pksizeof(count);
for (std::vector<_Ty, _Ax>::size_type i = 0; i < count; i++)
size += pksizeof(val[i]);
for (auto i = val.cbegin(), i_end = val.cend(); i != i_end; ++i)
size += pksizeof(*i);
return size;
}
@@ -905,14 +905,14 @@ inline size_t pksizeof(const std::vector<_Ty, _Ax> &val)
template<class _Ty, class _Ax>
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::vector<_Ty, _Ax> &val)
{
std::vector<_Ty, _Ax>::size_type count;
std::vector<_Ty, _Ax>::size_type i, count;
cursor >> count;
// Since we do not know wheter vector elements are primitives or objects, iterate instead of assign().
// For performance critical vectors of flat opaque data types write specialized template instantiation.
val.clear();
val.reserve(count);
for (std::vector<_Ty, _Ax>::size_type i = 0; i < count; i++) {
for (i = 0; i < count; i++) {
_Ty el;
cursor >> el;
val.push_back(el);
@@ -923,12 +923,12 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::vector<_Ty, _A
template<class _Ty, class _Ax>
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::list<_Ty, _Ax> &val)
{
std::list<_Ty, _Ax>::size_type count = val.size();
auto count = val.size();
cursor << count;
// Since we do not know wheter list elements are primitives or objects, iterate instead of memcpy.
// For performance critical vectors of flat opaque data types write specialized template instantiation.
for (std::list<_Ty, _Ax>::const_iterator i = val.cbegin(), i_end = val.cend(); i != i_end; ++i)
for (auto i = val.cbegin(), i_end = val.cend(); i != i_end; ++i)
cursor << *i;
}
@@ -938,9 +938,9 @@ inline size_t pksizeof(const std::list<_Ty, _Ax> &val)
{
// Since we do not know wheter list elements are primitives or objects, iterate instead of sizeof().
// For performance critical vectors of flat opaque data types write specialized template instantiation.
std::list<_Ty, _Ax>::size_type count = val.size();
auto count = val.size();
size_t size = pksizeof(count);
for (std::list<_Ty, _Ax>::const_iterator i = val.cbegin(), i_end = val.cend(); i != i_end; ++i)
for (auto i = val.cbegin(), i_end = val.cend(); i != i_end; ++i)
size += pksizeof(*i);
return size;
}
@@ -949,13 +949,11 @@ inline size_t pksizeof(const std::list<_Ty, _Ax> &val)
template<class _Ty, class _Ax>
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::list<_Ty, _Ax> &val)
{
std::list<_Ty, _Ax>::size_type count;
std::list<_Ty, _Ax>::size_type i, count;
cursor >> count;
// Since we do not know wheter list elements are primitives or objects, iterate instead of assign().
// For performance critical vectors of flat opaque data types write specialized template instantiation.
val.clear();
for (std::list<_Ty, _Ax>::size_type i = 0; i < count; i++) {
for (i = 0; i < count; i++) {
_Ty el;
cursor >> el;
val.push_back(el);
@@ -990,7 +988,7 @@ inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const winstd::cert_
if (val) {
cursor << (unsigned int)val->dwCertEncodingType;
cursor << (unsigned int)val->cbCertEncoded ;
eap::cursor_out::ptr_type ptr_end = cursor.ptr + val->cbCertEncoded;
auto ptr_end = cursor.ptr + val->cbCertEncoded;
assert(ptr_end <= cursor.ptr_end);
memcpy(cursor.ptr, val->pbCertEncoded, val->cbCertEncoded);
cursor.ptr = ptr_end;
@@ -1022,7 +1020,7 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ winstd::cert_contex
cursor >> (unsigned int&)dwCertEncodedSize;
if (dwCertEncodedSize) {
eap::cursor_in::ptr_type ptr_end = cursor.ptr + dwCertEncodedSize;
auto ptr_end = cursor.ptr + dwCertEncodedSize;
assert(ptr_end <= cursor.ptr_end);
val.create(dwCertEncodingType, (BYTE*)cursor.ptr, dwCertEncodedSize);
cursor.ptr = ptr_end;
@@ -1052,7 +1050,7 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ winstd::eap_type_t
template<size_t N>
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const eap::sanitizing_blob_f<N> &val)
{
eap::cursor_out::ptr_type ptr_end = cursor.ptr + sizeof(eap::sanitizing_blob_f<N>);
auto ptr_end = cursor.ptr + sizeof(eap::sanitizing_blob_f<N>);
assert(ptr_end <= cursor.ptr_end);
memcpy(cursor.ptr, val.data, sizeof(eap::sanitizing_blob_f<N>));
cursor.ptr = ptr_end;
@@ -1070,7 +1068,7 @@ inline size_t pksizeof(_In_ const eap::sanitizing_blob_f<N> &val)
template<size_t N>
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ eap::sanitizing_blob_f<N> &val)
{
eap::cursor_in::ptr_type ptr_end = cursor.ptr + sizeof(eap::sanitizing_blob_f<N>);
auto ptr_end = cursor.ptr + sizeof(eap::sanitizing_blob_f<N>);
assert(ptr_end <= cursor.ptr_end);
memcpy(val.data, cursor.ptr, sizeof(eap::sanitizing_blob_f<N>));
cursor.ptr = ptr_end;
@@ -1079,7 +1077,7 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ eap::sanitizing_blo
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const GUID &val)
{
eap::cursor_out::ptr_type ptr_end = cursor.ptr + sizeof(GUID);
auto ptr_end = cursor.ptr + sizeof(GUID);
assert(ptr_end <= cursor.ptr_end);
memcpy(cursor.ptr, &val, sizeof(GUID));
cursor.ptr = ptr_end;
@@ -1095,7 +1093,7 @@ inline size_t pksizeof(_In_ const GUID &val)
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ GUID &val)
{
eap::cursor_in::ptr_type ptr_end = cursor.ptr + sizeof(GUID);
auto ptr_end = cursor.ptr + sizeof(GUID);
assert(ptr_end <= cursor.ptr_end);
memcpy(&val, cursor.ptr, sizeof(GUID));
cursor.ptr = ptr_end;

View File

@@ -108,7 +108,7 @@ namespace eap
virtual void process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput) = 0;
_Out_ EapPeerMethodOutput *pEapOutput) = 0;
///
/// Obtains a response packet from the EAP method.
@@ -126,7 +126,7 @@ namespace eap
///
virtual void get_result(
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult);
_Inout_ EapPeerMethodResult *pResult);
/// @}

View File

@@ -147,14 +147,19 @@ namespace eap
///
inline void log_config(_In_z_ LPCWSTR name, _In_z_ LPCWSTR value) const
{
m_ep.write(&EAPMETHOD_TRACE_EVT_CFG_VALUE_UNICODE_STRING, winstd::event_data(name), winstd::event_data(value), winstd::event_data::blank);
EVENT_DATA_DESCRIPTOR desc[] = {
winstd::event_data(name ),
winstd::event_data(value)
};
m_ep.write(&EAPMETHOD_TRACE_EVT_CFG_VALUE_UNICODE_STRING, _countof(desc), desc);
}
///
/// Logs string list config value
///
template<class _Traits, class _Ax, class _Ax_list>
inline void log_config(_In_z_ LPCWSTR name, _In_z_ const std::list<std::basic_string<char, _Traits, _Ax>, _Ax_list> &value) const
inline void log_config(_In_z_ LPCWSTR name, _In_ const std::list<std::basic_string<char, _Traits, _Ax>, _Ax_list> &value) const
{
// Prepare a table of event data descriptors.
std::vector<EVENT_DATA_DESCRIPTOR> desc;
@@ -162,7 +167,7 @@ namespace eap
desc.reserve(count + 2);
desc.push_back(winstd::event_data( name ));
desc.push_back(winstd::event_data((unsigned int)count));
for (std::list<std::basic_string<char, _Traits, _Ax>, _Ax_list>::const_iterator v = value.cbegin(), v_end = value.cend(); v != v_end; ++v)
for (auto v = value.cbegin(), v_end = value.cend(); v != v_end; ++v)
desc.push_back(winstd::event_data(*v));
m_ep.write(&EAPMETHOD_TRACE_EVT_CFG_VALUE_ANSI_STRING_ARRAY, (ULONG)desc.size(), desc.data());
@@ -172,7 +177,7 @@ namespace eap
/// Logs Unicode string list config value
///
template<class _Traits, class _Ax, class _Ax_list>
inline void log_config(_In_z_ LPCWSTR name, _In_z_ const std::list<std::basic_string<wchar_t, _Traits, _Ax>, _Ax_list> &value) const
inline void log_config(_In_z_ LPCWSTR name, _In_ const std::list<std::basic_string<wchar_t, _Traits, _Ax>, _Ax_list> &value) const
{
// Prepare a table of event data descriptors.
std::vector<EVENT_DATA_DESCRIPTOR> desc;
@@ -180,7 +185,7 @@ namespace eap
desc.reserve(count + 2);
desc.push_back(winstd::event_data( name ));
desc.push_back(winstd::event_data((unsigned int)count));
for (std::list<std::basic_string<wchar_t, _Traits, _Ax>, _Ax_list>::const_iterator v = value.cbegin(), v_end = value.cend(); v != v_end; ++v)
for (auto v = value.cbegin(), v_end = value.cend(); v != v_end; ++v)
desc.push_back(winstd::event_data(*v));
m_ep.write(&EAPMETHOD_TRACE_EVT_CFG_VALUE_UNICODE_STRING_ARRAY, (ULONG)desc.size(), desc.data());
@@ -191,7 +196,56 @@ namespace eap
///
inline void log_config(_In_z_ LPCWSTR name, _In_ bool value) const
{
m_ep.write(&EAPMETHOD_TRACE_EVT_CFG_VALUE_BOOL, winstd::event_data(name), winstd::event_data((int)value), winstd::event_data::blank);
EVENT_DATA_DESCRIPTOR desc[] = {
winstd::event_data( name ),
winstd::event_data((int)value)
};
m_ep.write(&EAPMETHOD_TRACE_EVT_CFG_VALUE_BOOL, _countof(desc), desc);
}
///
/// Logs binary config value
///
inline void log_config(_In_z_ LPCWSTR name, _In_bytecount_(size) const void *data, _In_ ULONG size) const
{
EVENT_DATA_DESCRIPTOR desc[] = {
winstd::event_data( name),
winstd::event_data( size),
winstd::event_data(data, size)
};
m_ep.write(&EAPMETHOD_TRACE_EVT_CFG_VALUE_BINARY, _countof(desc), desc);
}
///
/// Discretely logs Unicode string config value
///
/// If \c _DEBUG is set the value is masked.
///
inline void log_config_discrete(_In_z_ LPCWSTR name, _In_z_ LPCWSTR value) const
{
#ifdef __DANGEROUS__LOG_CONFIDENTIAL_DATA
#pragma message (__FILE__ "(" STRING(__LINE__) "): Warning: !!! DANGER !!! Passwords and certificates will be logged as a clear-text. Please, consider undefining __DANGEROUS__LOG_CONFIDENTIAL_DATA.")
log_config(name, value);
#else
log_config(name, value ? value[0] ? L"********" : L"" : NULL);
#endif
}
///
/// Discretely logs binary config value
///
/// If \c _DEBUG is set the value is masked.
///
inline void log_config_discrete(_In_z_ LPCWSTR name, _In_bytecount_(size) const void *data, _In_ ULONG size) const
{
#ifdef __DANGEROUS__LOG_CONFIDENTIAL_DATA
#pragma message (__FILE__ "(" STRING(__LINE__) "): Warning: !!! DANGER !!! Passwords and certificates will be logged as a clear-text. Please, consider undefining __DANGEROUS__LOG_CONFIDENTIAL_DATA.")
log_config(name, data, size);
#else
log_config(name, data ? size ? L"********" : L"" : NULL);
#endif
}
///
@@ -253,7 +307,7 @@ namespace eap
std::vector<unsigned char> encrypt(_In_ HCRYPTPROV hProv, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val, _Out_opt_ HCRYPTHASH hHash = NULL) const
{
winstd::sanitizing_string val_utf8;
WideCharToMultiByte(CP_UTF8, 0, val.c_str(), (int)val.length(), val_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, val, val_utf8, NULL, NULL);
return encrypt(hProv, val_utf8, hHash);
}
@@ -297,7 +351,7 @@ namespace eap
std::vector<unsigned char> encrypt_md5(_In_ HCRYPTPROV hProv, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val) const
{
winstd::sanitizing_string val_utf8;
WideCharToMultiByte(CP_UTF8, 0, val.c_str(), (int)val.length(), val_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, val, val_utf8, NULL, NULL);
return encrypt_md5(hProv, val_utf8);
}
@@ -330,12 +384,12 @@ namespace eap
// Import the 256-bit AES session key.
winstd::crypt_key key_aes;
if (!CryptImportKey(hProv, (LPCBYTE)data, 268, key_rsa, 0, &key_aes))
if (!CryptImportKey(hProv, reinterpret_cast<LPCBYTE>(data), 268, key_rsa, 0, &key_aes))
throw win_runtime_error(__FUNCTION__ " CryptImportKey failed.");
// Decrypt the data using AES session key.
std::vector<unsigned char, winstd::sanitizing_allocator<unsigned char> > buf;
buf.assign((const unsigned char*)data + 268, (const unsigned char*)data + size);
buf.assign(reinterpret_cast<const unsigned char*>(data) + 268, reinterpret_cast<const unsigned char*>(data) + size);
if (!CryptDecrypt(key_aes, hHash, TRUE, 0, buf))
throw win_runtime_error(__FUNCTION__ " CryptDecrypt failed.");
@@ -378,7 +432,7 @@ namespace eap
{
winstd::sanitizing_string buf(std::move(decrypt_str(hProv, data, size, hHash)));
std::basic_string<wchar_t, _Traits, _Ax> dec;
MultiByteToWideChar(CP_UTF8, 0, buf.data(), (int)buf.size(), dec);
MultiByteToWideChar(CP_UTF8, 0, buf, dec);
return dec;
}
@@ -412,7 +466,7 @@ namespace eap
std::vector<unsigned char> hash_bin;
if (!CryptGetHashParam(hash, HP_HASHVAL, hash_bin, 0))
throw win_runtime_error(__FUNCTION__ " Calculating MD5 hash failed.");
if (memcmp((unsigned char*)data + enc_size, hash_bin.data(), dwHashSize) != 0)
if (memcmp(reinterpret_cast<const unsigned char*>(data) + enc_size, hash_bin.data(), dwHashSize) != 0)
throw invalid_argument(__FUNCTION__ " Invalid encrypted data.");
return dec;
@@ -450,7 +504,7 @@ namespace eap
{
winstd::sanitizing_string buf(std::move(decrypt_str_md5<char, std::char_traits<char>, sanitizing_allocator<char> >(hProv, data, size)));
std::basic_string<wchar_t, _Traits, _Ax> dec;
MultiByteToWideChar(CP_UTF8, 0, buf.data(), (int)buf.size(), dec);
MultiByteToWideChar(CP_UTF8, 0, buf, dec);
return dec;
}
@@ -717,7 +771,7 @@ namespace eap
_In_ EAP_SESSION_HANDLE hSession,
_In_bytecount_(dwReceivedPacketSize) const EapPacket *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput) = 0;
_Out_ EapPeerMethodOutput *pEapOutput) = 0;
///
/// Obtains a response packet from the EAP method.
@@ -737,7 +791,7 @@ namespace eap
virtual void get_result(
_In_ EAP_SESSION_HANDLE hSession,
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult) = 0;
_Inout_ EapPeerMethodResult *pResult) = 0;
///
/// Obtains the user interface context from the EAP method.
@@ -762,7 +816,7 @@ namespace eap
_In_ EAP_SESSION_HANDLE hSession,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ DWORD dwUIContextDataSize,
_In_ const EapPeerMethodOutput *pEapOutput) = 0;
_Out_ EapPeerMethodOutput *pEapOutput) = 0;
///
/// Obtains an array of EAP response attributes from the EAP method.
@@ -781,7 +835,7 @@ namespace eap
virtual void set_response_attributes(
_In_ EAP_SESSION_HANDLE hSession,
_In_ const EapAttributes *pAttribs,
_Inout_ EapPeerMethodOutput *pEapOutput) = 0;
_Out_ EapPeerMethodOutput *pEapOutput) = 0;
/// @}
};

View File

@@ -242,9 +242,9 @@ eap::config_method_with_cred::config_method_with_cred(_In_ module &mod, _In_ uns
eap::config_method_with_cred::config_method_with_cred(_In_ const config_method_with_cred &other) :
m_use_cred (other.m_use_cred ),
m_cred (other.m_cred ? (credentials*)other.m_cred->clone() : nullptr),
config_method(other )
m_use_cred (other.m_use_cred ),
m_cred (other.m_cred ? dynamic_cast<credentials*>(other.m_cred->clone()) : nullptr),
config_method(other )
{
}
@@ -262,7 +262,7 @@ eap::config_method_with_cred& eap::config_method_with_cred::operator=(_In_ const
if (this != &other) {
(config_method&)*this = other;
m_use_cred = other.m_use_cred;
m_cred.reset(other.m_cred ? (credentials*)other.m_cred->clone() : nullptr);
m_cred.reset(other.m_cred ? dynamic_cast<credentials*>(other.m_cred->clone()) : nullptr);
}
return *this;
@@ -375,8 +375,8 @@ eap::config_provider::config_provider(_In_ const config_provider &other) :
config (other )
{
m_methods.reserve(other.m_methods.size());
for (vector<unique_ptr<config_method> >::const_iterator method = other.m_methods.cbegin(), method_end = other.m_methods.cend(); method != method_end; ++method)
m_methods.push_back(std::move(unique_ptr<config_method>(*method ? (config_method*)method->get()->clone() : nullptr)));
for (auto method = other.m_methods.cbegin(), method_end = other.m_methods.cend(); method != method_end; ++method)
m_methods.push_back(std::move(unique_ptr<config_method>(*method ? dynamic_cast<config_method*>(method->get()->clone()) : nullptr)));
}
@@ -414,8 +414,8 @@ eap::config_provider& eap::config_provider::operator=(_In_ const config_provider
m_methods.clear();
m_methods.reserve(other.m_methods.size());
for (vector<unique_ptr<config_method> >::const_iterator method = other.m_methods.cbegin(), method_end = other.m_methods.cend(); method != method_end; ++method)
m_methods.push_back(std::move(unique_ptr<config_method>(*method ? (config_method*)method->get()->clone() : nullptr)));
for (auto method = other.m_methods.cbegin(), method_end = other.m_methods.cend(); method != method_end; ++method)
m_methods.push_back(std::move(unique_ptr<config_method>(*method ? dynamic_cast<config_method*>(method->get()->clone()) : nullptr)));
}
return *this;
@@ -519,7 +519,7 @@ void eap::config_provider::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pC
if (FAILED(hr = eapxml::create_element(pDoc, pConfigRoot, bstr(L"eap-metadata:AuthenticationMethods"), bstr(L"AuthenticationMethods"), namespace_eapmetadata, pXmlElAuthenticationMethods)))
throw com_runtime_error(hr, __FUNCTION__ " Error creating <AuthenticationMethods> element.");
for (vector<unique_ptr<config_method> >::const_iterator method = m_methods.cbegin(), method_end = m_methods.cend(); method != method_end; ++method) {
for (auto method = m_methods.cbegin(), method_end = m_methods.cend(); method != method_end; ++method) {
// <AuthenticationMethod>
com_obj<IXMLDOMElement> pXmlElAuthenticationMethod;
if (FAILED(hr = eapxml::create_element(pDoc, bstr(L"AuthenticationMethod"), namespace_eapmetadata, pXmlElAuthenticationMethod)))
@@ -685,11 +685,12 @@ void eap::config_provider::operator>>(_Inout_ cursor_in &cursor)
cursor >> m_lbl_alt_identity ;
cursor >> m_lbl_alt_password ;
list<config_method>::size_type count;
bool is_nonnull;
list<config_method>::size_type i, count;
cursor >> count;
m_methods.clear();
for (list<config_method>::size_type i = 0; i < count; i++) {
m_methods.reserve(count);
for (i = 0; i < count; i++) {
bool is_nonnull;
cursor >> is_nonnull;
if (is_nonnull) {
unique_ptr<config_method> el(m_module.make_config_method());
@@ -763,7 +764,7 @@ void eap::config_connection::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *
if (FAILED(hr = eapxml::create_element(pDoc, pConfigRoot, bstr(L"eap-metadata:EAPIdentityProviderList"), bstr(L"EAPIdentityProviderList"), namespace_eapmetadata, pXmlElIdentityProviderList)))
throw com_runtime_error(hr, __FUNCTION__ " Error creating <EAPIdentityProviderList> element.");
for (provider_list::const_iterator provider = m_providers.cbegin(), provider_end = m_providers.cend(); provider != provider_end; ++provider) {
for (auto provider = m_providers.cbegin(), provider_end = m_providers.cend(); provider != provider_end; ++provider) {
// <EAPIdentityProvider>
com_obj<IXMLDOMElement> pXmlElIdentityProvider;
if (FAILED(hr = eapxml::create_element(pDoc, bstr(L"EAPIdentityProvider"), namespace_eapmetadata, pXmlElIdentityProvider)))
@@ -825,10 +826,10 @@ void eap::config_connection::operator>>(_Inout_ cursor_in &cursor)
{
config::operator>>(cursor);
provider_list::size_type count;
provider_list::size_type i, count;
cursor >> count;
m_providers.clear();
for (provider_list::size_type i = 0; i < count; i++) {
for (i = 0; i < count; i++) {
config_provider el(m_module);
cursor >> el;
m_providers.push_back(std::move(el));

View File

@@ -251,7 +251,7 @@ void eap::credentials_pass::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *p
switch (m_enc_alg) {
case enc_alg_kph: {
sanitizing_string password_utf8;
WideCharToMultiByte(CP_UTF8, 0, m_password.c_str(), -1, password_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, m_password, password_utf8, NULL, NULL);
wstring password_enc(std::move(kph_encrypt<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >(cp, password_utf8.c_str())));
com_obj<IXMLDOMElement> pXmlElPassword;
if (FAILED(hr = eapxml::put_element_value(pDoc, pConfigRoot, bstr(L"Password"), namespace_eapmetadata, bstr(password_enc), std::addressof(pXmlElPassword))))
@@ -308,7 +308,7 @@ void eap::credentials_pass::load(_In_ IXMLDOMNode *pConfigRoot)
} else if (encryption && CompareStringEx(LOCALE_NAME_INVARIANT, NORM_IGNORECASE, encryption, encryption.length(), _L("KPH"), -1, NULL, NULL, 0) == CSTR_EQUAL) {
// Decrypt password.
sanitizing_string password_utf8(std::move(kph_decrypt<OLECHAR>(password)));
MultiByteToWideChar(CP_UTF8, 0, password_utf8.c_str(), -1, m_password);
MultiByteToWideChar(CP_UTF8, 0, password_utf8, m_password);
m_enc_alg = enc_alg_kph;
} else if (encryption && encryption[0]) {
// Encryption is defined but unrecognized.
@@ -319,13 +319,7 @@ void eap::credentials_pass::load(_In_ IXMLDOMNode *pConfigRoot)
SecureZeroMemory((BSTR)password, sizeof(OLECHAR)*password.length());
}
m_module.log_config((xpath + L"/Password").c_str(),
#ifdef _DEBUG
m_password.c_str()
#else
L"********"
#endif
);
m_module.log_config_discrete((xpath + L"/Password").c_str(), m_password.c_str());
}
@@ -360,13 +354,13 @@ void eap::credentials_pass::store(_In_z_ LPCTSTR pszTargetName, _In_ unsigned in
// Convert password to UTF-8.
sanitizing_string cred_utf8;
WideCharToMultiByte(CP_UTF8, 0, m_password.c_str(), (int)m_password.length(), cred_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, m_password, cred_utf8, NULL, NULL);
// Encrypt the password using user's key.
DATA_BLOB cred_blob = { (DWORD)cred_utf8.size() , (LPBYTE)cred_utf8.data() };
DATA_BLOB entropy_blob = { sizeof(s_entropy), (LPBYTE)s_entropy };
DATA_BLOB cred_blob = { (DWORD)cred_utf8.size() , const_cast<LPBYTE>(reinterpret_cast<LPCBYTE>(cred_utf8.data())) };
DATA_BLOB entropy_blob = { sizeof(s_entropy), const_cast<LPBYTE>( s_entropy ) };
data_blob cred_enc;
if (!CryptProtectData(&cred_blob, NULL, &entropy_blob, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &cred_enc))
if (!CryptProtectData(&cred_blob, NULL, &entropy_blob, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN | CRYPTPROTECT_AUDIT, &cred_enc))
throw win_runtime_error(__FUNCTION__ " CryptProtectData failed.");
tstring target(target_name(pszTargetName, level));
@@ -375,18 +369,18 @@ void eap::credentials_pass::store(_In_z_ LPCTSTR pszTargetName, _In_ unsigned in
assert(cred_enc.cbData < CRED_MAX_CREDENTIAL_BLOB_SIZE);
assert(m_identity.length() < CRED_MAX_USERNAME_LENGTH );
CREDENTIAL cred = {
0, // Flags
CRED_TYPE_GENERIC, // Type
(LPTSTR)target.c_str(), // TargetName
_T(""), // Comment
{ 0, 0 }, // LastWritten
cred_enc.cbData, // CredentialBlobSize
cred_enc.pbData, // CredentialBlob
CRED_PERSIST_ENTERPRISE, // Persist
0, // AttributeCount
NULL, // Attributes
NULL, // TargetAlias
(LPTSTR)m_identity.c_str() // UserName
0, // Flags
CRED_TYPE_GENERIC, // Type
const_cast<LPTSTR>(target.c_str()), // TargetName
_T(""), // Comment
{ 0, 0 }, // LastWritten
cred_enc.cbData, // CredentialBlobSize
cred_enc.pbData, // CredentialBlob
CRED_PERSIST_ENTERPRISE, // Persist
0, // AttributeCount
NULL, // Attributes
NULL, // TargetAlias
const_cast<LPTSTR>(m_identity.c_str()) // UserName
};
if (!CredWrite(&cred, 0))
throw win_runtime_error(__FUNCTION__ " CredWrite failed.");
@@ -403,14 +397,14 @@ void eap::credentials_pass::retrieve(_In_z_ LPCTSTR pszTargetName, _In_ unsigned
throw win_runtime_error(__FUNCTION__ " CredRead failed.");
// Decrypt the password using user's key.
DATA_BLOB cred_enc = { cred->CredentialBlobSize, cred->CredentialBlob };
DATA_BLOB entropy_blob = { sizeof(s_entropy) , (LPBYTE)s_entropy };
DATA_BLOB cred_enc = { cred->CredentialBlobSize, cred->CredentialBlob };
DATA_BLOB entropy_blob = { sizeof(s_entropy) , const_cast<LPBYTE>(s_entropy) };
data_blob cred_int;
if (!CryptUnprotectData(&cred_enc, NULL, &entropy_blob, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN | CRYPTPROTECT_VERIFY_PROTECTION, &cred_int))
throw win_runtime_error(__FUNCTION__ " CryptUnprotectData failed.");
// Convert password from UTF-8.
MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)cred_int.pbData, (int)cred_int.cbData, m_password);
MultiByteToWideChar(CP_UTF8, 0, reinterpret_cast<LPCSTR>(cred_int.pbData), (int)cred_int.cbData, m_password);
SecureZeroMemory(cred_int.pbData, cred_int.cbData);
if (cred->UserName)
@@ -420,13 +414,7 @@ void eap::credentials_pass::retrieve(_In_z_ LPCTSTR pszTargetName, _In_ unsigned
wstring xpath(pszTargetName);
m_module.log_config((xpath + L"/Identity").c_str(), m_identity.c_str());
m_module.log_config((xpath + L"/Password").c_str(),
#ifdef _DEBUG
m_password.c_str()
#else
L"********"
#endif
);
m_module.log_config_discrete((xpath + L"/Password").c_str(), m_password.c_str());
}
@@ -443,14 +431,14 @@ eap::credentials::source_t eap::credentials_pass::combine(
{
if (cred_cached) {
// Using EAP service cached credentials.
*this = *(credentials_pass*)cred_cached;
*this = *dynamic_cast<const credentials_pass*>(cred_cached);
m_module.log_event(&EAPMETHOD_TRACE_EVT_CRED_CACHED1, event_data((unsigned int)cfg.get_method_id()), event_data(credentials_pass::get_name()), event_data::blank);
return source_cache;
}
if (cfg.m_use_cred) {
// Using configured credentials.
*this = *(credentials_pass*)cfg.m_cred.get();
*this = *dynamic_cast<const credentials_pass*>(cfg.m_cred.get());
m_module.log_event(&EAPMETHOD_TRACE_EVT_CRED_CONFIG1, event_data((unsigned int)cfg.get_method_id()), event_data(credentials_pass::get_name()), event_data::blank);
return source_config;
}
@@ -553,11 +541,11 @@ eap::credentials_connection::credentials_connection(_In_ module &mod, _In_ const
eap::credentials_connection::credentials_connection(_In_ const credentials_connection &other) :
m_cfg (other.m_cfg ),
m_namespace(other.m_namespace),
m_id (other.m_id ),
m_cred (other.m_cred ? (credentials*)other.m_cred->clone() : nullptr),
config (other )
m_cfg (other.m_cfg ),
m_namespace(other.m_namespace ),
m_id (other.m_id ),
m_cred (other.m_cred ? dynamic_cast<credentials*>(other.m_cred->clone()) : nullptr),
config (other )
{
}
@@ -578,7 +566,7 @@ eap::credentials_connection& eap::credentials_connection::operator=(_In_ const c
(config&)*this = other;
m_namespace = other.m_namespace;
m_id = other.m_id;
m_cred.reset(other.m_cred ? (credentials*)other.m_cred->clone() : nullptr);
m_cred.reset(other.m_cred ? dynamic_cast<credentials*>(other.m_cred->clone()) : nullptr);
}
return *this;
@@ -657,19 +645,19 @@ void eap::credentials_connection::load(_In_ IXMLDOMNode *pConfigRoot)
m_module.log_config((xpath + L" ID").c_str(), m_id.c_str());
// Look-up the provider.
for (config_connection::provider_list::const_iterator cfg_prov = m_cfg.m_providers.cbegin(), cfg_prov_end = m_cfg.m_providers.cend(); ; ++cfg_prov) {
for (auto cfg_prov = m_cfg.m_providers.cbegin(), cfg_prov_end = m_cfg.m_providers.cend(); ; ++cfg_prov) {
if (cfg_prov != cfg_prov_end) {
if (match(*cfg_prov)) {
// Matching provider found. Create matching blank credential set, then load.
if (cfg_prov->m_methods.empty())
throw invalid_argument(string_printf(__FUNCTION__ " %ls provider has no methods.", cfg_prov->get_id().c_str()).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " %ls provider has no methods.", cfg_prov->get_id().c_str()));
const config_method_with_cred *cfg_method = dynamic_cast<const config_method_with_cred*>(cfg_prov->m_methods.front().get());
m_cred.reset(cfg_method->make_credentials());
m_cred->load(pXmlElClientSideCredential);
break;
}
} else
throw invalid_argument(string_printf(__FUNCTION__ " Credentials do not match to any provider within this connection configuration (provider: %ls).", get_id().c_str()).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " Credentials do not match to any provider within this connection configuration (provider: %ls).", get_id().c_str()));
}
}
@@ -700,19 +688,19 @@ void eap::credentials_connection::operator>>(_Inout_ cursor_in &cursor)
cursor >> m_id ;
// Look-up the provider.
for (config_connection::provider_list::const_iterator cfg_prov = m_cfg.m_providers.cbegin(), cfg_prov_end = m_cfg.m_providers.cend(); ; ++cfg_prov) {
for (auto cfg_prov = m_cfg.m_providers.cbegin(), cfg_prov_end = m_cfg.m_providers.cend(); ; ++cfg_prov) {
if (cfg_prov != cfg_prov_end) {
if (match(*cfg_prov)) {
// Matching provider found. Create matching blank credential set, then read.
if (cfg_prov->m_methods.empty())
throw invalid_argument(string_printf(__FUNCTION__ " %ls provider has no methods.", cfg_prov->get_id().c_str()).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " %ls provider has no methods.", cfg_prov->get_id().c_str()));
const config_method_with_cred *cfg_method = dynamic_cast<const config_method_with_cred*>(cfg_prov->m_methods.front().get());
m_cred.reset(cfg_method->make_credentials());
cursor >> *m_cred;
break;
}
} else
throw invalid_argument(string_printf(__FUNCTION__ " Credentials do not match to any provider within this connection configuration (provider: %ls).", get_id().c_str()).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " Credentials do not match to any provider within this connection configuration (provider: %ls).", get_id().c_str()));
}
}

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -83,9 +83,9 @@ void eap::method::end_session()
void eap::method::get_result(
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult)
_Inout_ EapPeerMethodResult *pResult)
{
assert(ppResult);
assert(pResult);
switch (reason) {
case EapPeerMethodResultSuccess: {
@@ -104,8 +104,8 @@ void eap::method::get_result(
// Always ask EAP host to save the connection data. And it will save it *only* when we report "success".
// Don't worry. EapHost is well aware of failed authentication condition.
ppResult->fSaveConnectionData = TRUE;
ppResult->fIsSuccess = TRUE;
pResult->fSaveConnectionData = TRUE;
pResult->fIsSuccess = TRUE;
}
@@ -146,7 +146,7 @@ void eap::method_noneap::get_response_packet(
size_t size_packet = m_packet_res.size();
if (size_packet > *pdwSendPacketSize)
throw invalid_argument(string_printf(__FUNCTION__ " This method does not support packet fragmentation, but the data size is too big to fit in one packet (packet: %u, maximum: %u).", size_packet, *pdwSendPacketSize).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " This method does not support packet fragmentation, but the data size is too big to fit in one packet (packet: %u, maximum: %u).", size_packet, *pdwSendPacketSize));
memcpy(pSendPacket, m_packet_res.data(), size_packet);
*pdwSendPacketSize = (DWORD)size_packet;
@@ -169,13 +169,13 @@ void eap::method_noneap::append_avp(_In_ unsigned int code, _In_ unsigned char f
// Diameter AVP header
diameter_avp_header hdr;
*(unsigned int*)hdr.code = htonl(code);
*reinterpret_cast<unsigned int*>(hdr.code) = htonl(code);
hdr.flags = flags;
hton24(size_outer, hdr.length);
m_packet_res.insert(m_packet_res.end(), (unsigned char*)&hdr, (unsigned char*)(&hdr + 1));
m_packet_res.insert(m_packet_res.end(), reinterpret_cast<const unsigned char*>(&hdr), reinterpret_cast<const unsigned char*>(&hdr + 1));
// Data
m_packet_res.insert(m_packet_res.end(), (unsigned char*)data, (unsigned char*)data + size);
m_packet_res.insert(m_packet_res.end(), reinterpret_cast<const unsigned char*>(data), reinterpret_cast<const unsigned char*>(data) + size);
m_packet_res.insert(m_packet_res.end(), padding, 0);
}
@@ -195,13 +195,13 @@ void eap::method_noneap::append_avp(_In_ unsigned int code, _In_ unsigned int ve
// Diameter AVP header
diameter_avp_header_ven hdr;
*(unsigned int*)hdr.code = htonl(code);
*reinterpret_cast<unsigned int*>(hdr.code) = htonl(code);
hdr.flags = flags | diameter_avp_flag_vendor;
hton24(size_outer, hdr.length);
*(unsigned int*)hdr.vendor = htonl(vendor_id);
m_packet_res.insert(m_packet_res.end(), (unsigned char*)&hdr, (unsigned char*)(&hdr + 1));
*reinterpret_cast<unsigned int*>(hdr.vendor) = htonl(vendor_id);
m_packet_res.insert(m_packet_res.end(), reinterpret_cast<const unsigned char*>(&hdr), reinterpret_cast<const unsigned char*>(&hdr + 1));
// Data
m_packet_res.insert(m_packet_res.end(), (unsigned char*)data, (unsigned char*)data + size);
m_packet_res.insert(m_packet_res.end(), reinterpret_cast<const unsigned char*>(data), reinterpret_cast<const unsigned char*>(data) + size);
m_packet_res.insert(m_packet_res.end(), padding, 0);
}

View File

@@ -69,13 +69,13 @@ EAP_ERROR* eap::module::make_error(_In_ DWORD dwErrorCode, _In_opt_z_ LPCWSTR ps
pError->repairGuid = pRepairGuid != NULL ? *pRepairGuid : GUID_NULL;
pError->helpLinkGuid = pHelpLinkGuid != NULL ? *pHelpLinkGuid : GUID_NULL;
if (nRootCauseSize) {
pError->pRootCauseString = (LPWSTR)p;
pError->pRootCauseString = const_cast<LPWSTR>(reinterpret_cast<LPCWSTR>(p));
memcpy(pError->pRootCauseString, pszRootCauseString, nRootCauseSize);
p += nRootCauseSize;
} else
pError->pRootCauseString = NULL;
if (nRepairStringSize) {
pError->pRepairString = (LPWSTR)p;
pError->pRepairString = const_cast<LPWSTR>(reinterpret_cast<LPCWSTR>(p));
memcpy(pError->pRepairString, pszRepairString, nRepairStringSize);
p += nRepairStringSize;
} else
@@ -201,7 +201,7 @@ std::vector<unsigned char> eap::module::encrypt(_In_ HCRYPTPROV hProv, _In_bytec
std::vector<unsigned char> enc(buf.begin(), buf.end());
// Pre-allocate memory to allow space, as encryption will grow the data.
buf.assign((const unsigned char*)data, (const unsigned char*)data + size);
buf.assign(reinterpret_cast<const unsigned char*>(data), reinterpret_cast<const unsigned char*>(data) + size);
DWORD dwBlockLen;
if (!CryptGetKeyParam(key_aes, KP_BLOCKLEN, dwBlockLen, 0)) dwBlockLen = 0;
buf.reserve((size + dwBlockLen) / dwBlockLen * dwBlockLen);

View File

@@ -67,6 +67,13 @@ class wxEAPProviderLockedPanel;
///
class wxEAPCredentialWarningPanel;
#ifdef __DANGEROUS__LOG_CONFIDENTIAL_DATA
///
/// EAP credential logging enabled warning note
///
class wxEAPCredentialLogWarningPanel;
#endif
///
/// EAP Configuration window
///
@@ -122,11 +129,6 @@ inline wxString wxEAPGetProviderName(const std::wstring &id);
///
inline void wxInitializeConfig();
///
/// Inizializes wxWidgets localization scheme
///
inline bool wxInitializeLocale(wxLocale &locale);
namespace eap
{
@@ -203,10 +205,10 @@ public:
std::unique_ptr<eap::config_method> cfg_dummy(cfg.m_module.make_config_method());
m_banner->m_title->SetLabel(wxString::Format("%s %s", wxT(PRODUCT_NAME_STR), cfg_dummy->get_method_str()));
for (eap::config_connection::provider_list::iterator provider = m_cfg.m_providers.begin(), provider_end = m_cfg.m_providers.end(); provider != provider_end; ++provider) {
for (auto provider = m_cfg.m_providers.begin(), provider_end = m_cfg.m_providers.end(); provider != provider_end; ++provider) {
bool is_single = provider->m_methods.size() == 1;
std::vector<std::unique_ptr<eap::config_method> >::size_type count = 0;
std::vector<std::unique_ptr<eap::config_method> >::iterator method = provider->m_methods.begin(), method_end = provider->m_methods.end();
auto method = provider->m_methods.begin(), method_end = provider->m_methods.end();
for (; method != method_end; ++method, count++) {
m_providers->AddPage(
new _wxT(
@@ -215,7 +217,7 @@ public:
m_providers),
is_single ?
wxEAPGetProviderName(provider->m_name) :
winstd::tstring_printf(_T("%s (%u)"), wxEAPGetProviderName(provider->m_name), count));
winstd::tstring_printf(_T("%s (%u)"), static_cast<LPCTSTR>(wxEAPGetProviderName(provider->m_name)), count));
}
}
@@ -248,7 +250,7 @@ protected:
int idx = m_providers->GetSelection();
if (idx != wxNOT_FOUND) {
eap::config_provider &cfg_provider = ((_wxT*)m_providers->GetPage(idx))->GetProvider();
eap::config_provider &cfg_provider = dynamic_cast<_wxT*>(m_providers->GetPage(idx))->GetProvider();
m_prov_remove->Enable(true);
m_prov_advanced->Enable(!cfg_provider.m_read_only);
} else {
@@ -295,11 +297,11 @@ protected:
wxEAPConfigDialogBase::OnProvRemove(event);
int idx = m_providers->GetSelection();
eap::config_provider &cfg_provider = ((_wxT*)m_providers->GetPage(idx))->GetProvider();
eap::config_provider &cfg_provider = dynamic_cast<_wxT*>(m_providers->GetPage(idx))->GetProvider();
if (wxMessageBox(tstring_printf(_("Are you sure you want to permanently remove %ls provider from configuration?"), wxEAPGetProviderName(cfg_provider.m_name).c_str()), _("Warning"), wxYES_NO, this) == wxYES) {
if (wxMessageBox(tstring_printf(_("Are you sure you want to permanently remove %s provider from configuration?"), static_cast<LPCTSTR>(wxEAPGetProviderName(cfg_provider.m_name))), _("Warning"), wxYES_NO, this) == wxYES) {
// Delete provider.
eap::config_connection::provider_list::iterator it(m_cfg.m_providers.begin());
auto it = m_cfg.m_providers.begin();
for (int i = 0; i < idx; i++, ++it);
m_cfg.m_providers.erase(it);
m_providers->DeletePage(idx);
@@ -317,7 +319,7 @@ protected:
wxEAPConfigDialogBase::OnProvAdvanced(event);
int idx = m_providers->GetSelection();
eap::config_provider &cfg_provider = ((_wxT*)m_providers->GetPage(idx))->GetProvider();
eap::config_provider &cfg_provider = dynamic_cast<_wxT*>(m_providers->GetPage(idx))->GetProvider();
wxEAPConfigProvider dlg(cfg_provider, this);
if (dlg.ShowModal() == wxID_OK)
@@ -450,6 +452,18 @@ public:
};
#ifdef __DANGEROUS__LOG_CONFIDENTIAL_DATA
class wxEAPCredentialLogWarningPanel : public wxEAPNotePanel
{
public:
///
/// Constructs a notice pannel and set the title text
///
wxEAPCredentialLogWarningPanel(wxWindow* parent);
};
#endif
class wxEAPConfigWindow : public wxScrolledWindow
{
public:
@@ -994,29 +1008,6 @@ inline void wxInitializeConfig()
}
inline bool wxInitializeLocale(wxLocale &locale)
{
// Read language from configuration.
wxLanguage lang_code;
wxString lang;
if (wxConfigBase::Get()->Read(wxT("Language"), &lang)) {
const wxLanguageInfo *lang_info = wxLocale::FindLanguageInfo(lang);
lang_code = lang_info ? (wxLanguage)lang_info->Language : wxLANGUAGE_DEFAULT;
} else
lang_code = wxLANGUAGE_DEFAULT;
if (wxLocale::IsAvailable(lang_code)) {
// Language is "available". Well... Known actually.
wxString sPath;
if (wxConfigBase::Get()->Read(wxT("LocalizationRepositoryPath"), &sPath))
locale.AddCatalogLookupPathPrefix(sPath);
return locale.Init(lang_code);
}
return false;
}
namespace eap
{
class monitor_ui

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
///

View File

@@ -96,7 +96,11 @@ wxEAPCredentialsDialog::wxEAPCredentialsDialog(const eap::config_provider &prov,
wxEAPGeneralDialog(parent, id, title, pos, size, style)
{
// Set banner title.
m_banner->m_title->SetLabel(wxString::Format(_("%s Credentials"), wxEAPGetProviderName(prov.m_name).c_str()));
m_banner->m_title->SetLabel(wxString::Format(_("%s Credentials"), wxEAPGetProviderName(prov.m_name)));
#ifdef __DANGEROUS__LOG_CONFIDENTIAL_DATA
AddContent(new wxEAPCredentialLogWarningPanel(this));
#endif
}
@@ -263,6 +267,27 @@ wxEAPCredentialWarningPanel::wxEAPCredentialWarningPanel(const eap::config_provi
}
//////////////////////////////////////////////////////////////////////
// wxEAPCredentialWarningPanel
//////////////////////////////////////////////////////////////////////
#ifdef __DANGEROUS__LOG_CONFIDENTIAL_DATA
wxEAPCredentialLogWarningPanel::wxEAPCredentialLogWarningPanel(wxWindow* parent) : wxEAPNotePanel(parent)
{
// Load and set icon.
winstd::library lib_shell32;
if (lib_shell32.load(_T("imageres.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE))
m_note_icon->SetIcon(wxLoadIconFromResource(lib_shell32, MAKEINTRESOURCE(105)));
m_note_label->SetLabel(wxString::Format(_("The %s version installed on this computer logs credentials in visible and easy to read way."), wxT(PRODUCT_NAME_STR)) + " " +
_("Please, reconsider necessity to enter your credentials."));
m_note_label->Wrap(449);
this->Layout();
}
#endif
//////////////////////////////////////////////////////////////////////
// wxEAPConfigWindow
//////////////////////////////////////////////////////////////////////
@@ -455,7 +480,7 @@ eap::monitor_ui::monitor_ui(_In_ HINSTANCE module, _In_ const GUID &guid) :
if (!wnd_class)
throw win_runtime_error(__FUNCTION__ " Error registering master monitor window class.");
tstring_guid guid_str(guid);
HWND hwnd_master = FindWindowEx(HWND_MESSAGE, NULL, (LPCTSTR)wnd_class, guid_str.c_str());
HWND hwnd_master = FindWindowEx(HWND_MESSAGE, NULL, reinterpret_cast<LPCTSTR>(wnd_class), guid_str.c_str());
if (hwnd_master) {
// Another monitor is already running.
m_is_master = false;
@@ -484,18 +509,18 @@ eap::monitor_ui::monitor_ui(_In_ HINSTANCE module, _In_ const GUID &guid) :
}
m_hwnd = CreateWindowEx(
0, // dwExStyle
(LPCTSTR)wnd_class, // lpClassName
guid_str.c_str(), // lpWindowName
0, // dwStyle
0, // x
0, // y
0, // nWidth
0, // nHeight
HWND_MESSAGE, // hWndParent
NULL, // hMenu
module, // hInstance
this); // lpParam
0, // dwExStyle
reinterpret_cast<LPCTSTR>(wnd_class), // lpClassName
guid_str.c_str(), // lpWindowName
0, // dwStyle
0, // x
0, // y
0, // nWidth
0, // nHeight
HWND_MESSAGE, // hWndParent
NULL, // hMenu
module, // hInstance
this); // lpParam
if (!m_is_master) {
// Notify master we are waiting him.
@@ -528,7 +553,7 @@ void eap::monitor_ui::release_slaves(_In_bytecount_(size) const void *data, _In_
{
assert(!size || data);
for (list<HWND>::const_iterator slave = m_slaves.begin(), slave_end = m_slaves.end(); slave != slave_end; ++slave) {
for (auto slave = m_slaves.cbegin(), slave_end = m_slaves.cend(); slave != slave_end; ++slave) {
// Get slave's PID.
DWORD pid_slave;
GetWindowThreadProcessId(*slave, &pid_slave);
@@ -575,7 +600,7 @@ LRESULT eap::monitor_ui::winproc(
} else if (msg == s_msg_finish) {
// Master finished.
assert(!m_is_master);
m_data.assign((const unsigned char*)lparam, (const unsigned char*)lparam + wparam);
m_data.assign(reinterpret_cast<const unsigned char*>(lparam), reinterpret_cast<const unsigned char*>(lparam) + wparam);
// Finish slave too.
DestroyWindow(m_hwnd);

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"

Binary file not shown.

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include <WinStd/Crypt.h>

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
namespace eap
@@ -90,7 +90,7 @@ namespace eap
virtual void process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput);
_Out_ EapPeerMethodOutput *pEapOutput);
/// @}

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -45,7 +45,7 @@ crypt_key eap::create_des_key(_In_ HCRYPTPROV cp, _In_count_(size) const unsigne
};
sanitizing_blob key_blob;
key_blob.reserve(sizeof(key_blob_prefix) + 8);
key_blob.assign((const unsigned char*)&s_prefix, (const unsigned char*)(&s_prefix + 1));
key_blob.assign(reinterpret_cast<const unsigned char*>(&s_prefix), reinterpret_cast<const unsigned char*>(&s_prefix + 1));
// Inject parity bits.
unsigned char out = 0, parity = 1;
@@ -215,7 +215,7 @@ eap::nt_response::nt_response(
static const DWORD mode_ecb = CRYPT_MODE_ECB;
// DesEncrypt(Challenge, 1st 7-octets of ZPasswordHash, giving 1st 8-octets of Response)
key = create_des_key(cp, (const unsigned char*)&hash_pwd, 7);
key = create_des_key(cp, reinterpret_cast<const unsigned char*>(&hash_pwd), 7);
if (!CryptSetKeyParam(key, KP_MODE, (const BYTE*)&mode_ecb, 0))
throw win_runtime_error(__FUNCTION__ " Error setting ECB mode.");
memcpy(data, &challenge, 8);
@@ -224,7 +224,7 @@ eap::nt_response::nt_response(
throw win_runtime_error(__FUNCTION__ " Error encrypting message 1/3.");
// DesEncrypt(Challenge, 2nd 7-octets of ZPasswordHash, giving 2nd 8-octets of Response)
key = create_des_key(cp, (const unsigned char*)&hash_pwd + 7, 7);
key = create_des_key(cp, reinterpret_cast<const unsigned char*>(&hash_pwd) + 7, 7);
if (!CryptSetKeyParam(key, KP_MODE, (const BYTE*)&mode_ecb, 0))
throw win_runtime_error(__FUNCTION__ " Error setting ECB mode.");
memcpy(data + 8, &challenge, 8);
@@ -233,7 +233,7 @@ eap::nt_response::nt_response(
throw win_runtime_error(__FUNCTION__ " Error encrypting message 2/3.");
// DesEncrypt(Challenge, 2nd 7-octets of ZPasswordHash, giving 2nd 8-octets of Response)
key = create_des_key(cp, (const unsigned char*)&hash_pwd + 14, 2);
key = create_des_key(cp, reinterpret_cast<const unsigned char*>(&hash_pwd) + 14, 2);
if (!CryptSetKeyParam(key, KP_MODE, (const BYTE*)&mode_ecb, 0))
throw win_runtime_error(__FUNCTION__ " Error setting ECB mode.");
memcpy(data + 16, &challenge, 8);

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -90,7 +90,7 @@ void eap::method_mschapv2::begin_session(
void eap::method_mschapv2::process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput)
_Out_ EapPeerMethodOutput *pEapOutput)
{
assert(pReceivedPacket || dwReceivedPacketSize == 0);
assert(pEapOutput);
@@ -101,7 +101,7 @@ void eap::method_mschapv2::process_request_packet(
case phase_init: {
// Convert username to UTF-8.
sanitizing_string identity_utf8;
WideCharToMultiByte(CP_UTF8, 0, m_cred.m_identity.c_str(), (int)m_cred.m_identity.length(), identity_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, m_cred.m_identity, identity_utf8, NULL, NULL);
// Randomize Peer-Challenge
m_challenge_client.randomize(m_cp);
@@ -119,14 +119,14 @@ void eap::method_mschapv2::process_request_packet(
sizeof(nt_response)); // Response
response.push_back(m_ident);
response.push_back(0); // Flags
response.insert(response.end(), (unsigned char*)&m_challenge_client, (unsigned char*)(&m_challenge_client + 1)); // Peer-Challenge
response.insert(response.end(), reinterpret_cast<const unsigned char*>(&m_challenge_client), reinterpret_cast<const unsigned char*>(&m_challenge_client + 1)); // Peer-Challenge
response.insert(response.end(), 8, 0); // Reserved
response.insert(response.end(), (unsigned char*)&m_nt_resp, (unsigned char*)(&m_nt_resp + 1)); // NT-Response
response.insert(response.end(), reinterpret_cast<const unsigned char*>(&m_nt_resp), reinterpret_cast<const unsigned char*>(&m_nt_resp + 1)); // NT-Response
// Diameter AVP (User-Name=1, MS-CHAP-Challenge=11/311, MS-CHAP2-Response=25/311)
append_avp( 1, diameter_avp_flag_mandatory, identity_utf8.data(), (unsigned int)identity_utf8.size() );
append_avp(11, 311, diameter_avp_flag_mandatory, (unsigned char*)&m_challenge_server , (unsigned int)sizeof(m_challenge_server));
append_avp(25, 311, diameter_avp_flag_mandatory, response.data() , (unsigned int)response.size() );
append_avp( 1, diameter_avp_flag_mandatory, identity_utf8.data(), (unsigned int)identity_utf8.size() );
append_avp(11, 311, diameter_avp_flag_mandatory, reinterpret_cast<const unsigned char*>(&m_challenge_server) , (unsigned int)sizeof(m_challenge_server));
append_avp(25, 311, diameter_avp_flag_mandatory, response.data() , (unsigned int)response.size() );
m_phase = phase_challenge_server;
m_cfg.m_last_status = config_method::status_cred_invalid; // Blame credentials if we fail beyond this point.
@@ -151,25 +151,22 @@ void eap::method_mschapv2::process_request_packet(
void eap::method_mschapv2::process_packet(_In_bytecount_(size_pck) const void *_pck, _In_ size_t size_pck)
{
sanitizing_blob data;
wstring msg_w;
for (const unsigned char *pck = (const unsigned char*)_pck, *pck_end = pck + size_pck; pck < pck_end; ) {
for (const unsigned char *pck = reinterpret_cast<const unsigned char*>(_pck), *pck_end = pck + size_pck; pck < pck_end; ) {
if (pck + sizeof(diameter_avp_header) > pck_end)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete message header.");
const diameter_avp_header *hdr = (const diameter_avp_header*)pck;
unsigned int code = ntohl(*(unsigned int*)hdr->code);
const diameter_avp_header *hdr = reinterpret_cast<const diameter_avp_header*>(pck);
unsigned int code = ntohl(*reinterpret_cast<const unsigned int*>(hdr->code));
unsigned int vendor;
const unsigned char *msg;
if (hdr->flags & diameter_avp_flag_vendor) {
if (pck + sizeof(diameter_avp_header_ven) > pck_end)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete message header.");
const diameter_avp_header_ven *hdr_ven = (const diameter_avp_header_ven*)pck;
vendor = ntohl(*(unsigned int*)hdr_ven->vendor);
msg = (const unsigned char*)(hdr_ven + 1);
const diameter_avp_header_ven *hdr_ven = reinterpret_cast<const diameter_avp_header_ven*>(pck);
vendor = ntohl(*reinterpret_cast<const unsigned int*>(hdr_ven->vendor));
msg = reinterpret_cast<const unsigned char*>(hdr_ven + 1);
} else {
vendor = 0;
msg = (const unsigned char*)(hdr + 1);
msg = reinterpret_cast<const unsigned char*>(hdr + 1);
}
unsigned int length = ntoh24(hdr->length);
const unsigned char
@@ -181,16 +178,16 @@ void eap::method_mschapv2::process_packet(_In_bytecount_(size_pck) const void *_
if (code == 26 && vendor == 311) {
// MS-CHAP2-Success
if (msg[0] != m_ident)
throw invalid_argument(string_printf(__FUNCTION__ " Wrong MSCHAPv2 ident (expected: %u, received: %u).", m_ident, msg[0]).c_str());
const char *str = (const char*)(msg + 1);
process_success(parse_response(str, ((const char*)msg_end - str)));
throw invalid_argument(string_printf(__FUNCTION__ " Wrong MSCHAPv2 ident (expected: %u, received: %u).", m_ident, msg[0]));
const char *str = reinterpret_cast<const char*>(msg + 1);
process_success(parse_response(str, (reinterpret_cast<const char*>(msg_end) - str)));
} else if (code == 2 && vendor == 311) {
// MS-CHAP2-Error
m_ident = msg[0];
const char *str = (const char*)(msg + 1);
process_error(parse_response(str, ((const char*)msg_end - str)));
const char *str = reinterpret_cast<const char*>(msg + 1);
process_error(parse_response(str, (reinterpret_cast<const char*>(msg_end) - str)));
} else if (hdr->flags & diameter_avp_flag_mandatory)
throw win_runtime_error(ERROR_NOT_SUPPORTED, string_printf(__FUNCTION__ " Server sent mandatory Diameter AVP we do not support (code: %u, vendor: %u).", code, vendor).c_str());
throw win_runtime_error(ERROR_NOT_SUPPORTED, string_printf(__FUNCTION__ " Server sent mandatory Diameter AVP we do not support (code: %u, vendor: %u).", code, vendor));
pck = msg_next;
}
@@ -201,7 +198,7 @@ void eap::method_mschapv2::process_success(_In_ const list<string> &argv)
{
m_success = false;
for (list<string>::const_iterator arg = argv.cbegin(), arg_end = argv.cend(); arg != arg_end; ++arg) {
for (auto arg = argv.cbegin(), arg_end = argv.cend(); arg != arg_end; ++arg) {
const string &val = *arg;
if ((val[0] == 'S' || val[0] == 's') && val[1] == '=') {
// "S="
@@ -212,7 +209,7 @@ void eap::method_mschapv2::process_success(_In_ const list<string> &argv)
// Calculate expected authenticator response.
sanitizing_string identity_utf8;
WideCharToMultiByte(CP_UTF8, 0, m_cred.m_identity.c_str(), (int)m_cred.m_identity.length(), identity_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, m_cred.m_identity, identity_utf8, NULL, NULL);
authenticator_response resp_exp(m_cp, m_challenge_server, m_challenge_client, identity_utf8.c_str(), m_cred.m_password.c_str(), m_nt_resp);
// Compare against provided authemticator response.
@@ -230,7 +227,7 @@ void eap::method_mschapv2::process_success(_In_ const list<string> &argv)
void eap::method_mschapv2::process_error(_In_ const list<string> &argv)
{
for (list<string>::const_iterator arg = argv.cbegin(), arg_end = argv.cend(); arg != arg_end; ++arg) {
for (auto arg = argv.cbegin(), arg_end = argv.cend(); arg != arg_end; ++arg) {
const string &val = *arg;
if ((val[0] == 'E' || val[0] == 'e') && val[1] == '=') {
DWORD dwResult = strtoul(val.data() + 2, NULL, 10);
@@ -249,10 +246,10 @@ void eap::method_mschapv2::process_error(_In_ const list<string> &argv)
bool is_last;
dec.decode(resp, is_last, val.data() + 2, (size_t)-1);
if (resp.size() != sizeof(m_challenge_server))
throw invalid_argument(string_printf(__FUNCTION__ " Incorrect MSCHAPv2 challenge length (expected: %uB, received: %uB).", sizeof(m_challenge_server), resp.size()).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " Incorrect MSCHAPv2 challenge length (expected: %uB, received: %uB).", sizeof(m_challenge_server), resp.size()));
memcpy(&m_challenge_server, resp.data(), sizeof(m_challenge_server));
} else if ((val[0] == 'M' || val[0] == 'm') && val[1] == '=') {
MultiByteToWideChar(CP_UTF8, 0, val.data() + 2, -1, m_cfg.m_last_msg);
MultiByteToWideChar(CP_UTF8, 0, val.data() + 2, (int)val.length() - 2, m_cfg.m_last_msg);
m_module.log_event(&EAPMETHOD_METHOD_FAILURE_ERROR1, event_data((unsigned int)eap_type_legacy_mschapv2), event_data(m_cfg.m_last_msg), event_data::blank);
}
}

View File

@@ -1,60 +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"
//////////////////////////////////////////////////////////////////////
// eap::credentials_mschapv2
//////////////////////////////////////////////////////////////////////
eap::credentials_mschapv2::credentials_mschapv2(_In_ module &mod) : credentials_pass(mod)
{
}
eap::credentials_mschapv2::credentials_mschapv2(_In_ const credentials_mschapv2 &other) :
credentials_pass(other)
{
}
eap::credentials_mschapv2::credentials_mschapv2(_Inout_ credentials_mschapv2 &&other) :
credentials_pass(std::move(other))
{
}
eap::credentials_mschapv2& eap::credentials_mschapv2::operator=(_In_ const credentials_mschapv2 &other)
{
if (this != &other)
(credentials_pass&)*this = other;
return *this;
}
eap::credentials_mschapv2& eap::credentials_mschapv2::operator=(_Inout_ credentials_mschapv2 &&other)
{
if (this != &other)
(credentials_pass&&)*this = std::move(other);
return *this;
}

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"

View File

@@ -39,6 +39,12 @@ namespace eap
namespace eap
{
/// \addtogroup EAPBaseConfig
/// @{
///
/// PAP configuration
///
class config_method_pap : public config_method_with_cred
{
public:

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
namespace eap
@@ -88,7 +88,7 @@ namespace eap
virtual void process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput);
_Out_ EapPeerMethodOutput *pEapOutput);
/// @}

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -72,7 +72,7 @@ void eap::method_pap::begin_session(
void eap::method_pap::process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput)
_Out_ EapPeerMethodOutput *pEapOutput)
{
UNREFERENCED_PARAMETER(pReceivedPacket);
assert(pReceivedPacket || dwReceivedPacketSize == 0);
@@ -84,8 +84,8 @@ void eap::method_pap::process_request_packet(
case phase_init: {
// Convert username and password to UTF-8.
sanitizing_string identity_utf8, password_utf8;
WideCharToMultiByte(CP_UTF8, 0, m_cred.m_identity.c_str(), (int)m_cred.m_identity.length(), identity_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, m_cred.m_password.c_str(), (int)m_cred.m_password.length(), password_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, m_cred.m_identity, identity_utf8, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, m_cred.m_password, password_utf8, NULL, NULL);
// PAP passwords must be padded to 16B boundary according to RFC 5281. Will not add random extra padding here, as length obfuscation should be done by outer transport layers.
size_t padding_password_ex = (16 - password_utf8.length()) % 16;

View File

@@ -1,60 +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"
//////////////////////////////////////////////////////////////////////
// eap::credentials_pap
//////////////////////////////////////////////////////////////////////
eap::credentials_pap::credentials_pap(_In_ module &mod) : credentials_pass(mod)
{
}
eap::credentials_pap::credentials_pap(_In_ const credentials_pap &other) :
credentials_pass(other)
{
}
eap::credentials_pap::credentials_pap(_Inout_ credentials_pap &&other) :
credentials_pass(std::move(other))
{
}
eap::credentials_pap& eap::credentials_pap::operator=(_In_ const credentials_pap &other)
{
if (this != &other)
(credentials_pass&)*this = other;
return *this;
}
eap::credentials_pap& eap::credentials_pap::operator=(_Inout_ credentials_pap &&other)
{
if (this != &other)
(credentials_pass&&)*this = std::move(other);
return *this;
}

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
namespace eap
@@ -110,7 +110,7 @@ namespace eap
virtual void process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput);
_Out_ EapPeerMethodOutput *pEapOutput);
///
/// Obtains a response packet from the EAP method.
@@ -128,7 +128,7 @@ namespace eap
///
virtual void get_result(
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult);
_Inout_ EapPeerMethodResult *pResult);
/// @}
@@ -461,7 +461,7 @@ namespace eap
winstd::crypt_hash m_hash_handshake_msgs_sha1; ///< Running SHA-1 hash of handshake messages
winstd::crypt_hash m_hash_handshake_msgs_sha256; ///< Running SHA-256 hash of handshake messages
bool m_handshake[tls_handshake_type_max]; ///< Handshake flags (map od handshake messages received)
tls_handshake_flags m_handshake; ///< Handshake flags (map of handshake messages received)
enum {
phase_unknown = -1, ///< Unknown phase

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "../../EAPBase/include/EAP.h"
@@ -96,12 +96,19 @@ namespace eap
/// EAP-TLS packet
///
class packet_tls;
///
/// TLS map of handshake messages received
///
class tls_handshake_flags;
}
#pragma once
#include <memory>
#include <assert.h>
namespace eap
{
@@ -615,4 +622,50 @@ namespace eap
public:
unsigned char m_flags; ///< Packet flags
};
class tls_handshake_flags
{
public:
///
/// Constructs an empty set of flags
///
inline tls_handshake_flags()
{
memset(m_flags, 0, sizeof(m_flags));
}
///
/// Empty set of flags
///
inline void clear()
{
memset(m_flags, 0, sizeof(m_flags));
}
///
/// Set particular flag
///
/// \param[in] type TLS handshake message to set its flag
///
inline void set(_In_ tls_handshake_type_t type)
{
assert(tls_handshake_type_min <= type && type < tls_handshake_type_max);
m_flags[type] = true;
}
///
/// Get particular flag
///
/// \param[in] type TLS handshake message to get its flag
///
inline bool operator[](_In_ tls_handshake_type_t type) const
{
assert(tls_handshake_type_min <= type && type < tls_handshake_type_max);
return m_flags[type];
}
protected:
bool m_flags[tls_handshake_type_max]; ///< Set of flags
};
}

View File

@@ -148,7 +148,7 @@ void eap::config_method_tls::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *
if (FAILED(hr = eapxml::create_element(pDoc, pConfigRoot, bstr(L"eap-metadata:ServerSideCredential"), bstr(L"ServerSideCredential"), namespace_eapmetadata, pXmlElServerSideCredential)))
throw com_runtime_error(hr, __FUNCTION__ " Error creating <ServerSideCredential> element.");
for (list<cert_context>::const_iterator i = m_trusted_root_ca.begin(), i_end = m_trusted_root_ca.end(); i != i_end; ++i) {
for (auto i = m_trusted_root_ca.cbegin(), i_end = m_trusted_root_ca.cend(); i != i_end; ++i) {
// <CA>
com_obj<IXMLDOMElement> pXmlElCA;
if (FAILED(hr = eapxml::create_element(pDoc, bstr(L"CA"), namespace_eapmetadata, pXmlElCA)))
@@ -168,7 +168,7 @@ void eap::config_method_tls::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *
}
// <ServerName>
for (list<wstring>::const_iterator i = m_server_names.begin(), i_end = m_server_names.end(); i != i_end; ++i) {
for (auto i = m_server_names.cbegin(), i_end = m_server_names.cend(); i != i_end; ++i) {
if (FAILED(hr = eapxml::put_element_value(pDoc, pXmlElServerSideCredential, bstr(L"ServerName"), namespace_eapmetadata, bstr(*i))))
throw com_runtime_error(hr, __FUNCTION__ " Error creating <ServerName> element.");
}
@@ -221,7 +221,7 @@ void eap::config_method_tls::load(_In_ IXMLDOMNode *pConfigRoot)
// Log loaded CA certificates.
list<tstring> cert_names;
for (std::list<winstd::cert_context>::const_iterator cert = m_trusted_root_ca.cbegin(), cert_end = m_trusted_root_ca.cend(); cert != cert_end; ++cert)
for (auto cert = m_trusted_root_ca.cbegin(), cert_end = m_trusted_root_ca.cend(); cert != cert_end; ++cert)
cert_names.push_back(std::move(get_cert_title(*cert)));
m_module.log_config((xpathServerSideCredential + L"/CA").c_str(), cert_names);
}
@@ -311,7 +311,7 @@ bool eap::config_method_tls::add_trusted_ca(_In_ DWORD dwCertEncodingType, _In_
return false;
}
for (list<cert_context>::const_iterator i = m_trusted_root_ca.cbegin(), i_end = m_trusted_root_ca.cend();; ++i) {
for (auto i = m_trusted_root_ca.cbegin(), i_end = m_trusted_root_ca.cend();; ++i) {
if (i != i_end) {
if (*i == cert) {
// This certificate is already on the list.

View File

@@ -140,7 +140,11 @@ void eap::credentials_tls::load(_In_ IXMLDOMNode *pConfigRoot)
m_cert.create(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, aData.data(), (DWORD)aData.size());
}
}
m_module.log_config((xpath + L"/ClientCertificate").c_str(), get_name().c_str());
if (m_cert)
m_module.log_config_discrete((xpath + L"/ClientCertificate").c_str(), m_cert->pbCertEncoded, m_cert->cbCertEncoded);
else
m_module.log_config_discrete((xpath + L"/ClientCertificate").c_str(), NULL, 0);
}
@@ -173,9 +177,9 @@ void eap::credentials_tls::store(_In_z_ LPCTSTR pszTargetName, _In_ unsigned int
data_blob cred_enc;
if (m_cert) {
// Encrypt the certificate using user's key.
DATA_BLOB cred_blob = { m_cert->cbCertEncoded, m_cert->pbCertEncoded };
DATA_BLOB entropy_blob = { sizeof(s_entropy) , (LPBYTE)s_entropy };
if (!CryptProtectData(&cred_blob, NULL, &entropy_blob, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &cred_enc))
DATA_BLOB cred_blob = { m_cert->cbCertEncoded, m_cert->pbCertEncoded };
DATA_BLOB entropy_blob = { sizeof(s_entropy) , const_cast<LPBYTE>(s_entropy) };
if (!CryptProtectData(&cred_blob, NULL, &entropy_blob, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN | CRYPTPROTECT_AUDIT, &cred_enc))
throw win_runtime_error(__FUNCTION__ " CryptProtectData failed.");
}
@@ -185,18 +189,18 @@ void eap::credentials_tls::store(_In_z_ LPCTSTR pszTargetName, _In_ unsigned int
assert(cred_enc.cbData < CRED_MAX_CREDENTIAL_BLOB_SIZE);
assert(m_identity.length() < CRED_MAX_USERNAME_LENGTH );
CREDENTIAL cred = {
0, // Flags
CRED_TYPE_GENERIC, // Type
(LPTSTR)target.c_str(), // TargetName
_T(""), // Comment
{ 0, 0 }, // LastWritten
cred_enc.cbData, // CredentialBlobSize
cred_enc.pbData, // CredentialBlob
CRED_PERSIST_ENTERPRISE, // Persist
0, // AttributeCount
NULL, // Attributes
NULL, // TargetAlias
(LPTSTR)m_identity.c_str() // UserName
0, // Flags
CRED_TYPE_GENERIC, // Type
const_cast<LPTSTR>(target.c_str()), // TargetName
_T(""), // Comment
{ 0, 0 }, // LastWritten
cred_enc.cbData, // CredentialBlobSize
cred_enc.pbData, // CredentialBlob
CRED_PERSIST_ENTERPRISE, // Persist
0, // AttributeCount
NULL, // Attributes
NULL, // TargetAlias
const_cast<LPTSTR>(m_identity.c_str()) // UserName
};
if (!CredWrite(&cred, 0))
throw win_runtime_error(__FUNCTION__ " CredWrite failed.");
@@ -214,8 +218,8 @@ void eap::credentials_tls::retrieve(_In_z_ LPCTSTR pszTargetName, _In_ unsigned
if (cred->CredentialBlobSize) {
// Decrypt the certificate using user's key.
DATA_BLOB cred_enc = { cred->CredentialBlobSize, cred->CredentialBlob };
DATA_BLOB entropy_blob = { sizeof(s_entropy) , (LPBYTE)s_entropy };
DATA_BLOB cred_enc = { cred->CredentialBlobSize, cred->CredentialBlob };
DATA_BLOB entropy_blob = { sizeof(s_entropy) , const_cast<LPBYTE>(s_entropy) };
data_blob cred_int;
if (!CryptUnprotectData(&cred_enc, NULL, &entropy_blob, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN | CRYPTPROTECT_VERIFY_PROTECTION, &cred_int))
throw win_runtime_error(__FUNCTION__ " CryptUnprotectData failed.");
@@ -234,7 +238,10 @@ void eap::credentials_tls::retrieve(_In_z_ LPCTSTR pszTargetName, _In_ unsigned
wstring xpath(pszTargetName);
m_module.log_config((xpath + L"/Identity").c_str(), m_identity.c_str());
m_module.log_config((xpath + L"/Certificate").c_str(), get_name().c_str());
if (m_cert)
m_module.log_config_discrete((xpath + L"/Certificate").c_str(), m_cert->pbCertEncoded, m_cert->cbCertEncoded);
else
m_module.log_config_discrete((xpath + L"/Certificate").c_str(), NULL, 0);
}
@@ -298,14 +305,14 @@ eap::credentials::source_t eap::credentials_tls::combine(
{
if (cred_cached) {
// Using EAP service cached credentials.
*this = *(credentials_tls*)cred_cached;
*this = *dynamic_cast<const credentials_tls*>(cred_cached);
m_module.log_event(&EAPMETHOD_TRACE_EVT_CRED_CACHED2, event_data((unsigned int)eap_type_tls), event_data(credentials_tls::get_name()), event_data(pszTargetName), event_data::blank);
return source_cache;
}
if (cfg.m_use_cred) {
// Using configured credentials.
*this = *(credentials_tls*)cfg.m_cred.get();
*this = *dynamic_cast<const credentials_tls*>(cfg.m_cred.get());
m_module.log_event(&EAPMETHOD_TRACE_EVT_CRED_CONFIG2, event_data((unsigned int)eap_type_tls), event_data(credentials_tls::get_name()), event_data(pszTargetName), event_data::blank);
return source_config;
}

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -65,6 +65,10 @@ eap::method_tls::method_tls(_In_ module &module, _In_ config_method_tls &cfg, _I
m_cred(cred),
m_user_ctx(NULL),
#if EAP_TLS < EAP_TLS_SCHANNEL
m_tls_version(tls_version_1_2),
#ifdef _DEBUG
m_alg_prf(0),
#endif
m_session_resumed(false),
m_phase(phase_unknown),
m_seq_num_client(0),
@@ -74,12 +78,6 @@ eap::method_tls::method_tls(_In_ module &module, _In_ config_method_tls &cfg, _I
#endif
method(module, cfg, cred)
{
#if EAP_TLS < EAP_TLS_SCHANNEL
m_tls_version = tls_version_1_2;
#ifdef _DEBUG
memset(m_handshake, 0, sizeof(m_handshake));
#endif
#endif
}
@@ -111,6 +109,7 @@ eap::method_tls::method_tls(_Inout_ method_tls &&other) :
m_hash_handshake_msgs_md5 (std::move(other.m_hash_handshake_msgs_md5 )),
m_hash_handshake_msgs_sha1 (std::move(other.m_hash_handshake_msgs_sha1 )),
m_hash_handshake_msgs_sha256(std::move(other.m_hash_handshake_msgs_sha256)),
m_handshake (std::move(other.m_handshake )),
m_phase (std::move(other.m_phase )),
m_seq_num_client (std::move(other.m_seq_num_client )),
m_seq_num_server (std::move(other.m_seq_num_server )),
@@ -123,12 +122,6 @@ eap::method_tls::method_tls(_Inout_ method_tls &&other) :
#endif
method (std::move(other ))
{
#if EAP_TLS < EAP_TLS_SCHANNEL
memcpy(m_handshake, other.m_handshake, sizeof(m_handshake));
#ifdef _DEBUG
memset(other.m_handshake, 0, sizeof(m_handshake));
#endif
#endif
}
@@ -162,14 +155,10 @@ eap::method_tls& eap::method_tls::operator=(_Inout_ method_tls &&other)
m_hash_handshake_msgs_md5 = std::move(other.m_hash_handshake_msgs_md5 );
m_hash_handshake_msgs_sha1 = std::move(other.m_hash_handshake_msgs_sha1 );
m_hash_handshake_msgs_sha256 = std::move(other.m_hash_handshake_msgs_sha256);
m_handshake = std::move(other.m_handshake );
m_phase = std::move(other.m_phase );
m_seq_num_client = std::move(other.m_seq_num_client );
m_seq_num_server = std::move(other.m_seq_num_server );
memcpy(m_handshake, other.m_handshake, sizeof(m_handshake));
#ifdef _DEBUG
memset(other.m_handshake, 0, sizeof(m_handshake));
#endif
#else
m_sc_target_name = std::move(other.m_sc_target_name );
m_sc_cred = std::move(other.m_sc_cred );
@@ -210,14 +199,14 @@ void eap::method_tls::begin_session(
#else
// Build (expected) server name(s) for Schannel.
m_sc_target_name.clear();
for (list<wstring>::const_iterator name = m_cfg.m_server_names.cbegin(), name_end = m_cfg.m_server_names.cend(); name != name_end; ++name) {
for (auto name = m_cfg.m_server_names.cbegin(), name_end = m_cfg.m_server_names.cend(); name != name_end; ++name) {
if (name != m_cfg.m_server_names.cbegin())
m_sc_target_name += _T(';');
#ifdef _UNICODE
m_sc_target_name.insert(m_sc_target_name.end(), name->begin(), name->end());
#else
string buf;
WideCharToMultiByte(CP_ACP, 0, name->c_str(), -1, buf, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, name, buf, NULL, NULL);
m_sc_target_name.insert(m_sc_target_name.end(), buf.begin(), buf.end());
#endif
}
@@ -243,7 +232,7 @@ void eap::method_tls::begin_session(
SCH_CRED_MANUAL_CRED_VALIDATION | // dwFlags: Prevent Schannel verify server certificate (we want to use custom root CA store and multiple name checking)
#endif
SCH_CRED_CACHE_ONLY_URL_RETRIEVAL_ON_CREATE | // dwFlags: Do not attempt online revocation check - we do not expect to have network connection yet
SCH_CRED_IGNORE_NO_REVOCATION_CHECK | // dwFlags: Ignore no-revocation-check errors (TODO: Test if this flag is required.)
SCH_CRED_IGNORE_NO_REVOCATION_CHECK | // dwFlags: Ignore no-revocation-check errors - as we cannot check for revocation, it makes little sense to insist certificate has to have revocation set-up
SCH_CRED_IGNORE_REVOCATION_OFFLINE | // dwFlags: Ignore offline-revocation errors - we do not expect to have network connection yet
SCH_CRED_NO_DEFAULT_CREDS | // dwFlags: If client certificate we provided is not acceptable, do not try to select one on your own
(m_cfg.m_server_names.empty() ? SCH_CRED_NO_SERVERNAME_CHECK : 0) | // dwFlags: When no expected server name is given, do not do the server name check.
@@ -260,7 +249,7 @@ void eap::method_tls::begin_session(
void eap::method_tls::process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput)
_Out_ EapPeerMethodOutput *pEapOutput)
{
assert(pReceivedPacket && dwReceivedPacketSize >= 4);
assert(pEapOutput);
@@ -268,8 +257,7 @@ void eap::method_tls::process_request_packet(
// Is this a valid EAP-TLS packet?
if (dwReceivedPacketSize < 6)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Packet is too small. EAP-%s packets should be at least 6B.");
//else if (pReceivedPacket->Data[0] != eap_type_tls) // Skip method check, to allow TTLS extension.
// throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, string_printf(__FUNCTION__ " Packet is not EAP-TLS (expected: %u, received: %u).", eap_type_tls, pReceivedPacket->Data[0]));
// Don't check packet method type, to allow TTLS extension.
if (!m_packet_req.append_frag((const EapPacket*)pReceivedPacket)) {
// This was not the only/last fragment. Reply with ACK packet.
@@ -310,7 +298,7 @@ void eap::method_tls::process_request_packet(
m_key_mppe_server.clear();
} else {
// Process the packet.
memset(m_handshake, 0, sizeof(m_handshake));
m_handshake.clear();
m_packet_res.m_data.clear();
process_packet(m_packet_req.m_data.data(), m_packet_req.m_data.size());
}
@@ -376,8 +364,8 @@ void eap::method_tls::process_request_packet(
// Derive master secret.
static const unsigned char s_label[] = "master secret";
sanitizing_blob seed(s_label, s_label + _countof(s_label) - 1);
seed.insert(seed.end(), (const unsigned char*)&m_random_client, (const unsigned char*)(&m_random_client + 1));
seed.insert(seed.end(), (const unsigned char*)&m_random_server, (const unsigned char*)(&m_random_server + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_client), reinterpret_cast<const unsigned char*>(&m_random_client + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_server), reinterpret_cast<const unsigned char*>(&m_random_server + 1));
memcpy(&m_master_secret, prf(m_cp, m_alg_prf, pms, seed, sizeof(tls_master_secret)).data(), sizeof(tls_master_secret));
// Create client key exchange message, and append to packet.
@@ -396,8 +384,8 @@ void eap::method_tls::process_request_packet(
// Derive client side keys.
static const unsigned char s_label[] = "key expansion";
sanitizing_blob seed(s_label, s_label + _countof(s_label) - 1);
seed.insert(seed.end(), (const unsigned char*)&m_random_server, (const unsigned char*)(&m_random_server + 1));
seed.insert(seed.end(), (const unsigned char*)&m_random_client, (const unsigned char*)(&m_random_client + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_server), reinterpret_cast<const unsigned char*>(&m_random_server + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_client), reinterpret_cast<const unsigned char*>(&m_random_client + 1));
sanitizing_blob key_block(prf(m_cp, m_alg_prf, m_master_secret, seed,
2*m_state_client_pending.m_size_mac_key + // client_write_MAC_secret & server_write_MAC_secret (SHA1)
2*m_state_client_pending.m_size_enc_key + // client_write_key & server_write_key
@@ -504,11 +492,11 @@ void eap::method_tls::get_response_packet(
void eap::method_tls::get_result(
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult)
_Inout_ EapPeerMethodResult *pResult)
{
assert(ppResult);
assert(pResult);
method::get_result(reason, ppResult);
method::get_result(reason, pResult);
switch (reason) {
case EapPeerMethodResultSuccess: {
@@ -518,9 +506,9 @@ void eap::method_tls::get_result(
// Fill array with RADIUS attributes.
eap_attr a;
m_eap_attr.reserve(m_eap_attr.size() + 3);
a.create_ms_mppe_key(16, (LPCBYTE)&m_key_mppe_client, sizeof(tls_random));
a.create_ms_mppe_key(16, reinterpret_cast<LPCBYTE>(&m_key_mppe_client), sizeof(tls_random));
m_eap_attr.push_back(std::move(a));
a.create_ms_mppe_key(17, (LPCBYTE)&m_key_mppe_server, sizeof(tls_random));
a.create_ms_mppe_key(17, reinterpret_cast<LPCBYTE>(&m_key_mppe_server), sizeof(tls_random));
m_eap_attr.push_back(std::move(a));
m_eap_attr.push_back(eap_attr::blank);
@@ -552,7 +540,7 @@ void eap::method_tls::get_result(
NULL,
&buf_out_desc);
if (SUCCEEDED(status))
m_packet_res.m_data.insert(m_packet_res.m_data.end(), (const unsigned char*)buf_out[0].pvBuffer, (const unsigned char*)buf_out[0].pvBuffer + buf_out[0].cbBuffer);
m_packet_res.m_data.insert(m_packet_res.m_data.end(), reinterpret_cast<const unsigned char*>(buf_out[0].pvBuffer), reinterpret_cast<const unsigned char*>(buf_out[0].pvBuffer) + buf_out[0].cbBuffer);
}
#endif
@@ -565,7 +553,7 @@ void eap::method_tls::get_result(
m_cfg.m_session_id.clear();
m_cfg.m_master_secret.clear();
#else
// TODO: Research how a Schannel session context can be cleared not to resume.
// TODO: Research how a Schannel session context can be cleared not to resume. However, until we find a way how to make Schannel resume session in the first place, we can safely ignore this.
#endif
break;
@@ -594,14 +582,14 @@ eap::sanitizing_blob eap::method_tls::make_client_hello()
// SSL header
assert(size_data <= 0xffffff);
unsigned int ssl_header = htonl((tls_handshake_type_client_hello << 24) | (unsigned int)size_data);
msg.insert(msg.end(), (unsigned char*)&ssl_header, (unsigned char*)(&ssl_header + 1));
msg.insert(msg.end(), reinterpret_cast<const unsigned char*>(&ssl_header), reinterpret_cast<const unsigned char*>(&ssl_header + 1));
// SSL version
msg.insert(msg.end(), (unsigned char*)&m_tls_version, (unsigned char*)(&m_tls_version + 1));
msg.insert(msg.end(), reinterpret_cast<const unsigned char*>(&m_tls_version), reinterpret_cast<const unsigned char*>(&m_tls_version + 1));
// Generate client random and add it to the message
m_random_client.randomize(m_cp);
msg.insert(msg.end(), (unsigned char*)&m_random_client, (unsigned char*)(&m_random_client + 1));
msg.insert(msg.end(), reinterpret_cast<const unsigned char*>(&m_random_client), reinterpret_cast<const unsigned char*>(&m_random_client + 1));
// Session ID
assert(m_session_id.size() <= 32);
@@ -610,7 +598,7 @@ eap::sanitizing_blob eap::method_tls::make_client_hello()
// Cypher suite list
unsigned short size_cipher_suite2 = htons((unsigned short)sizeof(s_cipher_suite));
msg.insert(msg.end(), (unsigned char*)&size_cipher_suite2, (unsigned char*)(&size_cipher_suite2 + 1));
msg.insert(msg.end(), reinterpret_cast<const unsigned char*>(&size_cipher_suite2), reinterpret_cast<const unsigned char*>(&size_cipher_suite2 + 1));
msg.insert(msg.end(), s_cipher_suite, s_cipher_suite + _countof(s_cipher_suite));
// Compression
@@ -638,7 +626,7 @@ eap::sanitizing_blob eap::method_tls::make_client_cert() const
// SSL header
assert(size_data <= 0xffffff);
unsigned int ssl_header = htonl((tls_handshake_type_certificate << 24) | (unsigned int)size_data);
msg.insert(msg.end(), (unsigned char*)&ssl_header, (unsigned char*)(&ssl_header + 1));
msg.insert(msg.end(), reinterpret_cast<const unsigned char*>(&ssl_header), reinterpret_cast<const unsigned char*>(&ssl_header + 1));
// List size
assert(size_list <= 0xffffff);
@@ -663,7 +651,7 @@ eap::sanitizing_blob eap::method_tls::make_client_cert() const
eap::sanitizing_blob eap::method_tls::make_client_key_exchange(_In_ const tls_master_secret &pms) const
{
// Encrypt pre-master key with server public key first.
sanitizing_blob pms_enc((const unsigned char*)&pms, (const unsigned char*)(&pms + 1));
sanitizing_blob pms_enc(reinterpret_cast<const unsigned char*>(&pms), reinterpret_cast<const unsigned char*>(&pms + 1));
crypt_key key;
if (!key.import_public(m_cp_enc_client, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &(m_server_cert_chain.front()->pCertInfo->SubjectPublicKeyInfo)))
throw win_runtime_error(__FUNCTION__ " Error importing server's public key.");
@@ -681,7 +669,7 @@ eap::sanitizing_blob eap::method_tls::make_client_key_exchange(_In_ const tls_ma
// SSL header
assert(size_data <= 0xffffff);
unsigned int ssl_header = htonl((tls_handshake_type_client_key_exchange << 24) | (unsigned int)size_data);
msg.insert(msg.end(), (unsigned char*)&ssl_header, (unsigned char*)(&ssl_header + 1));
msg.insert(msg.end(), reinterpret_cast<const unsigned char*>(&ssl_header), reinterpret_cast<const unsigned char*>(&ssl_header + 1));
// Encrypted pre master secret size
assert(size_pms_enc <= 0xffff);
@@ -707,7 +695,7 @@ eap::sanitizing_blob eap::method_tls::make_finished() const
// SSL header
unsigned int ssl_header = htonl((unsigned int)(tls_handshake_type_finished << 24) | 12);
msg.insert(msg.end(), (unsigned char*)&ssl_header, (unsigned char*)(&ssl_header + 1));
msg.insert(msg.end(), reinterpret_cast<const unsigned char*>(&ssl_header), reinterpret_cast<const unsigned char*>(&ssl_header + 1));
// Create label + hash MD5 + hash SHA-1 seed.
crypt_hash hash;
@@ -760,7 +748,7 @@ eap::sanitizing_blob eap::method_tls::make_message(_In_ tls_message_type_t type,
sanitizing_blob msg;
msg.reserve(sizeof(message_header) + size_data);
msg.assign((const unsigned char*)&hdr, (const unsigned char*)(&hdr + 1));
msg.assign(reinterpret_cast<const unsigned char*>(&hdr), reinterpret_cast<const unsigned char*>(&hdr + 1));
msg.insert(msg.end(), data.begin(), data.end());
return msg;
}
@@ -774,8 +762,8 @@ void eap::method_tls::derive_msk()
#if EAP_TLS < EAP_TLS_SCHANNEL
static const unsigned char s_label[] = "client EAP encryption";
sanitizing_blob seed(s_label, s_label + _countof(s_label) - 1);
seed.insert(seed.end(), (const unsigned char*)&m_random_client, (const unsigned char*)(&m_random_client + 1));
seed.insert(seed.end(), (const unsigned char*)&m_random_server, (const unsigned char*)(&m_random_server + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_client), reinterpret_cast<const unsigned char*>(&m_random_client + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_server), reinterpret_cast<const unsigned char*>(&m_random_server + 1));
sanitizing_blob key_block(prf(m_cp, m_alg_prf, m_master_secret, seed, 2*sizeof(tls_random)));
_key_block = key_block.data();
#else
@@ -808,13 +796,13 @@ void eap::method_tls::process_packet(_In_bytecount_(size_pck) const void *_pck,
{
sanitizing_blob data;
for (const unsigned char *pck = (const unsigned char*)_pck, *pck_end = pck + size_pck; pck < pck_end; ) {
for (const unsigned char *pck = reinterpret_cast<const unsigned char*>(_pck), *pck_end = pck + size_pck; pck < pck_end; ) {
if (pck + 5 > pck_end)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete message header.");
const message_header *hdr = (const message_header*)pck;
const unsigned char
*msg = (const unsigned char*)(hdr + 1),
*msg_end = msg + ntohs(*(unsigned short*)hdr->length);
*msg = reinterpret_cast<const unsigned char*>(hdr + 1),
*msg_end = msg + ntohs(*reinterpret_cast<const unsigned short*>(hdr->length));
if (msg_end > pck_end)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete message data.");
@@ -870,7 +858,7 @@ void eap::method_tls::process_change_cipher_spec(_In_bytecount_(size_msg) const
if (size_msg < 1)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete change cipher spec.");
const unsigned char *msg = (const unsigned char*)_msg;
const unsigned char *msg = reinterpret_cast<const unsigned char*>(_msg);
if (msg[0] != 1)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, string_printf(__FUNCTION__ " Invalid change cipher spec message (expected 1, received %u).", msg[0]));
@@ -885,8 +873,8 @@ void eap::method_tls::process_change_cipher_spec(_In_bytecount_(size_msg) const
static const unsigned char s_label[] = "key expansion";
sanitizing_blob seed(s_label, s_label + _countof(s_label) - 1);
seed.insert(seed.end(), (const unsigned char*)&m_random_server, (const unsigned char*)(&m_random_server + 1));
seed.insert(seed.end(), (const unsigned char*)&m_random_client, (const unsigned char*)(&m_random_client + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_server), reinterpret_cast<const unsigned char*>(&m_random_server + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_client), reinterpret_cast<const unsigned char*>(&m_random_client + 1));
sanitizing_blob key_block(prf(m_cp, m_alg_prf, m_master_secret, seed,
2*m_state_server_pending.m_size_mac_key + // client_write_MAC_secret & server_write_MAC_secret (SHA1)
2*m_state_server_pending.m_size_enc_key + // client_write_key & server_write_key
@@ -928,7 +916,7 @@ void eap::method_tls::process_alert(_In_bytecount_(size_msg) const void *_msg, _
if (size_msg < 2)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete alert.");
const unsigned char *msg = (const unsigned char*)_msg;
const unsigned char *msg = reinterpret_cast<const unsigned char*>(_msg);
m_module.log_event(&EAPMETHOD_TLS_ALERT, event_data((unsigned int)eap_type_tls), event_data((unsigned char)msg[0]), event_data((unsigned char)msg[1]), event_data::blank);
@@ -941,11 +929,11 @@ void eap::method_tls::process_alert(_In_bytecount_(size_msg) const void *_msg, _
void eap::method_tls::process_handshake(_In_bytecount_(size_msg) const void *_msg, _In_ size_t size_msg)
{
for (const unsigned char *msg = (const unsigned char*)_msg, *msg_end = msg + size_msg; msg < msg_end; ) {
for (const unsigned char *msg = reinterpret_cast<const unsigned char*>(_msg), *msg_end = msg + size_msg; msg < msg_end; ) {
// Parse record header.
if (msg + sizeof(unsigned int) > msg_end)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete record header.");
unsigned int hdr = ntohl(*(unsigned int*)msg);
unsigned int hdr = ntohl(*reinterpret_cast<const unsigned int*>(msg));
const unsigned char
*rec = msg + sizeof(unsigned int),
*rec_end = rec + (hdr & 0xffffff);
@@ -959,9 +947,9 @@ void eap::method_tls::process_handshake(_In_bytecount_(size_msg) const void *_ms
// TLS version
if (rec + 2 > rec_end)
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Server SSL/TLS version missing or incomplete.");
else if (*(tls_version*)rec < tls_version_1_0 || m_tls_version < *(tls_version*)rec)
else if (*reinterpret_cast<const tls_version*>(rec) < tls_version_1_0 || m_tls_version < *reinterpret_cast<const tls_version*>(rec))
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Unsupported SSL/TLS version.");
m_tls_version = *(tls_version*)rec;
m_tls_version = *reinterpret_cast<const tls_version*>(rec);
m_alg_prf = m_tls_version < tls_version_1_2 ? CALG_TLS1PRF : CALG_SHA_256;
rec += 2;
@@ -1103,7 +1091,7 @@ void eap::method_tls::process_handshake(_In_bytecount_(size_msg) const void *_ms
if (type < tls_handshake_type_max) {
// Set the flag this handshake message was received.
m_handshake[type] = true;
m_handshake.set(type);
}
if (type != tls_handshake_type_hello_request) {
@@ -1171,7 +1159,7 @@ void eap::method_tls::process_handshake()
// Send Schannel's token via EAP.
assert(buf_out[0].BufferType == SECBUFFER_TOKEN);
assert(m_sc_ctx.m_attrib & ISC_RET_ALLOCATED_MEMORY);
m_packet_res.m_data.assign((const unsigned char*)buf_out[0].pvBuffer, (const unsigned char*)buf_out[0].pvBuffer + buf_out[0].cbBuffer);
m_packet_res.m_data.assign(reinterpret_cast<const unsigned char*>(buf_out[0].pvBuffer), reinterpret_cast<const unsigned char*>(buf_out[0].pvBuffer) + buf_out[0].cbBuffer);
if (buf_in[1].BufferType == SECBUFFER_EXTRA) {
// Server appended extra data.
m_sc_queue.erase(m_sc_queue.begin(), m_sc_queue.end() - buf_in[1].cbBuffer);
@@ -1217,7 +1205,7 @@ void eap::method_tls::process_handshake()
// Send alert via EAP. Not that EAP will transmit it once we throw this is an error...
assert(buf_out[1].BufferType == SECBUFFER_ALERT);
assert(m_sc_ctx.m_attrib & ISC_RET_ALLOCATED_MEMORY);
m_packet_res.m_data.assign((const unsigned char*)buf_out[1].pvBuffer, (const unsigned char*)buf_out[1].pvBuffer + buf_out[1].cbBuffer);
m_packet_res.m_data.assign(reinterpret_cast<const unsigned char*>(buf_out[1].pvBuffer), reinterpret_cast<const unsigned char*>(buf_out[1].pvBuffer) + buf_out[1].cbBuffer);
}
throw sec_runtime_error(status, __FUNCTION__ " Schannel error.");
@@ -1265,7 +1253,7 @@ void eap::method_tls::process_application_data()
std::vector<unsigned char> extra;
for (size_t i = 0; i < _countof(buf); i++)
if (buf[i].BufferType == SECBUFFER_EXTRA)
extra.insert(extra.end(), (unsigned char*)buf[i].pvBuffer, (unsigned char*)buf[i].pvBuffer + buf[i].cbBuffer);
extra.insert(extra.end(), reinterpret_cast<const unsigned char*>(buf[i].pvBuffer), reinterpret_cast<const unsigned char*>(buf[i].pvBuffer) + buf[i].cbBuffer);
m_sc_queue = std::move(extra);
} else if (status == SEC_E_INCOMPLETE_MESSAGE) {
// Schannel neeeds more data. Send ACK packet to server to send more.
@@ -1306,7 +1294,7 @@ void eap::method_tls::verify_server_trust() const
throw sec_runtime_error(status, __FUNCTION__ " Error retrieving server certificate from Schannel.");
#endif
for (list<cert_context>::const_iterator c = m_cfg.m_trusted_root_ca.cbegin(), c_end = m_cfg.m_trusted_root_ca.cend(); c != c_end; ++c) {
for (auto c = m_cfg.m_trusted_root_ca.cbegin(), c_end = m_cfg.m_trusted_root_ca.cend(); c != c_end; ++c) {
if (cert->cbCertEncoded == (*c)->cbCertEncoded &&
memcmp(cert->pbCertEncoded, (*c)->pbCertEncoded, cert->cbCertEncoded) == 0)
{
@@ -1355,7 +1343,7 @@ void eap::method_tls::verify_server_trust() const
}
has_san = true;
for (list<wstring>::const_iterator s = m_cfg.m_server_names.cbegin(), s_end = m_cfg.m_server_names.cend(); !found && s != s_end; ++s) {
for (auto s = m_cfg.m_server_names.cbegin(), s_end = m_cfg.m_server_names.cend(); !found && s != s_end; ++s) {
for (DWORD idx_entry = 0; !found && idx_entry < san_info->cAltEntry; idx_entry++) {
if (san_info->rgAltEntry[idx_entry].dwAltNameChoice == CERT_ALT_NAME_DNS_NAME &&
_wcsicmp(s->c_str(), san_info->rgAltEntry[idx_entry].pwszDNSName) == 0)
@@ -1373,7 +1361,7 @@ void eap::method_tls::verify_server_trust() const
if (!CertGetNameStringW(cert, CERT_NAME_DNS_TYPE, CERT_NAME_STR_ENABLE_PUNYCODE_FLAG, NULL, subj))
throw win_runtime_error(__FUNCTION__ " Error retrieving server's certificate subject name.");
for (list<wstring>::const_iterator s = m_cfg.m_server_names.cbegin(), s_end = m_cfg.m_server_names.cend(); !found && s != s_end; ++s) {
for (auto s = m_cfg.m_server_names.cbegin(), s_end = m_cfg.m_server_names.cend(); !found && s != s_end; ++s) {
if (_wcsicmp(s->c_str(), subj.c_str()) == 0) {
m_module.log_event(&EAPMETHOD_TLS_SERVER_NAME_TRUSTED1, event_data(subj), event_data::blank);
found = true;
@@ -1393,12 +1381,12 @@ void eap::method_tls::verify_server_trust() const
cert_store store;
if (!store.create(CERT_STORE_PROV_MEMORY, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, NULL, 0, NULL))
throw win_runtime_error(__FUNCTION__ " Error creating temporary certificate store.");
for (list<cert_context>::const_iterator c = m_cfg.m_trusted_root_ca.cbegin(), c_end = m_cfg.m_trusted_root_ca.cend(); c != c_end; ++c)
for (auto c = m_cfg.m_trusted_root_ca.cbegin(), c_end = m_cfg.m_trusted_root_ca.cend(); c != c_end; ++c)
CertAddCertificateContextToStore(store, *c, CERT_STORE_ADD_REPLACE_EXISTING, NULL);
// Add all intermediate certificates from the server's certificate chain.
#if EAP_TLS < EAP_TLS_SCHANNEL
for (list<cert_context>::const_iterator c = m_server_cert_chain.cbegin(), c_end = m_server_cert_chain.cend(); ++c != c_end;) {
for (auto c = m_server_cert_chain.cbegin(), c_end = m_server_cert_chain.cend(); ++c != c_end;) {
const cert_context &_c = *c;
if (_c->pCertInfo->Issuer.cbData == _c->pCertInfo->Subject.cbData &&
memcmp(_c->pCertInfo->Issuer.pbData, _c->pCertInfo->Subject.pbData, _c->pCertInfo->Issuer.cbData) == 0)
@@ -1465,7 +1453,7 @@ void eap::method_tls::verify_server_trust() const
throw sec_runtime_error(SEC_E_CERT_UNKNOWN, __FUNCTION__ " Can not verify empty certificate chain.");
PCCERT_CONTEXT cert_root = context->rgpChain[0]->rgpElement[context->rgpChain[0]->cElement-1]->pCertContext;
for (list<cert_context>::const_iterator c = m_cfg.m_trusted_root_ca.cbegin(), c_end = m_cfg.m_trusted_root_ca.cend();; ++c) {
for (auto c = m_cfg.m_trusted_root_ca.cbegin(), c_end = m_cfg.m_trusted_root_ca.cend();; ++c) {
if (c != c_end) {
if (cert_root->cbCertEncoded == (*c)->cbCertEncoded &&
memcmp(cert_root->pbCertEncoded, (*c)->pbCertEncoded, cert_root->cbCertEncoded) == 0)
@@ -1647,7 +1635,7 @@ eap::sanitizing_blob eap::method_tls::prf(
size_S2 = size_S1;
const void
*S1 = &secret,
*S2 = (const unsigned char*)&secret + (sizeof(tls_master_secret) - size_S2);
*S2 = reinterpret_cast<const unsigned char*>(&secret) + (sizeof(tls_master_secret) - size_S2);
// Precalculate HMAC padding for speed.
hmac_padding
@@ -1656,8 +1644,8 @@ eap::sanitizing_blob eap::method_tls::prf(
// Prepare A for p_hash.
sanitizing_blob
A1((unsigned char*)seed, (unsigned char*)seed + size_seed),
A2((unsigned char*)seed, (unsigned char*)seed + size_seed);
A1(reinterpret_cast<const unsigned char*>(seed), reinterpret_cast<const unsigned char*>(seed) + size_seed),
A2(reinterpret_cast<const unsigned char*>(seed), reinterpret_cast<const unsigned char*>(seed) + size_seed);
sanitizing_blob
hmac1,
@@ -1706,7 +1694,7 @@ eap::sanitizing_blob eap::method_tls::prf(
hmac_padding padding(cp, alg, &secret, sizeof(tls_master_secret));
// Prepare A for p_hash.
sanitizing_blob A((unsigned char*)seed, (unsigned char*)seed + size_seed);
sanitizing_blob A(reinterpret_cast<const unsigned char*>(seed), reinterpret_cast<const unsigned char*>(seed) + size_seed);
sanitizing_blob hmac;
for (size_t i = 0; i < size; ) {
@@ -1759,8 +1747,8 @@ HCRYPTKEY eap::method_tls::create_key(
};
sanitizing_blob key_blob;
key_blob.reserve(sizeof(key_blob_prefix) + size_secret);
key_blob.assign((const unsigned char*)&prefix, (const unsigned char*)(&prefix + 1));
key_blob.insert(key_blob.end(), (const unsigned char*)secret, (const unsigned char*)secret + size_secret);
key_blob.assign( reinterpret_cast<const unsigned char*>(&prefix), reinterpret_cast<const unsigned char*>(&prefix + 1));
key_blob.insert(key_blob.end(), reinterpret_cast<const unsigned char*>( secret), reinterpret_cast<const unsigned char*>(secret) + size_secret);
// Import the key.
winstd::crypt_key key_out;
@@ -1795,7 +1783,7 @@ HCRYPTKEY eap::method_tls::create_key(
#pragma pack(pop)
sanitizing_blob key_blob;
key_blob.reserve(sizeof(key_blob_prefix) + size_key);
key_blob.assign((const unsigned char*)&prefix, (const unsigned char*)(&prefix + 1));
key_blob.assign(reinterpret_cast<const unsigned char*>(&prefix), reinterpret_cast<const unsigned char*>(&prefix + 1));
// Key in EME-PKCS1-v1_5 (RFC 3447).
key_blob.push_back(0); // Initial zero
@@ -1818,7 +1806,7 @@ HCRYPTKEY eap::method_tls::create_key(
key_blob.push_back(0); // PS and M zero delimiter
// M
key_blob.insert(key_blob.end(), (const unsigned char*)secret, (const unsigned char*)secret + size_secret);
key_blob.insert(key_blob.end(), reinterpret_cast<const unsigned char*>(secret), reinterpret_cast<const unsigned char*>(secret) + size_secret);
#ifdef _HOST_LOW_ENDIAN
std::reverse(key_blob.end() - size_key, key_blob.end());

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -496,11 +496,11 @@ bool eap::packet_tls::append_frag(_In_ const EapPacket *pck)
if (pck->Data[1] & flags_req_length_incl) {
// Length field is included.
packet_data_ptr = pck->Data + 6;
size_packet_data = ntohs(*(unsigned short*)pck->Length) - 10;
size_packet_data = ntohs(*reinterpret_cast<const unsigned short*>(pck->Length)) - 10;
} else {
// Length field not included.
packet_data_ptr = pck->Data + 2;
size_packet_data = ntohs(*(unsigned short*)pck->Length) - 6;
size_packet_data = ntohs(*reinterpret_cast<const unsigned short*>(pck->Length)) - 6;
}
// Do the EAP-TLS defragmentation.
@@ -509,7 +509,7 @@ bool eap::packet_tls::append_frag(_In_ const EapPacket *pck)
// Start a new packet.
if (pck->Data[1] & flags_req_length_incl) {
// Preallocate data according to the Length field.
size_t size_tot = ntohl(*(unsigned int*)(pck->Data + 2));
size_t size_tot = ntohl(*reinterpret_cast<const unsigned int*>(pck->Data + 2));
m_data.reserve(size_tot);
//m_module.log_event(&EAPMETHOD_PACKET_RECV_FRAG_FIRST, event_data((unsigned int)eap_type_tls), event_data((unsigned int)size_packet_data), event_data((unsigned int)size_tot), event_data::blank);
} else {
@@ -561,7 +561,7 @@ unsigned short eap::packet_tls::get_frag(_Out_bytecap_(size_pck) EapPacket *pck,
} else {
// But it should be fragmented.
m_flags |= flags_res_length_incl | flags_res_more_frag;
*(unsigned int*)(pck->Data + 2) = htonl(size_packet);
*reinterpret_cast<unsigned int*>(pck->Data + 2) = htonl(size_packet);
data_dst = pck->Data + 6;
size_data = size_packet_limit - 10;
size_packet = size_packet_limit;
@@ -585,7 +585,7 @@ unsigned short eap::packet_tls::get_frag(_Out_bytecap_(size_pck) EapPacket *pck,
pck->Code = (BYTE)m_code;
pck->Id = m_id;
*(unsigned short*)pck->Length = htons((unsigned short)size_packet);
*reinterpret_cast<unsigned short*>(pck->Length) = htons((unsigned short)size_packet);
pck->Data[0] = (BYTE)eap_type_tls;
pck->Data[1] = m_flags;
memcpy(data_dst, m_data.data(), size_data);

View File

@@ -5,7 +5,7 @@
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;..\..\wxExtend\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />

View File

@@ -24,6 +24,7 @@
#include <WinStd/Common.h>
#include <wx/arrstr.h>
#include <wx/filedlg.h>
#include <wx/msgdlg.h>
@@ -40,21 +41,6 @@
///
class wxCertificateClientData;
///
/// Validator for host name
///
class wxHostNameValidator;
///
/// Validator for FQDN
///
class wxFQDNValidator;
///
/// Validator for FQDN lists
///
class wxFQDNListValidator;
///
/// TLS credential panel
///
@@ -110,149 +96,11 @@ public:
};
class wxHostNameValidator : public wxValidator
{
wxDECLARE_DYNAMIC_CLASS(wxHostNameValidator);
wxDECLARE_NO_ASSIGN_CLASS(wxHostNameValidator);
public:
///
/// Construct the validator with a value to store data
///
wxHostNameValidator(std::wstring *val = NULL);
///
/// Copy constructor
///
wxHostNameValidator(const wxHostNameValidator &other);
///
/// Copies this validator
///
virtual wxObject* Clone() const;
///
/// Validates the value
///
virtual bool Validate(wxWindow *parent);
///
/// Transfers the value to the window
///
virtual bool TransferToWindow();
///
/// Transfers the value from the window
///
virtual bool TransferFromWindow();
///
/// Parses FQDN value
///
static bool Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, std::wstring *val_out = NULL);
protected:
std::wstring *m_val; ///< Pointer to variable to receive control's parsed value
};
class wxFQDNValidator : public wxValidator
{
wxDECLARE_DYNAMIC_CLASS(wxFQDNValidator);
wxDECLARE_NO_ASSIGN_CLASS(wxFQDNValidator);
public:
///
/// Construct the validator with a value to store data
///
wxFQDNValidator(std::wstring *val = NULL);
///
/// Copy constructor
///
wxFQDNValidator(const wxFQDNValidator &other);
///
/// Copies this validator
///
virtual wxObject* Clone() const;
///
/// Validates the value
///
virtual bool Validate(wxWindow *parent);
///
/// Transfers the value to the window
///
virtual bool TransferToWindow();
///
/// Transfers the value from the window
///
virtual bool TransferFromWindow();
///
/// Parses FQDN value
///
static bool Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, std::wstring *val_out = NULL);
protected:
std::wstring *m_val; ///< Pointer to variable to receive control's parsed value
};
class wxFQDNListValidator : public wxValidator
{
wxDECLARE_DYNAMIC_CLASS(wxFQDNListValidator);
wxDECLARE_NO_ASSIGN_CLASS(wxFQDNListValidator);
public:
///
/// Construct the validator with a value to store data
///
wxFQDNListValidator(std::list<std::wstring> *val = NULL);
///
/// Copy constructor
///
wxFQDNListValidator(const wxFQDNListValidator &other);
///
/// Copies this validator
///
virtual wxObject* Clone() const;
///
/// Validates the value
///
virtual bool Validate(wxWindow *parent);
///
/// Transfers the value to the window
///
virtual bool TransferToWindow();
///
/// Transfers the value from the window
///
virtual bool TransferFromWindow();
///
/// Parses FQDN list value
///
static bool Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, std::list<std::wstring> *val_out = NULL);
protected:
std::list<std::wstring> *m_val; ///< Pointer to variable to receive control's parsed value
};
class wxTLSCredentialsPanel : public wxEAPCredentialsPanel<eap::credentials_tls, wxTLSCredentialsPanelBase>
{
public:
///
/// Constructs a configuration panel
/// Constructs a TLS credentials panel
///
/// \param[in] prov Provider configuration data
/// \param[in] cfg Configuration data
@@ -302,9 +150,9 @@ protected:
bool AddRootCA(PCCERT_CONTEXT cert);
protected:
const eap::config_provider &m_prov; ///< EAP provider
eap::config_method_tls &m_cfg; ///< TLS configuration
std::list<std::wstring> m_server_names_val; ///< Acceptable authenticating server names
const eap::config_provider &m_prov; ///< EAP provider
eap::config_method_tls &m_cfg; ///< TLS configuration
wxArrayString m_server_names_val; ///< Acceptable authenticating server names
};

View File

@@ -26,4 +26,6 @@
#include "../include/TLS_UI.h"
#include <wxex/valnet.h>
#include <WindowsX.h>

View File

@@ -39,274 +39,6 @@ wxCertificateClientData::~wxCertificateClientData()
}
//////////////////////////////////////////////////////////////////////
// wxHostNameValidator
//////////////////////////////////////////////////////////////////////
wxIMPLEMENT_DYNAMIC_CLASS(wxHostNameValidator, wxValidator);
wxHostNameValidator::wxHostNameValidator(std::wstring *val) :
m_val(val),
wxValidator()
{
}
wxHostNameValidator::wxHostNameValidator(const wxHostNameValidator &other) :
m_val(other.m_val),
wxValidator(other)
{
}
wxObject* wxHostNameValidator::Clone() const
{
return new wxHostNameValidator(*this);
}
bool wxHostNameValidator::Validate(wxWindow *parent)
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
if (!ctrl->IsEnabled()) return true;
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, parent);
}
bool wxHostNameValidator::TransferToWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
if (m_val)
((wxTextCtrl*)GetWindow())->SetValue(*m_val);
return true;
}
bool wxHostNameValidator::TransferFromWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, NULL, m_val);
}
bool wxHostNameValidator::Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, std::wstring *val_out)
{
const wxStringCharType *buf = val_in;
size_t i = i_start;
for (;;) {
if (i >= i_end) {
// End of host name found.
if (val_out) val_out->assign(val_in.c_str() + i_start, i - i_start);
return true;
} else if (buf[i] == _T('-') || buf[i] == _T('_') || buf[i] == _T('*') || _istalnum(buf[i])) {
// Valid character found.
i++;
} else {
// Invalid character found.
ctrl->SetFocus();
ctrl->SetSelection(i, i + 1);
wxMessageBox(wxString::Format(_("Invalid character in host name found: %c"), buf[i]), _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return false;
}
}
}
//////////////////////////////////////////////////////////////////////
// wxFQDNValidator
//////////////////////////////////////////////////////////////////////
wxIMPLEMENT_DYNAMIC_CLASS(wxFQDNValidator, wxValidator);
wxFQDNValidator::wxFQDNValidator(std::wstring *val) :
m_val(val),
wxValidator()
{
}
wxFQDNValidator::wxFQDNValidator(const wxFQDNValidator &other) :
m_val(other.m_val),
wxValidator(other)
{
}
wxObject* wxFQDNValidator::Clone() const
{
return new wxFQDNValidator(*this);
}
bool wxFQDNValidator::Validate(wxWindow *parent)
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
if (!ctrl->IsEnabled()) return true;
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, parent);
}
bool wxFQDNValidator::TransferToWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
if (m_val)
((wxTextCtrl*)GetWindow())->SetValue(*m_val);
return true;
}
bool wxFQDNValidator::TransferFromWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, NULL, m_val);
}
bool wxFQDNValidator::Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, std::wstring *val_out)
{
const wxStringCharType *buf = val_in;
size_t i = i_start;
for (;;) {
const wxStringCharType *buf_next;
if ((buf_next = wmemchr(buf + i, L'.', i_end - i)) != NULL) {
// FQDN separator found.
if (!wxHostNameValidator::Parse(val_in, i, buf_next - buf, ctrl, parent))
return false;
i = buf_next - buf + 1;
} else if (wxHostNameValidator::Parse(val_in, i, i_end, ctrl, parent)) {
// The rest of the FQDN parsed succesfully.
if (val_out) val_out->assign(val_in.c_str() + i_start, i_end - i_start);
return true;
} else
return false;
}
}
//////////////////////////////////////////////////////////////////////
// wxFQDNListValidator
//////////////////////////////////////////////////////////////////////
wxIMPLEMENT_DYNAMIC_CLASS(wxFQDNListValidator, wxValidator);
wxFQDNListValidator::wxFQDNListValidator(std::list<std::wstring> *val) :
m_val(val),
wxValidator()
{
}
wxFQDNListValidator::wxFQDNListValidator(const wxFQDNListValidator &other) :
m_val(other.m_val),
wxValidator(other)
{
}
wxObject* wxFQDNListValidator::Clone() const
{
return new wxFQDNListValidator(*this);
}
bool wxFQDNListValidator::Validate(wxWindow *parent)
{
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
if (!ctrl->IsEnabled()) return true;
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, parent);
}
bool wxFQDNListValidator::TransferToWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
if (m_val) {
wxString str;
for (std::list<std::wstring>::const_iterator name = m_val->cbegin(), name_end = m_val->cend(); name != name_end; ++name) {
if (!str.IsEmpty()) str += wxT("; ");
str += *name;
}
((wxTextCtrl*)GetWindow())->SetValue(str);
}
return true;
}
bool wxFQDNListValidator::TransferFromWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, NULL, m_val);
}
bool wxFQDNListValidator::Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, std::list<std::wstring> *val_out)
{
const wxStringCharType *buf = val_in;
std::wstring _fqdn, *fqdn = val_out ? &_fqdn : NULL;
std::list<std::wstring> _val_out;
size_t i = i_start;
for (;;) {
// Skip initial white-space.
for (; i < i_end && _istspace(buf[i]); i++);
const wxStringCharType *buf_next;
if ((buf_next = wmemchr(buf + i, L';', i_end - i)) != NULL) {
// FQDN list separator found.
// Skip trailing white-space.
size_t i_next = buf_next - buf;
for (; i < i_next && _istspace(buf[i_next - 1]); i_next--);
if (!wxFQDNValidator::Parse(val_in, i, i_next, ctrl, parent, fqdn))
return false;
if (fqdn && !fqdn->empty()) _val_out.push_back(std::move(*fqdn));
i = buf_next - buf + 1;
} else {
// Skip trailing white-space.
for (; i < i_end && _istspace(buf[i_end - 1]); i_end--);
if (wxFQDNValidator::Parse(val_in, i, i_end, ctrl, parent, fqdn)) {
// The rest of the FQDN list parsed succesfully.
if (fqdn && !fqdn->empty()) _val_out.push_back(std::move(*fqdn));
if (val_out) *val_out = std::move(_val_out);
return true;
} else
return false;
}
}
}
//////////////////////////////////////////////////////////////////////
// wxTLSCredentialsPanel
//////////////////////////////////////////////////////////////////////
@@ -421,11 +153,13 @@ wxTLSServerTrustPanel::wxTLSServerTrustPanel(const eap::config_provider &prov, e
bool wxTLSServerTrustPanel::TransferDataToWindow()
{
// Populate trusted CA list.
for (std::list<winstd::cert_context>::const_iterator cert = m_cfg.m_trusted_root_ca.cbegin(), cert_end = m_cfg.m_trusted_root_ca.cend(); cert != cert_end; ++cert)
for (auto cert = m_cfg.m_trusted_root_ca.cbegin(), cert_end = m_cfg.m_trusted_root_ca.cend(); cert != cert_end; ++cert)
m_root_ca->Append(wxString(eap::get_cert_title(*cert)), new wxCertificateClientData(cert->duplicate()));
// Set server acceptable names. The edit control will get populated by validator.
m_server_names_val = m_cfg.m_server_names;
m_server_names_val.clear();
for (auto name = m_cfg.m_server_names.cbegin(), name_end = m_cfg.m_server_names.cend(); name != name_end; ++name)
m_server_names_val.push_back(*name);
return wxTLSServerTrustPanelBase::TransferDataToWindow();
}
@@ -447,7 +181,9 @@ bool wxTLSServerTrustPanel::TransferDataFromWindow()
}
// Save acceptable server names.
m_cfg.m_server_names = m_server_names_val;
m_cfg.m_server_names.clear();
for (wxArrayString::const_iterator name = m_server_names_val.begin(), name_end = m_server_names_val.end(); name != name_end; ++name)
m_cfg.m_server_names.push_back(std::wstring(*name));
}
return true;
@@ -521,7 +257,7 @@ void wxTLSServerTrustPanel::OnRootCAAddFile(wxCommandEvent& event)
for (size_t i = 0, i_end = paths.GetCount(); i < i_end; i++) {
// Load certificate(s) from file.
winstd::cert_store cs;
if (cs.create(CERT_STORE_PROV_FILENAME, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, NULL, CERT_STORE_OPEN_EXISTING_FLAG | CERT_STORE_READONLY_FLAG, (LPCTSTR)(paths[i]))) {
if (cs.create(CERT_STORE_PROV_FILENAME, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, NULL, CERT_STORE_OPEN_EXISTING_FLAG | CERT_STORE_READONLY_FLAG, static_cast<LPCTSTR>(paths[i]))) {
for (PCCERT_CONTEXT cert = NULL; (cert = CertEnumCertificatesInStore(cs, cert)) != NULL;)
AddRootCA(cert);
} else

View File

@@ -97,7 +97,7 @@ namespace eap
virtual void process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput);
_Out_ EapPeerMethodOutput *pEapOutput);
///
/// Obtains a response packet from the EAP method.
@@ -115,7 +115,7 @@ namespace eap
///
virtual void get_result(
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult);
_Inout_ EapPeerMethodResult *pResult);
/// @}
@@ -141,9 +141,6 @@ namespace eap
virtual void process_application_data(_In_bytecount_(size_msg) const void *msg, _In_ size_t size_msg);
protected:
config_method_ttls &m_cfg; ///< EAP-TTLS method configuration
credentials_ttls &m_cred; ///< EAP-TTLS credentials
#pragma warning(suppress: 4480)
enum version_t :unsigned char {
version_0 = 0, ///< EAP-TTLS v0

View File

@@ -145,7 +145,7 @@ namespace eap
_In_ EAP_SESSION_HANDLE hSession,
_In_bytecount_(dwReceivedPacketSize) const EapPacket *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput);
_Out_ EapPeerMethodOutput *pEapOutput);
///
/// Obtains a response packet from the EAP method.
@@ -165,7 +165,7 @@ namespace eap
virtual void get_result(
_In_ EAP_SESSION_HANDLE hSession,
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult);
_Inout_ EapPeerMethodResult *pResult);
///
/// Obtains the user interface context from the EAP method.
@@ -190,7 +190,7 @@ namespace eap
_In_ EAP_SESSION_HANDLE hSession,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ DWORD dwUIContextDataSize,
_In_ const EapPeerMethodOutput *pEapOutput);
_Out_ EapPeerMethodOutput *pEapOutput);
///
/// Obtains an array of EAP response attributes from the EAP method.
@@ -209,7 +209,7 @@ namespace eap
virtual void set_response_attributes(
_In_ EAP_SESSION_HANDLE hSession,
_In_ const EapAttributes *pAttribs,
_Inout_ EapPeerMethodOutput *pEapOutput);
_Out_ EapPeerMethodOutput *pEapOutput);
/// @}

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
namespace eap

View File

@@ -38,7 +38,7 @@ eap::config_method_ttls::config_method_ttls(_In_ module &mod, _In_ unsigned int
eap::config_method_ttls::config_method_ttls(const _In_ config_method_ttls &other) :
m_inner(other.m_inner ? (config_method_with_cred*)other.m_inner->clone() : nullptr),
m_inner(other.m_inner ? dynamic_cast<config_method_with_cred*>(other.m_inner->clone()) : nullptr),
m_anonymous_identity(other.m_anonymous_identity),
config_method_tls(other)
{
@@ -57,7 +57,7 @@ eap::config_method_ttls& eap::config_method_ttls::operator=(const _In_ config_me
{
if (this != &other) {
(config_method_tls&)*this = other;
m_inner.reset(other.m_inner ? (config_method_with_cred*)other.m_inner->clone() : nullptr);
m_inner.reset(other.m_inner ? dynamic_cast<config_method_with_cred*>(other.m_inner->clone()) : nullptr);
m_anonymous_identity = other.m_anonymous_identity;
}
@@ -292,7 +292,7 @@ wstring eap::config_method_ttls::get_public_identity(const credentials_ttls &cre
} else if (m_anonymous_identity.compare(L"@") == 0) {
// Strip username part from identity (RFC 4822).
wstring identity(std::move(cred.get_identity()));
wstring::size_type offset = identity.find(L'@');
auto offset = identity.find(L'@');
if (offset != wstring::npos) identity.erase(0, offset);
return identity;
} else {

View File

@@ -35,7 +35,7 @@ eap::credentials_ttls::credentials_ttls(_In_ module &mod) :
eap::credentials_ttls::credentials_ttls(_In_ const credentials_ttls &other) :
m_inner(other.m_inner ? (credentials*)other.m_inner->clone() : nullptr),
m_inner(other.m_inner ? dynamic_cast<credentials*>(other.m_inner->clone()) : nullptr),
credentials_tls(other)
{
}
@@ -52,7 +52,7 @@ eap::credentials_ttls& eap::credentials_ttls::operator=(_In_ const credentials_t
{
if (this != &other) {
(credentials_tls&)*this = other;
m_inner.reset(other.m_inner ? (credentials*)other.m_inner->clone() : nullptr);
m_inner.reset(other.m_inner ? dynamic_cast<credentials*>(other.m_inner->clone()) : nullptr);
}
return *this;
@@ -191,8 +191,8 @@ eap::credentials::source_t eap::credentials_ttls::combine(
// Combine inner credentials.
source_t src_inner = m_inner->combine(
cred_cached ? ((const credentials_ttls*)cred_cached)->m_inner.get() : NULL,
*((const config_method_ttls&)cfg).m_inner,
cred_cached ? dynamic_cast<const credentials_ttls*>(cred_cached)->m_inner.get() : NULL,
*dynamic_cast<const config_method_ttls&>(cfg).m_inner,
pszTargetName);
return std::min<source_t>(src_outer, src_inner);

View File

@@ -29,8 +29,6 @@ using namespace winstd;
//////////////////////////////////////////////////////////////////////
eap::method_ttls::method_ttls(_In_ module &module, _In_ config_method_ttls &cfg, _In_ credentials_ttls &cred) :
m_cfg(cfg),
m_cred(cred),
m_version(version_0),
method_tls(module, cfg, cred)
{
@@ -38,8 +36,6 @@ eap::method_ttls::method_ttls(_In_ module &module, _In_ config_method_ttls &cfg,
eap::method_ttls::method_ttls(_Inout_ method_ttls &&other) :
m_cfg ( other.m_cfg ),
m_cred ( other.m_cred ),
m_version (std::move(other.m_version)),
m_inner (std::move(other.m_inner )),
method_tls(std::move(other ))
@@ -68,9 +64,11 @@ void eap::method_ttls::begin_session(
method_tls::begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
// Initialize inner method.
switch (m_cfg.m_inner->get_method_id()) {
case eap_type_legacy_pap : m_inner.reset(new method_pap (m_module, (config_method_pap &)*m_cfg.m_inner, (credentials_pass &)*m_cred.m_inner.get())); break;
case eap_type_legacy_mschapv2: m_inner.reset(new method_mschapv2(m_module, (config_method_mschapv2&)*m_cfg.m_inner, (credentials_pass&)*m_cred.m_inner.get())); break;
auto * cfg_inner = dynamic_cast<config_method_ttls&>(m_cfg ).m_inner.get();
auto *cred_inner = dynamic_cast<credentials_ttls &>(m_cred).m_inner.get();
switch (cfg_inner->get_method_id()) {
case eap_type_legacy_pap : m_inner.reset(new method_pap (m_module, dynamic_cast<config_method_pap &>(*cfg_inner), dynamic_cast<credentials_pass&>(*cred_inner))); break;
case eap_type_legacy_mschapv2: m_inner.reset(new method_mschapv2(m_module, dynamic_cast<config_method_mschapv2&>(*cfg_inner), dynamic_cast<credentials_pass&>(*cred_inner))); break;
default: throw invalid_argument(__FUNCTION__ " Unsupported inner authentication method.");
}
m_inner->begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, MAXDWORD);
@@ -87,7 +85,7 @@ void eap::method_ttls::end_session()
void eap::method_ttls::process_request_packet(
_In_bytecount_(dwReceivedPacketSize) const void *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput)
_Out_ EapPeerMethodOutput *pEapOutput)
{
if (((const EapPacket*)pReceivedPacket)->Code == EapCodeRequest && (((const EapPacket*)pReceivedPacket)->Data[1] & packet_ttls::flags_start)) {
// This is a start EAP-TTLS packet.
@@ -118,17 +116,17 @@ void eap::method_ttls::get_response_packet(
void eap::method_ttls::get_result(
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult)
_Inout_ EapPeerMethodResult *pResult)
{
// Do the TLS.
method_tls::get_result(reason, ppResult);
method_tls::get_result(reason, pResult);
if (m_phase == phase_application_data) {
// Get inner method result.
EapPeerMethodResult result = {};
m_inner->get_result(reason, &result);
if (result.fSaveConnectionData)
ppResult->fSaveConnectionData = TRUE;
pResult->fSaveConnectionData = TRUE;
if (m_inner->m_cfg.m_last_status != config_method::status_success) {
// Inner method admitted problems, so autentication must have proceeded to inner authentication already.
@@ -161,8 +159,8 @@ void eap::method_ttls::derive_msk()
//
static const unsigned char s_label[] = "ttls keying material";
sanitizing_blob seed(s_label, s_label + _countof(s_label) - 1);
seed.insert(seed.end(), (const unsigned char*)&m_random_client, (const unsigned char*)(&m_random_client + 1));
seed.insert(seed.end(), (const unsigned char*)&m_random_server, (const unsigned char*)(&m_random_server + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_client), reinterpret_cast<const unsigned char*>(&m_random_client + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_server), reinterpret_cast<const unsigned char*>(&m_random_server + 1));
sanitizing_blob key_block(prf(m_cp, CALG_TLS1PRF, m_master_secret, seed, 2*sizeof(tls_random)));
_key_block = key_block.data();
#else
@@ -201,8 +199,8 @@ void eap::method_ttls::derive_challenge()
#if EAP_TLS < EAP_TLS_SCHANNEL
static const unsigned char s_label[] = "ttls challenge";
sanitizing_blob seed(s_label, s_label + _countof(s_label) - 1);
seed.insert(seed.end(), (const unsigned char*)&m_random_client, (const unsigned char*)(&m_random_client + 1));
seed.insert(seed.end(), (const unsigned char*)&m_random_server, (const unsigned char*)(&m_random_server + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_client), reinterpret_cast<const unsigned char*>(&m_random_client + 1));
seed.insert(seed.end(), reinterpret_cast<const unsigned char*>(&m_random_server), reinterpret_cast<const unsigned char*>(&m_random_server + 1));
sanitizing_blob keying(prf(m_cp, CALG_TLS1PRF, m_master_secret, seed, sizeof(challenge_mschapv2) + 1));
memcpy(&inner_mschapv2->m_challenge_server, keying.data(), sizeof(challenge_mschapv2));
inner_mschapv2->m_ident = keying[sizeof(challenge_mschapv2) + 0];
@@ -298,7 +296,7 @@ void eap::method_ttls::process_application_data(_In_bytecount_(size_msg) const v
status = EncryptMessage(m_sc_ctx, 0, &buf_desc, 0);
if (FAILED(status))
throw sec_runtime_error(status, __FUNCTION__ " Error encrypting message.");
m_packet_res.m_data.insert(m_packet_res.m_data.end(), (const unsigned char*)buf[0].pvBuffer, (const unsigned char*)buf[0].pvBuffer + buf[0].cbBuffer + buf[1].cbBuffer + buf[2].cbBuffer);
m_packet_res.m_data.insert(m_packet_res.m_data.end(), reinterpret_cast<const unsigned char*>(buf[0].pvBuffer), reinterpret_cast<const unsigned char*>(buf[0].pvBuffer) + buf[0].cbBuffer + buf[1].cbBuffer + buf[2].cbBuffer);
#endif
} else {
// Empty packets represent ACK message, and are not encrypted.
@@ -308,6 +306,6 @@ void eap::method_ttls::process_application_data(_In_bytecount_(size_msg) const v
}
default:
throw invalid_argument(string_printf(__FUNCTION__ " Inner method returned an unsupported action (action %u).", eap_output.action).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " Inner method returned an unsupported action (action %u).", eap_output.action));
}
}

View File

@@ -98,7 +98,7 @@ void eap::peer_ttls::get_identity(
}
// Build our identity. ;)
wstring identity(std::move(cfg_method->get_public_identity((const credentials_ttls&)*cred_out.m_cred)));
wstring identity(std::move(cfg_method->get_public_identity(*dynamic_cast<const credentials_ttls*>(cred_out.m_cred.get()))));
log_event(&EAPMETHOD_TRACE_EVT_CRED_OUTER_ID1, event_data((unsigned int)eap_type_ttls), event_data(identity), event_data::blank);
size_t size = sizeof(WCHAR)*(identity.length() + 1);
*ppwszIdentity = (WCHAR*)alloc_memory(size);
@@ -204,21 +204,21 @@ EAP_SESSION_HANDLE eap::peer_ttls::begin_session(
config_method_ttls *cfg_method;
for (config_connection::provider_list::iterator cfg_prov = s->m_cfg.m_providers.begin(), cfg_prov_end = s->m_cfg.m_providers.end();; ++cfg_prov) {
for (auto cfg_prov = s->m_cfg.m_providers.begin(), cfg_prov_end = s->m_cfg.m_providers.end();; ++cfg_prov) {
if (cfg_prov != cfg_prov_end) {
if (s->m_cred.match(*cfg_prov)) {
// Matching provider found.
if (cfg_prov->m_methods.empty())
throw invalid_argument(string_printf(__FUNCTION__ " %ls provider has no methods.", cfg_prov->get_id().c_str()).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " %ls provider has no methods.", cfg_prov->get_id().c_str()));
cfg_method = dynamic_cast<config_method_ttls*>(cfg_prov->m_methods.front().get());
break;
}
} else
throw invalid_argument(string_printf(__FUNCTION__ " Credentials do not match to any provider within this connection configuration (provider: %ls).", s->m_cred.get_id().c_str()).c_str());
throw invalid_argument(string_printf(__FUNCTION__ " Credentials do not match to any provider within this connection configuration (provider: %ls).", s->m_cred.get_id().c_str()));
}
// We have configuration, we have credentials, create method.
s->m_method.reset(new method_ttls(*this, *cfg_method, *(credentials_ttls*)s->m_cred.m_cred.get()));
s->m_method.reset(new method_ttls(*this, *cfg_method, *dynamic_cast<credentials_ttls*>(s->m_cred.m_cred.get())));
// Initialize method.
s->m_method->begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize);
@@ -242,7 +242,7 @@ void eap::peer_ttls::process_request_packet(
_In_ EAP_SESSION_HANDLE hSession,
_In_bytecount_(dwReceivedPacketSize) const EapPacket *pReceivedPacket,
_In_ DWORD dwReceivedPacketSize,
_Inout_ EapPeerMethodOutput *pEapOutput)
_Out_ EapPeerMethodOutput *pEapOutput)
{
assert(dwReceivedPacketSize == ntohs(*(WORD*)pReceivedPacket->Length));
static_cast<session*>(hSession)->m_method->process_request_packet(pReceivedPacket, dwReceivedPacketSize, pEapOutput);
@@ -261,35 +261,35 @@ void eap::peer_ttls::get_response_packet(
void eap::peer_ttls::get_result(
_In_ EAP_SESSION_HANDLE hSession,
_In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult)
_Inout_ EapPeerMethodResult *pResult)
{
session *s = static_cast<session*>(hSession);
s->m_method->get_result(reason, ppResult);
s->m_method->get_result(reason, pResult);
s->m_eap_attr_desc.dwNumberOfAttributes = (DWORD)s->m_method->m_eap_attr.size();
s->m_eap_attr_desc.pAttribs = s->m_method->m_eap_attr.data();
ppResult->pAttribArray = &s->m_eap_attr_desc;
pResult->pAttribArray = &s->m_eap_attr_desc;
// Do not report failure to EapHost, as it will not save updated configuration then. But we need it to save it, to alert user on next connection attempt.
// EapHost is well aware of the failed condition.
//ppResult->fIsSuccess = FALSE;
//ppResult->dwFailureReasonCode = EAP_E_AUTHENTICATION_FAILED;
ppResult->fIsSuccess = TRUE;
ppResult->dwFailureReasonCode = ERROR_SUCCESS;
//pResult->fIsSuccess = FALSE;
//pResult->dwFailureReasonCode = EAP_E_AUTHENTICATION_FAILED;
pResult->fIsSuccess = TRUE;
pResult->dwFailureReasonCode = ERROR_SUCCESS;
if (ppResult->fSaveConnectionData) {
pack(s->m_cfg, &ppResult->pConnectionData, &ppResult->dwSizeofConnectionData);
if (pResult->fSaveConnectionData) {
pack(s->m_cfg, &pResult->pConnectionData, &pResult->dwSizeofConnectionData);
if (s->m_blob_cfg)
free_memory(s->m_blob_cfg);
s->m_blob_cfg = ppResult->pConnectionData;
s->m_blob_cfg = pResult->pConnectionData;
}
#ifdef EAP_USE_NATIVE_CREDENTIAL_CACHE
ppResult->fSaveUserData = TRUE;
pack(s->m_cred, &ppResult->pUserData, &ppResult->dwSizeofUserData);
pResult->fSaveUserData = TRUE;
pack(s->m_cred, &pResult->pUserData, &pResult->dwSizeofUserData);
if (s->m_blob_cred)
free_memory(s->m_blob_cred);
s->m_blob_cred = ppResult->pUserData;
s->m_blob_cred = pResult->pUserData;
#endif
}
@@ -311,7 +311,7 @@ void eap::peer_ttls::set_ui_context(
_In_ EAP_SESSION_HANDLE hSession,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ DWORD dwUIContextDataSize,
_In_ const EapPeerMethodOutput *pEapOutput)
_Out_ EapPeerMethodOutput *pEapOutput)
{
UNREFERENCED_PARAMETER(hSession);
UNREFERENCED_PARAMETER(pUIContextData);
@@ -334,9 +334,9 @@ void eap::peer_ttls::get_response_attributes(
void eap::peer_ttls::set_response_attributes(
_In_ EAP_SESSION_HANDLE hSession,
_In_ const EapAttributes *pAttribs,
_Inout_ EapPeerMethodOutput *pEapOutput)
_In_ EAP_SESSION_HANDLE hSession,
_In_ const EapAttributes *pAttribs,
_Out_ EapPeerMethodOutput *pEapOutput)
{
UNREFERENCED_PARAMETER(hSession);
UNREFERENCED_PARAMETER(pAttribs);
@@ -366,7 +366,7 @@ const eap::config_method_ttls* eap::peer_ttls::combine_credentials(
user_impersonator impersonating(hTokenImpersonateUser);
for (config_connection::provider_list::const_iterator cfg_prov = cfg.m_providers.cbegin(), cfg_prov_end = cfg.m_providers.cend(); cfg_prov != cfg_prov_end; ++cfg_prov) {
for (auto cfg_prov = cfg.m_providers.cbegin(), cfg_prov_end = cfg.m_providers.cend(); cfg_prov != cfg_prov_end; ++cfg_prov) {
wstring target_name(std::move(cfg_prov->get_id()));
// Get method configuration.
@@ -378,7 +378,7 @@ const eap::config_method_ttls* eap::peer_ttls::combine_credentials(
assert(cfg_method);
// Combine credentials. We could use eap::credentials_ttls() to do all the work, but we would not know which credentials is missing then.
credentials_ttls *cred = (credentials_ttls*)cfg_method->make_credentials();
credentials_ttls *cred = dynamic_cast<credentials_ttls*>(cfg_method->make_credentials());
cred_out.m_cred.reset(cred);
#ifdef EAP_USE_NATIVE_CREDENTIAL_CACHE
bool has_cached = cred_in.m_cred && cred_in.match(*cfg_prov);
@@ -402,7 +402,7 @@ const eap::config_method_ttls* eap::peer_ttls::combine_credentials(
// Combine inner credentials.
eap::credentials::source_t src_inner = cred->m_inner->combine(
#ifdef EAP_USE_NATIVE_CREDENTIAL_CACHE
has_cached ? ((credentials_ttls*)cred_in.m_cred.get())->m_inner.get() : NULL,
has_cached ? dynamic_cast<credentials_ttls*>(cred_in.m_cred.get())->m_inner.get() : NULL,
#else
NULL,
#endif

View File

@@ -5,7 +5,7 @@
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\..\WinStd\include;..\..\wxExtend\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />

View File

@@ -135,7 +135,6 @@ protected:
/// \endcond
protected:
eap::config_method_ttls &m_cfg; ///< TTLS configuration
wxStaticText *m_outer_title; ///< Outer authentication title
wxTTLSConfigPanel *m_outer_identity; ///< Outer identity configuration panel
wxTLSConfigPanel *m_tls; ///< TLS configuration panel

View File

@@ -184,7 +184,7 @@ void eap::peer_ttls_ui::invoke_identity_ui(
// Create credentials dialog and populate it with providers.
bool combined = false;
wxEAPCredentialsConnectionDialog dlg(&parent);
for (config_connection::provider_list::iterator cfg_prov = cfg.m_providers.begin(), cfg_prov_end = cfg.m_providers.end(); cfg_prov != cfg_prov_end; ++cfg_prov) {
for (auto cfg_prov = cfg.m_providers.begin(), cfg_prov_end = cfg.m_providers.end(); cfg_prov != cfg_prov_end; ++cfg_prov) {
wstring target_name(std::move(cfg_prov->get_id()));
// Get method configuration.
@@ -199,7 +199,7 @@ void eap::peer_ttls_ui::invoke_identity_ui(
credentials_connection cred_method(*this, cfg);
cred_method.m_namespace = cfg_prov->m_namespace;
cred_method.m_id = cfg_prov->m_id;
credentials_ttls *_cred_method = (credentials_ttls*)cfg_method->make_credentials();
credentials_ttls *_cred_method = dynamic_cast<credentials_ttls*>(cfg_method->make_credentials());
cred_method.m_cred.reset(_cred_method);
#ifdef EAP_USE_NATIVE_CREDENTIAL_CACHE
bool has_cached = cred_in.m_cred && cred_in.match(*cfg_prov);
@@ -224,7 +224,7 @@ void eap::peer_ttls_ui::invoke_identity_ui(
// Combine inner credentials.
eap::credentials::source_t src_inner = _cred_method->m_inner->combine(
#ifdef EAP_USE_NATIVE_CREDENTIAL_CACHE
has_cached ? ((credentials_ttls*)cred_in.m_cred.get())->m_inner.get() : NULL,
has_cached ? dynamic_cast<credentials_ttls*>(cred_in.m_cred.get())->m_inner.get() : NULL,
#else
NULL,
#endif
@@ -299,7 +299,7 @@ void eap::peer_ttls_ui::invoke_identity_ui(
throw win_runtime_error(ERROR_CANCELLED, __FUNCTION__ " Cancelled.");
// Build our identity. ;)
wstring identity(std::move(cfg_method->get_public_identity((const credentials_ttls&)*cred_out.m_cred)));
wstring identity(std::move(cfg_method->get_public_identity(*dynamic_cast<const credentials_ttls*>(cred_out.m_cred.get()))));
log_event(&EAPMETHOD_TRACE_EVT_CRED_OUTER_ID1, event_data((unsigned int)eap_type_ttls), event_data(identity), event_data::blank);
size_t size = sizeof(WCHAR)*(identity.length() + 1);
*ppwszIdentity = (WCHAR*)alloc_memory(size);
@@ -344,7 +344,7 @@ wxInitializerPeer::wxInitializerPeer(_In_ HINSTANCE instance)
// Do our wxWidgets configuration and localization initialization.
wxInitializeConfig();
if (wxInitializeLocale(s_locale)) {
//s_locale.AddCatalog(wxT("wxExtend") wxT(wxExtendVersion));
s_locale.AddCatalog(wxT("wxExtend") wxT(wxExtendVersion));
s_locale.AddCatalog(wxT("EAPTTLSUI"));
}
}

View File

@@ -28,5 +28,7 @@
#include "../../PAP_UI/include/PAP_UI.h"
#include "../../MSCHAPv2_UI/include/MSCHAPv2_UI.h"
#include <wxex/common.h>
#include <wx/app.h>
#include <wx/thread.h>

View File

@@ -1,21 +1,21 @@
/*
/*
Copyright 2015-2016 Amebis
Copyright 2016 G<EFBFBD>ANT
Copyright 2016 GÉANT
This file is part of G<EFBFBD>ANTLink.
This file is part of GÉANTLink.
G<EFBFBD>ANTLink is free software: you can redistribute it and/or modify it
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<EFBFBD>ANTLink is distributed in the hope that it will be useful, but
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<EFBFBD>ANTLink. If not, see <http://www.gnu.org/licenses/>.
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
@@ -169,7 +169,6 @@ void wxTTLSConfigPanel::OnUpdateUI(wxUpdateUIEvent& event)
//////////////////////////////////////////////////////////////////////
wxTTLSConfigWindow::wxTTLSConfigWindow(eap::config_provider &prov, eap::config_method &cfg, wxWindow* parent) :
m_cfg((eap::config_method_ttls&)cfg),
m_cfg_pap(cfg.m_module, cfg.m_level + 1),
m_cfg_mschapv2(cfg.m_module, cfg.m_level + 1),
wxEAPConfigWindow(prov, cfg, parent)
@@ -200,10 +199,10 @@ wxTTLSConfigWindow::wxTTLSConfigWindow(eap::config_provider &prov, eap::config_m
m_outer_title->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_INACTIVECAPTION ) );
sb_content->Add(m_outer_title, 0, wxALL|wxALIGN_RIGHT, 5);
m_outer_identity = new wxTTLSConfigPanel(m_prov, m_cfg, this);
m_outer_identity = new wxTTLSConfigPanel(m_prov, dynamic_cast<eap::config_method_ttls&>(m_cfg), this);
sb_content->Add(m_outer_identity, 0, wxALL|wxEXPAND, 5);
m_tls = new wxTLSConfigPanel(m_prov, m_cfg, this);
m_tls = new wxTLSConfigPanel(m_prov, dynamic_cast<eap::config_method_tls&>(m_cfg), this);
sb_content->Add(m_tls, 0, wxALL|wxEXPAND, 5);
wxSize size = sb_content->CalcMin();
@@ -232,14 +231,14 @@ wxTTLSConfigWindow::~wxTTLSConfigWindow()
bool wxTTLSConfigWindow::TransferDataToWindow()
{
switch (m_cfg.m_inner->get_method_id()) {
switch (dynamic_cast<eap::config_method_ttls&>(m_cfg).m_inner->get_method_id()) {
case winstd::eap_type_legacy_pap:
m_cfg_pap = *(eap::config_method_pap*)m_cfg.m_inner.get();
m_cfg_pap = *(eap::config_method_pap*)dynamic_cast<eap::config_method_ttls&>(m_cfg).m_inner.get();
m_inner_type->SetSelection(0); // 0=PAP
break;
case winstd::eap_type_legacy_mschapv2:
m_cfg_mschapv2 = *(eap::config_method_mschapv2*)m_cfg.m_inner.get();
m_cfg_mschapv2 = *(eap::config_method_mschapv2*)dynamic_cast<eap::config_method_ttls&>(m_cfg).m_inner.get();
m_inner_type->SetSelection(1); // 1=MSCHAPv2
break;
@@ -261,11 +260,11 @@ bool wxTTLSConfigWindow::TransferDataFromWindow()
// This is not a provider-locked configuration. Save the data.
switch (m_inner_type->GetSelection()) {
case 0: // 0=PAP
m_cfg.m_inner.reset(new eap::config_method_pap(m_cfg_pap));
dynamic_cast<eap::config_method_ttls&>(m_cfg).m_inner.reset(new eap::config_method_pap(m_cfg_pap));
break;
case 1: // 1=MSCHAPv2
m_cfg.m_inner.reset(new eap::config_method_mschapv2(m_cfg_mschapv2));
dynamic_cast<eap::config_method_ttls&>(m_cfg).m_inner.reset(new eap::config_method_mschapv2(m_cfg_mschapv2));
break;
default:

View File

@@ -1,4 +1,4 @@
*/EAPTTLSUI.mo
*/EventMonitor.mo
*/wxExtend13.mo
*/wxExtend*.mo
*/wxstd.mo