Commit 3be89db0a19352ff0a72d5517db9b273a103f19b
1 parent
7527a2d7
Exists in
master
and in
1 other branch
Fixing win32 custom certificate loading.
Showing
4 changed files
with
113 additions
and
24 deletions
Show diff stats
.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 "Erro ao inicializar LDAP" | @@ -277,7 +277,7 @@ msgstr "Erro ao inicializar LDAP" | ||
| 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 "Não foi possível carregar" | @@ -285,7 +285,7 @@ msgstr "Não foi possível carregar" | ||
| 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 "Não é possível imprimir" | @@ -293,7 +293,7 @@ msgstr "Não é possível imprimir" | ||
| 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 "Tipo de dispositivo rejeitado" | @@ -512,8 +512,8 @@ msgstr "Tipo de dispositivo rejeitado" | ||
| 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 "Apagar campos" | @@ -593,12 +593,12 @@ msgstr "Apagar campos" | ||
| 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 "Erro na transferência do arquivo, transferência cancelada" | @@ -611,7 +611,7 @@ msgstr "Erro na transferência do arquivo, transferência cancelada" | ||
| 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 "Erro ao ler ou gravar no host: Transferência cancelada" | @@ -631,7 +631,7 @@ msgstr "Erro ao ler ou gravar no host: Transferência cancelada" | ||
| 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 "Move para o próximo campo desprotegido" | @@ -989,8 +989,8 @@ msgstr "Move para o próximo campo desprotegido" | ||
| 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 "" | @@ -1500,8 +1500,8 @@ msgstr "" | ||
| 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 "" | @@ -1723,8 +1723,8 @@ msgstr "" | ||
| 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 "O erro do sistema operacional foi \"%s\" (rc=%d)" | @@ -1774,7 +1774,7 @@ msgstr "O erro do sistema operacional foi \"%s\" (rc=%d)" | ||
| 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 "Mostrar posição do cursor" | @@ -1857,8 +1857,8 @@ msgstr "Mostrar posição do cursor" | ||
| 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 "Não foi possível obter emissor do certificado" | @@ -1915,7 +1915,7 @@ msgstr "Não foi possível obter emissor do certificado" | ||
| 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 "Incapaz de negociar uma conexão segura com o host" | @@ -1927,11 +1927,11 @@ msgstr "Incapaz de negociar uma conexão segura com o host" | ||
| 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 |