Commit e9bac34b56aea6eea4b4168054cd25aef86d0cc7
1 parent
3be44a48
Exists in
master
and in
3 other branches
Removing unused code.
Showing
28 changed files
with
24 additions
and
3654 deletions
Show diff stats
lib3270.cbp
... | ... | @@ -366,44 +366,8 @@ |
366 | 366 | <Unit filename="src/selection/selection.c"> |
367 | 367 | <Option compilerVar="CC" /> |
368 | 368 | </Unit> |
369 | - <Unit filename="src/ssl/crl.c"> | |
370 | - <Option compilerVar="CC" /> | |
371 | - </Unit> | |
372 | 369 | <Unit filename="src/ssl/crl.h" /> |
373 | - <Unit filename="src/ssl/linux/getcrl.c"> | |
374 | - <Option compilerVar="CC" /> | |
375 | - </Unit> | |
376 | - <Unit filename="src/ssl/linux/init.c"> | |
377 | - <Option compilerVar="CC" /> | |
378 | - </Unit> | |
379 | - <Unit filename="src/ssl/linux/ldap.c"> | |
380 | - <Option compilerVar="CC" /> | |
381 | - </Unit> | |
382 | 370 | <Unit filename="src/ssl/linux/private.h" /> |
383 | - <Unit filename="src/ssl/linux/url.c"> | |
384 | - <Option compilerVar="CC" /> | |
385 | - </Unit> | |
386 | - <Unit filename="src/ssl/negotiate.c"> | |
387 | - <Option compilerVar="CC" /> | |
388 | - </Unit> | |
389 | - <Unit filename="src/ssl/notify.c"> | |
390 | - <Option compilerVar="CC" /> | |
391 | - </Unit> | |
392 | - <Unit filename="src/ssl/properties.c"> | |
393 | - <Option compilerVar="CC" /> | |
394 | - </Unit> | |
395 | - <Unit filename="src/ssl/windows/getcrl.c"> | |
396 | - <Option compilerVar="CC" /> | |
397 | - </Unit> | |
398 | - <Unit filename="src/ssl/windows/http.c"> | |
399 | - <Option compilerVar="CC" /> | |
400 | - </Unit> | |
401 | - <Unit filename="src/ssl/windows/init.c"> | |
402 | - <Option compilerVar="CC" /> | |
403 | - </Unit> | |
404 | - <Unit filename="src/ssl/windows/ldap.c"> | |
405 | - <Option compilerVar="CC" /> | |
406 | - </Unit> | |
407 | 371 | <Unit filename="src/ssl/windows/private.h" /> |
408 | 372 | <Unit filename="src/testprogram/testprogram.c"> |
409 | 373 | <Option compilerVar="CC" /> | ... | ... |
src/core/host.c
... | ... | @@ -52,7 +52,6 @@ |
52 | 52 | #include "trace_dsc.h" |
53 | 53 | #include "utilc.h" |
54 | 54 | #include "xioc.h" |
55 | -#include "../ssl/crl.h" | |
56 | 55 | #include "screenc.h" |
57 | 56 | |
58 | 57 | #include <errno.h> |
... | ... | @@ -293,13 +292,10 @@ static void update_url(H3270 *hSession) |
293 | 292 | lib3270_write_event_trace(hSession,"Host URL was changed\nFrom: %s\nTo: %s\n",hSession->host.url,url); |
294 | 293 | lib3270_free(hSession->host.url); |
295 | 294 | hSession->host.url = url; |
296 | - | |
297 | -#if defined(HAVE_LIBSSLx) && defined(SSL_ENABLE_CRL_CHECK) | |
298 | - lib3270_crl_free(hSession); | |
299 | -#endif // SSL_ENABLE_CRL_CHECK | |
300 | - | |
301 | 295 | hSession->cbk.update_url(hSession, hSession->host.url); |
302 | 296 | |
297 | + hSession->network.module->reset(hSession); | |
298 | + | |
303 | 299 | } |
304 | 300 | |
305 | 301 | LIB3270_EXPORT const char * lib3270_get_associated_luname(const H3270 *hSession) | ... | ... |
src/core/linux/connect.c
... | ... | @@ -307,16 +307,6 @@ |
307 | 307 | // |
308 | 308 | hSession->ever_3270 = False; |
309 | 309 | |
310 | -#if defined(HAVE_LIBSSLx) | |
311 | - if(hSession->ssl.enabled) | |
312 | - { | |
313 | - hSession->ssl.host = 1; | |
314 | - if(ssl_init(hSession)) | |
315 | - return errno = ENOTCONN; | |
316 | - | |
317 | - } | |
318 | -#endif // HAVE_LIBSSL | |
319 | - | |
320 | 310 | // set options for inline out-of-band data and keepalives |
321 | 311 | int optval = 1; |
322 | 312 | if(hSession->network.module->setsockopt(hSession, SOL_SOCKET, SO_OOBINLINE, &optval, sizeof(optval)) < 0) | ... | ... |
src/core/properties/signed.c
... | ... | @@ -49,48 +49,6 @@ |
49 | 49 | return (int) lib3270_get_ssl_state(hSession); |
50 | 50 | } |
51 | 51 | |
52 | - static int lib3270_set_ssl_minimum_protocol_version(H3270 *hSession, int value) | |
53 | - { | |
54 | -#ifdef HAVE_LIBSSLx | |
55 | - FAIL_IF_ONLINE(hSession); | |
56 | - hSession->ssl.protocol.min_version = value; | |
57 | - return 0; | |
58 | -#else | |
59 | - return ENOTSUP; | |
60 | -#endif // HAVE_LIBSSL | |
61 | - } | |
62 | - | |
63 | - static int lib3270_set_ssl_maximum_protocol_version(H3270 *hSession, int value) | |
64 | - { | |
65 | -#ifdef HAVE_LIBSSLx | |
66 | - FAIL_IF_ONLINE(hSession); | |
67 | - hSession->ssl.protocol.max_version = value; | |
68 | - return 0; | |
69 | -#else | |
70 | - return ENOTSUP; | |
71 | -#endif // HAVE_LIBSSL | |
72 | - } | |
73 | - | |
74 | - static int lib3270_get_ssl_minimum_protocol_version(const H3270 *hSession) | |
75 | - { | |
76 | -#ifdef HAVE_LIBSSLx | |
77 | - return hSession->ssl.protocol.min_version; | |
78 | -#else | |
79 | - errno = ENOTSUP; | |
80 | - return 0; | |
81 | -#endif // HAVE_LIBSSL | |
82 | - } | |
83 | - | |
84 | - static int lib3270_get_ssl_maximum_protocol_version(const H3270 *hSession) | |
85 | - { | |
86 | -#ifdef HAVE_LIBSSLx | |
87 | - return hSession->ssl.protocol.max_version; | |
88 | -#else | |
89 | - errno = ENOTSUP; | |
90 | - return 0; | |
91 | -#endif // HAVE_LIBSSL | |
92 | - } | |
93 | - | |
94 | 52 | const LIB3270_INT_PROPERTY * lib3270_get_int_properties_list(void) |
95 | 53 | { |
96 | 54 | |
... | ... | @@ -117,22 +75,6 @@ |
117 | 75 | .set = NULL // Set value. |
118 | 76 | }, |
119 | 77 | |
120 | - { | |
121 | - .name = "ssl_min_protocol_version", // Property name. | |
122 | - .description = N_( "ID of the minimum supported SSL protocol version" ), // Property description. | |
123 | - .default_value = 0, | |
124 | - .get = lib3270_get_ssl_minimum_protocol_version, // Get value. | |
125 | - .set = lib3270_set_ssl_minimum_protocol_version // Set value. | |
126 | - }, | |
127 | - | |
128 | - { | |
129 | - .name = "ssl_max_protocol_version", // Property name. | |
130 | - .description = N_( "ID of the maximum supported SSL protocol version" ), // Property description. | |
131 | - .default_value = 0, | |
132 | - .get = lib3270_get_ssl_maximum_protocol_version, // Get value. | |
133 | - .set = lib3270_set_ssl_maximum_protocol_version // Set value. | |
134 | - }, | |
135 | - | |
136 | 78 | { |
137 | 79 | .name = NULL, |
138 | 80 | .description = NULL, | ... | ... |
src/core/session.c
... | ... | @@ -42,7 +42,6 @@ |
42 | 42 | #include "kybdc.h" |
43 | 43 | #include "3270ds.h" |
44 | 44 | #include "popupsc.h" |
45 | -#include "../ssl/crl.h" | |
46 | 45 | #include <lib3270/trace.h> |
47 | 46 | #include <lib3270/log.h> |
48 | 47 | #include <lib3270/properties.h> |
... | ... | @@ -74,16 +73,6 @@ void lib3270_session_free(H3270 *h) |
74 | 73 | |
75 | 74 | shutdown_toggles(h); |
76 | 75 | |
77 | -#if defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LIBSSLx) | |
78 | - if(h->ssl.crl.prefer) | |
79 | - { | |
80 | - free(h->ssl.crl.prefer); | |
81 | - h->ssl.crl.prefer = NULL; | |
82 | - } | |
83 | - | |
84 | - lib3270_crl_free(h); | |
85 | -#endif // SSL_ENABLE_CRL_CHECK | |
86 | - | |
87 | 76 | // Release network module |
88 | 77 | if(h->network.module) |
89 | 78 | { | ... | ... |
src/include/networking.h
... | ... | @@ -166,6 +166,11 @@ |
166 | 166 | /// @return String with the CRL certificate (release it with lib3270_free); NULL if not available. |
167 | 167 | char * (*getcrl)(const H3270 *hSession); |
168 | 168 | |
169 | + /// @brief Reset. | |
170 | + /// | |
171 | + /// Clear network module state (used when URL changes). | |
172 | + void (*reset)(H3270 *hSession); | |
173 | + | |
169 | 174 | } LIB3270_NET_MODULE; |
170 | 175 | |
171 | 176 | /** | ... | ... |
src/network_modules/default/main.c
... | ... | @@ -62,6 +62,9 @@ |
62 | 62 | return 0; |
63 | 63 | } |
64 | 64 | |
65 | + static void unsecure_network_reset(H3270 GNUC_UNUSED(*hSession)) { | |
66 | + } | |
67 | + | |
65 | 68 | ssize_t unsecure_network_send(H3270 *hSession, const void *buffer, size_t length) { |
66 | 69 | |
67 | 70 | ssize_t bytes = send(hSession->network.context->sock,buffer,length,0); |
... | ... | @@ -164,7 +167,8 @@ void lib3270_set_default_network_module(H3270 *hSession) { |
164 | 167 | .is_connected = unsecure_network_is_connected, |
165 | 168 | .getsockname = unsecure_network_getsockname, |
166 | 169 | .setsockopt = unsecure_network_setsockopt, |
167 | - .getsockopt = unsecure_network_getsockopt | |
170 | + .getsockopt = unsecure_network_getsockopt, | |
171 | + .reset = unsecure_network_reset | |
168 | 172 | }; |
169 | 173 | |
170 | 174 | debug("%s",__FUNCTION__); | ... | ... |
src/network_modules/openssl/main.c
... | ... | @@ -35,18 +35,21 @@ |
35 | 35 | #include "private.h" |
36 | 36 | |
37 | 37 | |
38 | -static void openssl_network_finalize(H3270 *hSession) { | |
39 | - | |
40 | - debug("%s",__FUNCTION__); | |
38 | +static void openssl_network_reset(H3270 *hSession) { | |
41 | 39 | |
42 | 40 | if(hSession->network.context) { |
41 | + lib3270_openssl_crl_free(hSession->network.context); | |
42 | + } | |
43 | + | |
44 | +} | |
43 | 45 | |
44 | - // Cleanupp | |
45 | - LIB3270_NET_CONTEXT *context = hSession->network.context; | |
46 | +static void openssl_network_finalize(H3270 *hSession) { | |
46 | 47 | |
47 | - lib3270_openssl_crl_free(context); | |
48 | + debug("%s",__FUNCTION__); | |
48 | 49 | |
49 | - // Release network context. | |
50 | + openssl_network_reset(hSession); | |
51 | + | |
52 | + if(hSession->network.context) { | |
50 | 53 | lib3270_free(hSession->network.context); |
51 | 54 | hSession->network.context = NULL; |
52 | 55 | } |
... | ... | @@ -346,7 +349,8 @@ void lib3270_set_libssl_network_module(H3270 *hSession) { |
346 | 349 | .setsockopt = openssl_network_setsockopt, |
347 | 350 | .getsockopt = openssl_network_getsockopt, |
348 | 351 | .getcert = openssl_network_getcert, |
349 | - .getcrl = openssl_network_getcrl | |
352 | + .getcrl = openssl_network_getcrl, | |
353 | + .reset = openssl_network_reset | |
350 | 354 | }; |
351 | 355 | |
352 | 356 | debug("%s",__FUNCTION__); | ... | ... |
src/network_modules/state.c
... | ... | @@ -50,15 +50,6 @@ LIB3270_EXPORT int lib3270_is_secure(const H3270 *hSession) |
50 | 50 | return lib3270_get_ssl_state(hSession) == LIB3270_SSL_SECURE; |
51 | 51 | } |
52 | 52 | |
53 | -#if defined(HAVE_LIBSSLx) | |
54 | -LIB3270_EXPORT long lib3270_get_SSL_verify_result(const H3270 *hSession) | |
55 | -{ | |
56 | - if(hSession->ssl.con) | |
57 | - return SSL_get_verify_result(hSession->ssl.con); | |
58 | - return -1; | |
59 | -} | |
60 | -#endif // HAVE_LIBSSL | |
61 | - | |
62 | 53 | LIB3270_EXPORT LIB3270_SSL_STATE lib3270_get_ssl_state(const H3270 *hSession) |
63 | 54 | { |
64 | 55 | return hSession->ssl.state; | ... | ... |
src/ssl/crl.c
... | ... | @@ -1,292 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - */ | |
29 | - | |
30 | -#include <config.h> | |
31 | - | |
32 | -#include <internals.h> | |
33 | -#include <lib3270/log.h> | |
34 | -#include <lib3270/trace.h> | |
35 | -#include <lib3270/toggle.h> | |
36 | -#include <trace_dsc.h> | |
37 | -#include <array.h> | |
38 | - | |
39 | -#include "crl.h" | |
40 | - | |
41 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
42 | - | |
43 | -#if defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LIBSSL) | |
44 | - | |
45 | -void lib3270_crl_free(H3270 *hSession) | |
46 | -{ | |
47 | - if(hSession->ssl.crl.cert) | |
48 | - { | |
49 | - X509_CRL_free(hSession->ssl.crl.cert); | |
50 | - hSession->ssl.crl.cert = NULL; | |
51 | - } | |
52 | - | |
53 | - if(hSession->ssl.crl.url) | |
54 | - { | |
55 | - free(hSession->ssl.crl.url); | |
56 | - hSession->ssl.crl.url = NULL; | |
57 | - } | |
58 | - | |
59 | -} | |
60 | - | |
61 | -void lib3270_crl_free_if_expired(H3270 *hSession) | |
62 | -{ | |
63 | - if(!hSession->ssl.crl.cert) | |
64 | - return; | |
65 | - | |
66 | - // https://stackoverflow.com/questions/23407376/testing-x509-certificate-expiry-date-with-c | |
67 | - // X509_CRL_get_nextUpdate is deprecated in openssl 1.1.0 | |
68 | - #if OPENSSL_VERSION_NUMBER < 0x10100000L | |
69 | - const ASN1_TIME * next_update = X509_CRL_get_nextUpdate(hSession->ssl.crl.cert); | |
70 | - #else | |
71 | - const ASN1_TIME * next_update = X509_CRL_get0_nextUpdate(hSession->ssl.crl.cert); | |
72 | - #endif | |
73 | - | |
74 | - if(X509_cmp_current_time(next_update) == 1) | |
75 | - { | |
76 | - int day, sec; | |
77 | - if(ASN1_TIME_diff(&day, &sec, NULL, next_update)) | |
78 | - { | |
79 | - trace_ssl(hSession,"CRL is valid for %d day(s) and %d second(s)\n",day,sec); | |
80 | - return; | |
81 | - } | |
82 | - | |
83 | - trace_ssl(hSession,"Can't get CRL next update, discarding it\n"); | |
84 | - | |
85 | - } | |
86 | - else | |
87 | - { | |
88 | - trace_ssl(hSession,"CRL is no longer valid\n"); | |
89 | - } | |
90 | - | |
91 | - // Certificate is no longer valid, release it. | |
92 | - X509_CRL_free(hSession->ssl.crl.cert); | |
93 | - hSession->ssl.crl.cert = NULL; | |
94 | - | |
95 | -} | |
96 | - | |
97 | -int lib3270_crl_new_from_url(H3270 *hSession, void *ssl_error, const char *url) | |
98 | -{ | |
99 | - if(!(url && *url)) | |
100 | - return -1; | |
101 | - | |
102 | - lib3270_crl_free(hSession); // Just in case! | |
103 | - | |
104 | - // | |
105 | - // Get the new CRL | |
106 | - // | |
107 | - // https://stackoverflow.com/questions/10510850/how-to-verify-the-certificate-for-the-ongoing-ssl-session | |
108 | - // | |
109 | - trace_ssl(hSession,"Getting CRL from %s\n",url); | |
110 | - | |
111 | - hSession->ssl.crl.cert = lib3270_download_crl(hSession,(SSL_ERROR_MESSAGE *) ssl_error, url); | |
112 | - | |
113 | - if(hSession->ssl.crl.cert) | |
114 | - { | |
115 | - // Got CRL! | |
116 | - | |
117 | - // Update URL | |
118 | - if(hSession->ssl.crl.url) | |
119 | - lib3270_free(hSession->ssl.crl.url); | |
120 | - | |
121 | - hSession->ssl.crl.url = lib3270_strdup(url); | |
122 | - | |
123 | - // Add it to ssl store | |
124 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
125 | - { | |
126 | - lib3270_autoptr(char) text = lib3270_get_ssl_crl_text(hSession); | |
127 | - | |
128 | - if(text) | |
129 | - trace_ssl(hSession,"\n%s\n",text); | |
130 | - | |
131 | - } | |
132 | - | |
133 | - // Add CRL in the store. | |
134 | - X509_STORE *store = SSL_CTX_get_cert_store(ssl_ctx); | |
135 | - if(X509_STORE_add_crl(store, hSession->ssl.crl.cert)) | |
136 | - { | |
137 | - trace_ssl(hSession,"CRL was added to context cert store\n"); | |
138 | - } | |
139 | - else | |
140 | - { | |
141 | - trace_ssl(hSession,"CRL was not added to context cert store\n"); | |
142 | - } | |
143 | - | |
144 | - return 0; | |
145 | - } | |
146 | - | |
147 | - trace_ssl(hSession,"Can't get CRL using %s\n",url); | |
148 | - | |
149 | - return -1; | |
150 | - | |
151 | -} | |
152 | - | |
153 | -/// @brief Load CRL from X509 certificate. | |
154 | -int lib3270_crl_new_from_x509(H3270 *hSession, void *ssl_error, X509 *cert) | |
155 | -{ | |
156 | - // References: | |
157 | - // | |
158 | - // http://www.zedwood.com/article/cpp-check-crl-for-revocation | |
159 | - // | |
160 | - lib3270_autoptr(CRL_DIST_POINTS) dist_points = (CRL_DIST_POINTS *) X509_get_ext_d2i(cert, NID_crl_distribution_points, NULL, NULL); | |
161 | - | |
162 | - if(!dist_points) | |
163 | - { | |
164 | - static const LIB3270_POPUP popup = { | |
165 | - .name = "SSL-NoDistPoints", | |
166 | - .type = LIB3270_NOTIFY_SECURE, | |
167 | - .summary = N_("Can't verify"), | |
168 | - .body = N_( "The host certificate doesn't have CRL distribution points" ) | |
169 | - }; | |
170 | - | |
171 | - ((SSL_ERROR_MESSAGE *) ssl_error)->popup = &popup; | |
172 | - return EACCES; | |
173 | - } | |
174 | - | |
175 | - if(lib3270_crl_new_from_dist_points(hSession, ssl_error, dist_points)) | |
176 | - return EACCES; | |
177 | - | |
178 | - return 0; | |
179 | -} | |
180 | - | |
181 | -int lib3270_crl_new_from_dist_points(H3270 *hSession, void *ssl_error, CRL_DIST_POINTS * dist_points) | |
182 | -{ | |
183 | - // | |
184 | - // Reference: | |
185 | - // | |
186 | - // https://nougat.cablelabs.com/DLNA-RUI/openssl/commit/57912ed329f870b237f2fd9f2de8dec3477d1729 | |
187 | - // | |
188 | - size_t ix; | |
189 | - int i; | |
190 | - | |
191 | - lib3270_autoptr(LIB3270_STRING_ARRAY) uris = lib3270_string_array_new(); | |
192 | - | |
193 | - for(ix = 0; ix < (size_t) sk_DIST_POINT_num(dist_points); ix++) { | |
194 | - | |
195 | - DIST_POINT *dp = sk_DIST_POINT_value(dist_points, ix); | |
196 | - | |
197 | - if(!dp->distpoint || dp->distpoint->type != 0) | |
198 | - continue; | |
199 | - | |
200 | - GENERAL_NAMES *gens = dp->distpoint->name.fullname; | |
201 | - | |
202 | - for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) | |
203 | - { | |
204 | - int gtype; | |
205 | - GENERAL_NAME *gen = sk_GENERAL_NAME_value(gens, i); | |
206 | - ASN1_STRING *uri = GENERAL_NAME_get0_value(gen, >ype); | |
207 | - | |
208 | - if(uri && gtype == GEN_URI) | |
209 | - { | |
210 | - int length = ASN1_STRING_length(uri); | |
211 | - | |
212 | -#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) // OpenSSL 1.1.0+ | |
213 | - const unsigned char * data = ASN1_STRING_get0_data(uri); | |
214 | -#else | |
215 | - const unsigned char * data = ASN1_STRING_data(uri); | |
216 | -#endif // OpenSSL 1.1.0+ | |
217 | - | |
218 | - if(data && length > 0) | |
219 | - lib3270_string_array_append_with_length(uris,(char *) data, (size_t) length); | |
220 | - | |
221 | - } | |
222 | - | |
223 | - } | |
224 | - | |
225 | - } | |
226 | - | |
227 | -#ifdef DEBUG | |
228 | - { | |
229 | - for(ix = 0; ix < uris->length; ix++) | |
230 | - { | |
231 | - debug("%u: %s", (unsigned int) ix, uris->str[ix]); | |
232 | - } | |
233 | - } | |
234 | -#endif // DEBUG | |
235 | - | |
236 | - if(hSession->ssl.crl.url) | |
237 | - { | |
238 | - // Check if the current URL is still valid. | |
239 | - for(ix = 0; ix < uris->length; ix++) | |
240 | - { | |
241 | - if(!strcmp(hSession->ssl.crl.url,uris->str[ix])) | |
242 | - { | |
243 | - trace_ssl(hSession,"Keeping CRL from %s\n",hSession->ssl.crl.url); | |
244 | - return 0; | |
245 | - } | |
246 | - } | |
247 | - | |
248 | - trace_ssl(hSession,"Discarding invalid CRL from %s\n",hSession->ssl.crl.url); | |
249 | - | |
250 | - // The URL is invalid or not to this cert, remove it! | |
251 | - lib3270_free(hSession->ssl.crl.url); | |
252 | - hSession->ssl.crl.url = NULL; | |
253 | - } | |
254 | - | |
255 | - // | |
256 | - // Downloading CRLs | |
257 | - // | |
258 | - if(hSession->ssl.crl.download) | |
259 | - { | |
260 | - if(hSession->ssl.crl.prefer && *hSession->ssl.crl.prefer) | |
261 | - { | |
262 | - size_t length = strlen(hSession->ssl.crl.prefer); | |
263 | - | |
264 | - for(ix = 0; ix < uris->length; ix++) | |
265 | - { | |
266 | - if(!strncmp(uris->str[ix],hSession->ssl.crl.prefer,length)) | |
267 | - { | |
268 | - trace_ssl(hSession,"Trying preferred URL %s\n",uris->str[ix]); | |
269 | - if(lib3270_crl_new_from_url(hSession, ssl_error, uris->str[ix]) == 0) | |
270 | - return 0; | |
271 | - } | |
272 | - | |
273 | - } | |
274 | - | |
275 | - } | |
276 | - | |
277 | - // Can't load, try all of them. | |
278 | - for(ix = 0; ix < uris->length; ix++) | |
279 | - { | |
280 | - trace_ssl(hSession,"Trying CRL from %s\n",uris->str[ix]); | |
281 | - if(lib3270_crl_new_from_url(hSession, ssl_error, uris->str[ix]) == 0) | |
282 | - return 0; | |
283 | - } | |
284 | - | |
285 | - return -1; | |
286 | - } | |
287 | - | |
288 | - return 0; | |
289 | - | |
290 | -} | |
291 | - | |
292 | -#endif // SSL_ENABLE_CRL_CHECK && HAVE_LIBSSL |
src/ssl/crl.h
... | ... | @@ -1,84 +0,0 @@ |
1 | -/* | |
2 | - * "Software G3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral ', conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como private.h e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) | |
27 | - * | |
28 | - */ | |
29 | - | |
30 | -#ifdef WIN32 | |
31 | - #include <winsock2.h> | |
32 | - #include <windows.h> | |
33 | -#endif // WIN32 | |
34 | - | |
35 | -#include <config.h> /* autoconf settings */ | |
36 | -#include <lib3270.h> /* lib3270 API calls and defs */ | |
37 | - | |
38 | -#if defined(HAVE_LIBSSLx) | |
39 | - | |
40 | - #include <openssl/ssl.h> | |
41 | - #include <openssl/err.h> | |
42 | - | |
43 | - /** | |
44 | - * @brief X509 auto-cleanup. | |
45 | - */ | |
46 | - static inline void lib3270_autoptr_cleanup_X509(X509 **ptr) | |
47 | - { | |
48 | - if(*ptr) | |
49 | - X509_free(*ptr); | |
50 | - } | |
51 | - | |
52 | - /** | |
53 | - * @brief Dist points auto-cleanup. | |
54 | - */ | |
55 | - static inline void lib3270_autoptr_cleanup_CRL_DIST_POINTS(CRL_DIST_POINTS **ptr) | |
56 | - { | |
57 | - if(*ptr) | |
58 | - CRL_DIST_POINTS_free(*ptr); | |
59 | - } | |
60 | - | |
61 | - | |
62 | -#endif // HAVE_LIBSSL | |
63 | - | |
64 | -#if defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LIBSSLx) | |
65 | - | |
66 | - /// @brief Unconditional release of the session CRL. | |
67 | - LIB3270_INTERNAL void lib3270_crl_free(H3270 *hSession); | |
68 | - | |
69 | - /// @brief Load CRL from URL. | |
70 | - LIB3270_INTERNAL int lib3270_crl_new_from_url(H3270 *hSession, void *ssl_error, const char *url); | |
71 | - | |
72 | - /// @brief Load CRL from X509 certificate. | |
73 | - LIB3270_INTERNAL int lib3270_crl_new_from_x509(H3270 *hSession, void *ssl_error, X509 *cert); | |
74 | - | |
75 | - /// @brief Load CRL from distribution points. | |
76 | - LIB3270_INTERNAL int lib3270_crl_new_from_dist_points(H3270 *hSession, void *ssl_error, CRL_DIST_POINTS * dist_points); | |
77 | - | |
78 | - LIB3270_INTERNAL X509_CRL * lib3270_download_crl(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *url); | |
79 | - | |
80 | - | |
81 | -#endif // SSL_ENABLE_CRL_CHECK && HAVE_LIBSSL | |
82 | - | |
83 | - | |
84 | - |
src/ssl/linux/getcrl.c
... | ... | @@ -1,144 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -#include "private.h" | |
37 | - | |
38 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) | |
39 | - | |
40 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
41 | - | |
42 | -static inline void lib3270_autoptr_cleanup_FILE(FILE **file) | |
43 | -{ | |
44 | - if(*file) | |
45 | - fclose(*file); | |
46 | -} | |
47 | - | |
48 | -X509_CRL * lib3270_download_crl(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
49 | -{ | |
50 | - X509_CRL * x509_crl = NULL; | |
51 | - | |
52 | - if(!(consturl && *consturl)) | |
53 | - { | |
54 | - static const LIB3270_POPUP popup = { | |
55 | - .type = LIB3270_NOTIFY_SECURE, | |
56 | - .name = "SSL-INVCRLURL", | |
57 | - .summary = N_( "Can't open CRL File" ), | |
58 | - .body = N_("The URL for the CRL is undefined or empty") | |
59 | - }; | |
60 | - | |
61 | - message->code = hSession->ssl.error = 0; | |
62 | - message->popup = &popup; | |
63 | - errno = ENOENT; | |
64 | - return NULL; | |
65 | - } | |
66 | - | |
67 | - if(strncasecmp(consturl,"file://",7) == 0) | |
68 | - { | |
69 | - lib3270_autoptr(FILE) hCRL = fopen(consturl+7,"r"); | |
70 | - | |
71 | - if(!hCRL) | |
72 | - { | |
73 | - // Can't open CRL File. | |
74 | - int err = errno; | |
75 | - | |
76 | - static const LIB3270_POPUP popup = { | |
77 | - .type = LIB3270_NOTIFY_SECURE, | |
78 | - .name = "SSL-CRLOPEN", | |
79 | - .summary = N_( "Can't open CRL File" ) | |
80 | - }; | |
81 | - | |
82 | - message->code = hSession->ssl.error = 0; | |
83 | - message->popup = &popup; | |
84 | - | |
85 | - trace_ssl(hSession,"Can't open %s: %s\n",consturl,strerror(err)); | |
86 | - | |
87 | - return NULL; | |
88 | - | |
89 | - } | |
90 | - | |
91 | - trace_ssl(hSession,"Loading CRL from %s\n",consturl+7); | |
92 | - if(d2i_X509_CRL_fp(hCRL, &x509_crl)) | |
93 | - { | |
94 | - static const LIB3270_POPUP popup = { | |
95 | - .type = LIB3270_NOTIFY_SECURE, | |
96 | - .name = "SSL-CRLDECODE", | |
97 | - .summary = N_( "Can't decode CRL" ) | |
98 | - }; | |
99 | - message->code = hSession->ssl.error = ERR_get_error(); | |
100 | - message->popup = &popup; | |
101 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, popup.summary); | |
102 | - return NULL; | |
103 | - } | |
104 | - | |
105 | - } | |
106 | -#ifdef HAVE_LDAP | |
107 | - else if(strncasecmp(consturl,"ldap://",7) == 0 && strlen(consturl) > 8) | |
108 | - { | |
109 | - return get_crl_using_ldap(hSession, message, consturl); | |
110 | - | |
111 | - } | |
112 | -#endif // HAVE_LDAP | |
113 | - else | |
114 | - { | |
115 | -#ifdef HAVE_LIBCURL | |
116 | - | |
117 | - return get_crl_using_url(hSession, message, consturl); | |
118 | - | |
119 | -#else | |
120 | - // Can't get CRL. | |
121 | - | |
122 | - message->error = hSession->ssl.error = 0; | |
123 | - | |
124 | - if(!(message->text && message->description)) | |
125 | - message->title = _( "Security error" ); | |
126 | - | |
127 | - if(!message->text) | |
128 | - message->text = _( "Unexpected or invalid CRL URL" ); | |
129 | - | |
130 | - if(!message->description) | |
131 | - message->description = _("The URL scheme is unknown"); | |
132 | - | |
133 | - trace_ssl(hSession,"%s: The URL scheme is unknown",consturl); | |
134 | - | |
135 | - errno = EINVAL; | |
136 | - return NULL; | |
137 | -#endif // HAVE_LIBCURL | |
138 | - } | |
139 | - | |
140 | - return x509_crl; | |
141 | - | |
142 | -} | |
143 | - | |
144 | -#endif // HAVE_LIBSSL && SSL_ENABLE_CRL_CHECK |
src/ssl/linux/ldap.c
... | ... | @@ -1,241 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -#include <config.h> | |
37 | -#include <internals.h> | |
38 | -#include <lib3270/log.h> | |
39 | -#include <lib3270/trace.h> | |
40 | -#include <lib3270/toggle.h> | |
41 | - | |
42 | -#include "utilc.h" | |
43 | - | |
44 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LDAP) | |
45 | - | |
46 | -#include <openssl/ssl.h> | |
47 | -#include <openssl/err.h> | |
48 | -#include <openssl/x509_vfy.h> | |
49 | -#include <openssl/x509.h> | |
50 | - | |
51 | -#define LDAP_DEPRECATED 1 | |
52 | -#include <ldap.h> | |
53 | - | |
54 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
55 | - | |
56 | -static inline void lib3270_autoptr_cleanup_LDAPMessage(LDAPMessage **message) | |
57 | -{ | |
58 | - debug("%s(%p)",__FUNCTION__,*message); | |
59 | - if(message) | |
60 | - ldap_msgfree(*message); | |
61 | - *message = NULL; | |
62 | -} | |
63 | - | |
64 | -static inline void lib3270_autoptr_cleanup_LDAP(LDAP **ld) | |
65 | -{ | |
66 | - debug("%s(%p)",__FUNCTION__,*ld); | |
67 | - if(*ld) | |
68 | - ldap_unbind_ext(*ld, NULL, NULL); | |
69 | - *ld = NULL; | |
70 | -} | |
71 | - | |
72 | -static inline void lib3270_autoptr_cleanup_BerElement(BerElement **ber) | |
73 | -{ | |
74 | - debug("%s(%p)",__FUNCTION__,*ber); | |
75 | - if(*ber) | |
76 | - ber_free(*ber, 0); | |
77 | - *ber = NULL; | |
78 | -} | |
79 | - | |
80 | -static inline void lib3270_autoptr_cleanup_LDAPPTR(char **ptr) | |
81 | -{ | |
82 | - debug("%s(%p)",__FUNCTION__,*ptr); | |
83 | - if(*ptr) | |
84 | - ldap_memfree(*ptr); | |
85 | - *ptr = NULL; | |
86 | -} | |
87 | - | |
88 | -LIB3270_INTERNAL X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
89 | -{ | |
90 | - X509_CRL * x509_crl = NULL; | |
91 | - | |
92 | - int rc; | |
93 | - lib3270_autoptr(char) url = lib3270_unescape(consturl); | |
94 | - char * base = strchr(url+7,'/'); | |
95 | - char * attrs[] = { NULL, NULL }; | |
96 | - | |
97 | - if(!base) | |
98 | - { | |
99 | - message->error = hSession->ssl.error = 0; | |
100 | - message->title = _( "Security error" ); | |
101 | - message->text = _( "No DN of the entry at which to start the search on the URL" ); | |
102 | - message->description = _( "The URL argument should be in the format ldap://[HOST]/[DN]?attribute" ); | |
103 | - errno = EINVAL; | |
104 | - return NULL; | |
105 | - } | |
106 | - | |
107 | - *(base++) = 0; | |
108 | - attrs[0] = strchr(base,'?'); | |
109 | - | |
110 | - if(!base) | |
111 | - { | |
112 | - message->error = hSession->ssl.error = 0; | |
113 | - message->title = _( "Security error" ); | |
114 | - message->text = _( "No LDAP attribute on the URL" ); | |
115 | - message->description = _( "The URL argument should be in the format ldap://[HOST]/[DN]?attribute" ); | |
116 | - errno = EINVAL; | |
117 | - return NULL; | |
118 | - } | |
119 | - | |
120 | - *(attrs[0]++) = 0; | |
121 | - | |
122 | - debug("host: \"%s\"",url); | |
123 | - debug("Base: \"%s\"",base); | |
124 | - debug("Attr: \"%s\"",attrs[0]); | |
125 | - | |
126 | - // Do LDAP Query | |
127 | - LDAP __attribute__ ((__cleanup__(lib3270_autoptr_cleanup_LDAP))) *ld = NULL; | |
128 | - BerElement __attribute__ ((__cleanup__(lib3270_autoptr_cleanup_BerElement))) * ber = NULL; | |
129 | - | |
130 | - rc = ldap_initialize(&ld, url); | |
131 | - if(rc != LDAP_SUCCESS) | |
132 | - { | |
133 | - message->error = hSession->ssl.error = 0; | |
134 | - message->title = _( "Security error" ); | |
135 | - message->text = _( "Can't initialize LDAP" ); | |
136 | - message->description = ldap_err2string(rc); | |
137 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
138 | - return NULL; | |
139 | - } | |
140 | - | |
141 | - unsigned long version = LDAP_VERSION3; | |
142 | - rc = ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION,(void *) &version); | |
143 | - if(rc != LDAP_SUCCESS) { | |
144 | - message->error = hSession->ssl.error = 0; | |
145 | - message->title = _( "Security error" ); | |
146 | - message->text = _( "Can't set LDAP protocol version" ); | |
147 | - message->description = ldap_err2string(rc); | |
148 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
149 | - return NULL; | |
150 | - } | |
151 | - | |
152 | - rc = ldap_simple_bind_s(ld, "", ""); | |
153 | - if(rc != LDAP_SUCCESS) | |
154 | - { | |
155 | - message->error = hSession->ssl.error = 0; | |
156 | - message->title = _( "Security error" ); | |
157 | - message->text = _( "Can't bind to LDAP server" ); | |
158 | - message->description = ldap_err2string(rc); | |
159 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
160 | - return NULL; | |
161 | - } | |
162 | - | |
163 | - lib3270_autoptr(LDAPMessage) results = NULL; | |
164 | - rc = ldap_search_ext_s( | |
165 | - ld, // Specifies the LDAP pointer returned by a previous call to ldap_init(), ldap_ssl_init(), or ldap_open(). | |
166 | - base, // Specifies the DN of the entry at which to start the search. | |
167 | - LDAP_SCOPE_BASE, // Specifies the scope of the search. | |
168 | - NULL, // Specifies a string representation of the filter to apply in the search. | |
169 | - (char **) &attrs, // Specifies a null-terminated array of character string attribute types to return from entries that match filter. | |
170 | - 0, // Should be set to 1 to request attribute types only. Set to 0 to request both attributes types and attribute values. | |
171 | - NULL, | |
172 | - NULL, | |
173 | - NULL, | |
174 | - 0, | |
175 | - &results | |
176 | - ); | |
177 | - | |
178 | - if(rc != LDAP_SUCCESS) | |
179 | - { | |
180 | - message->error = hSession->ssl.error = 0; | |
181 | - message->title = _( "Security error" ); | |
182 | - message->text = _( "Can't search LDAP server" ); | |
183 | - message->description = ldap_err2string(rc); | |
184 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
185 | - return NULL; | |
186 | - } | |
187 | - | |
188 | - char __attribute__ ((__cleanup__(lib3270_autoptr_cleanup_LDAPPTR))) *attr = ldap_first_attribute(ld, results, &ber); | |
189 | - if(!attr) | |
190 | - { | |
191 | - message->error = hSession->ssl.error = 0; | |
192 | - message->title = _( "Security error" ); | |
193 | - message->text = _( "Can't get LDAP attribute" ); | |
194 | - message->description = _("Search did not produce any attributes."); | |
195 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
196 | - errno = ENOENT; | |
197 | - return NULL; | |
198 | - } | |
199 | - | |
200 | - struct berval ** value = ldap_get_values_len(ld, results, attr); | |
201 | - if(!value) | |
202 | - { | |
203 | - message->error = hSession->ssl.error = 0; | |
204 | - message->title = _( "Security error" ); | |
205 | - message->text = _( "Can't get LDAP attribute" ); | |
206 | - message->description = _("Search did not produce any values."); | |
207 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
208 | - errno = ENOENT; | |
209 | - return NULL; | |
210 | - } | |
211 | - | |
212 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
213 | - { | |
214 | - lib3270_trace_data( | |
215 | - hSession, | |
216 | - "CRL Data received from LDAP server", | |
217 | - (const unsigned char *) value[0]->bv_val, | |
218 | - value[0]->bv_len | |
219 | - ); | |
220 | - } | |
221 | - | |
222 | - // Precisa salvar uma cópia porque d2i_X509_CRL modifica o ponteiro. | |
223 | - const unsigned char *crl_data = (const unsigned char *) value[0]->bv_val; | |
224 | - | |
225 | - if(!d2i_X509_CRL(&x509_crl, &crl_data, value[0]->bv_len)) | |
226 | - { | |
227 | - message->error = hSession->ssl.error = ERR_get_error(); | |
228 | - message->title = _( "Security error" ); | |
229 | - message->text = _( "Can't decode certificate revocation list" ); | |
230 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->text); | |
231 | - ldap_value_free_len(value); | |
232 | - return NULL; | |
233 | - } | |
234 | - | |
235 | - ldap_value_free_len(value); | |
236 | - | |
237 | - return x509_crl; | |
238 | - | |
239 | -} | |
240 | - | |
241 | -#endif // HAVE_LIBSSL && SSL_ENABLE_CRL_CHECK && HAVE_LDAP |
src/ssl/linux/private.h
... | ... | @@ -1,63 +0,0 @@ |
1 | -/* | |
2 | - * "Software G3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral ', conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como private.h e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) | |
27 | - * | |
28 | - */ | |
29 | - | |
30 | -#ifndef LIB3270_LINUX_SSL_PRIVATE_H_INCLUDED | |
31 | - | |
32 | - #define LIB3270_LINUX_SSL_PRIVATE_H_INCLUDED | |
33 | - | |
34 | - #include <config.h> | |
35 | - | |
36 | - #include <openssl/ssl.h> | |
37 | - #include <openssl/err.h> | |
38 | - #include <openssl/x509_vfy.h> | |
39 | - #include <openssl/x509.h> | |
40 | - | |
41 | - #include <internals.h> | |
42 | - #include <trace_dsc.h> | |
43 | - #include <errno.h> | |
44 | - #include <lib3270.h> | |
45 | - #include <lib3270/trace.h> | |
46 | - #include <lib3270/log.h> | |
47 | - | |
48 | - #if defined(HAVE_LIBSSL) && defined(HAVE_LDAP) | |
49 | - | |
50 | - /// @brief Use libldap to get CRL. | |
51 | - LIB3270_INTERNAL X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl); | |
52 | - | |
53 | - #endif // HAVE_LDAP | |
54 | - | |
55 | - #if defined (HAVE_LIBSSLx) && defined(HAVE_LIBCURL) | |
56 | - | |
57 | - /// @brief Use libcurl to get CRL. | |
58 | - LIB3270_INTERNAL X509_CRL * get_crl_using_url(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl); | |
59 | - | |
60 | - #endif // HAVE_LIBCURL | |
61 | - | |
62 | - | |
63 | -#endif // !LIB3270_LINUX_SSL_PRIVATE_H_INCLUDED |
src/ssl/linux/url.c
... | ... | @@ -1,146 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -#include <config.h> | |
37 | - | |
38 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LIBCURL) | |
39 | - | |
40 | -#include "private.h" | |
41 | -#include <curl/curl.h> | |
42 | -#include <lib3270/toggle.h> | |
43 | - | |
44 | -#define CRL_DATA_LENGTH 2048 | |
45 | - | |
46 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
47 | - | |
48 | -static inline void lib3270_autoptr_cleanup_BIO(BIO **ptr) | |
49 | -{ | |
50 | - debug("%s(%p)",__FUNCTION__,*ptr); | |
51 | - if(*ptr) | |
52 | - BIO_free_all(*ptr); | |
53 | - *ptr = NULL; | |
54 | -} | |
55 | - | |
56 | -LIB3270_INTERNAL X509_CRL * get_crl_using_url(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
57 | -{ | |
58 | - X509_CRL * x509_crl = NULL; | |
59 | - | |
60 | - size_t szText = 0; | |
61 | - const char * error_message = NULL; | |
62 | - lib3270_autoptr(char) httpText = lib3270_get_from_url(hSession, consturl, &szText, &error_message); | |
63 | - | |
64 | - if(!httpText) | |
65 | - { | |
66 | - LIB3270_POPUP popup = { | |
67 | - .type = LIB3270_NOTIFY_SECURE, | |
68 | - .name = "SSL-CantGetCRL", | |
69 | - .summary = N_( "Error getting certificate revocation list" ), | |
70 | - .body = error_message | |
71 | - }; | |
72 | - message->popup = &popup; | |
73 | - return NULL; | |
74 | - } | |
75 | - | |
76 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
77 | - lib3270_trace_data(hSession,"CRL Data",(const unsigned char *) httpText, (unsigned int) szText); | |
78 | - | |
79 | - if(strncasecmp(consturl,"ldap://",7) == 0) | |
80 | - { | |
81 | - // It's an LDAP query, assumes a base64 data. | |
82 | - char * data = strstr((char *) httpText,":: "); | |
83 | - if(!data) | |
84 | - { | |
85 | - static const LIB3270_POPUP popup = { | |
86 | - .type = LIB3270_NOTIFY_SECURE, | |
87 | - .summary = N_( "Got a bad formatted certificate revocation list from LDAP server" ) | |
88 | - }; | |
89 | - | |
90 | - message->code = hSession->ssl.error = ERR_get_error(); | |
91 | - message->popup = &popup; | |
92 | - lib3270_write_log(hSession,"ssl","%s: invalid format:\n%s\n", consturl, httpText); | |
93 | - errno = EINVAL; | |
94 | - return NULL; | |
95 | - } | |
96 | - data += 3; | |
97 | - | |
98 | - lib3270_autoptr(BIO) bio = BIO_new_mem_buf(httpText,-1); | |
99 | - | |
100 | - BIO * b64 = BIO_new(BIO_f_base64()); | |
101 | - bio = BIO_push(b64, bio); | |
102 | - | |
103 | - BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); | |
104 | - | |
105 | - if(!d2i_X509_CRL_bio(bio, &x509_crl)) | |
106 | - { | |
107 | - static const LIB3270_POPUP popup = { | |
108 | - .type = LIB3270_NOTIFY_SECURE, | |
109 | - .summary = N_( "Can't decode certificate revocation list got from LDAP server" ) | |
110 | - }; | |
111 | - | |
112 | - message->code = hSession->ssl.error = ERR_get_error(); | |
113 | - message->popup = &popup; | |
114 | - | |
115 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, popup.summary); | |
116 | - errno = EINVAL; | |
117 | - return NULL; | |
118 | - } | |
119 | - | |
120 | - } | |
121 | - else | |
122 | - { | |
123 | - // CRL File, convert it | |
124 | - // Copy the pointer because d2i_X509_CRL changes the value!!! | |
125 | - const unsigned char *crl_data = (const unsigned char *) httpText; | |
126 | - | |
127 | - if(!d2i_X509_CRL(&x509_crl, &crl_data, szText)) | |
128 | - { | |
129 | - static const LIB3270_POPUP popup = { | |
130 | - .type = LIB3270_NOTIFY_SECURE, | |
131 | - .summary = N_( "Can't decode certificate revocation list" ) | |
132 | - }; | |
133 | - | |
134 | - message->code = hSession->ssl.error = ERR_get_error(); | |
135 | - message->popup = &popup; | |
136 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, popup.summary); | |
137 | - return NULL; | |
138 | - } | |
139 | - | |
140 | - } | |
141 | - | |
142 | - return x509_crl; | |
143 | - | |
144 | -} | |
145 | - | |
146 | -#endif // HAVE_LIBSSL && SSL_ENABLE_CRL_CHECK && HAVE_LIBCURL |
src/ssl/macos/getcrl.c
... | ... | @@ -1,131 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -#include "private.h" | |
37 | - | |
38 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) | |
39 | - | |
40 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
41 | - | |
42 | -static inline void lib3270_autoptr_cleanup_FILE(FILE **file) | |
43 | -{ | |
44 | - if(*file) | |
45 | - fclose(*file); | |
46 | -} | |
47 | - | |
48 | -X509_CRL * lib3270_download_crl(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
49 | -{ | |
50 | - X509_CRL * x509_crl = NULL; | |
51 | - | |
52 | - if(!(consturl && *consturl)) | |
53 | - { | |
54 | - message->error = hSession->ssl.error = 0; | |
55 | - message->title = _( "Security error" ); | |
56 | - message->text = _( "Can't open CRL File" ); | |
57 | - message->description = _("The URL for the CRL is undefined or empty"); | |
58 | - errno = ENOENT; | |
59 | - return NULL; | |
60 | - } | |
61 | - | |
62 | - if(strncasecmp(consturl,"file://",7) == 0) | |
63 | - { | |
64 | - lib3270_autoptr(FILE) hCRL = fopen(consturl+7,"r"); | |
65 | - | |
66 | - if(!hCRL) | |
67 | - { | |
68 | - // Can't open CRL File. | |
69 | - int err = errno; | |
70 | - | |
71 | - message->error = hSession->ssl.error = 0; | |
72 | - message->title = _( "Security error" ); | |
73 | - message->text = _( "Can't open CRL File" ); | |
74 | - message->description = strerror(err); | |
75 | - trace_ssl(hSession,"Can't open %s: %s\n",consturl,message->description); | |
76 | - return NULL; | |
77 | - | |
78 | - } | |
79 | - | |
80 | - trace_ssl(hSession,"Loading CRL from %s\n",consturl+7); | |
81 | - if(d2i_X509_CRL_fp(hCRL, &x509_crl)) | |
82 | - { | |
83 | - message->error = hSession->ssl.error = ERR_get_error(); | |
84 | - message->title = _( "Security error" ); | |
85 | - message->text = _( "Can't decode CRL" ); | |
86 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, message->text); | |
87 | - return NULL; | |
88 | - } | |
89 | - | |
90 | - | |
91 | - | |
92 | - } | |
93 | -#ifdef HAVE_LDAP | |
94 | - else if(strncasecmp(consturl,"ldap://",7) == 0 && strlen(consturl) > 8) | |
95 | - { | |
96 | - return get_crl_using_ldap(hSession, message, consturl); | |
97 | - | |
98 | - } | |
99 | -#endif // HAVE_LDAP | |
100 | - else | |
101 | - { | |
102 | -#ifdef HAVE_LIBCURL | |
103 | - | |
104 | - return get_crl_using_url(hSession, message, consturl); | |
105 | - | |
106 | -#else | |
107 | - // Can't get CRL. | |
108 | - | |
109 | - message->error = hSession->ssl.error = 0; | |
110 | - | |
111 | - if(!(message->text && message->description)) | |
112 | - message->title = _( "Security error" ); | |
113 | - | |
114 | - if(!message->text) | |
115 | - message->text = _( "Unexpected or invalid CRL URL" ); | |
116 | - | |
117 | - if(!message->description) | |
118 | - message->description = _("The URL scheme is unknown"); | |
119 | - | |
120 | - trace_ssl(hSession,"%s: The URL scheme is unknown",consturl); | |
121 | - | |
122 | - errno = EINVAL; | |
123 | - return NULL; | |
124 | -#endif // HAVE_LIBCURL | |
125 | - } | |
126 | - | |
127 | - return x509_crl; | |
128 | - | |
129 | -} | |
130 | - | |
131 | -#endif // HAVE_LIBSSL && SSL_ENABLE_CRL_CHECK |
src/ssl/macos/init.c
... | ... | @@ -1,118 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -/** | |
37 | - * @brief OpenSSL initialization for linux. | |
38 | - * | |
39 | - */ | |
40 | - | |
41 | -#include <config.h> | |
42 | - | |
43 | -#if defined(HAVE_LIBSSL) | |
44 | - | |
45 | -#include <openssl/ssl.h> | |
46 | -#include <openssl/err.h> | |
47 | -#include <openssl/x509_vfy.h> | |
48 | - | |
49 | -#ifndef SSL_ST_OK | |
50 | - #define SSL_ST_OK 3 | |
51 | -#endif // !SSL_ST_OK | |
52 | - | |
53 | -#include <internals.h> | |
54 | -#include <errno.h> | |
55 | -#include <lib3270.h> | |
56 | -#include <lib3270/internals.h> | |
57 | -#include <lib3270/trace.h> | |
58 | -#include <lib3270/log.h> | |
59 | -#include "trace_dsc.h" | |
60 | - | |
61 | -#ifdef SSL_ENABLE_CRL_CHECK | |
62 | - #include <openssl/x509.h> | |
63 | -#endif // SSL_ENABLE_CRL_CHECK | |
64 | - | |
65 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
66 | - | |
67 | -/** | |
68 | - * @brief Initialize openssl library. | |
69 | - * | |
70 | - * @return 0 if ok, non zero if fails. | |
71 | - * | |
72 | - */ | |
73 | -int ssl_ctx_init(H3270 *hSession, SSL_ERROR_MESSAGE * message) | |
74 | -{ | |
75 | - debug("%s ssl_ctx=%p",__FUNCTION__,ssl_ctx); | |
76 | - | |
77 | - if(ssl_ctx) | |
78 | - return 0; | |
79 | - | |
80 | - trace_ssl(hSession,"Initializing SSL context.\n"); | |
81 | - | |
82 | - SSL_load_error_strings(); | |
83 | - SSL_library_init(); | |
84 | - | |
85 | - ssl_ctx = SSL_CTX_new(SSLv23_method()); | |
86 | - if(ssl_ctx == NULL) | |
87 | - { | |
88 | - message->error = hSession->ssl.error = ERR_get_error(); | |
89 | - message->title = _( "Security error" ); | |
90 | - message->text = _( "Cant initialize the SSL context." ); | |
91 | - return -1; | |
92 | - } | |
93 | - | |
94 | - SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL); | |
95 | - SSL_CTX_set_info_callback(ssl_ctx, ssl_info_callback); | |
96 | - | |
97 | - SSL_CTX_set_default_verify_paths(ssl_ctx); | |
98 | - | |
99 | - ssl_3270_ex_index = SSL_get_ex_new_index(0,NULL,NULL,NULL,NULL); | |
100 | - | |
101 | -#ifdef SSL_ENABLE_CRL_CHECK | |
102 | - | |
103 | - // Enable CRL check | |
104 | - X509_STORE *store = SSL_CTX_get_cert_store(ssl_ctx); | |
105 | - X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new(); | |
106 | - X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK); | |
107 | - X509_STORE_set1_param(store, param); | |
108 | - X509_VERIFY_PARAM_free(param); | |
109 | - | |
110 | - trace_ssl(hSession,"CRL CHECK was enabled\n"); | |
111 | - | |
112 | -#endif // SSL_ENABLE_CRL_CHECK | |
113 | - | |
114 | - return 0; | |
115 | - | |
116 | -} | |
117 | - | |
118 | -#endif // HAVE_LIBSSL |
src/ssl/macos/ldap.c
... | ... | @@ -1,241 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -#include <config.h> | |
37 | -#include <internals.h> | |
38 | -#include <lib3270/log.h> | |
39 | -#include <lib3270/trace.h> | |
40 | -#include <lib3270/toggle.h> | |
41 | - | |
42 | -#include "utilc.h" | |
43 | - | |
44 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LDAP) | |
45 | - | |
46 | -#include <openssl/ssl.h> | |
47 | -#include <openssl/err.h> | |
48 | -#include <openssl/x509_vfy.h> | |
49 | -#include <openssl/x509.h> | |
50 | - | |
51 | -#define LDAP_DEPRECATED 1 | |
52 | -#include <ldap.h> | |
53 | - | |
54 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
55 | - | |
56 | -static inline void lib3270_autoptr_cleanup_LDAPMessage(LDAPMessage **message) | |
57 | -{ | |
58 | - debug("%s(%p)",__FUNCTION__,*message); | |
59 | - if(message) | |
60 | - ldap_msgfree(*message); | |
61 | - *message = NULL; | |
62 | -} | |
63 | - | |
64 | -static inline void lib3270_autoptr_cleanup_LDAP(LDAP **ld) | |
65 | -{ | |
66 | - debug("%s(%p)",__FUNCTION__,*ld); | |
67 | - if(*ld) | |
68 | - ldap_unbind_ext(*ld, NULL, NULL); | |
69 | - *ld = NULL; | |
70 | -} | |
71 | - | |
72 | -static inline void lib3270_autoptr_cleanup_BerElement(BerElement **ber) | |
73 | -{ | |
74 | - debug("%s(%p)",__FUNCTION__,*ber); | |
75 | - if(*ber) | |
76 | - ber_free(*ber, 0); | |
77 | - *ber = NULL; | |
78 | -} | |
79 | - | |
80 | -static inline void lib3270_autoptr_cleanup_LDAPPTR(char **ptr) | |
81 | -{ | |
82 | - debug("%s(%p)",__FUNCTION__,*ptr); | |
83 | - if(*ptr) | |
84 | - ldap_memfree(*ptr); | |
85 | - *ptr = NULL; | |
86 | -} | |
87 | - | |
88 | -LIB3270_INTERNAL X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
89 | -{ | |
90 | - X509_CRL * x509_crl = NULL; | |
91 | - | |
92 | - int rc; | |
93 | - lib3270_autoptr(char) url = lib3270_unescape(consturl); | |
94 | - char * base = strchr(url+7,'/'); | |
95 | - char * attrs[] = { NULL, NULL }; | |
96 | - | |
97 | - if(!base) | |
98 | - { | |
99 | - message->error = hSession->ssl.error = 0; | |
100 | - message->title = _( "Security error" ); | |
101 | - message->text = _( "No DN of the entry at which to start the search on the URL" ); | |
102 | - message->description = _( "The URL argument should be in the format ldap://[HOST]/[DN]?attribute" ); | |
103 | - errno = EINVAL; | |
104 | - return NULL; | |
105 | - } | |
106 | - | |
107 | - *(base++) = 0; | |
108 | - attrs[0] = strchr(base,'?'); | |
109 | - | |
110 | - if(!base) | |
111 | - { | |
112 | - message->error = hSession->ssl.error = 0; | |
113 | - message->title = _( "Security error" ); | |
114 | - message->text = _( "No LDAP attribute on the URL" ); | |
115 | - message->description = _( "The URL argument should be in the format ldap://[HOST]/[DN]?attribute" ); | |
116 | - errno = EINVAL; | |
117 | - return NULL; | |
118 | - } | |
119 | - | |
120 | - *(attrs[0]++) = 0; | |
121 | - | |
122 | - debug("host: \"%s\"",url); | |
123 | - debug("Base: \"%s\"",base); | |
124 | - debug("Attr: \"%s\"",attrs[0]); | |
125 | - | |
126 | - // Do LDAP Query | |
127 | - LDAP __attribute__ ((__cleanup__(lib3270_autoptr_cleanup_LDAP))) *ld = NULL; | |
128 | - BerElement __attribute__ ((__cleanup__(lib3270_autoptr_cleanup_BerElement))) * ber = NULL; | |
129 | - | |
130 | - rc = ldap_initialize(&ld, url); | |
131 | - if(rc != LDAP_SUCCESS) | |
132 | - { | |
133 | - message->error = hSession->ssl.error = 0; | |
134 | - message->title = _( "Security error" ); | |
135 | - message->text = _( "Can't initialize LDAP" ); | |
136 | - message->description = ldap_err2string(rc); | |
137 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
138 | - return NULL; | |
139 | - } | |
140 | - | |
141 | - unsigned long version = LDAP_VERSION3; | |
142 | - rc = ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION,(void *) &version); | |
143 | - if(rc != LDAP_SUCCESS) { | |
144 | - message->error = hSession->ssl.error = 0; | |
145 | - message->title = _( "Security error" ); | |
146 | - message->text = _( "Can't set LDAP protocol version" ); | |
147 | - message->description = ldap_err2string(rc); | |
148 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
149 | - return NULL; | |
150 | - } | |
151 | - | |
152 | - rc = ldap_simple_bind_s(ld, "", ""); | |
153 | - if(rc != LDAP_SUCCESS) | |
154 | - { | |
155 | - message->error = hSession->ssl.error = 0; | |
156 | - message->title = _( "Security error" ); | |
157 | - message->text = _( "Can't bind to LDAP server" ); | |
158 | - message->description = ldap_err2string(rc); | |
159 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
160 | - return NULL; | |
161 | - } | |
162 | - | |
163 | - lib3270_autoptr(LDAPMessage) results = NULL; | |
164 | - rc = ldap_search_ext_s( | |
165 | - ld, // Specifies the LDAP pointer returned by a previous call to ldap_init(), ldap_ssl_init(), or ldap_open(). | |
166 | - base, // Specifies the DN of the entry at which to start the search. | |
167 | - LDAP_SCOPE_BASE, // Specifies the scope of the search. | |
168 | - NULL, // Specifies a string representation of the filter to apply in the search. | |
169 | - (char **) &attrs, // Specifies a null-terminated array of character string attribute types to return from entries that match filter. | |
170 | - 0, // Should be set to 1 to request attribute types only. Set to 0 to request both attributes types and attribute values. | |
171 | - NULL, | |
172 | - NULL, | |
173 | - NULL, | |
174 | - 0, | |
175 | - &results | |
176 | - ); | |
177 | - | |
178 | - if(rc != LDAP_SUCCESS) | |
179 | - { | |
180 | - message->error = hSession->ssl.error = 0; | |
181 | - message->title = _( "Security error" ); | |
182 | - message->text = _( "Can't search LDAP server" ); | |
183 | - message->description = ldap_err2string(rc); | |
184 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
185 | - return NULL; | |
186 | - } | |
187 | - | |
188 | - char __attribute__ ((__cleanup__(lib3270_autoptr_cleanup_LDAPPTR))) *attr = ldap_first_attribute(ld, results, &ber); | |
189 | - if(!attr) | |
190 | - { | |
191 | - message->error = hSession->ssl.error = 0; | |
192 | - message->title = _( "Security error" ); | |
193 | - message->text = _( "Can't get LDAP attribute" ); | |
194 | - message->description = _("Search did not produce any attributes."); | |
195 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
196 | - errno = ENOENT; | |
197 | - return NULL; | |
198 | - } | |
199 | - | |
200 | - struct berval ** value = ldap_get_values_len(ld, results, attr); | |
201 | - if(!value) | |
202 | - { | |
203 | - message->error = hSession->ssl.error = 0; | |
204 | - message->title = _( "Security error" ); | |
205 | - message->text = _( "Can't get LDAP attribute" ); | |
206 | - message->description = _("Search did not produce any values."); | |
207 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->description); | |
208 | - errno = ENOENT; | |
209 | - return NULL; | |
210 | - } | |
211 | - | |
212 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
213 | - { | |
214 | - lib3270_trace_data( | |
215 | - hSession, | |
216 | - "CRL Data received from LDAP server", | |
217 | - (const unsigned char *) value[0]->bv_val, | |
218 | - value[0]->bv_len | |
219 | - ); | |
220 | - } | |
221 | - | |
222 | - // Precisa salvar uma cópia porque d2i_X509_CRL modifica o ponteiro. | |
223 | - const unsigned char *crl_data = (const unsigned char *) value[0]->bv_val; | |
224 | - | |
225 | - if(!d2i_X509_CRL(&x509_crl, &crl_data, value[0]->bv_len)) | |
226 | - { | |
227 | - message->error = hSession->ssl.error = ERR_get_error(); | |
228 | - message->title = _( "Security error" ); | |
229 | - message->text = _( "Can't decode certificate revocation list" ); | |
230 | - lib3270_write_log(hSession,"ssl","%s: %s",url, message->text); | |
231 | - ldap_value_free_len(value); | |
232 | - return NULL; | |
233 | - } | |
234 | - | |
235 | - ldap_value_free_len(value); | |
236 | - | |
237 | - return x509_crl; | |
238 | - | |
239 | -} | |
240 | - | |
241 | -#endif // HAVE_LIBSSL && SSL_ENABLE_CRL_CHECK && HAVE_LDAP |
src/ssl/macos/private.h
... | ... | @@ -1,63 +0,0 @@ |
1 | -/* | |
2 | - * "Software G3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral ', conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como private.h e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) | |
27 | - * | |
28 | - */ | |
29 | - | |
30 | -#ifndef LIB3270_LINUX_SSL_PRIVATE_H_INCLUDED | |
31 | - | |
32 | - #define LIB3270_LINUX_SSL_PRIVATE_H_INCLUDED | |
33 | - | |
34 | - #include <config.h> | |
35 | - | |
36 | - #include <openssl/ssl.h> | |
37 | - #include <openssl/err.h> | |
38 | - #include <openssl/x509_vfy.h> | |
39 | - #include <openssl/x509.h> | |
40 | - | |
41 | - #include <internals.h> | |
42 | - #include <trace_dsc.h> | |
43 | - #include <errno.h> | |
44 | - #include <lib3270.h> | |
45 | - #include <lib3270/trace.h> | |
46 | - #include <lib3270/log.h> | |
47 | - | |
48 | - #ifdef HAVE_LDAP | |
49 | - | |
50 | - /// @brief Use libldap to get CRL. | |
51 | - LIB3270_INTERNAL X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl); | |
52 | - | |
53 | - #endif // HAVE_LDAP | |
54 | - | |
55 | - #ifdef HAVE_LIBCURL | |
56 | - | |
57 | - /// @brief Use libcurl to get CRL. | |
58 | - LIB3270_INTERNAL X509_CRL * get_crl_using_url(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl); | |
59 | - | |
60 | - #endif // HAVE_LIBCURL | |
61 | - | |
62 | - | |
63 | -#endif // !LIB3270_LINUX_SSL_PRIVATE_H_INCLUDED |
src/ssl/macos/url.c
... | ... | @@ -1,127 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -#include <config.h> | |
37 | - | |
38 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LIBCURL) | |
39 | - | |
40 | -#include "private.h" | |
41 | -#include <curl/curl.h> | |
42 | -#include <lib3270/toggle.h> | |
43 | - | |
44 | -#define CRL_DATA_LENGTH 2048 | |
45 | - | |
46 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
47 | - | |
48 | -static inline void lib3270_autoptr_cleanup_BIO(BIO **ptr) | |
49 | -{ | |
50 | - debug("%s(%p)",__FUNCTION__,*ptr); | |
51 | - if(*ptr) | |
52 | - BIO_free_all(*ptr); | |
53 | - *ptr = NULL; | |
54 | -} | |
55 | - | |
56 | -LIB3270_INTERNAL X509_CRL * get_crl_using_url(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
57 | -{ | |
58 | - X509_CRL * x509_crl = NULL; | |
59 | - | |
60 | - size_t szText = 0; | |
61 | - lib3270_autoptr(char) httpText = lib3270_get_from_url(hSession, consturl, &szText, &message->description); | |
62 | - | |
63 | - if(!httpText) | |
64 | - { | |
65 | - message->title = _( "Security error" ); | |
66 | - message->text = _( "Error getting certificate revocation list" ); | |
67 | - return NULL; | |
68 | - } | |
69 | - | |
70 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
71 | - lib3270_trace_data(hSession,"CRL Data",(const unsigned char *) httpText, (unsigned int) szText); | |
72 | - | |
73 | - if(strncasecmp(consturl,"ldap://",7) == 0) | |
74 | - { | |
75 | - // It's an LDAP query, assumes a base64 data. | |
76 | - char * data = strstr((char *) httpText,":: "); | |
77 | - if(!data) | |
78 | - { | |
79 | - message->error = hSession->ssl.error = ERR_get_error(); | |
80 | - message->title = _( "Security error" ); | |
81 | - message->text = _( "Got a bad formatted certificate revocation list from LDAP server" ); | |
82 | - lib3270_write_log(hSession,"ssl","%s: invalid format:\n%s\n", consturl, httpText); | |
83 | - errno = EINVAL; | |
84 | - return NULL; | |
85 | - } | |
86 | - data += 3; | |
87 | - | |
88 | - lib3270_autoptr(BIO) bio = BIO_new_mem_buf(httpText,-1); | |
89 | - | |
90 | - BIO * b64 = BIO_new(BIO_f_base64()); | |
91 | - bio = BIO_push(b64, bio); | |
92 | - | |
93 | - BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); | |
94 | - | |
95 | - if(!d2i_X509_CRL_bio(bio, &x509_crl)) | |
96 | - { | |
97 | - message->error = hSession->ssl.error = ERR_get_error(); | |
98 | - message->title = _( "Security error" ); | |
99 | - message->text = _( "Can't decode certificate revocation list got from LDAP server" ); | |
100 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, message->text); | |
101 | - errno = EINVAL; | |
102 | - return NULL; | |
103 | - } | |
104 | - | |
105 | - } | |
106 | - else | |
107 | - { | |
108 | - // CRL File, convert it | |
109 | - // Copy the pointer because d2i_X509_CRL changes the value!!! | |
110 | - const unsigned char *crl_data = (const unsigned char *) httpText; | |
111 | - | |
112 | - if(!d2i_X509_CRL(&x509_crl, &crl_data, szText)) | |
113 | - { | |
114 | - message->error = hSession->ssl.error = ERR_get_error(); | |
115 | - message->title = _( "Security error" ); | |
116 | - message->text = _( "Can't decode certificate revocation list" ); | |
117 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, message->text); | |
118 | - return NULL; | |
119 | - } | |
120 | - | |
121 | - } | |
122 | - | |
123 | - return x509_crl; | |
124 | - | |
125 | -} | |
126 | - | |
127 | -#endif // HAVE_LIBSSL && SSL_ENABLE_CRL_CHECK && HAVE_LIBCURL |
src/ssl/negotiate.c
... | ... | @@ -1,556 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * | |
33 | - */ | |
34 | - | |
35 | - | |
36 | -#include <config.h> | |
37 | -#include <internals.h> | |
38 | - | |
39 | -#if defined(HAVE_LIBSSL) | |
40 | - | |
41 | - #include <openssl/ssl.h> | |
42 | - #include <openssl/err.h> | |
43 | - #include <openssl/x509_vfy.h> | |
44 | - #include <openssl/x509v3.h> | |
45 | - | |
46 | - #ifndef SSL_ST_OK | |
47 | - #define SSL_ST_OK 3 | |
48 | - #endif // !SSL_ST_OK | |
49 | - | |
50 | - #include "crl.h" | |
51 | - | |
52 | -#endif | |
53 | - | |
54 | -#include <errno.h> | |
55 | -#include <lib3270.h> | |
56 | -#include <lib3270/internals.h> | |
57 | -#include <lib3270/trace.h> | |
58 | -#include <lib3270/log.h> | |
59 | -#include <lib3270/toggle.h> | |
60 | -#include <lib3270/properties.h> | |
61 | -#include "hostc.h" // host_disconnect | |
62 | -#include "trace_dsc.h" | |
63 | - | |
64 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
65 | - | |
66 | -#if defined(HAVE_LIBSSLx) | |
67 | - | |
68 | - /** | |
69 | - * @brief Index of h3270 handle in SSL session. | |
70 | - * | |
71 | - */ | |
72 | - int ssl_3270_ex_index = -1; | |
73 | - | |
74 | -/** | |
75 | - * @brief Global SSL_CTX object as framework to establish TLS/SSL or DTLS enabled connections. | |
76 | - * | |
77 | - */ | |
78 | - SSL_CTX * ssl_ctx = NULL; | |
79 | - | |
80 | -/** | |
81 | - * @brief Initialize openssl session. | |
82 | - * | |
83 | - * @param hSession lib3270 session handle. | |
84 | - * | |
85 | - * @return 0 if ok, non zero if fails. | |
86 | - * | |
87 | - */ | |
88 | -static int background_ssl_init(H3270 *hSession, void *message) | |
89 | -{ | |
90 | - set_ssl_state(hSession,LIB3270_SSL_UNDEFINED); | |
91 | - hSession->ssl.error = 0; | |
92 | - hSession->ssl.host = False; | |
93 | - | |
94 | - if(ssl_ctx_init(hSession, (SSL_ERROR_MESSAGE *) message)) { | |
95 | - debug("%s has failed","ssl_ctx_init"); | |
96 | - set_ssl_state(hSession,LIB3270_SSL_UNDEFINED); | |
97 | - hSession->ssl.host = False; | |
98 | - return -1; | |
99 | - } | |
100 | - | |
101 | - if(hSession->ssl.con) | |
102 | - SSL_free(hSession->ssl.con); | |
103 | - | |
104 | - hSession->ssl.con = SSL_new(ssl_ctx); | |
105 | - if(hSession->ssl.con == NULL) | |
106 | - { | |
107 | - static const LIB3270_POPUP popup = { | |
108 | - .type = LIB3270_NOTIFY_SECURE, | |
109 | - .summary = N_( "Cant create a new SSL structure for current connection." ) | |
110 | - }; | |
111 | - | |
112 | - ((SSL_ERROR_MESSAGE *) message)->code = hSession->ssl.error = ERR_get_error(); | |
113 | - ((SSL_ERROR_MESSAGE *) message)->popup = &popup; | |
114 | - return -1; | |
115 | - } | |
116 | - | |
117 | - SSL_set_ex_data(hSession->ssl.con,ssl_3270_ex_index,(char *) hSession); | |
118 | -// SSL_set_verify(session->ssl_con, SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); | |
119 | - SSL_set_verify(hSession->ssl.con, 0, NULL); | |
120 | - | |
121 | - return 0; | |
122 | -} | |
123 | - | |
124 | -#if defined(SSL_ENABLE_CRL_CHECK) | |
125 | -int x509_store_ctx_error_callback(int ok, X509_STORE_CTX GNUC_UNUSED(*ctx)) | |
126 | -{ | |
127 | - debug("%s(%d)",__FUNCTION__,ok); | |
128 | - | |
129 | -/* | |
130 | - 55 { | |
131 | - 56 if (!ok) { | |
132 | - 57 Category::getInstance("OpenSSL").error( | |
133 | - 58 "path validation failure at depth(%d): %s", | |
134 | - 59 X509_STORE_CTX_get_error_depth(ctx), | |
135 | - 60 X509_verify_cert_error_string(X509_STORE_CTX_get_error(ctx)) | |
136 | - 61 ); | |
137 | - 62 } | |
138 | - 63 return ok; | |
139 | - 64 } | |
140 | -*/ | |
141 | - return ok; | |
142 | -} | |
143 | -#endif // SSL_ENABLE_CRL_CHECK | |
144 | - | |
145 | -static const struct ssl_protocol { | |
146 | - int id; | |
147 | - const char * description; | |
148 | -} ssl_protocols[] = { | |
149 | - | |
150 | - { | |
151 | - .id = SSL3_VERSION, | |
152 | - .description = SSL_TXT_SSLV3 | |
153 | - }, | |
154 | - { | |
155 | - .id = TLS1_VERSION, | |
156 | - .description = SSL_TXT_TLSV1 | |
157 | - }, | |
158 | - { | |
159 | - .id = TLS1_1_VERSION, | |
160 | - .description = SSL_TXT_TLSV1_1 | |
161 | - }, | |
162 | - { | |
163 | - .id = TLS1_2_VERSION, | |
164 | - .description = SSL_TXT_TLSV1_2 | |
165 | - }, | |
166 | -#ifdef DTLS1_VERSION | |
167 | - { | |
168 | - .id = DTLS1_VERSION, | |
169 | - .description = "DTLSv1" | |
170 | - }, | |
171 | -#endif // DTLS1_VERSION | |
172 | -#ifdef DTLS1_2_VERSION | |
173 | - { | |
174 | - .id = DTLS1_2_VERSION, | |
175 | - .description = "DTLSv2" | |
176 | - }, | |
177 | -#endif // DTLS1_2_VERSION | |
178 | - | |
179 | -}; | |
180 | - | |
181 | -static const struct ssl_protocol * get_protocol_from_id(int id) { | |
182 | - | |
183 | - if(id < 1) | |
184 | - return NULL; | |
185 | - | |
186 | - id--; | |
187 | - | |
188 | - if( ((size_t) id) > (sizeof(ssl_protocols)/sizeof(ssl_protocols[0]))) | |
189 | - return NULL; | |
190 | - | |
191 | - return ssl_protocols + id; | |
192 | - | |
193 | -} | |
194 | - | |
195 | -static int background_ssl_negotiation(H3270 *hSession, void *message) | |
196 | -{ | |
197 | - int rv; | |
198 | - | |
199 | - trace("%s",__FUNCTION__); | |
200 | - | |
201 | - /* Initialize the SSL library. */ | |
202 | - if(background_ssl_init(hSession,message)) | |
203 | - { | |
204 | - return -1; | |
205 | - } | |
206 | - | |
207 | - /* Set up the TLS/SSL connection. */ | |
208 | - const struct ssl_protocol * protocol; | |
209 | - | |
210 | - if( (protocol = get_protocol_from_id(hSession->ssl.protocol.min_version)) != NULL ) | |
211 | - { | |
212 | -#if (OPENSSL_VERSION_NUMBER >= 0x1010009fL) | |
213 | - if(SSL_set_min_proto_version(hSession->ssl.con,protocol->id) == 1) | |
214 | - { | |
215 | - trace_ssl(hSession,"Minimum protocol version set to %s\n",protocol->description); | |
216 | - } | |
217 | - else | |
218 | - { | |
219 | - lib3270_write_log(hSession,"ssl","Can't set minimum protocol version to %s",protocol->description); | |
220 | - } | |
221 | -#else | |
222 | - trace_ssl(hSession,"Can't set minimum protocol version to %s\n",protocol->description); | |
223 | -#endif // OPENSSL_VERSION_NUMBER | |
224 | - } | |
225 | - | |
226 | - if( (protocol = get_protocol_from_id(hSession->ssl.protocol.max_version)) != NULL ) | |
227 | - { | |
228 | -#if (OPENSSL_VERSION_NUMBER >= 0x1010009fL) | |
229 | - if(SSL_set_max_proto_version(hSession->ssl.con,protocol->id) == 1) | |
230 | - { | |
231 | - trace_ssl(hSession,"Maximum protocol version set to %s\n",protocol->description); | |
232 | - } | |
233 | - else | |
234 | - { | |
235 | - lib3270_write_log(hSession,"ssl","Can't set maximum protocol version to %s",protocol->description); | |
236 | - } | |
237 | -#else | |
238 | - trace_ssl(hSession,"Can't set maximum protocol version to %s\n",protocol->description); | |
239 | -#endif // OPENSSL_VERSION_NUMBER | |
240 | - } | |
241 | - | |
242 | - if(SSL_set_fd(hSession->ssl.con, hSession->connection.sock) != 1) | |
243 | - { | |
244 | - trace_ssl(hSession,"%s","SSL_set_fd failed!\n"); | |
245 | - | |
246 | - static const LIB3270_POPUP popup = { | |
247 | - .summary = N_( "SSL negotiation failed" ), | |
248 | - .body = N_( "Cant set the file descriptor for the input/output facility for the TLS/SSL (encrypted) side of ssl." ) | |
249 | - }; | |
250 | - | |
251 | - ((SSL_ERROR_MESSAGE *) message)->popup = &popup; | |
252 | - | |
253 | - return -1; | |
254 | - } | |
255 | - | |
256 | -#ifdef SSL_CRL_URL | |
257 | - | |
258 | - // Load CRL from pre-defined URL | |
259 | - if(!hSession->ssl.crl.cert) | |
260 | - { | |
261 | - if(lib3270_crl_new_from_url(hSession, message, SSL_CRL_URL)) | |
262 | - return EACCES; | |
263 | - } | |
264 | - | |
265 | -#endif // SSL_CRL_URL | |
266 | - | |
267 | - trace_ssl(hSession, "%s","Running SSL_connect\n"); | |
268 | - rv = SSL_connect(hSession->ssl.con); | |
269 | - trace_ssl(hSession, "SSL_connect exits with rc=%d\n",rv); | |
270 | - | |
271 | - if (rv != 1) | |
272 | - { | |
273 | - ((SSL_ERROR_MESSAGE *) message)->code = SSL_get_error(hSession->ssl.con,rv); | |
274 | - if(((SSL_ERROR_MESSAGE *) message)->code == SSL_ERROR_SYSCALL && hSession->ssl.error) | |
275 | - ((SSL_ERROR_MESSAGE *) message)->code = hSession->ssl.error; | |
276 | - | |
277 | - const char * msg = ERR_lib_error_string(((SSL_ERROR_MESSAGE *) message)->code); | |
278 | - | |
279 | - trace_ssl(hSession,"SSL_connect failed: %s %s\n",msg,ERR_reason_error_string(hSession->ssl.error)); | |
280 | - | |
281 | - static const LIB3270_POPUP popup = { | |
282 | - .type = LIB3270_NOTIFY_ERROR, | |
283 | - .summary = N_( "SSL Connect failed" ), | |
284 | - }; | |
285 | - | |
286 | - ((SSL_ERROR_MESSAGE *) message)->popup = &popup; | |
287 | - | |
288 | - return -1; | |
289 | - | |
290 | - } | |
291 | - | |
292 | - // | |
293 | - // Success. | |
294 | - // | |
295 | - | |
296 | - // Get peer certificate, notify application before validation. | |
297 | - lib3270_autoptr(X509) peer = SSL_get_peer_certificate(hSession->ssl.con); | |
298 | - | |
299 | - if(peer) | |
300 | - { | |
301 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
302 | - { | |
303 | - BIO * out = BIO_new(BIO_s_mem()); | |
304 | - unsigned char * data; | |
305 | - unsigned char * text; | |
306 | - int n; | |
307 | - | |
308 | - X509_print(out,peer); | |
309 | - | |
310 | - n = BIO_get_mem_data(out, &data); | |
311 | - text = (unsigned char *) malloc (n+1); | |
312 | - text[n] ='\0'; | |
313 | - memcpy(text,data,n); | |
314 | - | |
315 | - trace_ssl(hSession,"TLS/SSL peer certificate:\n%s\n",text); | |
316 | - | |
317 | - free(text); | |
318 | - BIO_free(out); | |
319 | - | |
320 | - } | |
321 | - | |
322 | - hSession->cbk.set_peer_certificate(peer); | |
323 | - | |
324 | -#ifdef SSL_ENABLE_CRL_CHECK | |
325 | - | |
326 | - if(!hSession->ssl.crl.cert) | |
327 | - { | |
328 | - if(lib3270_crl_new_from_x509(hSession, message, peer)) | |
329 | - return EACCES; | |
330 | - } | |
331 | - | |
332 | -#endif // SSL_ENABLE_CRL_CHECK | |
333 | - | |
334 | - } | |
335 | - | |
336 | -#ifdef SSL_ENABLE_CRL_CHECK | |
337 | - if(SSL_get_verify_result(hSession->ssl.con) == X509_V_ERR_UNABLE_TO_GET_CRL && hSession->ssl.crl.cert && peer) | |
338 | - { | |
339 | - // | |
340 | - // Verify CRL | |
341 | - // | |
342 | - // References: | |
343 | - // | |
344 | - // http://www.zedwood.com/article/cpp-check-crl-for-revocation | |
345 | - // | |
346 | - | |
347 | - trace_ssl(hSession,"Doing CRL check using %s\n",hSession->ssl.crl.url); | |
348 | - | |
349 | - // Got CRL, verify it! | |
350 | - // Reference: https://stackoverflow.com/questions/10510850/how-to-verify-the-certificate-for-the-ongoing-ssl-session | |
351 | - X509_STORE_CTX *csc = X509_STORE_CTX_new(); | |
352 | - X509_STORE_CTX_set_verify_cb(csc, x509_store_ctx_error_callback); | |
353 | - X509_STORE_CTX_init(csc, SSL_CTX_get_cert_store(ssl_ctx), peer, NULL); | |
354 | - | |
355 | - if(X509_verify_cert(csc) != 1) | |
356 | - rv = X509_STORE_CTX_get_error(csc); | |
357 | - else | |
358 | - rv = X509_V_OK; | |
359 | - | |
360 | - trace_ssl(hSession, "X509_verify_cert error code was %d", rv); | |
361 | - | |
362 | - SSL_set_verify_result(hSession->ssl.con, rv); | |
363 | - | |
364 | - X509_STORE_CTX_free(csc); | |
365 | - | |
366 | - } | |
367 | -#endif // SSL_ENABLE_CRL_CHECK | |
368 | - | |
369 | - // Check validation state. | |
370 | - rv = SSL_get_verify_result(hSession->ssl.con); | |
371 | - debug("SSL Verify result was %d", rv); | |
372 | - const struct ssl_status_msg * msg = ssl_get_status_from_error_code((long) rv); | |
373 | - | |
374 | - if(!msg) | |
375 | - { | |
376 | - trace_ssl(hSession,"Unexpected or invalid TLS/SSL verify result %d\n",rv); | |
377 | - set_ssl_state(hSession,LIB3270_SSL_UNSECURE); | |
378 | - | |
379 | - static LIB3270_POPUP popup = { | |
380 | - .summary = N_( "Can't verify." ), | |
381 | - .body = N_( "Unexpected or invalid TLS/SSL verify result" ) | |
382 | - }; | |
383 | - | |
384 | - ((SSL_ERROR_MESSAGE *) message)->popup = &popup; | |
385 | - return EACCES; | |
386 | - | |
387 | - } | |
388 | - else | |
389 | - { | |
390 | - switch(rv) | |
391 | - { | |
392 | - case X509_V_OK: | |
393 | - trace_ssl(hSession,"TLS/SSL negotiated connection complete. Peer certificate %s presented.\n", peer ? "was" : "was not"); | |
394 | - set_ssl_state(hSession,LIB3270_SSL_SECURE); | |
395 | - break; | |
396 | - | |
397 | - case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: | |
398 | - | |
399 | - trace_ssl(hSession,"TLS/SSL negotiated connection complete with self signed certificate in certificate chain (rc=%d)\n",rv); | |
400 | - | |
401 | - set_ssl_state(hSession,LIB3270_SSL_NEGOTIATED); | |
402 | - | |
403 | -#ifdef SSL_ENABLE_SELF_SIGNED_CERT_CHECK | |
404 | - static const LIB3270_POPUP popup = { | |
405 | - .type = LIB3270_NOTIFY_SECURE, | |
406 | - .summary = N_( "The SSL certificate for this host is not trusted." ), | |
407 | - .body = N_( "The security certificate presented by this host was not issued by a trusted certificate authority." ) | |
408 | - }; | |
409 | - | |
410 | - ((SSL_ERROR_MESSAGE *) message)->popup = &popup; | |
411 | - return EACCES; | |
412 | -#else | |
413 | - break; | |
414 | -#endif // SSL_ENABLE_SELF_SIGNED_CERT_CHECK | |
415 | - | |
416 | - case X509_V_ERR_UNABLE_TO_GET_CRL: | |
417 | - | |
418 | - trace_ssl(hSession,"TLS/SSL verify result was %d (%s)\n", rv, msg->body); | |
419 | - | |
420 | - ((SSL_ERROR_MESSAGE *) message)->popup = (LIB3270_POPUP *) msg; | |
421 | - | |
422 | - debug("message: %s",((SSL_ERROR_MESSAGE *) message)->popup->summary); | |
423 | - debug("description: %s",((SSL_ERROR_MESSAGE *) message)->popup->body); | |
424 | - | |
425 | - set_ssl_state(hSession,LIB3270_SSL_NEGOTIATED); | |
426 | - | |
427 | - if(msg->type == LIB3270_NOTIFY_ERROR && lib3270_ssl_get_crl_download(hSession)) | |
428 | - return EACCES; | |
429 | - | |
430 | - break; | |
431 | - | |
432 | - default: | |
433 | - trace_ssl(hSession,"TLS/SSL verify result was %d (%s)\n", rv, msg->body); | |
434 | - | |
435 | - ((SSL_ERROR_MESSAGE *) message)->popup = (LIB3270_POPUP *) msg; | |
436 | - | |
437 | - debug("message: %s",((SSL_ERROR_MESSAGE *) message)->popup->summary); | |
438 | - debug("description: %s",((SSL_ERROR_MESSAGE *) message)->popup->body); | |
439 | - | |
440 | - set_ssl_state(hSession,LIB3270_SSL_NEGOTIATED); | |
441 | - | |
442 | - if(msg->type == LIB3270_NOTIFY_ERROR) | |
443 | - return EACCES; | |
444 | - | |
445 | - } | |
446 | - | |
447 | - } | |
448 | - | |
449 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
450 | - { | |
451 | - char buffer[4096]; | |
452 | - int alg_bits = 0; | |
453 | - const SSL_CIPHER * cipher = SSL_get_current_cipher(hSession->ssl.con); | |
454 | - | |
455 | - trace_ssl(hSession,"TLS/SSL cipher description: %s",SSL_CIPHER_description((SSL_CIPHER *) cipher, buffer, 4095)); | |
456 | - SSL_CIPHER_get_bits(cipher, &alg_bits); | |
457 | - trace_ssl(hSession,"%s version %s with %d bits\n", | |
458 | - SSL_CIPHER_get_name(cipher), | |
459 | - SSL_CIPHER_get_version(cipher), | |
460 | - alg_bits); | |
461 | - } | |
462 | - | |
463 | - return 0; | |
464 | -} | |
465 | - | |
466 | -int ssl_negotiate(H3270 *hSession) | |
467 | -{ | |
468 | - int rc; | |
469 | - SSL_ERROR_MESSAGE msg; | |
470 | - | |
471 | - memset(&msg,0,sizeof(msg)); | |
472 | - | |
473 | - set_ssl_state(hSession,LIB3270_SSL_NEGOTIATING); | |
474 | - non_blocking(hSession,False); | |
475 | - | |
476 | - rc = lib3270_run_task(hSession, background_ssl_negotiation, &msg); | |
477 | - | |
478 | - debug("background_ssl_negotiation exits with rc=%d",rc); | |
479 | - if(rc && msg.popup) | |
480 | - { | |
481 | - // SSL Negotiation has failed. | |
482 | - if(popup_ssl_error(hSession,rc,&msg)) | |
483 | - { | |
484 | - host_disconnect(hSession,1); // Disconnect with "failed" status. | |
485 | - return rc; | |
486 | - } | |
487 | - | |
488 | - } else if(rc) { | |
489 | - | |
490 | - // SSL Negotiation has failed, no popup to present. | |
491 | - const LIB3270_POPUP popup = { | |
492 | - .summary = N_("SSL negotiation has failed") | |
493 | - }; | |
494 | - | |
495 | - msg.popup = &popup; | |
496 | - if(popup_ssl_error(hSession,rc,&msg)) | |
497 | - { | |
498 | - host_disconnect(hSession,1); // Disconnect with "failed" status. | |
499 | - return rc; | |
500 | - } | |
501 | - | |
502 | - } | |
503 | - | |
504 | - // Tell the world that we are (still) connected, now in secure mode. | |
505 | - lib3270_set_connected_initial(hSession); | |
506 | - non_blocking(hSession,True); | |
507 | - | |
508 | - return 0; | |
509 | -} | |
510 | - | |
511 | - | |
512 | -int ssl_init(H3270 *hSession) { | |
513 | - | |
514 | - int rc; | |
515 | - SSL_ERROR_MESSAGE msg; | |
516 | - | |
517 | - memset(&msg,0,sizeof(msg)); | |
518 | - | |
519 | - non_blocking(hSession,False); | |
520 | - | |
521 | - rc = lib3270_run_task(hSession, background_ssl_init, &msg); | |
522 | - if(rc) | |
523 | - { | |
524 | - // SSL init has failed. | |
525 | - host_disconnect(hSession,1); // Disconnect with "failed" status. | |
526 | - | |
527 | - if(msg.popup) | |
528 | - { | |
529 | - ssl_popup_message(hSession,&msg); | |
530 | - } | |
531 | - else | |
532 | - { | |
533 | - LIB3270_POPUP popup = { | |
534 | - .summary = N_("Unexpected error on SSL initialization") | |
535 | - }; | |
536 | - | |
537 | - lib3270_autoptr(char) body = lib3270_strdup_printf("%s (rc=%d)",strerror(rc),rc); | |
538 | - popup.body = body; | |
539 | - | |
540 | - msg.popup = &popup; | |
541 | - ssl_popup_message(hSession,&msg); | |
542 | - msg.popup = NULL; | |
543 | - | |
544 | - } | |
545 | - | |
546 | - | |
547 | - } | |
548 | - | |
549 | - non_blocking(hSession,True); | |
550 | - | |
551 | - return rc; | |
552 | - | |
553 | -} | |
554 | - | |
555 | -#endif /*]*/ | |
556 | - |
src/ssl/notify.c
... | ... | @@ -1,216 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * | |
33 | - */ | |
34 | - | |
35 | - | |
36 | -#include <config.h> | |
37 | -#include <internals.h> | |
38 | -#include <lib3270/log.h> | |
39 | -#include <lib3270/popup.h> | |
40 | -#include <lib3270/win32.h> | |
41 | - | |
42 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
43 | - | |
44 | -#if defined(HAVE_LIBSSLx) | |
45 | - | |
46 | -#include <openssl/err.h> | |
47 | - | |
48 | -/** | |
49 | - * @brief Translate strings from ssl error message. | |
50 | - * | |
51 | - * @param msg SSL error message descriptor. | |
52 | - * @param rc Value of errno. | |
53 | - * | |
54 | - * @return Dynamically allocated popup description. | |
55 | - * | |
56 | - */ | |
57 | -static LIB3270_POPUP * translate_ssl_error_message(const SSL_ERROR_MESSAGE *msg, int rc) | |
58 | -{ | |
59 | - LIB3270_POPUP * popup; | |
60 | - | |
61 | - printf("\n\nMSG-CODE=%d\n\n",msg->code); | |
62 | - | |
63 | - const char *body = (msg->body ? msg->body : msg->popup->body); | |
64 | - | |
65 | - if(msg->code) | |
66 | - { | |
67 | - if(body) | |
68 | - { | |
69 | - popup = lib3270_popup_clone_printf( | |
70 | - msg->popup, | |
71 | - _( "%s\nThe SSL error message was \"%s\"(%d)" ), | |
72 | - dgettext(GETTEXT_PACKAGE,body), | |
73 | - ERR_reason_error_string(msg->code), | |
74 | - msg->code | |
75 | - ); | |
76 | - } | |
77 | - else | |
78 | - { | |
79 | - popup = lib3270_popup_clone_printf( | |
80 | - msg->popup, | |
81 | - _( "The SSL error message was \"%s\" (%d)" ), | |
82 | - ERR_reason_error_string(msg->code), | |
83 | - msg->code | |
84 | - ); | |
85 | - } | |
86 | - | |
87 | - } | |
88 | -#ifdef _WIN32 | |
89 | - else if(msg->lasterror) | |
90 | - { | |
91 | - lib3270_autoptr(char) windows_error = lib3270_win32_translate_error_code(msg->lasterror); | |
92 | - | |
93 | - if(body) | |
94 | - { | |
95 | - popup = lib3270_popup_clone_printf( | |
96 | - msg->popup, | |
97 | - _( "%s\nThe windows error was \"%s\" (%u)" ), | |
98 | - dgettext(GETTEXT_PACKAGE,body), | |
99 | - windows_error, | |
100 | - (unsigned int) msg->lasterror | |
101 | - ); | |
102 | - } | |
103 | - else | |
104 | - { | |
105 | - popup = lib3270_popup_clone_printf( | |
106 | - msg->popup, | |
107 | - _( "Windows error was \"%s\" (%u)" ), | |
108 | - windows_error, | |
109 | - (unsigned int) msg->lasterror | |
110 | - ); | |
111 | - } | |
112 | - | |
113 | - } | |
114 | -#endif // _WIN32 | |
115 | - else if(rc) | |
116 | - { | |
117 | - if(body) | |
118 | - { | |
119 | - popup = lib3270_popup_clone_printf( | |
120 | - msg->popup, | |
121 | - _( "%s\nThe operating system error was \"%s\" (%u)" ), | |
122 | - dgettext(GETTEXT_PACKAGE,body), | |
123 | - strerror(rc), | |
124 | - rc | |
125 | - ); | |
126 | - } | |
127 | - else | |
128 | - { | |
129 | - popup = lib3270_popup_clone_printf( | |
130 | - msg->popup, | |
131 | - _( "The operating system error was \"%s\" (%u)" ), | |
132 | - strerror(rc), | |
133 | - rc | |
134 | - ); | |
135 | - } | |
136 | - | |
137 | - } | |
138 | - else | |
139 | - { | |
140 | - popup = lib3270_malloc(sizeof(LIB3270_POPUP)); | |
141 | - *popup = *msg->popup; | |
142 | - | |
143 | - if(body) | |
144 | - popup->body = dgettext(GETTEXT_PACKAGE,body); | |
145 | - | |
146 | - } | |
147 | - | |
148 | - popup->summary = dgettext(GETTEXT_PACKAGE,msg->popup->summary); | |
149 | - | |
150 | - debug("%s: names[\"%s\",\"%s\"]",__FUNCTION__,popup->name, msg->popup->name); | |
151 | - | |
152 | - if(popup->title) | |
153 | - popup->title = dgettext(GETTEXT_PACKAGE,popup->title); | |
154 | - else | |
155 | - popup->title = _("Your connection is not safe"); | |
156 | - | |
157 | - popup->label = _("Continue"); | |
158 | - return popup; | |
159 | -} | |
160 | - | |
161 | - | |
162 | -int popup_ssl_error(H3270 GNUC_UNUSED(*hSession), int rc, const SSL_ERROR_MESSAGE *msg) | |
163 | -{ | |
164 | - int response = 0; | |
165 | - | |
166 | - LIB3270_POPUP * popup = translate_ssl_error_message(msg,0); | |
167 | - | |
168 | -#ifdef _WIN32 | |
169 | - | |
170 | - lib3270_autoptr(char) rcMessage = lib3270_strdup_printf("The error code was %d",rc); | |
171 | - | |
172 | - const char *outMsg[] = { | |
173 | - popup->title, | |
174 | - popup->summary, | |
175 | - (popup->body ? popup->body : ""), | |
176 | - rcMessage | |
177 | - }; | |
178 | - | |
179 | - ReportEvent( | |
180 | - hEventLog, | |
181 | - EVENTLOG_ERROR_TYPE, | |
182 | - 1, | |
183 | - 0, | |
184 | - NULL, | |
185 | - (sizeof(outMsg)/sizeof(outMsg[0])), | |
186 | - 0, | |
187 | - outMsg, | |
188 | - NULL | |
189 | - ); | |
190 | - | |
191 | -#else | |
192 | - | |
193 | - lib3270_write_log(hSession, "SSL", "%s %s (rc=%d)", popup->summary, (popup->body ? popup->body : ""), rc); | |
194 | - | |
195 | -#endif // _WIN32 | |
196 | - | |
197 | -#ifdef SSL_ENABLE_NOTIFICATION_WHEN_FAILED | |
198 | - | |
199 | - response = hSession->cbk.popup(hSession,popup,1); | |
200 | - | |
201 | -#endif // SSL_ENABLE_NOTIFICATION_WHEN_FAILED | |
202 | - | |
203 | - lib3270_free(popup); | |
204 | - return response; | |
205 | - | |
206 | -} | |
207 | - | |
208 | -void ssl_popup_message(H3270 *hSession, const SSL_ERROR_MESSAGE *msg) { | |
209 | - | |
210 | - LIB3270_POPUP * popup = translate_ssl_error_message(msg,0); | |
211 | - hSession->cbk.popup(hSession,popup,0); | |
212 | - lib3270_free(popup); | |
213 | - | |
214 | -} | |
215 | - | |
216 | -#endif // defined(HAVE_LIBSSL) |
src/ssl/properties.c
... | ... | @@ -1,199 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - */ | |
29 | - | |
30 | -#include <internals.h> | |
31 | -#include <lib3270/properties.h> | |
32 | - | |
33 | -#if defined(HAVE_LIBSSL) | |
34 | - #include <openssl/ssl.h> | |
35 | -#endif | |
36 | - | |
37 | - | |
38 | -/** | |
39 | - * @brief Get SSL host option. | |
40 | - * | |
41 | - * @return Non zero if the host URL has SSL scheme. | |
42 | - * | |
43 | - */ | |
44 | -#ifdef HAVE_LIBSSLx | |
45 | -LIB3270_EXPORT int lib3270_get_secure_host(const H3270 *hSession) | |
46 | -{ | |
47 | - return hSession->ssl.enabled ? 1 : 0; | |
48 | -} | |
49 | -#else | |
50 | -LIB3270_EXPORT int lib3270_get_secure_host(const H3270 GNUC_UNUSED(*hSession)) | |
51 | -{ | |
52 | - errno = ENOTSUP; | |
53 | - return 0; | |
54 | -} | |
55 | -#endif // HAVE_LIBSSL | |
56 | - | |
57 | - | |
58 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) | |
59 | -LIB3270_EXPORT char * lib3270_get_ssl_crl_text(const H3270 *hSession) | |
60 | -{ | |
61 | - | |
62 | - if(hSession->ssl.crl.cert) | |
63 | - { | |
64 | - | |
65 | - BIO * out = BIO_new(BIO_s_mem()); | |
66 | - unsigned char * data; | |
67 | - unsigned char * text; | |
68 | - int n; | |
69 | - | |
70 | - X509_CRL_print(out,hSession->ssl.crl.cert); | |
71 | - | |
72 | - n = BIO_get_mem_data(out, &data); | |
73 | - text = (unsigned char *) lib3270_malloc(n+1); | |
74 | - text[n] ='\0'; | |
75 | - | |
76 | - memcpy(text,data,n); | |
77 | - BIO_free(out); | |
78 | - | |
79 | - return (char *) text; | |
80 | - | |
81 | - } | |
82 | - | |
83 | - return NULL; | |
84 | - | |
85 | -} | |
86 | -#else | |
87 | -LIB3270_EXPORT char * lib3270_get_ssl_crl_text(const H3270 GNUC_UNUSED(*hSession)) | |
88 | -{ | |
89 | - return NULL; | |
90 | -} | |
91 | -#endif // SSL_ENABLE_CRL_CHECK | |
92 | - | |
93 | - | |
94 | -LIB3270_EXPORT char * lib3270_get_ssl_peer_certificate_text(const H3270 *hSession) | |
95 | -{ | |
96 | -#ifdef HAVE_LIBSSLx | |
97 | - if(hSession->ssl.con) | |
98 | - { | |
99 | - X509 * peer = SSL_get_peer_certificate(hSession->ssl.con); | |
100 | - if(peer) | |
101 | - { | |
102 | - BIO * out = BIO_new(BIO_s_mem()); | |
103 | - unsigned char * data; | |
104 | - unsigned char * text; | |
105 | - int n; | |
106 | - | |
107 | - X509_print(out,peer); | |
108 | - | |
109 | - n = BIO_get_mem_data(out, &data); | |
110 | - text = (unsigned char *) lib3270_malloc(n+1); | |
111 | - text[n] ='\0'; | |
112 | - memcpy(text,data,n); | |
113 | - BIO_free(out); | |
114 | - | |
115 | - return (char *) text; | |
116 | - } | |
117 | - } | |
118 | -#endif // HAVE_LIBSSL | |
119 | - | |
120 | - return NULL; | |
121 | -} | |
122 | - | |
123 | - #pragma GCC diagnostic push | |
124 | - #pragma GCC diagnostic ignored "-Wunused-parameter" | |
125 | - const char * lib3270_crl_get_url(const H3270 *hSession) | |
126 | - { | |
127 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) | |
128 | - if(hSession->ssl.crl.url) | |
129 | - return hSession->ssl.crl.url; | |
130 | - | |
131 | -#ifdef SSL_CRL_URL | |
132 | - return SSL_CRL_URL; | |
133 | -#else | |
134 | - return getenv("LIB3270_DEFAULT_CRL"); | |
135 | -#endif // SSL_CRL_URL | |
136 | - | |
137 | -#else | |
138 | - errno = ENOTSUP; | |
139 | - return ""; | |
140 | -#endif | |
141 | - } | |
142 | - #pragma GCC diagnostic pop | |
143 | - | |
144 | - #pragma GCC diagnostic push | |
145 | - #pragma GCC diagnostic ignored "-Wunused-parameter" | |
146 | - int lib3270_crl_set_url(H3270 *hSession, const char *crl) | |
147 | - { | |
148 | - | |
149 | - FAIL_IF_ONLINE(hSession); | |
150 | - | |
151 | -#if defined(HAVE_LIBSSLx) && defined(SSL_ENABLE_CRL_CHECK) | |
152 | - | |
153 | - if(hSession->ssl.crl.url) | |
154 | - { | |
155 | - free(hSession->ssl.crl.url); | |
156 | - hSession->ssl.crl.url = NULL; | |
157 | - } | |
158 | - | |
159 | - if(hSession->ssl.crl.cert) | |
160 | - { | |
161 | - X509_CRL_free(hSession->ssl.crl.cert); | |
162 | - hSession->ssl.crl.cert = NULL; | |
163 | - } | |
164 | - | |
165 | - if(crl) | |
166 | - { | |
167 | - hSession->ssl.crl.url = strdup(crl); | |
168 | - } | |
169 | - | |
170 | - return 0; | |
171 | - | |
172 | -#else | |
173 | - | |
174 | - return errno = ENOTSUP; | |
175 | - | |
176 | -#endif // SSL_ENABLE_CRL_CHECK | |
177 | - | |
178 | - } | |
179 | - #pragma GCC diagnostic pop | |
180 | - | |
181 | - const char ** lib3270_crl_get_available_protocols(void) | |
182 | - { | |
183 | - static const char * protocols[] = | |
184 | - { | |
185 | -#ifdef HAVE_LDAP | |
186 | - "ldap", | |
187 | -#endif // HAVE_LDAP | |
188 | - | |
189 | -#if defined(_WIN32) || defined(HAVE_LIBCURL) | |
190 | - "http", | |
191 | -#endif // _WIN32 || LIBCURL | |
192 | - | |
193 | - NULL | |
194 | - }; | |
195 | - | |
196 | - return protocols; | |
197 | - } | |
198 | - | |
199 | - |
src/ssl/windows/curl.c
... | ... | @@ -1,382 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * References: | |
29 | - * | |
30 | - * http://www.openssl.org/docs/ssl/ | |
31 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
32 | - * | |
33 | - */ | |
34 | - | |
35 | -#include <config.h> | |
36 | - | |
37 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LIBCURL) | |
38 | - | |
39 | -#include "private.h" | |
40 | -#include <curl/curl.h> | |
41 | -#include <lib3270/toggle.h> | |
42 | - | |
43 | -#define CRL_DATA_LENGTH 2048 | |
44 | - | |
45 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
46 | - | |
47 | -static inline void lib3270_autoptr_cleanup_CURL(CURL **ptr) | |
48 | -{ | |
49 | - debug("%s(%p)",__FUNCTION__,*ptr); | |
50 | - if(*ptr) | |
51 | - curl_easy_cleanup(*ptr); | |
52 | - *ptr = NULL; | |
53 | -} | |
54 | - | |
55 | -typedef struct _curldata | |
56 | -{ | |
57 | - size_t length; | |
58 | - H3270 * hSession; | |
59 | - SSL_ERROR_MESSAGE * message; | |
60 | - char errbuf[CURL_ERROR_SIZE]; | |
61 | - struct { | |
62 | - size_t length; | |
63 | - unsigned char * contents; | |
64 | - } data; | |
65 | -} CURLDATA; | |
66 | - | |
67 | -static inline void lib3270_autoptr_cleanup_CURLDATA(CURLDATA **ptr) | |
68 | -{ | |
69 | - debug("%s(%p)",__FUNCTION__,*ptr); | |
70 | - if(*ptr) | |
71 | - { | |
72 | - CURLDATA *cdata = *ptr; | |
73 | - | |
74 | - if(cdata->data.contents) { | |
75 | - lib3270_free(cdata->data.contents); | |
76 | - cdata->data.contents = NULL; | |
77 | - } | |
78 | - lib3270_free(cdata); | |
79 | - } | |
80 | - *ptr = NULL; | |
81 | -} | |
82 | - | |
83 | -static inline void lib3270_autoptr_cleanup_BIO(BIO **ptr) | |
84 | -{ | |
85 | - debug("%s(%p)",__FUNCTION__,*ptr); | |
86 | - if(*ptr) | |
87 | - BIO_free_all(*ptr); | |
88 | - *ptr = NULL; | |
89 | -} | |
90 | - | |
91 | -static size_t internal_curl_write_callback(void *contents, size_t size, size_t nmemb, void *userp) | |
92 | -{ | |
93 | - CURLDATA * data = (CURLDATA *) userp; | |
94 | - | |
95 | - size_t realsize = size * nmemb; | |
96 | - size_t ix; | |
97 | - | |
98 | - debug("Received %u bytes (datablock is %p)", (unsigned int) realsize, data); | |
99 | - | |
100 | - unsigned char *ptr = (unsigned char *) contents; | |
101 | - | |
102 | - if(lib3270_get_toggle(data->hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
103 | - lib3270_trace_data(data->hSession,"curl_write:",(const char *) contents, realsize); | |
104 | - | |
105 | - if((realsize + data->length) > data->data.length) | |
106 | - { | |
107 | - data->data.length += (CRL_DATA_LENGTH + realsize); | |
108 | - data->data.contents = lib3270_realloc(data->data.contents,data->data.length); | |
109 | - | |
110 | - for(ix = data->length; ix < data->data.length; ix++) | |
111 | - { | |
112 | - data->data.contents[ix] = 0; | |
113 | - } | |
114 | - | |
115 | - } | |
116 | - | |
117 | - for(ix = 0; ix < realsize; ix++) | |
118 | - { | |
119 | - data->data.contents[data->length++] = *(ptr++); | |
120 | - } | |
121 | - | |
122 | - return realsize; | |
123 | -} | |
124 | - | |
125 | -static int internal_curl_trace_callback(CURL GNUC_UNUSED(*handle), curl_infotype type, char *data, size_t size, void *userp) | |
126 | -{ | |
127 | - const char * text = NULL; | |
128 | - | |
129 | - switch (type) { | |
130 | - case CURLINFO_TEXT: | |
131 | - lib3270_write_log(((CURLDATA *) userp)->hSession,"curl","%s",data); | |
132 | - return 0; | |
133 | - | |
134 | - case CURLINFO_HEADER_OUT: | |
135 | - text = "=> Send header"; | |
136 | - break; | |
137 | - | |
138 | - case CURLINFO_DATA_OUT: | |
139 | - text = "=> Send data"; | |
140 | - break; | |
141 | - | |
142 | - case CURLINFO_SSL_DATA_OUT: | |
143 | - text = "=> Send SSL data"; | |
144 | - break; | |
145 | - | |
146 | - case CURLINFO_HEADER_IN: | |
147 | - text = "<= Recv header"; | |
148 | - break; | |
149 | - | |
150 | - case CURLINFO_DATA_IN: | |
151 | - text = "<= Recv data"; | |
152 | - break; | |
153 | - | |
154 | - case CURLINFO_SSL_DATA_IN: | |
155 | - text = "<= Recv SSL data"; | |
156 | - break; | |
157 | - | |
158 | - default: | |
159 | - return 0; | |
160 | - | |
161 | - } | |
162 | - | |
163 | - lib3270_trace_data( | |
164 | - ((CURLDATA *) userp)->hSession, | |
165 | - text, | |
166 | - data, | |
167 | - size | |
168 | - ); | |
169 | - | |
170 | - return 0; | |
171 | -} | |
172 | - | |
173 | -X509_CRL * get_crl_using_curl(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
174 | -{ | |
175 | - X509_CRL * x509_crl = NULL; | |
176 | - | |
177 | - lib3270_autoptr(CURLDATA) crl_data = lib3270_malloc(sizeof(CURLDATA)); | |
178 | - lib3270_autoptr(CURL) hCurl = curl_easy_init(); | |
179 | - | |
180 | - memset(crl_data,0,sizeof(CURLDATA)); | |
181 | - crl_data->message = message; | |
182 | - crl_data->hSession = hSession; | |
183 | - crl_data->data.length = CRL_DATA_LENGTH; | |
184 | - crl_data->data.contents = lib3270_malloc(crl_data->data.length); | |
185 | - | |
186 | - if(!hCurl) | |
187 | - { | |
188 | - message->title = _( "Security error" ); | |
189 | - message->text = _( "Error loading certificate revocation list" ); | |
190 | - message->description = _( "Can't initialize curl operation" ); | |
191 | - return NULL; | |
192 | - } | |
193 | - | |
194 | - CURLcode res; | |
195 | - | |
196 | - curl_easy_setopt(hCurl, CURLOPT_URL, consturl); | |
197 | - curl_easy_setopt(hCurl, CURLOPT_FOLLOWLOCATION, 1L); | |
198 | - | |
199 | - curl_easy_setopt(hCurl, CURLOPT_ERRORBUFFER, crl_data->errbuf); | |
200 | - | |
201 | - curl_easy_setopt(hCurl, CURLOPT_WRITEFUNCTION, internal_curl_write_callback); | |
202 | - curl_easy_setopt(hCurl, CURLOPT_WRITEDATA, (void *) crl_data); | |
203 | - | |
204 | - curl_easy_setopt(hCurl, CURLOPT_USERNAME, ""); | |
205 | - | |
206 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
207 | - { | |
208 | - curl_easy_setopt(hCurl, CURLOPT_VERBOSE, 1L); | |
209 | - curl_easy_setopt(hCurl, CURLOPT_DEBUGFUNCTION, internal_curl_trace_callback); | |
210 | - curl_easy_setopt(hCurl, CURLOPT_DEBUGDATA, (void *) crl_data); | |
211 | - } | |
212 | - | |
213 | - res = curl_easy_perform(hCurl); | |
214 | - | |
215 | - if(res != CURLE_OK) | |
216 | - { | |
217 | - message->error = hSession->ssl.error = 0; | |
218 | - message->title = _( "Security error" ); | |
219 | - | |
220 | - if(crl_data->errbuf[0]) | |
221 | - { | |
222 | - message->text = curl_easy_strerror(res); | |
223 | - message->description = crl_data->errbuf; | |
224 | - } | |
225 | - else | |
226 | - { | |
227 | - message->text = _( "Error loading certificate revocation list" ); | |
228 | - message->description = curl_easy_strerror(res); | |
229 | - } | |
230 | - | |
231 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, message->description); | |
232 | - errno = EINVAL; | |
233 | - return NULL; | |
234 | - | |
235 | - } | |
236 | - | |
237 | - char *ct = NULL; | |
238 | - res = curl_easy_getinfo(hCurl, CURLINFO_CONTENT_TYPE, &ct); | |
239 | - if(res != CURLE_OK) | |
240 | - { | |
241 | - message->error = hSession->ssl.error = 0; | |
242 | - message->title = _( "Security error" ); | |
243 | - message->text = _( "Error loading certificate revocation list" ); | |
244 | - message->description = curl_easy_strerror(res); | |
245 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, message->description); | |
246 | - errno = EINVAL; | |
247 | - return NULL; | |
248 | - } | |
249 | - | |
250 | - if(lib3270_get_toggle(crl_data->hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
251 | - lib3270_trace_data(crl_data->hSession,"CRL Data",(const char *) crl_data->data.contents, (unsigned int) crl_data->length); | |
252 | - | |
253 | - if(ct) | |
254 | - { | |
255 | - const unsigned char * data = crl_data->data.contents; | |
256 | - | |
257 | - if(strcasecmp(ct,"application/pkix-crl") == 0) | |
258 | - { | |
259 | - // CRL File, convert it | |
260 | - if(!d2i_X509_CRL(&x509_crl, &data, crl_data->length)) | |
261 | - { | |
262 | - message->error = hSession->ssl.error = ERR_get_error(); | |
263 | - message->title = _( "Security error" ); | |
264 | - message->text = _( "Can't decode certificate revocation list" ); | |
265 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, message->text); | |
266 | - return NULL; | |
267 | - } | |
268 | - } | |
269 | - else | |
270 | - { | |
271 | - message->error = hSession->ssl.error = ERR_get_error(); | |
272 | - message->title = _( "Security error" ); | |
273 | - message->text = _( "Got an invalid certificate revocation list from server" ); | |
274 | - lib3270_write_log(hSession,"ssl","%s: content-type unexpected: \"%s\"",consturl, ct); | |
275 | - errno = EINVAL; | |
276 | - return NULL; | |
277 | - } | |
278 | - } | |
279 | - else if(strncasecmp(consturl,"ldap://",7) == 0) | |
280 | - { | |
281 | - // | |
282 | - // curl's LDAP query on windows returns diferently. Working with it. | |
283 | - // | |
284 | -#ifdef DEBUG | |
285 | - { | |
286 | - FILE *out = fopen("downloaded.crl","w"); | |
287 | - if(out) | |
288 | - { | |
289 | - fwrite(crl_data->data.contents,crl_data->length,1,out); | |
290 | - fclose(out); | |
291 | - } | |
292 | - | |
293 | - } | |
294 | -#endif | |
295 | - | |
296 | - char * attr = strchr(consturl,'?'); | |
297 | - if(!attr) | |
298 | - { | |
299 | - message->error = hSession->ssl.error = 0; | |
300 | - message->title = _( "Security error" ); | |
301 | - message->text = _( "No attribute in LDAP search URL" ); | |
302 | - errno = ENOENT; | |
303 | - return NULL; | |
304 | - } | |
305 | - | |
306 | - attr++; | |
307 | - | |
308 | - lib3270_autoptr(char) text = lib3270_strdup_printf("No mime-type, extracting \"%s\" directly from LDAP response\n",attr); | |
309 | - trace_ssl(crl_data->hSession, text); | |
310 | - | |
311 | - lib3270_autoptr(char) key = lib3270_strdup_printf("%s: ",attr); | |
312 | - | |
313 | - | |
314 | -// char *ptr = strcasestr((char *) crl_data->data.contents, key); | |
315 | - | |
316 | - size_t ix; | |
317 | - unsigned char *from = NULL; | |
318 | - size_t keylength = strlen(key); | |
319 | - for(ix = 0; ix < (crl_data->length - keylength); ix++) | |
320 | - { | |
321 | - if(!strncasecmp( (char *) (crl_data->data.contents+ix),key,keylength)) | |
322 | - { | |
323 | - from = crl_data->data.contents+ix; | |
324 | - break; | |
325 | - } | |
326 | - } | |
327 | - | |
328 | - debug("strstr(%s): %p", key, from); | |
329 | - | |
330 | - if(!from) | |
331 | - { | |
332 | - message->error = hSession->ssl.error = 0; | |
333 | - message->title = _( "Security error" ); | |
334 | - message->text = _( "Can't find certificate revocation list in LDAP response" ); | |
335 | - errno = ENOENT; | |
336 | - return NULL; | |
337 | - } | |
338 | - | |
339 | - from += strlen(key); | |
340 | - size_t length = crl_data->length - (from - crl_data->data.contents); | |
341 | - | |
342 | - static const char terminator[] = { 0x0a, 0x0a, 0x09 }; | |
343 | - unsigned char *to = from+length; | |
344 | - | |
345 | - for(ix = 0; ix < (length - sizeof(terminator)); ix++) | |
346 | - { | |
347 | - if(!memcmp(from+ix,terminator,sizeof(terminator))) | |
348 | - { | |
349 | - to = from+ix; | |
350 | - break; | |
351 | - } | |
352 | - } | |
353 | - | |
354 | - length = to - from; | |
355 | - | |
356 | - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE)) | |
357 | - { | |
358 | - lib3270_trace_data( | |
359 | - hSession, | |
360 | - "CRL Data received from LDAP server", | |
361 | - (const char *) from, | |
362 | - length | |
363 | - ); | |
364 | - } | |
365 | - | |
366 | - if(!d2i_X509_CRL(&x509_crl, (const unsigned char **) &from, length)) | |
367 | - { | |
368 | - message->error = hSession->ssl.error = ERR_get_error(); | |
369 | - message->title = _( "Security error" ); | |
370 | - message->text = _( "Can't decode certificate revocation list got from LDAP Search" ); | |
371 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, message->text); | |
372 | - errno = EINVAL; | |
373 | - return NULL; | |
374 | - } | |
375 | - | |
376 | - } | |
377 | - | |
378 | - return x509_crl; | |
379 | - | |
380 | -} | |
381 | - | |
382 | -#endif // defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) && defined(HAVE_LIBCURL) |
src/ssl/windows/getcrl.c
... | ... | @@ -1,145 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -#include <config.h> | |
37 | - | |
38 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) | |
39 | - | |
40 | -#include "private.h" | |
41 | - | |
42 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
43 | - | |
44 | -static inline void lib3270_autoptr_cleanup_FILE(FILE **file) | |
45 | -{ | |
46 | - if(*file) | |
47 | - fclose(*file); | |
48 | -} | |
49 | - | |
50 | -X509_CRL * lib3270_download_crl(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
51 | -{ | |
52 | - X509_CRL * x509_crl = NULL; | |
53 | - | |
54 | - if(!(consturl && *consturl)) | |
55 | - { | |
56 | - static const LIB3270_POPUP popup = { | |
57 | - .name = "CantOpenCRL", | |
58 | - .summary = N_("Can´t open CRL file"), | |
59 | - .body = N_("The URL for the CRL is undefined or empty") | |
60 | - }; | |
61 | - | |
62 | - message->code = hSession->ssl.error = 0; | |
63 | - message->popup = &popup; | |
64 | - errno = ENOENT; | |
65 | - return NULL; | |
66 | - } | |
67 | - | |
68 | - if(strncasecmp(consturl,"file://",7) == 0) | |
69 | - { | |
70 | - lib3270_autoptr(FILE) hCRL = fopen(consturl+7,"r"); | |
71 | - | |
72 | - if(!hCRL) | |
73 | - { | |
74 | - // Can't open CRL File. | |
75 | - static const LIB3270_POPUP popup = { | |
76 | - .summary = N_("Can´t open CRL file"), | |
77 | - .body = N_("Unable to open the defined CRL file") | |
78 | - }; | |
79 | - | |
80 | - message->code = errno; | |
81 | - message->popup = &popup; | |
82 | - hSession->ssl.error = 0; | |
83 | - trace_ssl(hSession,"Can't open %s: %s\n",consturl,strerror(errno)); | |
84 | - return NULL; | |
85 | - | |
86 | - } | |
87 | - | |
88 | - trace_ssl(hSession,"Loading CRL from %s\n",consturl+7); | |
89 | - if(d2i_X509_CRL_fp(hCRL, &x509_crl)) | |
90 | - { | |
91 | - static const LIB3270_POPUP popup = { | |
92 | - .summary = N_("Unable to decode CRL") | |
93 | - }; | |
94 | - | |
95 | - message->code = hSession->ssl.error = ERR_get_error(); | |
96 | - message->popup = &popup; | |
97 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, popup.summary); | |
98 | - return NULL; | |
99 | - } | |
100 | - | |
101 | - | |
102 | - | |
103 | - } | |
104 | -#ifdef HAVE_LDAP | |
105 | - else if(strncasecmp(consturl,"ldap://",7) == 0 && strlen(consturl) > 8) | |
106 | - { | |
107 | - return get_crl_using_ldap(hSession, message, consturl); | |
108 | - | |
109 | - } | |
110 | -#endif // HAVE_LDAP | |
111 | - else if(strncasecmp(consturl,"http://",7) == 0 && strlen(consturl) > 8) | |
112 | - { | |
113 | - return get_crl_using_http(hSession, message, consturl); | |
114 | - } | |
115 | - else | |
116 | - { | |
117 | -#ifdef HAVE_LIBCURL | |
118 | - | |
119 | - return get_crl_using_url(hSession, message, consturl); | |
120 | - | |
121 | -#else | |
122 | - // Can't get CRL. | |
123 | - | |
124 | - message->code = hSession->ssl.error = 0; | |
125 | - if(!message->popup) { | |
126 | - static const LIB3270_POPUP popup = { | |
127 | - .summary = N_( "Unexpected or invalid CRL URL" ), | |
128 | - .body = N_("The URL scheme is unknown") | |
129 | - }; | |
130 | - message->popup = &popup; | |
131 | - } | |
132 | - | |
133 | - trace_ssl(hSession,"%s: The URL scheme is unknown",consturl); | |
134 | - | |
135 | - errno = EINVAL; | |
136 | - return NULL; | |
137 | - | |
138 | -#endif // HAVE_LIBCURL | |
139 | - } | |
140 | - | |
141 | - return x509_crl; | |
142 | - | |
143 | -} | |
144 | - | |
145 | -#endif // HAVE_LIBSSL && SSL_ENABLE_CRL_CHECK |
src/ssl/windows/http.c
... | ... | @@ -1,101 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * References: | |
29 | - * | |
30 | - * https://docs.microsoft.com/en-us/windows/win32/winhttp/winhttp-autoproxy-api | |
31 | - * | |
32 | - */ | |
33 | - | |
34 | -/** | |
35 | - * @brief Implements CRL download using winhttp. | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | -#include <config.h> | |
40 | -#include "private.h" | |
41 | - | |
42 | -#if defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) | |
43 | - | |
44 | -#include <winhttp.h> | |
45 | -#include <utilc.h> | |
46 | - | |
47 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
48 | - | |
49 | -X509_CRL * get_crl_using_http(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | |
50 | -{ | |
51 | - size_t szResponse = 0; | |
52 | - const char * error_message = NULL; | |
53 | - lib3270_autoptr(char) httpText = lib3270_get_from_url(hSession, consturl, &szResponse, &error_message); | |
54 | - | |
55 | - if(!httpText) | |
56 | - { | |
57 | - static LIB3270_POPUP popup = { | |
58 | - .summary = N_("Can´t get CRL"), | |
59 | - }; | |
60 | - | |
61 | - popup.body = error_message; | |
62 | - message->popup = &popup; | |
63 | - message->code = hSession->ssl.error = 0; | |
64 | - trace_ssl( | |
65 | - hSession,"Can't get %s: %s\n", | |
66 | - consturl, | |
67 | - popup.body ? popup.body : "Undefined message" | |
68 | - ); | |
69 | - return NULL; | |
70 | - } | |
71 | - | |
72 | - // Copy the pointer because d2i_X509_CRL changes the value!!! | |
73 | - const unsigned char *crl_data = (const unsigned char *) httpText; | |
74 | - | |
75 | - X509_CRL * x509_crl = NULL; | |
76 | - | |
77 | - if(!d2i_X509_CRL(&x509_crl,&crl_data, (DWORD) szResponse)) | |
78 | - { | |
79 | - static const LIB3270_POPUP popup = { | |
80 | - .summary = N_( "Can't decode certificate revocation list" ) | |
81 | - }; | |
82 | - message->code = hSession->ssl.error = ERR_get_error(); | |
83 | - message->popup = &popup; | |
84 | - lib3270_write_log(hSession,"ssl","%s: %s",consturl, popup.summary); | |
85 | - | |
86 | - trace_ssl( | |
87 | - hSession,"%s: %s\n", | |
88 | - consturl, | |
89 | - popup.summary | |
90 | - ); | |
91 | - | |
92 | - return NULL; | |
93 | - } | |
94 | - | |
95 | - trace_ssl(hSession,"Got CRL from %s\n",consturl); | |
96 | - | |
97 | - return x509_crl; | |
98 | - | |
99 | -} | |
100 | - | |
101 | -#endif // defined(HAVE_LIBSSL) && defined(SSL_ENABLE_CRL_CHECK) |
src/ssl/windows/init.c
... | ... | @@ -1,195 +0,0 @@ |
1 | -/* | |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como - e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | - * | |
28 | - * | |
29 | - * References: | |
30 | - * | |
31 | - * http://www.openssl.org/docs/ssl/ | |
32 | - * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | |
33 | - * | |
34 | - */ | |
35 | - | |
36 | -/** | |
37 | - * @brief OpenSSL initialization for linux. | |
38 | - * | |
39 | - */ | |
40 | - | |
41 | -#include <winsock2.h> | |
42 | -#include <windows.h> | |
43 | -#include <config.h> | |
44 | - | |
45 | -#if defined(HAVE_LIBSSL) | |
46 | - | |
47 | -#include <openssl/ssl.h> | |
48 | -#include <openssl/err.h> | |
49 | -#include <openssl/x509_vfy.h> | |
50 | - | |
51 | -#ifndef SSL_ST_OK | |
52 | - #define SSL_ST_OK 3 | |
53 | -#endif // !SSL_ST_OK | |
54 | - | |
55 | -#include <internals.h> | |
56 | -#include <errno.h> | |
57 | -#include <lib3270.h> | |
58 | -#include <lib3270/internals.h> | |
59 | -#include <lib3270/trace.h> | |
60 | -#include <lib3270/log.h> | |
61 | -#include <dirent.h> | |
62 | - | |
63 | -#include "trace_dsc.h" | |
64 | - | |
65 | -#include <openssl/x509.h> | |
66 | - | |
67 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
68 | - | |
69 | -/** | |
70 | - * @brief Initialize openssl library. | |
71 | - * | |
72 | - * @return 0 if ok, non zero if fails. | |
73 | - * | |
74 | - */ | |
75 | -int ssl_ctx_init(H3270 *hSession, SSL_ERROR_MESSAGE * message) | |
76 | -{ | |
77 | - debug("%s ssl_ctx=%p",__FUNCTION__,ssl_ctx); | |
78 | - | |
79 | - if(ssl_ctx) | |
80 | - return 0; | |
81 | - | |
82 | - trace_ssl(hSession,"Initializing SSL context.\n"); | |
83 | - | |
84 | - SSL_load_error_strings(); | |
85 | - SSL_library_init(); | |
86 | - | |
87 | - ssl_ctx = SSL_CTX_new(SSLv23_method()); | |
88 | - if(ssl_ctx == NULL) | |
89 | - { | |
90 | - static const LIB3270_POPUP popup = { | |
91 | - .summary = N_( "Cant initialize the SSL context." ) | |
92 | - }; | |
93 | - | |
94 | - message->code = hSession->ssl.error = ERR_get_error(); | |
95 | - message->popup = &popup; | |
96 | - return -1; | |
97 | - } | |
98 | - | |
99 | - SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL); | |
100 | - SSL_CTX_set_info_callback(ssl_ctx, ssl_info_callback); | |
101 | - | |
102 | - // SSL_CTX_set_default_verify_paths(ssl_ctx); | |
103 | - | |
104 | - // Load certs | |
105 | - // https://stackoverflow.com/questions/9507184/can-openssl-on-windows-use-the-system-certificate-store | |
106 | - X509_STORE * store = SSL_CTX_get_cert_store(ssl_ctx); | |
107 | - | |
108 | - lib3270_autoptr(char) certpath = lib3270_build_data_filename("certs","*.der",NULL); | |
109 | - | |
110 | - WIN32_FIND_DATA ffd; | |
111 | - HANDLE hFind = FindFirstFile(certpath, &ffd); | |
112 | - | |
113 | - if(hFind == INVALID_HANDLE_VALUE) | |
114 | - { | |
115 | - static const LIB3270_POPUP popup = { | |
116 | - .summary = N_( "Cant open custom certificate directory." ) | |
117 | - }; | |
118 | - | |
119 | - message->popup = &popup; | |
120 | - | |
121 | - trace_ssl(hSession, _( "Can't open \"%s\" (The Windows error code was %ld)\n" ), certpath, (long) GetLastError()); | |
122 | - } | |
123 | - else | |
124 | - { | |
125 | - do | |
126 | - { | |
127 | - char * filename = lib3270_build_data_filename("certs", ffd.cFileName, NULL); | |
128 | - | |
129 | - debug("Loading \"%s\"",filename); | |
130 | - | |
131 | - FILE *fp = fopen(filename,"r"); | |
132 | - if(!fp) { | |
133 | - | |
134 | - trace_ssl(hSession, _( "Can't open \"%s\": %s" ), filename, strerror(errno)); | |
135 | - | |
136 | - } | |
137 | - else | |
138 | - { | |
139 | - X509 * cert = d2i_X509_fp(fp, NULL); | |
140 | - | |
141 | - if(!cert) | |
142 | - { | |
143 | - static const LIB3270_POPUP popup = { | |
144 | - .summary = N_( "Cant read custom certificate file." ) | |
145 | - }; | |
146 | - message->code = hSession->ssl.error = ERR_get_error(); | |
147 | - message->popup = &popup; | |
148 | - | |
149 | - trace_ssl(hSession, _( "Can't read \"%s\": %s" ), filename, ERR_lib_error_string(hSession->ssl.error)); | |
150 | - } | |
151 | - else | |
152 | - { | |
153 | - | |
154 | - if(X509_STORE_add_cert(store, cert) != 1) | |
155 | - { | |
156 | - static const LIB3270_POPUP popup = { | |
157 | - .summary = N_( "Cant load custom certificate file." ) | |
158 | - }; | |
159 | - message->code = hSession->ssl.error = ERR_get_error(); | |
160 | - message->popup = &popup; | |
161 | - | |
162 | - trace_ssl(hSession, _( "Can't load \"%s\": %s" ), filename, ERR_lib_error_string(hSession->ssl.error)); | |
163 | - } | |
164 | - | |
165 | - X509_free(cert); | |
166 | - } | |
167 | - | |
168 | - fclose(fp); | |
169 | - } | |
170 | - | |
171 | - lib3270_free(filename); | |
172 | - | |
173 | - } | |
174 | - while (FindNextFile(hFind, &ffd) != 0); | |
175 | - | |
176 | - } | |
177 | - | |
178 | - ssl_3270_ex_index = SSL_get_ex_new_index(0,NULL,NULL,NULL,NULL); | |
179 | - | |
180 | -#ifdef SSL_ENABLE_CRL_CHECK | |
181 | - | |
182 | - // Enable CRL check | |
183 | - X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new(); | |
184 | - X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK); | |
185 | - X509_STORE_set1_param(store, param); | |
186 | - X509_VERIFY_PARAM_free(param); | |
187 | - trace_ssl(hSession,"CRL CHECK was enabled\n"); | |
188 | - | |
189 | -#endif // SSL_ENABLE_CRL_CHECK | |
190 | - | |
191 | - return 0; | |
192 | - | |
193 | -} | |
194 | - | |
195 | -#endif // HAVE_LIBSSL |
src/ssl/windows/private.h
... | ... | @@ -1,71 +0,0 @@ |
1 | -/* | |
2 | - * "Software G3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | - * | |
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | - * | |
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | - * os termos da GPL v.2 - Licença Pública Geral ', conforme publicado pela | |
10 | - * Free Software Foundation. | |
11 | - * | |
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | - * obter mais detalhes. | |
16 | - * | |
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como private.h e possui - linhas de código. | |
22 | - * | |
23 | - * Contatos: | |
24 | - * | |
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) | |
27 | - * | |
28 | - */ | |
29 | - | |
30 | -#ifndef LIB3270_WIN32_SSL_PRIVATE_H_INCLUDED | |
31 | - | |
32 | - #define LIB3270_WIN32_SSL_PRIVATE_H_INCLUDED | |
33 | - | |
34 | - #include <config.h> | |
35 | - | |
36 | - #include <winsock2.h> | |
37 | - #include <windows.h> | |
38 | - | |
39 | - #include <openssl/ssl.h> | |
40 | - #include <openssl/err.h> | |
41 | - #include <openssl/x509_vfy.h> | |
42 | - #include <openssl/x509.h> | |
43 | - | |
44 | - #include <internals.h> | |
45 | - #include <trace_dsc.h> | |
46 | - #include <errno.h> | |
47 | - #include <lib3270.h> | |
48 | - #include <lib3270/trace.h> | |
49 | - #include <lib3270/log.h> | |
50 | - | |
51 | - #ifdef HAVE_LIBCURL | |
52 | - | |
53 | - #include <curl/curl.h> | |
54 | - | |
55 | - /// @brief Use libcurl to get CRL. | |
56 | - LIB3270_INTERNAL X509_CRL * get_crl_using_url(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl); | |
57 | - | |
58 | - #endif // HAVE_LIBCURL | |
59 | - | |
60 | - #ifdef HAVE_LDAP | |
61 | - | |
62 | - /// @brief Use winldap to get CRL. | |
63 | - LIB3270_INTERNAL X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl); | |
64 | - | |
65 | - #endif // HAVE_LDAP | |
66 | - | |
67 | - /// @brief Use winhttp to get CRL. | |
68 | - LIB3270_INTERNAL X509_CRL * get_crl_using_http(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl); | |
69 | - | |
70 | - | |
71 | -#endif // !LIB3270_WIN32_SSL_PRIVATE_H_INCLUDED |