Commit 3be89db0a19352ff0a72d5517db9b273a103f19b

Authored by Perry Werneck
1 parent 7527a2d7
Exists in master and in 1 other branch develop

Fixing win32 custom certificate loading.

.vscode/c_cpp_properties.json
@@ -16,7 +16,8 @@ @@ -16,7 +16,8 @@
16 "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe", 16 "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe",
17 "cStandard": "c11", 17 "cStandard": "c11",
18 "cppStandard": "c++17", 18 "cppStandard": "c++17",
19 - "intelliSenseMode": "msvc-x64" 19 + "intelliSenseMode": "msvc-x64",
  20 + "configurationProvider": "ms-vscode.makefile-tools"
20 } 21 }
21 ], 22 ],
22 "version": 4 23 "version": 4
locale/pt_BR.po
@@ -5,7 +5,7 @@ msgid "" @@ -5,7 +5,7 @@ msgid ""
5 msgstr "" 5 msgstr ""
6 "Project-Id-Version: pw3270 5.0\n" 6 "Project-Id-Version: pw3270 5.0\n"
7 "Report-Msgid-Bugs-To: \n" 7 "Report-Msgid-Bugs-To: \n"
8 -"POT-Creation-Date: 2021-09-01 23:49-0300\n" 8 +"POT-Creation-Date: 2021-11-29 14:31-0300\n"
9 "PO-Revision-Date: 2021-09-01 23:53-0300\n" 9 "PO-Revision-Date: 2021-09-01 23:53-0300\n"
10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" 10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n"
11 "Language-Team: Português <perry.werneck@gmail.com>\n" 11 "Language-Team: Português <perry.werneck@gmail.com>\n"
@@ -277,7 +277,7 @@ msgstr &quot;Erro ao inicializar LDAP&quot; @@ -277,7 +277,7 @@ msgstr &quot;Erro ao inicializar LDAP&quot;
277 msgid "Can't initialize the TLS/SSL context." 277 msgid "Can't initialize the TLS/SSL context."
278 msgstr "Erro ao inicializar contexto TLS/SSL" 278 msgstr "Erro ao inicializar contexto TLS/SSL"
279 279
280 -#: src/core/session.c:198 280 +#: src/core/session.c:205
281 msgid "Can't load" 281 msgid "Can't load"
282 msgstr "Não foi possível carregar" 282 msgstr "Não foi possível carregar"
283 283
@@ -285,7 +285,7 @@ msgstr &quot;Não foi possível carregar&quot; @@ -285,7 +285,7 @@ msgstr &quot;Não foi possível carregar&quot;
285 msgid "Can't open HTTP session" 285 msgid "Can't open HTTP session"
286 msgstr "Não foi possível abrir sessão HTTP" 286 msgstr "Não foi possível abrir sessão HTTP"
287 287
288 -#: src/core/session.c:186 288 +#: src/core/session.c:193
289 msgid "Can't print" 289 msgid "Can't print"
290 msgstr "Não é possível imprimir" 290 msgstr "Não é possível imprimir"
291 291
@@ -293,7 +293,7 @@ msgstr &quot;Não é possível imprimir&quot; @@ -293,7 +293,7 @@ msgstr &quot;Não é possível imprimir&quot;
293 msgid "Can't read HTTP response size." 293 msgid "Can't read HTTP response size."
294 msgstr "Não posso obter tamanho da resposta HTTP" 294 msgstr "Não posso obter tamanho da resposta HTTP"
295 295
296 -#: src/core/session.c:192 296 +#: src/core/session.c:199
297 msgid "Can't save" 297 msgid "Can't save"
298 msgstr "Não é possível salvar" 298 msgstr "Não é possível salvar"
299 299
@@ -512,8 +512,8 @@ msgstr &quot;Tipo de dispositivo rejeitado&quot; @@ -512,8 +512,8 @@ msgstr &quot;Tipo de dispositivo rejeitado&quot;
512 msgid "Disconnect from host" 512 msgid "Disconnect from host"
513 msgstr "Desconecta do servidor" 513 msgstr "Desconecta do servidor"
514 514
515 -#: src/core/ft/ft.c:244 src/network_modules/openssl/main.c:99  
516 -#: src/network_modules/openssl/main.c:147 515 +#: src/core/ft/ft.c:244 src/network_modules/openssl/main.c:100
  516 +#: src/network_modules/openssl/main.c:148
517 msgid "Disconnected from host." 517 msgid "Disconnected from host."
518 msgstr "Desconectado do servidor." 518 msgstr "Desconectado do servidor."
519 519
@@ -593,12 +593,12 @@ msgstr &quot;Apagar campos&quot; @@ -593,12 +593,12 @@ msgstr &quot;Apagar campos&quot;
593 msgid "Erro sending data to host" 593 msgid "Erro sending data to host"
594 msgstr "Erro ao enviar dados para o servidor" 594 msgstr "Erro ao enviar dados para o servidor"
595 595
596 -#: src/core/ft/ft_dft.c:413 src/core/ft/ft_cut.c:408 596 +#: src/core/ft/ft_cut.c:408 src/core/ft/ft_dft.c:413
597 #, c-format 597 #, c-format
598 msgid "Error \"%s\" reading from local file (rc=%d)" 598 msgid "Error \"%s\" reading from local file (rc=%d)"
599 msgstr "Erro \"%s\" lendo arquivo local (rc=%d)" 599 msgstr "Erro \"%s\" lendo arquivo local (rc=%d)"
600 600
601 -#: src/core/ft/ft_dft.c:306 src/core/ft/ft_cut.c:504 601 +#: src/core/ft/ft_cut.c:504 src/core/ft/ft_dft.c:306
602 #, c-format 602 #, c-format
603 msgid "Error \"%s\" writing to local file (rc=%d)" 603 msgid "Error \"%s\" writing to local file (rc=%d)"
604 msgstr "Erro \"%s\" gravando arquivo local (rc=%d)" 604 msgstr "Erro \"%s\" gravando arquivo local (rc=%d)"
@@ -611,7 +611,7 @@ msgstr &quot;Erro na transferência do arquivo, transferência cancelada&quot; @@ -611,7 +611,7 @@ msgstr &quot;Erro na transferência do arquivo, transferência cancelada&quot;
611 msgid "Error reading file from host: file transfer canceled" 611 msgid "Error reading file from host: file transfer canceled"
612 msgstr "Erro ao ler arquivo do host: Transferência cancelada" 612 msgstr "Erro ao ler arquivo do host: Transferência cancelada"
613 613
614 -#: src/network_modules/openssl/main.c:169 614 +#: src/network_modules/openssl/main.c:170
615 msgid "Error reading from host" 615 msgid "Error reading from host"
616 msgstr "Erro lendo do servidor" 616 msgstr "Erro lendo do servidor"
617 617
@@ -631,7 +631,7 @@ msgstr &quot;Erro ao ler ou gravar no host: Transferência cancelada&quot; @@ -631,7 +631,7 @@ msgstr &quot;Erro ao ler ou gravar no host: Transferência cancelada&quot;
631 msgid "Error writing file to host: file transfer canceled" 631 msgid "Error writing file to host: file transfer canceled"
632 msgstr "Erro ao gravar arquivo no host, transferência cancelada" 632 msgstr "Erro ao gravar arquivo no host, transferência cancelada"
633 633
634 -#: src/network_modules/openssl/main.c:122 634 +#: src/network_modules/openssl/main.c:123
635 msgid "Error writing to host." 635 msgid "Error writing to host."
636 msgstr "Erro enviando para o servidor" 636 msgstr "Erro enviando para o servidor"
637 637
@@ -989,8 +989,8 @@ msgstr &quot;Move para o próximo campo desprotegido&quot; @@ -989,8 +989,8 @@ msgstr &quot;Move para o próximo campo desprotegido&quot;
989 msgid "Move to the previous unprotected field on screen" 989 msgid "Move to the previous unprotected field on screen"
990 msgstr "Move para o campo desprotegido anterior" 990 msgstr "Move para o campo desprotegido anterior"
991 991
992 -#: src/core/telnet.c:304 src/core/windows/event_dispatcher.c:135  
993 -#: src/core/windows/connect.c:223 992 +#: src/core/telnet.c:304 src/core/windows/connect.c:223
  993 +#: src/core/windows/event_dispatcher.c:135
994 msgid "Network error" 994 msgid "Network error"
995 msgstr "Erro de rede" 995 msgstr "Erro de rede"
996 996
@@ -1500,8 +1500,8 @@ msgstr &quot;&quot; @@ -1500,8 +1500,8 @@ msgstr &quot;&quot;
1500 "A lista de revogação de certificados (CRL) de um certificado não pôde ser " 1500 "A lista de revogação de certificados (CRL) de um certificado não pôde ser "
1501 "encontrada." 1501 "encontrada."
1502 1502
1503 -#: src/network_modules/openssl/main.c:123  
1504 -#: src/network_modules/openssl/main.c:170 1503 +#: src/network_modules/openssl/main.c:124
  1504 +#: src/network_modules/openssl/main.c:171
1505 #, c-format 1505 #, c-format
1506 msgid "The SSL error message was %s" 1506 msgid "The SSL error message was %s"
1507 msgstr "A mensagem de erro SSL foi \"%s\"" 1507 msgstr "A mensagem de erro SSL foi \"%s\""
@@ -1723,8 +1723,8 @@ msgstr &quot;&quot; @@ -1723,8 +1723,8 @@ msgstr &quot;&quot;
1723 "O Certificado raiz não está marcado como confiável para os fins " 1723 "O Certificado raiz não está marcado como confiável para os fins "
1724 "especificados." 1724 "especificados."
1725 1725
1726 -#: src/network_modules/openssl/main.c:101  
1727 -#: src/network_modules/openssl/main.c:149 1726 +#: src/network_modules/openssl/main.c:102
  1727 +#: src/network_modules/openssl/main.c:150
1728 msgid "The secure connection has been closed cleanly." 1728 msgid "The secure connection has been closed cleanly."
1729 msgstr "A conexão segura foi fechada corretamente" 1729 msgstr "A conexão segura foi fechada corretamente"
1730 1730
@@ -1774,7 +1774,7 @@ msgstr &quot;O erro do sistema operacional foi \&quot;%s\&quot; (rc=%d)&quot; @@ -1774,7 +1774,7 @@ msgstr &quot;O erro do sistema operacional foi \&quot;%s\&quot; (rc=%d)&quot;
1774 msgid "The system error was %s" 1774 msgid "The system error was %s"
1775 msgstr "O erro do sistema operacional foi \"%s\"" 1775 msgstr "O erro do sistema operacional foi \"%s\""
1776 1776
1777 -#: src/core/util.c:260 1777 +#: src/core/util.c:264
1778 #, c-format 1778 #, c-format
1779 msgid "The system error was '%s' (rc=%d)" 1779 msgid "The system error was '%s' (rc=%d)"
1780 msgstr "O erro do sistema foi \"%s\" (rc=%d)" 1780 msgstr "O erro do sistema foi \"%s\" (rc=%d)"
@@ -1857,8 +1857,8 @@ msgstr &quot;Mostrar posição do cursor&quot; @@ -1857,8 +1857,8 @@ msgstr &quot;Mostrar posição do cursor&quot;
1857 msgid "Transfer cancelled by host" 1857 msgid "Transfer cancelled by host"
1858 msgstr "Transferência cancelada pelo host" 1858 msgstr "Transferência cancelada pelo host"
1859 1859
1860 -#: src/core/ft/ft_dft.c:213 src/core/ft/ft_dft.c:344 src/core/ft/ft_cut.c:387  
1861 -#: src/core/ft/ft_cut.c:475 1860 +#: src/core/ft/ft_cut.c:387 src/core/ft/ft_cut.c:475 src/core/ft/ft_dft.c:213
  1861 +#: src/core/ft/ft_dft.c:344
1862 msgid "Transfer cancelled by user" 1862 msgid "Transfer cancelled by user"
1863 msgstr "Transferência cancelada pelo usuário" 1863 msgstr "Transferência cancelada pelo usuário"
1864 1864
@@ -1915,7 +1915,7 @@ msgstr &quot;Não foi possível obter emissor do certificado&quot; @@ -1915,7 +1915,7 @@ msgstr &quot;Não foi possível obter emissor do certificado&quot;
1915 msgid "Unable to get local issuer certificate" 1915 msgid "Unable to get local issuer certificate"
1916 msgstr "Unable to get local issuer certificate" 1916 msgstr "Unable to get local issuer certificate"
1917 1917
1918 -#: src/core/session.c:198 1918 +#: src/core/session.c:205
1919 msgid "Unable to load from file" 1919 msgid "Unable to load from file"
1920 msgstr "Não foi possível ler do arquivo" 1920 msgstr "Não foi possível ler do arquivo"
1921 1921
@@ -1927,11 +1927,11 @@ msgstr &quot;Incapaz de negociar uma conexão segura com o host&quot; @@ -1927,11 +1927,11 @@ msgstr &quot;Incapaz de negociar uma conexão segura com o host&quot;
1927 msgid "Unable to paste text" 1927 msgid "Unable to paste text"
1928 msgstr "Incapaz de colar texto" 1928 msgstr "Incapaz de colar texto"
1929 1929
1930 -#: src/core/session.c:186 1930 +#: src/core/session.c:193
1931 msgid "Unable to print" 1931 msgid "Unable to print"
1932 msgstr "Incapaz de imprimir" 1932 msgstr "Incapaz de imprimir"
1933 1933
1934 -#: src/core/session.c:192 1934 +#: src/core/session.c:199
1935 msgid "Unable to save" 1935 msgid "Unable to save"
1936 msgstr "Incapaz de salvar" 1936 msgstr "Incapaz de salvar"
1937 1937
src/network_modules/openssl/context.c
@@ -193,6 +193,94 @@ SSL_CTX * lib3270_openssl_get_context(H3270 *hSession) { @@ -193,6 +193,94 @@ SSL_CTX * lib3270_openssl_get_context(H3270 *hSession) {
193 193
194 #endif // SSL_ENABLE_CRL_CHECK 194 #endif // SSL_ENABLE_CRL_CHECK
195 195
  196 +#ifdef _WIN32
  197 + {
  198 + // Load certs
  199 + // https://stackoverflow.com/questions/9507184/can-openssl-on-windows-use-the-system-certificate-store
  200 + X509_STORE * store = SSL_CTX_get_cert_store(context);
  201 +
  202 + lib3270_autoptr(char) certpath = lib3270_build_data_filename("certs","*.der",NULL);
  203 +
  204 + trace_ssl(hSession,"Loading SSL certs from %s\n",certpath);
  205 +
  206 + WIN32_FIND_DATA ffd;
  207 + HANDLE hFind = FindFirstFile(certpath, &ffd);
  208 +
  209 + if(hFind == INVALID_HANDLE_VALUE)
  210 + {
  211 + static const LIB3270_SSL_MESSAGE message = {
  212 + .type = LIB3270_NOTIFY_SECURE,
  213 + .icon = "dialog-error",
  214 + .summary = N_( "Cant open custom certificate directory." ),
  215 + };
  216 +
  217 + hSession->ssl.message = &message;
  218 +
  219 + trace_ssl(hSession, _( "Can't open \"%s\" (The Windows error code was %ld)" ), certpath, (long) GetLastError());
  220 + }
  221 + else
  222 + {
  223 + do
  224 + {
  225 + char * filename = lib3270_build_data_filename("certs", ffd.cFileName, NULL);
  226 +
  227 + debug("Loading \"%s\"",filename);
  228 +
  229 + FILE *fp = fopen(filename,"r");
  230 + if(!fp) {
  231 +
  232 + trace_ssl(hSession, _( "Can't open \"%s\": %s" ), filename, strerror(errno));
  233 +
  234 + }
  235 + else
  236 + {
  237 + X509 * cert = d2i_X509_fp(fp, NULL);
  238 +
  239 + if(!cert)
  240 + {
  241 + static const LIB3270_SSL_MESSAGE message = {
  242 + .type = LIB3270_NOTIFY_SECURE,
  243 + .icon = "dialog-error",
  244 + .summary = N_( "Cant read custom certificate file." ),
  245 + };
  246 +
  247 + hSession->ssl.message = &message;
  248 + hSession->network.context->state.error = ERR_get_error();
  249 +
  250 + trace_ssl(hSession, _( "Can't read \"%s\": %s" ), filename, ERR_lib_error_string(hSession->ssl.error));
  251 + }
  252 + else
  253 + {
  254 +
  255 + if(X509_STORE_add_cert(store, cert) != 1)
  256 + {
  257 + static const LIB3270_SSL_MESSAGE message = {
  258 + .type = LIB3270_NOTIFY_SECURE,
  259 + .icon = "dialog-error",
  260 + .summary = N_( "Cant load custom certificate file." ),
  261 + };
  262 +
  263 + hSession->ssl.message = &message;
  264 + hSession->network.context->state.error = ERR_get_error();
  265 +
  266 + trace_ssl(hSession, _( "Can't load \"%s\": %s" ), filename, ERR_lib_error_string(hSession->ssl.error));
  267 + }
  268 +
  269 + X509_free(cert);
  270 + }
  271 +
  272 + fclose(fp);
  273 + }
  274 +
  275 + lib3270_free(filename);
  276 +
  277 + }
  278 + while (FindNextFile(hFind, &ffd) != 0);
  279 +
  280 + }
  281 + }
  282 +#endif // _WIN32
  283 +
196 return context; 284 return context;
197 285
198 } 286 }
src/testprogram/testprogram.c
@@ -78,7 +78,7 @@ int main(int argc, char *argv[]) { @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) {
78 { 78 {
79 lib3270_autoptr(char) testfilename = lib3270_build_data_filename("test",NULL); 79 lib3270_autoptr(char) testfilename = lib3270_build_data_filename("test",NULL);
80 printf("\n\nFilename: '%s'\n\n", testfilename); 80 printf("\n\nFilename: '%s'\n\n", testfilename);
81 - return 0; 81 +// return 0;
82 } 82 }
83 83
84 // #pragma GCC diagnostic push 84 // #pragma GCC diagnostic push