Compare commits

...

15 Commits

Author SHA1 Message Date
67426d5db4 Distribution folder changed 2017-01-30 08:57:23 +01:00
ea15fde6c1 Version set to 1.1 2017-01-30 08:51:46 +01:00
78325c98c7 Documentation update 2016-12-13 11:28:29 +01:00
aa3f44260e Event reporting extended to support event channel in Windows Event Viewer 2016-12-09 13:29:07 +01:00
8f054a1f97 Event source in registry changed to match the one in manifest 2016-12-08 08:47:59 +01:00
f4a6e542f0 Translations updated 2016-12-07 13:56:05 +01:00
fb9e6c4e5a Missing credential identity tooltip reintroduced 2016-12-07 13:27:30 +01:00
e317439910 Some extra diagnostic output added when configuration XML contains unknown/unsupported method
# Conflicts:
#	lib/TTLS/src/Config.cpp
2016-12-07 13:23:01 +01:00
f7dcdc2dce Identity read-only text box in credential selection configuration panel has been replaced by static text not to confuse users they can edit it there 2016-12-07 13:18:31 +01:00
fb376b29df Version set to 1.1-beta2 2016-12-05 13:26:17 +01:00
d82e22d188 Post-festum CRL checking introduced 2016-12-05 13:00:39 +01:00
303350dec0 eap::peer_ttls::end_session() fixed to call method's end_session() method 2016-12-05 12:42:35 +01:00
dd144efa5f New authentication status introduced: server compromised 2016-12-05 12:39:04 +01:00
cb253450a0 Distribution folder changed 2016-11-29 13:01:26 +01:00
168aed3000 Charset issue in version resource fixed 2016-11-18 09:12:35 +01:00
55 changed files with 861 additions and 403 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -2,7 +2,7 @@
msgid ""
msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2016-11-08 11:55+0100\n"
"POT-Creation-Date: 2016-12-07 13:55+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"
@@ -72,7 +72,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -80,194 +80,201 @@ msgstr ""
msgid "Select this option if you would like to use credentials stored in Windows Credential Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:253
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:253
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:255
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:299
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:255
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:299
msgid "Identity:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:262
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:262
msgid "Your present credentials stored in Windows Credential Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:260
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:260
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:272
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:272
msgid "&Clear Credentials"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:261
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:261
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:273
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:273
msgid ""
"Click to clear your credentials from Credential Manager.\n"
"Note: You will be prompted to enter credentials when connecting."
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:265
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:292
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:265
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:292
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:316
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:316
msgid "&Set Credentials..."
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:266
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:293
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:266
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:293
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:278
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:317
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:278
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:317
msgid "Click here to set or modify your credentials"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:288
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:288
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:289
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:289
msgid "Select this option if you would like to store credentials as a part of profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:285
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:285
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:306
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:306
msgid "Profile configuration credentials"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:335
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:335
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:359
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:359
msgid "User ID and Password"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:345
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:345
msgid "Please provide your user ID and password."
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:355
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:355
msgid "User ID:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:360
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:360
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:364
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:364
msgid "Password:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:369
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:369
msgid "Please provide your user ID and password."
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:379
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:379
msgid "User ID:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:384
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:384
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:388
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:388
msgid "Password:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:393
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:393
msgid "Enter your password here"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:400
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:400
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:424
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:424
msgid "Your Organization"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:411
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:411
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:435
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:435
msgid "Describe your organization to customize user prompts. When organization is introduced, end-users find program messages easier to understand and act."
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:418
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:418
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:442
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:442
msgid "Your organization &name:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:423
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:423
msgid "Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:427
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:427
msgid "(Keep it short, please)"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:437
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:437
msgid "Helpdesk contact &information:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:447
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:447
msgid "Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:451
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:451
msgid "(Keep it short, please)"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:461
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:461
msgid "Helpdesk contact &information:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:471
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:471
msgid "¶"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:454
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:454
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:478
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:478
msgid "Your helpdesk website address"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:458
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:458
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:482
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:482
msgid "*"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:465
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:465
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:489
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:489
msgid "Your helpdesk e-mail address"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:469
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:469
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:493
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:493
msgid ")"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:476
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:476
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:500
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:500
msgid "Your helpdesk phone number"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:504
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:504
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:528
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:528
msgid "Provider Unique Identifier"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:515
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:515
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:539
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:539
msgid "Assign your organization a unique ID to allow sharing the same credential set across different network profiles."
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:522
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:522
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:546
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:546
msgid "&Namespace:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:526
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:526
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:550
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:550
msgid "urn:RFC4282:realm"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:526
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:526
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:550
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:550
msgid "urn:uuid"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:538
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:538
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:562
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:562
msgid "Provider unique &identifier:"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:543
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:543
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:567
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:567
msgid "Your organization ID to assign same credentials from other profiles"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:568
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:568
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:592
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:592
msgid "Configuration Lock"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:579
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:579
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:603
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:603
msgid "Your configuration can be locked to prevent accidental modification by end-users. Users will only be allowed to enter credentials."
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:586
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:586
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:610
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:610
msgid "&Lock this configuration and prevent any further modification via user interface."
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:589
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:589
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:613
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:613
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr ""
@@ -677,7 +684,7 @@ msgstr ""
msgid "EAP Connection Configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.h:312
#: master/lib/EAPBase_UI/res/wxEAP_UI.h:314
msgid "EAP Identity Provider"
msgstr ""

View File

@@ -77,8 +77,8 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr "Използвайте удостоверения за самоличност от Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr "Използвайте удостоверения за самоличност от Credential &Manager"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -129,9 +129,9 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
"Използвайте удостоверения за самоличност от &конфигурацията на профила:"
"Използвайте удостоверения за самоличност от &конфигурацията на профила"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,8 +75,8 @@ msgstr "Selecciona la font on les credencials utilitzades es desen"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr "Utilitzar credencials del Credential &Manager: "
msgid "Use credentials from Credential &Manager"
msgstr "Utilitzar credencials del Credential &Manager"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -123,8 +123,8 @@ msgstr "Cliqueu aquí per a desar o modificar les vostres credencials"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr "Utilitzeu les credencials de la configuració del vostre &perfil:"
msgid "Use credentials from &profile configuration"
msgstr "Utilitzeu les credencials de la configuració del vostre &perfil"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr "Wählen sie die Datei in der ihre Anmeldedateien gespeichert sind"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr "Benutze die Daten aus dem Schlüsselbund"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -123,7 +123,7 @@ msgstr "Klicken Sie hier um Ihre Anmeldedaten einzugeben oder zu ändern"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr "Verwende die Anmeldedaten aus der &Profilkonfiguration"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -77,8 +77,8 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr "Χρησιμοποιήστε τα διαπιστευτήρια από τον Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr "Χρησιμοποιήστε τα διαπιστευτήρια από τον Credential &Manager"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -126,8 +126,8 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr "Χρησιμοποιήστε τα διαπιστευτήρια από το &προφίλ ρύθμισης παραμέτρων:"
msgid "Use credentials from &profile configuration"
msgstr "Χρησιμοποιήστε τα διαπιστευτήρια από το &προφίλ ρύθμισης παραμέτρων"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -76,8 +76,8 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr "Usa credenciales del &Administrador de Credenciales:"
msgid "Use credentials from Credential &Manager"
msgstr "Usa credenciales del &Administrador de Credenciales"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -125,8 +125,8 @@ msgstr "Haga clic aquí para establecer o modificar sus credenciales"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr "Usa las credenciales de la configuración del &perfil:"
msgid "Use credentials from &profile configuration"
msgstr "Usa las credenciales de la configuración del &perfil"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -120,7 +120,7 @@ msgstr "Odaberi ako je potrebno postaviti korisničke podatke"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -120,7 +120,7 @@ msgstr "Spustelėkite čia savo kredencialams nustatyti ar pakeisti"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,8 +75,8 @@ msgstr "Velg kilden for din påloggingsinformasjon"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr "Bruk brukerdetaljer fra Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr "Bruk brukerdetaljer fra Credential &Manager"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -122,8 +122,8 @@ msgstr "Klikk her for å sette eller endre påloggingsinformasjon"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr "Bruk brukerinformasjon fra &profil konfigurasjon:"
msgid "Use credentials from &profile configuration"
msgstr "Bruk brukerinformasjon fra &profil konfigurasjon"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -76,8 +76,8 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr "Użyj poświadczeń z &Managera poświadczeń:"
msgid "Use credentials from Credential &Manager"
msgstr "Użyj poświadczeń z &Managera poświadczeń"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -123,8 +123,8 @@ msgstr "Kliknij tutaj, aby zmodyfikować poświadczenia logowania"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr "Użyj poświadczeń &profilu konfiguracyjnego:"
msgid "Use credentials from &profile configuration"
msgstr "Użyj poświadczeń &profilu konfiguracyjnego"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,8 +75,8 @@ msgstr "Izberite vir, kjer so shranjene vaše poverilnice za povezovanje."
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr "Uporabi poverilnice iz &Upravitelja poverilnic:"
msgid "Use credentials from Credential &Manager"
msgstr "Uporabi poverilnice iz &Upravitelja poverilnic"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -122,8 +122,8 @@ msgstr "Kliknite tukaj, da nastavite ali spremenite svoje poverilnice"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr "Uporabi poverilnice iz nastavitev &profila:"
msgid "Use credentials from &profile configuration"
msgstr "Uporabi poverilnice iz nastavitev &profila"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,8 +75,8 @@ msgstr "Izaberite izvor gde se nalaze vaši kredencijali za povezivanje."
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgstr "Koristi kredencijale iz &Manager kredencijala:"
msgid "Use credentials from Credential &Manager"
msgstr "Koristi kredencijale iz &Manager kredencijala"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -122,8 +122,8 @@ msgstr "Kliknite ovde kako biste promenili svoje kredencijale"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgstr "Koristi kredencijale iz konfiguracije &profila:"
msgid "Use credentials from &profile configuration"
msgstr "Koristi kredencijale iz konfiguracije &profila"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

View File

@@ -75,7 +75,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:244
msgid "Use credentials from Credential &Manager:"
msgid "Use credentials from Credential &Manager"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:245
@@ -118,7 +118,7 @@ msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Use credentials from &profile configuration:"
msgid "Use credentials from &profile configuration"
msgstr ""
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:277

Binary file not shown.

Binary file not shown.

BIN
Makefile

Binary file not shown.

Binary file not shown.

View File

@@ -46,6 +46,8 @@ Please note that only Release builds are configured for timestamp signing. Debug
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"`
After clone is complete, grant _Users_ local group read and execute permissions to `output` subfolder (when working folder is private). This allows _EapHost_ service to load GÉANTLink's DLL, and Event Viewer to display GÉANTLink events.
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.

Binary file not shown.

View File

@@ -29,7 +29,7 @@
// Product version as a single DWORD
// Note: Used for version comparison within C/C++ code.
//
#define PRODUCT_VERSION 0x01010100
#define PRODUCT_VERSION 0x01010300
//
// Product version by components
@@ -39,26 +39,26 @@
//
#define PRODUCT_VERSION_MAJ 1
#define PRODUCT_VERSION_MIN 1
#define PRODUCT_VERSION_REV 1
#define PRODUCT_VERSION_REV 3
#define PRODUCT_VERSION_BUILD 0
//
// Human readable product version and build year for UI
//
#define PRODUCT_VERSION_STR "1.1-beta1"
#define PRODUCT_VERSION_STR "1.1"
#define PRODUCT_BUILD_YEAR_STR "2016"
//
// Numerical version presentation for ProductVersion propery in
// MSI packages (syntax: N.N[.N[.N]])
//
#define PRODUCT_VERSION_INST "1.1.1"
#define PRODUCT_VERSION_INST "1.1.3"
//
// 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 "{6469B26C-C8B4-4BDC-9DFA-EA25F0643AFA}"
#define PRODUCT_VERSION_GUID "{722FE19A-5B6C-4B0A-B7D4-B56DD0E5C7DB}"
//
// Product vendor

View File

@@ -215,6 +215,7 @@ namespace eap
status_account_disabled, ///< Account is disabled
status_account_logon_hours, ///< Restricted account logon hours
status_account_denied, ///< Account access is denied
status_server_compromised, ///< Authentication server might have been compromised (CRL)
// Meta statuses
status_cred_begin = status_cred_invalid, ///< First credential related problem

View File

@@ -800,7 +800,7 @@ protected:
m_timer_storage.Stop();
if (CredDelete(m_cred_storage.target_name(m_prov.get_id().c_str(), m_cfg.m_level).c_str(), CRED_TYPE_GENERIC, 0)) {
m_storage_identity->Clear();
m_storage_identity->SetLabel(wxEmptyString);
m_cred_storage.clear();
m_has_storage = false;
} else
@@ -839,15 +839,15 @@ protected:
UpdateStorageIdentity();
} catch (winstd::win_runtime_error &err) {
if (err.number() == ERROR_NOT_FOUND) {
m_storage_identity->Clear();
m_storage_identity->SetLabel(wxEmptyString);
m_cred_storage.clear();
m_has_storage = false;
} else {
m_storage_identity->SetValue(wxString::Format(_("<error %u>"), err.number()));
m_storage_identity->SetLabel(wxString::Format(_("<error %u>"), err.number()));
m_has_storage = true;
}
} catch (...) {
m_storage_identity->SetValue(_("<error>"));
m_storage_identity->SetLabel(_("<error>"));
m_has_storage = true;
}
}
@@ -856,7 +856,7 @@ protected:
inline void UpdateStorageIdentity()
{
wxString identity(m_cred_storage.get_identity());
m_storage_identity->SetValue(
m_storage_identity->SetLabel(
!identity.empty() ? identity :
m_cred_storage.empty() ? _("<empty>") : _("<blank ID>"));
}
@@ -865,7 +865,7 @@ protected:
inline void UpdateConfigIdentity()
{
wxString identity(m_cred_config.get_identity());
m_config_identity->SetValue(
m_config_identity->SetLabel(
!identity.empty() ? identity :
m_cred_config.empty() ? _("<empty>") : _("<blank ID>"));
}

View File

@@ -241,18 +241,30 @@ wxEAPCredentialsConfigPanelBase::wxEAPCredentialsConfigPanelBase( wxWindow* pare
m_credentials_label->Wrap( 440 );
sb_credentials_vert->Add( m_credentials_label, 0, wxALL|wxEXPAND, 5 );
m_storage = new wxRadioButton( m_sb_credentials->GetStaticBox(), wxID_ANY, _("Use credentials from Credential &Manager:"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
m_storage = new wxRadioButton( m_sb_credentials->GetStaticBox(), wxID_ANY, _("Use credentials from Credential &Manager"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
m_storage->SetToolTip( _("Select this option if you would like to use credentials stored in Windows Credential Manager") );
sb_credentials_vert->Add( m_storage, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
wxBoxSizer* sz_storage;
sz_storage = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* sb_storage;
sb_storage = new wxBoxSizer( wxVERTICAL );
m_storage_identity = new wxTextCtrl( m_sb_credentials->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
wxBoxSizer* sb_storage_identity;
sb_storage_identity = new wxBoxSizer( wxHORIZONTAL );
m_storage_identity_label = new wxStaticText( m_sb_credentials->GetStaticBox(), wxID_ANY, _("Identity:"), wxDefaultPosition, wxDefaultSize, 0 );
m_storage_identity_label->Wrap( -1 );
sb_storage_identity->Add( m_storage_identity_label, 0, 0, 5 );
m_storage_identity = new wxStaticText( m_sb_credentials->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_storage_identity->Wrap( -1 );
m_storage_identity->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
m_storage_identity->SetToolTip( _("Your present credentials stored in Windows Credential Manager") );
sz_storage->Add( m_storage_identity, 3, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
sb_storage_identity->Add( m_storage_identity, 1, wxEXPAND|wxLEFT, 5 );
sb_storage->Add( sb_storage_identity, 1, wxEXPAND, 5 );
wxBoxSizer* sb_buttons_storage;
sb_buttons_storage = new wxBoxSizer( wxHORIZONTAL );
@@ -268,23 +280,35 @@ wxEAPCredentialsConfigPanelBase::wxEAPCredentialsConfigPanelBase( wxWindow* pare
sb_buttons_storage->Add( m_storage_set, 0, wxLEFT, 5 );
sz_storage->Add( sb_buttons_storage, 0, wxALIGN_RIGHT|wxTOP, 5 );
sb_storage->Add( sb_buttons_storage, 0, wxALIGN_RIGHT|wxTOP, 5 );
sb_credentials_vert->Add( sz_storage, 0, wxEXPAND|wxALL, 5 );
sb_credentials_vert->Add( sb_storage, 0, wxEXPAND|wxALL, 5 );
m_config = new wxRadioButton( m_sb_credentials->GetStaticBox(), wxID_ANY, _("Use credentials from &profile configuration:"), wxDefaultPosition, wxDefaultSize, 0 );
m_config = new wxRadioButton( m_sb_credentials->GetStaticBox(), wxID_ANY, _("Use credentials from &profile configuration"), wxDefaultPosition, wxDefaultSize, 0 );
m_config->SetToolTip( _("Select this option if you would like to store credentials as a part of profile configuration") );
sb_credentials_vert->Add( m_config, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
wxBoxSizer* sz_config;
sz_config = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* sb_config;
sb_config = new wxBoxSizer( wxVERTICAL );
m_config_identity = new wxTextCtrl( m_sb_credentials->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
wxBoxSizer* sb_config_identity;
sb_config_identity = new wxBoxSizer( wxHORIZONTAL );
m_config_identity_label = new wxStaticText( m_sb_credentials->GetStaticBox(), wxID_ANY, _("Identity:"), wxDefaultPosition, wxDefaultSize, 0 );
m_config_identity_label->Wrap( -1 );
sb_config_identity->Add( m_config_identity_label, 0, 0, 5 );
m_config_identity = new wxStaticText( m_sb_credentials->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_config_identity->Wrap( -1 );
m_config_identity->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
m_config_identity->SetToolTip( _("Profile configuration credentials") );
sz_config->Add( m_config_identity, 3, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
sb_config_identity->Add( m_config_identity, 1, wxEXPAND|wxLEFT, 5 );
sb_config->Add( sb_config_identity, 1, wxEXPAND, 5 );
wxBoxSizer* sb_buttons_config;
sb_buttons_config = new wxBoxSizer( wxHORIZONTAL );
@@ -295,10 +319,10 @@ wxEAPCredentialsConfigPanelBase::wxEAPCredentialsConfigPanelBase( wxWindow* pare
sb_buttons_config->Add( m_config_set, 0, 0, 5 );
sz_config->Add( sb_buttons_config, 0, wxALIGN_RIGHT|wxTOP, 5 );
sb_config->Add( sb_buttons_config, 0, wxALIGN_RIGHT|wxTOP, 5 );
sb_credentials_vert->Add( sz_config, 0, wxEXPAND|wxALL, 5 );
sb_credentials_vert->Add( sb_config, 0, wxEXPAND|wxALL, 5 );
sb_credentials_horiz->Add( sb_credentials_vert, 1, wxEXPAND, 5 );

View File

@@ -1681,7 +1681,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Use credentials from Credential &amp;Manager:</property>
<property name="label">Use credentials from Credential &amp;Manager</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -1743,98 +1743,184 @@
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">sz_storage</property>
<property name="name">sb_storage</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">3</property>
<object class="wxTextCtrl" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_storage_identity</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTE_READONLY</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Your present credentials stored in Windows Credential Manager</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
<property name="name">sb_storage_identity</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Identity:</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_storage_identity_label</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxLEFT</property>
<property name="proportion">1</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font">,90,92,-1,70,0</property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_storage_identity</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Your present credentials stored in Windows Credential Manager</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
@@ -2058,7 +2144,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Use credentials from &amp;profile configuration:</property>
<property name="label">Use credentials from &amp;profile configuration</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -2120,98 +2206,184 @@
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">sz_config</property>
<property name="name">sb_config</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">3</property>
<object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_config_identity</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTE_READONLY</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Profile configuration credentials</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
<property name="name">sb_config_identity</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Identity:</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_config_identity_label</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxLEFT</property>
<property name="proportion">1</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font">,90,92,-1,70,0</property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_config_identity</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Profile configuration credentials</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">

View File

@@ -31,9 +31,9 @@ class wxEAPBannerPanel;
#include <wx/icon.h>
#include <wx/statbmp.h>
#include <wx/radiobut.h>
#include <wx/textctrl.h>
#include <wx/statbox.h>
#include <wx/timer.h>
#include <wx/textctrl.h>
#include <wx/choice.h>
#include <wx/checkbox.h>
@@ -169,11 +169,13 @@ class wxEAPCredentialsConfigPanelBase : public wxPanel
wxStaticBitmap* m_credentials_icon;
wxStaticText* m_credentials_label;
wxRadioButton* m_storage;
wxTextCtrl* m_storage_identity;
wxStaticText* m_storage_identity_label;
wxStaticText* m_storage_identity;
wxButton* m_storage_clear;
wxButton* m_storage_set;
wxRadioButton* m_config;
wxTextCtrl* m_config_identity;
wxStaticText* m_config_identity_label;
wxStaticText* m_config_identity;
wxButton* m_config_set;
wxTimer m_timer_storage;

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -225,14 +225,14 @@ namespace eap
method_ttls(_In_ module &mod, _In_ config_method_ttls &cfg, _In_ credentials_ttls &cred, _In_ method *inner);
///
/// Moves an TTLS method
/// Moves a TTLS method
///
/// \param[in] other TTLS method to move from
///
method_ttls(_Inout_ method_ttls &&other);
///
/// Moves an TTLS method
/// Moves a TTLS method
///
/// \param[in] other TTLS method to move from
///
@@ -271,7 +271,7 @@ namespace eap
protected:
#if EAP_TLS < EAP_TLS_SCHANNEL_FULL
///
/// Verifies server's certificate if trusted by configuration
/// Verifies server certificate if trusted by configuration
///
void verify_server_trust() const;
#endif
@@ -284,6 +284,7 @@ namespace eap
winstd::sec_credentials m_sc_cred; ///< Schannel client credentials
std::vector<unsigned char> m_sc_queue; ///< TLS data queue
winstd::sec_context m_sc_ctx; ///< Schannel context
winstd::cert_context m_sc_cert; ///< Server certificate
///
/// Communication phase

View File

@@ -155,6 +155,13 @@ namespace eap
/// @}
///
/// Spawns a new certificate revocation check thread
///
/// \param[inout] cert Certificate context to check for revocation. `hCertStore` member should contain all certificates in chain up to and including root CA to test them for revocation too.
///
void spawn_crl_check(_Inout_ winstd::cert_context &&cert);
protected:
///
/// Checks all configured providers and tries to combine credentials.
@@ -195,6 +202,53 @@ namespace eap
BYTE *m_blob_cred; ///< Credentials BLOB
#endif
};
///
///< Post-festum server certificate revocation verify thread
///
class crl_checker {
public:
///
/// Constructs a thread
///
/// \param[in ] mod EAP module to use for global services
/// \param[inout] cert Certificate context to check for revocation. `hCertStore` member should contain all certificates in chain up to and including root CA to test them for revocation too.
///
crl_checker(_In_ module &mod, _Inout_ winstd::cert_context &&cert);
///
/// Moves a thread
///
/// \param[in] other Thread to move from
///
crl_checker(_Inout_ crl_checker &&other);
///
/// Moves a thread
///
/// \param[in] other Thread to move from
///
/// \returns Reference to this object
///
crl_checker& operator=(_Inout_ crl_checker &&other);
///
/// Verifies server's certificate if it has been revoked
///
/// \param[in] obj Pointer to the instance of this object
///
/// \returns Thread exit code
///
static DWORD WINAPI verify(_In_ crl_checker *obj);
public:
module &m_module; ///< Module
winstd::win_handle m_thread; ///< Thread
winstd::win_handle m_abort; ///< Thread abort event
winstd::cert_context m_cert; ///< Server certificate
};
std::list<crl_checker> m_crl_checkers; ///< List of certificate revocation check threads
};
/// @}

View File

@@ -271,7 +271,7 @@ eap::config_method* eap::config_method_ttls::make_config_method(_In_ winstd::eap
#ifdef EAP_INNER_EAPHOST
default : return new config_method_eaphost (m_module, m_level + 1); // EapHost peer method handles all other method types
#endif
default : throw invalid_argument(__FUNCTION__ " Unsupported inner authentication method.");
default : throw invalid_argument(string_printf(__FUNCTION__ " Unsupported inner authentication method (%d).", eap_type));
}
}
@@ -284,7 +284,7 @@ eap::config_method* eap::config_method_ttls::make_config_method(_In_ const wchar
#ifdef EAP_INNER_EAPHOST
else if (_wcsicmp(eap_type, L"EapHost" ) == 0) return new config_method_eaphost (m_module, m_level + 1);
#endif
else throw invalid_argument(__FUNCTION__ " Unsupported inner authentication method.");
else throw invalid_argument(string_printf(__FUNCTION__ " Unsupported inner authentication method (%ls).", eap_type));
}

View File

@@ -355,6 +355,7 @@ eap::method_ttls::method_ttls(_Inout_ method_ttls &&other) :
m_sc_cred (std::move(other.m_sc_cred )),
m_sc_queue (std::move(other.m_sc_queue )),
m_sc_ctx (std::move(other.m_sc_ctx )),
m_sc_cert (std::move(other.m_sc_cert )),
m_phase (std::move(other.m_phase )),
m_packet_res (std::move(other.m_packet_res )),
m_packet_res_inner(std::move(other.m_packet_res_inner)),
@@ -375,6 +376,7 @@ eap::method_ttls& eap::method_ttls::operator=(_Inout_ method_ttls &&other)
m_sc_cred = std::move(other.m_sc_cred );
m_sc_queue = std::move(other.m_sc_queue );
m_sc_ctx = std::move(other.m_sc_ctx );
m_sc_cert = std::move(other.m_sc_cert );
m_phase = std::move(other.m_phase );
m_packet_res = std::move(other.m_packet_res );
m_packet_res_inner = std::move(other.m_packet_res_inner);
@@ -549,10 +551,45 @@ EapPeerMethodResponseAction eap::method_ttls::process_request_packet(
&buf_in_desc,
&buf_out_desc);
if (status == SEC_E_OK) {
// Get server certificate.
SECURITY_STATUS status = QueryContextAttributes(m_sc_ctx, SECPKG_ATTR_REMOTE_CERT_CONTEXT, (PVOID)&m_sc_cert);
if (FAILED(status))
throw sec_runtime_error(status, __FUNCTION__ " Error retrieving server certificate from Schannel.");
// Add all trusted root CAs to server certificate's store. This allows CertGetIssuerCertificateFromStore() in the following CRL check to test the root CA for revocation too.
// verify_server_trust(), ignores all self-signed certificates from the server certificate's store, and rebuilds its own trusted root store, so we are safe to do this.
for (auto c = m_cfg.m_trusted_root_ca.cbegin(), c_end = m_cfg.m_trusted_root_ca.cend(); c != c_end; ++c)
CertAddCertificateContextToStore(m_sc_cert->hCertStore, *c, CERT_STORE_ADD_REPLACE_EXISTING, NULL);
// Verify cached CRL (entire chain).
reg_key key;
if (key.open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\") _T(VENDOR_NAME_STR) _T("\\") _T(PRODUCT_NAME_STR) _T("\\TLSCRL"), 0, KEY_READ)) {
wstring hash_unicode;
vector<unsigned char> hash, subj;
for (cert_context c(m_sc_cert); c;) {
if (CertGetCertificateContextProperty(c, CERT_HASH_PROP_ID, hash)) {
hash_unicode.clear();
hex_enc enc;
enc.encode(hash_unicode, hash.data(), hash.size());
if (RegQueryValueExW(key, hash_unicode.c_str(), NULL, NULL, subj) == ERROR_SUCCESS) {
// A certificate in the chain is found to be revoked as compromised.
m_cfg.m_last_status = config_method::status_server_compromised;
throw com_runtime_error(CRYPT_E_REVOKED, __FUNCTION__ " Server certificate or one of its issuer's certificate has been found revoked as compromised. Your credentials were probably sent to this server during previous connection attempts, thus changing your credentials (in a safe manner) is strongly advised. Please, contact your helpdesk immediately.");
}
}
DWORD flags = 0;
c = CertGetIssuerCertificateFromStore(m_sc_cert->hCertStore, c, NULL, &flags);
if (!c) break;
}
}
#if EAP_TLS < EAP_TLS_SCHANNEL_FULL
if (status == SEC_E_OK)
// Verify server certificate chain.
verify_server_trust();
#endif
}
if (status == SEC_E_OK || status == SEC_I_CONTINUE_NEEDED) {
// Send Schannel's token.
@@ -830,6 +867,9 @@ void eap::method_ttls::get_result(
pResult->pAttribArray = &m_eap_attr_desc;
m_cfg.m_last_status = config_method::status_success;
// Spawn certificate revocation verify thread.
dynamic_cast<peer_ttls&>(m_module).spawn_crl_check(std::move(m_sc_cert));
}
// Always ask EAP host to save the connection data. And it will save it *only* when we report "success".
@@ -843,14 +883,9 @@ void eap::method_ttls::get_result(
void eap::method_ttls::verify_server_trust() const
{
cert_context cert;
SECURITY_STATUS status = QueryContextAttributes(m_sc_ctx, SECPKG_ATTR_REMOTE_CERT_CONTEXT, (PVOID)&cert);
if (FAILED(status))
throw sec_runtime_error(status, __FUNCTION__ " Error retrieving server certificate from Schannel.");
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)
if (m_sc_cert->cbCertEncoded == (*c)->cbCertEncoded &&
memcmp(m_sc_cert->pbCertEncoded, (*c)->pbCertEncoded, m_sc_cert->cbCertEncoded) == 0)
{
// Server certificate found directly on the trusted root CA list.
m_module.log_event(&EAPMETHOD_TLS_SERVER_CERT_TRUSTED_EX1, event_data((unsigned int)eap_type_ttls), event_data::blank);
@@ -865,27 +900,27 @@ void eap::method_ttls::verify_server_trust() const
found = false;
// Search subjectAltName2 and subjectAltName.
for (DWORD idx_ext = 0; !found && idx_ext < cert->pCertInfo->cExtension; idx_ext++) {
for (DWORD idx_ext = 0; !found && idx_ext < m_sc_cert->pCertInfo->cExtension; idx_ext++) {
unique_ptr<CERT_ALT_NAME_INFO, LocalFree_delete<CERT_ALT_NAME_INFO> > san_info;
if (strcmp(cert->pCertInfo->rgExtension[idx_ext].pszObjId, szOID_SUBJECT_ALT_NAME2) == 0) {
if (strcmp(m_sc_cert->pCertInfo->rgExtension[idx_ext].pszObjId, szOID_SUBJECT_ALT_NAME2) == 0) {
unsigned char *output = NULL;
DWORD size_output;
if (!CryptDecodeObjectEx(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
szOID_SUBJECT_ALT_NAME2,
cert->pCertInfo->rgExtension[idx_ext].Value.pbData, cert->pCertInfo->rgExtension[idx_ext].Value.cbData,
m_sc_cert->pCertInfo->rgExtension[idx_ext].Value.pbData, m_sc_cert->pCertInfo->rgExtension[idx_ext].Value.cbData,
CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_ENABLE_PUNYCODE_FLAG,
NULL,
&output, &size_output))
throw win_runtime_error(__FUNCTION__ " Error decoding subjectAltName2 certificate extension.");
san_info.reset((CERT_ALT_NAME_INFO*)output);
} else if (strcmp(cert->pCertInfo->rgExtension[idx_ext].pszObjId, szOID_SUBJECT_ALT_NAME) == 0) {
} else if (strcmp(m_sc_cert->pCertInfo->rgExtension[idx_ext].pszObjId, szOID_SUBJECT_ALT_NAME) == 0) {
unsigned char *output = NULL;
DWORD size_output;
if (!CryptDecodeObjectEx(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
szOID_SUBJECT_ALT_NAME,
cert->pCertInfo->rgExtension[idx_ext].Value.pbData, cert->pCertInfo->rgExtension[idx_ext].Value.cbData,
m_sc_cert->pCertInfo->rgExtension[idx_ext].Value.pbData, m_sc_cert->pCertInfo->rgExtension[idx_ext].Value.cbData,
CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_ENABLE_PUNYCODE_FLAG,
NULL,
&output, &size_output))
@@ -912,7 +947,7 @@ void eap::method_ttls::verify_server_trust() const
if (!has_san) {
// Certificate has no subjectAltName. Compare against Common Name.
wstring subj;
if (!CertGetNameStringW(cert, CERT_NAME_DNS_TYPE, CERT_NAME_STR_ENABLE_PUNYCODE_FLAG, NULL, subj))
if (!CertGetNameStringW(m_sc_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 (auto s = m_cfg.m_server_names.cbegin(), s_end = m_cfg.m_server_names.cend(); !found && s != s_end; ++s) {
@@ -927,8 +962,8 @@ void eap::method_ttls::verify_server_trust() const
throw sec_runtime_error(SEC_E_WRONG_PRINCIPAL, __FUNCTION__ " Name provided in server certificate is not on the list of trusted server names.");
}
if (cert->pCertInfo->Issuer.cbData == cert->pCertInfo->Subject.cbData &&
memcmp(cert->pCertInfo->Issuer.pbData, cert->pCertInfo->Subject.pbData, cert->pCertInfo->Issuer.cbData) == 0)
if (m_sc_cert->pCertInfo->Issuer.cbData == m_sc_cert->pCertInfo->Subject.cbData &&
memcmp(m_sc_cert->pCertInfo->Issuer.pbData, m_sc_cert->pCertInfo->Subject.pbData, m_sc_cert->pCertInfo->Issuer.cbData) == 0)
throw sec_runtime_error(SEC_E_CERT_UNKNOWN, __FUNCTION__ " Server is using a self-signed certificate. Cannot trust it.");
// Create temporary certificate store of our trusted root CAs.
@@ -939,9 +974,9 @@ void eap::method_ttls::verify_server_trust() const
CertAddCertificateContextToStore(store, *c, CERT_STORE_ADD_REPLACE_EXISTING, NULL);
// Add all intermediate certificates from the server's certificate chain.
for (cert_context c(cert); c;) {
for (cert_context c(m_sc_cert); c;) {
DWORD flags = 0;
c.attach(CertGetIssuerCertificateFromStore(cert->hCertStore, c, NULL, &flags));
c.attach(CertGetIssuerCertificateFromStore(m_sc_cert->hCertStore, c, NULL, &flags));
if (!c) break;
if (c->pCertInfo->Issuer.cbData == c->pCertInfo->Subject.cbData &&
@@ -971,7 +1006,7 @@ void eap::method_ttls::verify_server_trust() const
#endif
};
cert_chain_context context;
if (!context.create(NULL, cert, NULL, store, &chain_params, 0))
if (!context.create(NULL, m_sc_cert, NULL, store, &chain_params, 0))
throw win_runtime_error(__FUNCTION__ " Error creating certificate chain context.");
// Check chain validation error flags. Ignore CERT_TRUST_IS_UNTRUSTED_ROOT flag since we check root CA explicitly.

View File

@@ -62,6 +62,15 @@ void eap::peer_ttls::initialize()
void eap::peer_ttls::shutdown()
{
// Signal all certificate revocation verify threads to abort and wait for them (10sec max).
vector<HANDLE> chks;
chks.reserve(m_crl_checkers.size());
for (auto chk = m_crl_checkers.begin(), chk_end = m_crl_checkers.end(); chk != chk_end; ++chk) {
SetEvent(chk->m_abort);
chks.push_back(chk->m_thread);
}
WaitForMultipleObjects((DWORD)chks.size(), chks.data(), TRUE, 10000);
// Uninitialize EapHost. It was initialized for EapHost based inner authentication methods.
EapHostPeerUninitialize();
}
@@ -272,7 +281,7 @@ void eap::peer_ttls::end_session(_In_ EAP_SESSION_HANDLE hSession)
// End the session.
auto s = static_cast<session*>(hSession);
//s->end(ppEapError);
s->m_method->end_session();
delete s;
}
@@ -379,6 +388,17 @@ void eap::peer_ttls::set_response_attributes(
}
void eap::peer_ttls::spawn_crl_check(_Inout_ winstd::cert_context &&cert)
{
// Create the thread and add it to the list.
m_crl_checkers.push_back(std::move(crl_checker(*this, std::move(cert))));
// Now the thread is in-place, start it.
crl_checker &chk = m_crl_checkers.back();
chk.m_thread = CreateThread(NULL, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(crl_checker::verify), &chk, 0, NULL);
}
const eap::config_method_ttls* eap::peer_ttls::combine_credentials(
_In_ DWORD dwFlags,
_In_ const config_connection &cfg,
@@ -498,3 +518,143 @@ eap::peer_ttls::session::~session()
m_module.free_memory(m_blob_cred);
#endif
}
//////////////////////////////////////////////////////////////////////
// eap::peer_ttls::crl_checker
//////////////////////////////////////////////////////////////////////
eap::peer_ttls::crl_checker::crl_checker(_In_ module &mod, _Inout_ winstd::cert_context &&cert) :
m_module(mod),
m_cert (std::move(cert)),
m_abort (CreateEvent(NULL, TRUE, FALSE, NULL))
{
}
eap::peer_ttls::crl_checker::crl_checker(_Inout_ crl_checker &&other) :
m_module( other.m_module ),
m_thread(std::move(other.m_thread)),
m_abort (std::move(other.m_abort )),
m_cert (std::move(other.m_cert ))
{
}
eap::peer_ttls::crl_checker& eap::peer_ttls::crl_checker::operator=(_Inout_ crl_checker &&other)
{
if (this != std::addressof(other)) {
assert(std::addressof(m_module) == std::addressof(other.m_module)); // Move threads within same module only!
m_thread = std::move(other.m_thread);
m_abort = std::move(other.m_abort );
m_cert = std::move(other.m_cert );
}
return *this;
}
DWORD WINAPI eap::peer_ttls::crl_checker::verify(_In_ crl_checker *obj)
{
// Initialize COM.
com_initializer com_init(NULL);
// Wait for 5sec for the link to become online. (Hopefuly!)
if (WaitForSingleObject(obj->m_abort, 5000) == WAIT_OBJECT_0) {
// Aborted.
return 1;
}
// Prepare a list of certificates forming certificate chain.
list<cert_context> context_data;
for (cert_context c(obj->m_cert); c;) {
context_data.push_back(std::move(c));
DWORD flags = 0;
c = CertGetIssuerCertificateFromStore(obj->m_cert->hCertStore, context_data.back(), NULL, &flags);
if (!c) break;
}
// Create an array of pointers to CERT_CONTEXT required by CertVerifyRevocation().
vector<PCERT_CONTEXT> context;
context.reserve(context_data.size());
for (auto c = context_data.cbegin(), c_end = context_data.cend(); c != c_end; ++c)
context.push_back(const_cast<PCERT_CONTEXT>(c->operator PCCERT_CONTEXT()));
CERT_REVOCATION_STATUS status_rev = { sizeof(CERT_REVOCATION_STATUS) };
for (auto c = context.begin(), c_end = context.end(); c != c_end;) {
// Check for thread abort signal.
if (WaitForSingleObject(obj->m_abort, 0) == WAIT_OBJECT_0)
return 1;
// Perform revocation check.
if (!CertVerifyRevocation(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, CERT_CONTEXT_REVOCATION_TYPE,
(DWORD)(c_end - c), reinterpret_cast<PVOID*>(&*c),
CERT_VERIFY_REV_CHAIN_FLAG, NULL, &status_rev))
{
PCCERT_CONTEXT cert = *(c + status_rev.dwIndex);
wstring subj;
if (!CertGetNameStringW(cert, CERT_NAME_DNS_TYPE, CERT_NAME_STR_ENABLE_PUNYCODE_FLAG, NULL, subj))
sprintf(subj, L"<error %u>", GetLastError());
switch (status_rev.dwError) {
case CRYPT_E_NO_REVOCATION_CHECK:
// Revocation check could not be performed.
c += status_rev.dwIndex + 1;
if (c == c_end) {
// This "error" is expected for the root CA certificate.
} else {
// This really was an error, as it appeared before the root CA cerficate in the chain.
obj->m_module.log_event(&EAPMETHOD_TLS_SERVER_CERT_REVOKE_SKIPPED, event_data((unsigned int)eap_type_ttls), event_data(subj), event_data::blank);
}
break;
case CRYPT_E_REVOKED:
// One of the certificates in the chain was revoked.
switch (status_rev.dwReason) {
case CRL_REASON_AFFILIATION_CHANGED:
case CRL_REASON_SUPERSEDED:
case CRL_REASON_CESSATION_OF_OPERATION:
case CRL_REASON_CERTIFICATE_HOLD:
// The revocation was of administrative nature. No need to black-list.
obj->m_module.log_event(&EAPMETHOD_TLS_SERVER_CERT_REVOKED1, event_data((unsigned int)eap_type_ttls), event_data(subj), event_data(status_rev.dwReason), event_data::blank);
break;
default: {
// One of the certificates in the chain was revoked as compromised. Black-list it.
obj->m_module.log_event(&EAPMETHOD_TLS_SERVER_CERT_REVOKED, event_data((unsigned int)eap_type_ttls), event_data(subj), event_data(status_rev.dwReason), event_data::blank);
reg_key key;
if (key.create(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\") _T(VENDOR_NAME_STR) _T("\\") _T(PRODUCT_NAME_STR) _T("\\TLSCRL"), NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE)) {
vector<unsigned char> hash;
if (CertGetCertificateContextProperty(cert, CERT_HASH_PROP_ID, hash)) {
wstring hash_unicode;
hex_enc enc;
enc.encode(hash_unicode, hash.data(), hash.size());
RegSetValueExW(key, hash_unicode.c_str(), NULL, REG_SZ, reinterpret_cast<LPCBYTE>(subj.c_str()), (DWORD)((subj.length() + 1) * sizeof(wstring::value_type)));
}
}
}}
// Resume checking the rest of the chain.
c += status_rev.dwIndex + 1;
break;
case ERROR_SUCCESS:
// Odd. CertVerifyRevocation() should return TRUE then. Nevertheless, we take this as a "yes".
c = c_end;
break;
default:
// Checking one of the certificates in the chain for revocation failed. Resume checking the rest.
obj->m_module.log_event(&EAPMETHOD_TLS_SERVER_CERT_REVOKE_FAILED, event_data((unsigned int)eap_type_ttls), event_data(subj), event_data(status_rev.dwError), event_data::blank);
c += status_rev.dwIndex + 1;
}
} else {
// Revocation check finished.
break;
}
}
// Revocation check succeeded.
obj->m_module.log_event(&EAPMETHOD_TLS_SERVER_CERT_REVOKE_FINISHED, event_data((unsigned int)eap_type_ttls), event_data::blank);
return 0;
}