diff --git a/bootstrap.sh b/bootstrap.sh index 070a6f7..09090c7 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,7 +1,7 @@ #!/bin/bash PACKAGE_VERSION=4.2 -PACKAGE_RELEASE=6 +PACKAGE_RELEASE=7 REV_FILE=./revision.m4 REV=`date +%y%m%d%H%M` diff --git a/src/gtk2/gui.h b/src/gtk2/gui.h index 43754f9..ceb1f6b 100644 --- a/src/gtk2/gui.h +++ b/src/gtk2/gui.h @@ -256,6 +256,7 @@ { OIA_PIXMAP_LOCKED, // 0 = Locked OIA_PIXMAP_UNLOCKED, // 1 = Unlocked + OIA_PIXMAP_WARNING, // 2 = Warning OIA_PIXMAP_COUNT }; diff --git a/src/gtk2/oia.c b/src/gtk2/oia.c index fdc604d..8ef6fe8 100755 --- a/src/gtk2/oia.c +++ b/src/gtk2/oia.c @@ -100,7 +100,7 @@ /*---[ Statics ]------------------------------------------------------------------------------------------------*/ #ifdef ENABLE_BM_PIXMAPS - static GdkPixmap * pixmap_oia[OIA_PIXMAP_COUNT] = { NULL, NULL}; + static GdkPixmap * pixmap_oia[OIA_PIXMAP_COUNT] = { NULL, NULL, NULL}; #endif // ENABLE_BM_PIXMAPS #define OIAROW (view.top+4+(terminal_font_info.spacing*view.rows)) @@ -153,12 +153,6 @@ /*---[ Implement ]----------------------------------------------------------------------------------------------*/ -/* - static void dunno(cairo_t *cr, GdkGC *gc, GdkRectangle *r) - { - } -*/ - void update_oia(void) { if(valid_terminal_window()) @@ -481,6 +475,7 @@ return ret; } + #endif // ENABLE_BM_PIXMAPS static void oia_draw_ssl_state(cairo_t *cr, GdkGC *gc, GdkRectangle *r) @@ -534,6 +529,7 @@ #include "locked.bm" #include "unlocked.bm" + #include "warning.bm" static const struct _imagedata { @@ -544,10 +540,13 @@ { { locked_bits, locked_width, locked_height }, { unlocked_bits, unlocked_width, unlocked_height }, + { warning_bits, warning_width, warning_height }, }; int idx = query_secure_connection(hSession) ? OIA_PIXMAP_LOCKED : OIA_PIXMAP_UNLOCKED; + int color = TERMINAL_COLOR_OIA_SSL_STATE; + r->x = (r->width - (46*terminal_font_info.width))+1; r->y++; @@ -556,8 +555,14 @@ oia_clear_icon(cr,r); + if(!query_ssl_cert_check_status(hSession)) + { + idx = OIA_PIXMAP_WARNING; + color = TERMINAL_COLOR_OIA_STATUS_WARNING; + } + if(!pixmap_oia[idx]) - pixmap_oia[idx] = oia_create_scaled_pixmap(r,gc,imagedata[idx].data,imagedata[idx].width,imagedata[idx].height,TERMINAL_COLOR_OIA_SSL_STATE); + pixmap_oia[idx] = oia_create_scaled_pixmap(r,gc,imagedata[idx].data,imagedata[idx].width,imagedata[idx].height,color); gdk_cairo_set_source_pixmap(cr, pixmap_oia[idx], r->x, r->y); gdk_cairo_rectangle(cr,r); @@ -959,7 +964,7 @@ #ifdef ENABLE_BM_PIXMAPS int f; - for(f=0;fsecure_connection = True; - trace_dsn("TLS/SSL tunneled connection complete. Connection is now secure.\n"); + + if(SSL_get_verify_result(ssl_con)) + { + trace_dsn("TLS/SSL tunneled connection complete. X509 certificate verification failed.\n"); + session->valid_certificate = False; + } + else + { + trace_dsn("TLS/SSL tunneled connection complete. Connection is now secure.\n"); + session->valid_certificate = True; + + } /* Tell everyone else again. */ host_connected(session); @@ -863,6 +840,7 @@ net_disconnect(void) ssl_con = NULL; } h3270.secure_connection = False; + h3270.valid_certificate = False; #endif /*]*/ if (CONNECTED) (void) shutdown(h3270.sock, 2); @@ -3406,6 +3384,17 @@ LIB3270_EXPORT int lib3270_get_ssl_state(H3270 *h) #endif } +LIB3270_EXPORT int lib3270_get_ssl_cert_state(H3270 *h) +{ + CHECK_SESSION_HANDLE(h); + +#if defined(HAVE_LIBSSL) + return (h->valid_certificate != 0); +#else + return 0; +#endif +} + int Get3270Socket(void) { return h3270.sock; -- libgit2 0.21.2