Compare commits
60 Commits
Author | SHA1 | Date | |
---|---|---|---|
e75d31dd9b | |||
0b4e4571b6 | |||
435157955e | |||
f155b93ac2 | |||
0865318278 | |||
271e062be2 | |||
ebe12e5157 | |||
f197c0c937 | |||
29d5769060 | |||
0afbdadea7 | |||
cebcf7506e | |||
3fb92a0c30 | |||
0c5a145ad8 | |||
cc069d0442 | |||
060aada133 | |||
ff2871f126 | |||
438395062b | |||
2ff425713b | |||
aaeb6415ee | |||
4bbc752995 | |||
64c3837908 | |||
d5870f1252 | |||
094fce2b2f | |||
26a7b7dab7 | |||
d08488d916 | |||
f71ff1fb8c | |||
4722c42903 | |||
1ccf97b6d7 | |||
278bc46511 | |||
d602a03cac | |||
fd7b0a93c0 | |||
1911b53c10 | |||
0dcb8c04c5 | |||
8c0fa1dc68 | |||
473070e567 | |||
8b9ab89c04 | |||
75ba227bca | |||
2086653a7b | |||
39ddc6333d | |||
d7894acf7c | |||
9af304d57a | |||
c94d7897ca | |||
e75e2dcce5 | |||
e178d6d049 | |||
f89f3eb4b9 | |||
01a83faca6 | |||
896bff53cc | |||
822cf92915 | |||
1d06d78294 | |||
6671c810f4 | |||
76729d51cc | |||
3a6701452a | |||
c7b96c9aa3 | |||
b212d0abc6 | |||
bcba624dcb | |||
b3d4e6b085 | |||
c0b51f767c | |||
c768b44c56 | |||
82f5cd7507 | |||
dcbe5410cd |
14
Doxyfile
14
Doxyfile
@@ -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
|
||||
|
@@ -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.
@@ -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 ""
|
||||
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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
|
||||
|
@@ -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>"
|
||||
|
@@ -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>"
|
||||
|
@@ -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
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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
|
||||
|
@@ -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"
|
||||
|
@@ -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));
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
/// @}
|
||||
|
@@ -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" />
|
||||
|
@@ -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">
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
/// @}
|
||||
|
@@ -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"
|
||||
|
@@ -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.
@@ -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 следене на събитие"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -7,7 +7,7 @@
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "ETWLog.h"
|
||||
#include "../ETWLog.h"
|
||||
|
||||
#include "wxEventMonitor_UI.h"
|
||||
|
@@ -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.
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
Submodule MSI/MSIBuild updated: d2e4553dd0...131e528a94
BIN
MSILocal.mak
BIN
MSILocal.mak
Binary file not shown.
29
README.md
29
README.md
@@ -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 NMAKE’s verbosity. You can combine multiple targets (i.e. nmake Unregister Clean). Please, see NMAKE reference for further reading.
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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.
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
||||
/// @}
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
/// @}
|
||||
};
|
||||
|
@@ -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));
|
||||
|
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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"
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -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/>.
|
||||
*/
|
||||
|
||||
///
|
||||
|
@@ -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);
|
||||
|
@@ -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.
@@ -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>
|
||||
|
@@ -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);
|
||||
|
||||
/// @}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
@@ -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"
|
||||
|
@@ -39,6 +39,12 @@ namespace eap
|
||||
|
||||
namespace eap
|
||||
{
|
||||
/// \addtogroup EAPBaseConfig
|
||||
/// @{
|
||||
|
||||
///
|
||||
/// PAP configuration
|
||||
///
|
||||
class config_method_pap : public config_method_with_cred
|
||||
{
|
||||
public:
|
||||
|
@@ -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);
|
||||
|
||||
/// @}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
@@ -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"
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
};
|
||||
}
|
||||
|
@@ -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.
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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());
|
||||
|
@@ -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);
|
||||
|
@@ -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 />
|
||||
|
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
@@ -26,4 +26,6 @@
|
||||
|
||||
#include "../include/TLS_UI.h"
|
||||
|
||||
#include <wxex/valnet.h>
|
||||
|
||||
#include <WindowsX.h>
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
||||
/// @}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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 />
|
||||
|
@@ -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
|
||||
|
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
@@ -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>
|
||||
|
@@ -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:
|
||||
|
Submodule lib/WinStd updated: d029358086...cea06e8f48
Submodule lib/wxExtend updated: e9dd2b7ae5...a6b34f122d
2
output/locale/.gitignore
vendored
2
output/locale/.gitignore
vendored
@@ -1,4 +1,4 @@
|
||||
*/EAPTTLSUI.mo
|
||||
*/EventMonitor.mo
|
||||
*/wxExtend13.mo
|
||||
*/wxExtend*.mo
|
||||
*/wxstd.mo
|
||||
|
Reference in New Issue
Block a user