Commit c81751fa776626ae0c13d991953dbc85a2f324f9
1 parent
a6f48ae7
Exists in
master
Incluindo teste de certificado na versão 4
Showing
7 changed files
with
50 additions
and
45 deletions
Show diff stats
bootstrap.sh
src/gtk2/gui.h
@@ -256,6 +256,7 @@ | @@ -256,6 +256,7 @@ | ||
256 | { | 256 | { |
257 | OIA_PIXMAP_LOCKED, // 0 = Locked | 257 | OIA_PIXMAP_LOCKED, // 0 = Locked |
258 | OIA_PIXMAP_UNLOCKED, // 1 = Unlocked | 258 | OIA_PIXMAP_UNLOCKED, // 1 = Unlocked |
259 | + OIA_PIXMAP_WARNING, // 2 = Warning | ||
259 | 260 | ||
260 | OIA_PIXMAP_COUNT | 261 | OIA_PIXMAP_COUNT |
261 | }; | 262 | }; |
src/gtk2/oia.c
@@ -100,7 +100,7 @@ | @@ -100,7 +100,7 @@ | ||
100 | /*---[ Statics ]------------------------------------------------------------------------------------------------*/ | 100 | /*---[ Statics ]------------------------------------------------------------------------------------------------*/ |
101 | 101 | ||
102 | #ifdef ENABLE_BM_PIXMAPS | 102 | #ifdef ENABLE_BM_PIXMAPS |
103 | - static GdkPixmap * pixmap_oia[OIA_PIXMAP_COUNT] = { NULL, NULL}; | 103 | + static GdkPixmap * pixmap_oia[OIA_PIXMAP_COUNT] = { NULL, NULL, NULL}; |
104 | #endif // ENABLE_BM_PIXMAPS | 104 | #endif // ENABLE_BM_PIXMAPS |
105 | 105 | ||
106 | #define OIAROW (view.top+4+(terminal_font_info.spacing*view.rows)) | 106 | #define OIAROW (view.top+4+(terminal_font_info.spacing*view.rows)) |
@@ -153,12 +153,6 @@ | @@ -153,12 +153,6 @@ | ||
153 | 153 | ||
154 | /*---[ Implement ]----------------------------------------------------------------------------------------------*/ | 154 | /*---[ Implement ]----------------------------------------------------------------------------------------------*/ |
155 | 155 | ||
156 | -/* | ||
157 | - static void dunno(cairo_t *cr, GdkGC *gc, GdkRectangle *r) | ||
158 | - { | ||
159 | - } | ||
160 | -*/ | ||
161 | - | ||
162 | void update_oia(void) | 156 | void update_oia(void) |
163 | { | 157 | { |
164 | if(valid_terminal_window()) | 158 | if(valid_terminal_window()) |
@@ -481,6 +475,7 @@ | @@ -481,6 +475,7 @@ | ||
481 | return ret; | 475 | return ret; |
482 | 476 | ||
483 | } | 477 | } |
478 | + | ||
484 | #endif // ENABLE_BM_PIXMAPS | 479 | #endif // ENABLE_BM_PIXMAPS |
485 | 480 | ||
486 | static void oia_draw_ssl_state(cairo_t *cr, GdkGC *gc, GdkRectangle *r) | 481 | static void oia_draw_ssl_state(cairo_t *cr, GdkGC *gc, GdkRectangle *r) |
@@ -534,6 +529,7 @@ | @@ -534,6 +529,7 @@ | ||
534 | 529 | ||
535 | #include "locked.bm" | 530 | #include "locked.bm" |
536 | #include "unlocked.bm" | 531 | #include "unlocked.bm" |
532 | + #include "warning.bm" | ||
537 | 533 | ||
538 | static const struct _imagedata | 534 | static const struct _imagedata |
539 | { | 535 | { |
@@ -544,10 +540,13 @@ | @@ -544,10 +540,13 @@ | ||
544 | { | 540 | { |
545 | { locked_bits, locked_width, locked_height }, | 541 | { locked_bits, locked_width, locked_height }, |
546 | { unlocked_bits, unlocked_width, unlocked_height }, | 542 | { unlocked_bits, unlocked_width, unlocked_height }, |
543 | + { warning_bits, warning_width, warning_height }, | ||
547 | 544 | ||
548 | }; | 545 | }; |
549 | 546 | ||
550 | int idx = query_secure_connection(hSession) ? OIA_PIXMAP_LOCKED : OIA_PIXMAP_UNLOCKED; | 547 | int idx = query_secure_connection(hSession) ? OIA_PIXMAP_LOCKED : OIA_PIXMAP_UNLOCKED; |
548 | + int color = TERMINAL_COLOR_OIA_SSL_STATE; | ||
549 | + | ||
551 | 550 | ||
552 | r->x = (r->width - (46*terminal_font_info.width))+1; | 551 | r->x = (r->width - (46*terminal_font_info.width))+1; |
553 | r->y++; | 552 | r->y++; |
@@ -556,8 +555,14 @@ | @@ -556,8 +555,14 @@ | ||
556 | 555 | ||
557 | oia_clear_icon(cr,r); | 556 | oia_clear_icon(cr,r); |
558 | 557 | ||
558 | + if(!query_ssl_cert_check_status(hSession)) | ||
559 | + { | ||
560 | + idx = OIA_PIXMAP_WARNING; | ||
561 | + color = TERMINAL_COLOR_OIA_STATUS_WARNING; | ||
562 | + } | ||
563 | + | ||
559 | if(!pixmap_oia[idx]) | 564 | if(!pixmap_oia[idx]) |
560 | - pixmap_oia[idx] = oia_create_scaled_pixmap(r,gc,imagedata[idx].data,imagedata[idx].width,imagedata[idx].height,TERMINAL_COLOR_OIA_SSL_STATE); | 565 | + pixmap_oia[idx] = oia_create_scaled_pixmap(r,gc,imagedata[idx].data,imagedata[idx].width,imagedata[idx].height,color); |
561 | 566 | ||
562 | gdk_cairo_set_source_pixmap(cr, pixmap_oia[idx], r->x, r->y); | 567 | gdk_cairo_set_source_pixmap(cr, pixmap_oia[idx], r->x, r->y); |
563 | gdk_cairo_rectangle(cr,r); | 568 | gdk_cairo_rectangle(cr,r); |
@@ -959,7 +964,7 @@ | @@ -959,7 +964,7 @@ | ||
959 | #ifdef ENABLE_BM_PIXMAPS | 964 | #ifdef ENABLE_BM_PIXMAPS |
960 | int f; | 965 | int f; |
961 | 966 | ||
962 | - for(f=0;f<OIA_PIXMAP_COUNT;f++) | 967 | + for(f=0;f<G_N_ELEMENTS(pixmap_oia);f++) |
963 | { | 968 | { |
964 | if(pixmap_oia[f]) | 969 | if(pixmap_oia[f]) |
965 | { | 970 | { |
@@ -0,0 +1,6 @@ | @@ -0,0 +1,6 @@ | ||
1 | +#define warning_width 16 | ||
2 | +#define warning_height 14 | ||
3 | +static unsigned char warning_bits[] = { | ||
4 | + 0xe0, 0x07, 0x10, 0x08, 0xc8, 0x13, 0x28, 0x14, 0x28, 0x14, 0x28, 0x14, | ||
5 | + 0xfc, 0x3f, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, | ||
6 | + 0x04, 0x20, 0xfc, 0x3f }; |
src/include/lib3270.h
@@ -431,6 +431,8 @@ | @@ -431,6 +431,8 @@ | ||
431 | */ | 431 | */ |
432 | LIB3270_EXPORT int lib3270_get_ssl_state(H3270 *h); | 432 | LIB3270_EXPORT int lib3270_get_ssl_state(H3270 *h); |
433 | 433 | ||
434 | + LIB3270_EXPORT int lib3270_get_ssl_cert_state(H3270 *h); | ||
435 | + | ||
434 | /** | 436 | /** |
435 | * Register application I/O Handlers. | 437 | * Register application I/O Handlers. |
436 | * | 438 | * |
src/include/lib3270/api.h
@@ -194,6 +194,7 @@ | @@ -194,6 +194,7 @@ | ||
194 | 194 | ||
195 | // Connection info | 195 | // Connection info |
196 | int secure_connection; | 196 | int secure_connection; |
197 | + int valid_certificate; | ||
197 | int sock; /**< Network socket */ | 198 | int sock; /**< Network socket */ |
198 | int net_sock; | 199 | int net_sock; |
199 | LIB3270_CSTATE cstate; /**< Connection state */ | 200 | LIB3270_CSTATE cstate; /**< Connection state */ |
@@ -565,6 +566,7 @@ | @@ -565,6 +566,7 @@ | ||
565 | LIB3270_EXPORT void screen_size(int *rows, int *cols); | 566 | LIB3270_EXPORT void screen_size(int *rows, int *cols); |
566 | 567 | ||
567 | #define query_secure_connection(h) lib3270_get_ssl_state(h) | 568 | #define query_secure_connection(h) lib3270_get_ssl_state(h) |
569 | + #define query_ssl_cert_check_status(h) lib3270_get_ssl_cert_state(h) | ||
568 | #define lib3270_paste_string(str) lib3270_set_string(NULL,str) | 570 | #define lib3270_paste_string(str) lib3270_set_string(NULL,str) |
569 | #define get_3270_terminal_size(h,r,c) lib3270_get_screen_size(h,r,c) | 571 | #define get_3270_terminal_size(h,r,c) lib3270_get_screen_size(h,r,c) |
570 | 572 |
src/lib/telnet.c
@@ -570,15 +570,6 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | @@ -570,15 +570,6 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | ||
570 | #endif /*]*/ | 570 | #endif /*]*/ |
571 | 571 | ||
572 | /* set the socket to be non-delaying */ | 572 | /* set the socket to be non-delaying */ |
573 | -/* | ||
574 | -#if defined(_WIN32) | ||
575 | - if (non_blocking(False) < 0) | ||
576 | -#else | ||
577 | - if (non_blocking(True) < 0) | ||
578 | -#endif | ||
579 | - close_fail; | ||
580 | -*/ | ||
581 | - | ||
582 | if (non_blocking(False) < 0) | 573 | if (non_blocking(False) < 0) |
583 | close_fail; | 574 | close_fail; |
584 | 575 | ||
@@ -608,31 +599,6 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | @@ -608,31 +599,6 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | ||
608 | net_connected(&h3270); | 599 | net_connected(&h3270); |
609 | } | 600 | } |
610 | 601 | ||
611 | -/* | ||
612 | - if (connect(h3270.sock, &haddr.sa, ha_len) == -1) { | ||
613 | - | ||
614 | - Trace("Connect failed: %s (rc=%d)",strerror(socket_errno()),socket_errno()); | ||
615 | - | ||
616 | - if (socket_errno() == SE_EWOULDBLOCK | ||
617 | -#if defined(SE_EINPROGRESS) | ||
618 | - || socket_errno() == SE_EINPROGRESS | ||
619 | -#endif | ||
620 | - ) { | ||
621 | - trace_dsn("Connection pending.\n"); | ||
622 | - *pending = True; | ||
623 | -#if !defined(_WIN32) | ||
624 | - output_id = AddOutput(h3270.sock, &h3270, output_possible); | ||
625 | -#endif | ||
626 | - } else { | ||
627 | - popup_a_sockerr( N_( "Can't connect to %s:%d" ),h3270.hostname, h3270.current_port); | ||
628 | - close_fail; | ||
629 | - } | ||
630 | - } else { | ||
631 | - if (non_blocking(False) < 0) | ||
632 | - close_fail; | ||
633 | - net_connected(&h3270); | ||
634 | - } | ||
635 | -*/ | ||
636 | 602 | ||
637 | /* set up temporary termtype */ | 603 | /* set up temporary termtype */ |
638 | if (appres.termname == CN && h3270.std_ds_host) { | 604 | if (appres.termname == CN && h3270.std_ds_host) { |
@@ -758,7 +724,18 @@ static void net_connected(H3270 *session) | @@ -758,7 +724,18 @@ static void net_connected(H3270 *session) | ||
758 | return; | 724 | return; |
759 | } | 725 | } |
760 | session->secure_connection = True; | 726 | session->secure_connection = True; |
761 | - trace_dsn("TLS/SSL tunneled connection complete. Connection is now secure.\n"); | 727 | + |
728 | + if(SSL_get_verify_result(ssl_con)) | ||
729 | + { | ||
730 | + trace_dsn("TLS/SSL tunneled connection complete. X509 certificate verification failed.\n"); | ||
731 | + session->valid_certificate = False; | ||
732 | + } | ||
733 | + else | ||
734 | + { | ||
735 | + trace_dsn("TLS/SSL tunneled connection complete. Connection is now secure.\n"); | ||
736 | + session->valid_certificate = True; | ||
737 | + | ||
738 | + } | ||
762 | 739 | ||
763 | /* Tell everyone else again. */ | 740 | /* Tell everyone else again. */ |
764 | host_connected(session); | 741 | host_connected(session); |
@@ -863,6 +840,7 @@ net_disconnect(void) | @@ -863,6 +840,7 @@ net_disconnect(void) | ||
863 | ssl_con = NULL; | 840 | ssl_con = NULL; |
864 | } | 841 | } |
865 | h3270.secure_connection = False; | 842 | h3270.secure_connection = False; |
843 | + h3270.valid_certificate = False; | ||
866 | #endif /*]*/ | 844 | #endif /*]*/ |
867 | if (CONNECTED) | 845 | if (CONNECTED) |
868 | (void) shutdown(h3270.sock, 2); | 846 | (void) shutdown(h3270.sock, 2); |
@@ -3406,6 +3384,17 @@ LIB3270_EXPORT int lib3270_get_ssl_state(H3270 *h) | @@ -3406,6 +3384,17 @@ LIB3270_EXPORT int lib3270_get_ssl_state(H3270 *h) | ||
3406 | #endif | 3384 | #endif |
3407 | } | 3385 | } |
3408 | 3386 | ||
3387 | +LIB3270_EXPORT int lib3270_get_ssl_cert_state(H3270 *h) | ||
3388 | +{ | ||
3389 | + CHECK_SESSION_HANDLE(h); | ||
3390 | + | ||
3391 | +#if defined(HAVE_LIBSSL) | ||
3392 | + return (h->valid_certificate != 0); | ||
3393 | +#else | ||
3394 | + return 0; | ||
3395 | +#endif | ||
3396 | +} | ||
3397 | + | ||
3409 | int Get3270Socket(void) | 3398 | int Get3270Socket(void) |
3410 | { | 3399 | { |
3411 | return h3270.sock; | 3400 | return h3270.sock; |