Commit 68f79a5bbefdaaf2d1f62242a5325ced6dfc98bd
1 parent
0f98ce19
Exists in
master
and in
3 other branches
Fixing start tls messages.
Showing
8 changed files
with
79 additions
and
15 deletions
Show diff stats
src/core/connect.c
| ... | ... | @@ -149,8 +149,6 @@ |
| 149 | 149 | NULL |
| 150 | 150 | ); |
| 151 | 151 | |
| 152 | - non_blocking(hSession,True); | |
| 153 | - | |
| 154 | 152 | if(rc == ENOTSUP) { |
| 155 | 153 | |
| 156 | 154 | // No support for TLS/SSL in the active network module, the connection is insecure |
| ... | ... | @@ -198,13 +196,17 @@ |
| 198 | 196 | set_ssl_state(hSession,LIB3270_SSL_NEGOTIATED); |
| 199 | 197 | |
| 200 | 198 | // Ask user what I can do! |
| 199 | + debug("********************* [%s]",hSession->ssl.message->name); | |
| 200 | + debug("********************* [%s]",hSession->ssl.message->label); | |
| 201 | + | |
| 201 | 202 | if(lib3270_popup_translated(hSession,(const LIB3270_POPUP *) hSession->ssl.message,1) == ECANCELED) { |
| 202 | - lib3270_disconnect(hSession); | |
| 203 | 203 | return ECANCELED; |
| 204 | 204 | } |
| 205 | 205 | |
| 206 | 206 | } |
| 207 | 207 | |
| 208 | + non_blocking(hSession,True); | |
| 209 | + | |
| 208 | 210 | return 0; |
| 209 | 211 | } |
| 210 | 212 | ... | ... |
src/core/linux/connect.c
| ... | ... | @@ -147,13 +147,14 @@ |
| 147 | 147 | |
| 148 | 148 | if(hSession->network.module->getsockopt(hSession, SOL_SOCKET, SO_ERROR, (char *) &err, &len) < 0) |
| 149 | 149 | { |
| 150 | + int err = errno; | |
| 150 | 151 | lib3270_disconnect(hSession); |
| 151 | 152 | lib3270_popup_dialog( |
| 152 | 153 | hSession, |
| 153 | 154 | LIB3270_NOTIFY_ERROR, |
| 154 | 155 | _( "Network error" ), |
| 155 | 156 | _( "Unable to get connection state." ), |
| 156 | - _( "%s" ), strerror(errno) | |
| 157 | + _( "The system error was %s" ), strerror(err) | |
| 157 | 158 | ); |
| 158 | 159 | return; |
| 159 | 160 | } |
| ... | ... | @@ -180,12 +181,14 @@ |
| 180 | 181 | return; |
| 181 | 182 | } |
| 182 | 183 | |
| 184 | + if(lib3270_start_tls(hSession)) { | |
| 185 | + lib3270_disconnect(hSession); | |
| 186 | + return; | |
| 187 | + } | |
| 188 | + | |
| 183 | 189 | hSession->xio.except = hSession->network.module->add_poll(hSession,LIB3270_IO_FLAG_EXCEPTION,net_exception,0); |
| 184 | 190 | hSession->xio.read = hSession->network.module->add_poll(hSession,LIB3270_IO_FLAG_READ,net_input,0); |
| 185 | 191 | |
| 186 | - if(lib3270_start_tls(hSession)) | |
| 187 | - return; | |
| 188 | - | |
| 189 | 192 | lib3270_setup_session(hSession); |
| 190 | 193 | lib3270_set_connected_initial(hSession); |
| 191 | 194 | ... | ... |
src/core/properties/string.c
| ... | ... | @@ -164,7 +164,6 @@ |
| 164 | 164 | .set = NULL // Set value. |
| 165 | 165 | }, |
| 166 | 166 | |
| 167 | - /* | |
| 168 | 167 | { |
| 169 | 168 | .name = "sslmessage", // Property name. |
| 170 | 169 | .description = N_( "The security state" ), // Property description. |
| ... | ... | @@ -178,7 +177,6 @@ |
| 178 | 177 | .get = lib3270_get_ssl_state_description, // Get value. |
| 179 | 178 | .set = NULL // Set value. |
| 180 | 179 | }, |
| 181 | - */ | |
| 182 | 180 | |
| 183 | 181 | { |
| 184 | 182 | .name = "oversize", // Property name. | ... | ... |
src/core/telnet.c
| ... | ... | @@ -569,6 +569,8 @@ void net_input(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG GNUC_UNUSED |
| 569 | 569 | |
| 570 | 570 | nr = hSession->network.module->recv(hSession, buffer, BUFSZ); |
| 571 | 571 | |
| 572 | + debug("%s: recv=%d",__FUNCTION__,nr); | |
| 573 | + | |
| 572 | 574 | if (nr < 0) |
| 573 | 575 | { |
| 574 | 576 | if (nr == -EWOULDBLOCK) |
| ... | ... | @@ -578,6 +580,7 @@ void net_input(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG GNUC_UNUSED |
| 578 | 580 | |
| 579 | 581 | if(HALF_CONNECTED && nr == -EAGAIN) |
| 580 | 582 | { |
| 583 | + debug("%s: Received a -EAGAIN with half-connect",__FUNCTION__); | |
| 581 | 584 | connection_complete(hSession); |
| 582 | 585 | return; |
| 583 | 586 | } |
| ... | ... | @@ -598,6 +601,7 @@ void net_input(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG GNUC_UNUSED |
| 598 | 601 | // Process the data. |
| 599 | 602 | if (HALF_CONNECTED) |
| 600 | 603 | { |
| 604 | + debug("%s: Received a %d with half-connect",__FUNCTION__,nr); | |
| 601 | 605 | if (non_blocking(hSession,False) < 0) |
| 602 | 606 | { |
| 603 | 607 | host_disconnect(hSession,True); | ... | ... |
src/core/toggles/init.c
| ... | ... | @@ -79,15 +79,14 @@ static void toggle_nop(H3270 GNUC_UNUSED(*session), const struct lib3270_toggle |
| 79 | 79 | |
| 80 | 80 | static void toggle_keepalive(H3270 *hSession, const struct lib3270_toggle GNUC_UNUSED(*t), LIB3270_TOGGLE_TYPE GNUC_UNUSED(tt)) |
| 81 | 81 | { |
| 82 | - if(hSession->network.context) | |
| 82 | + if(hSession->network.module->is_connected(hSession)) | |
| 83 | 83 | { |
| 84 | - // Has network context, update keep-alive option | |
| 84 | + // Has network connection, update keep-alive option | |
| 85 | 85 | int optval = t->value ? 1 : 0; |
| 86 | 86 | |
| 87 | 87 | if(hSession->network.module->setsockopt(hSession, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval)) < 0) |
| 88 | 88 | { |
| 89 | - if(errno != ENOTCONN) | |
| 90 | - popup_a_sockerr(hSession, _( "Can't %s network keep-alive" ), optval ? _( "enable" ) : _( "disable" )); | |
| 89 | + popup_a_sockerr(hSession, _( "Can't %s network keep-alive" ), optval ? _( "enable" ) : _( "disable" )); | |
| 91 | 90 | } |
| 92 | 91 | else |
| 93 | 92 | { | ... | ... |
src/network_modules/openssl/main.c
| ... | ... | @@ -194,10 +194,12 @@ static int openssl_network_is_connected(const H3270 *hSession) { |
| 194 | 194 | } |
| 195 | 195 | |
| 196 | 196 | static int openssl_network_setsockopt(H3270 *hSession, int level, int optname, const void *optval, size_t optlen) { |
| 197 | + debug("%s(%d)",__FUNCTION__,hSession->network.context->sock); | |
| 197 | 198 | return setsockopt(hSession->network.context->sock, level, optname, optval, optlen); |
| 198 | 199 | } |
| 199 | 200 | |
| 200 | 201 | static int openssl_network_getsockopt(H3270 *hSession, int level, int optname, void *optval, socklen_t *optlen) { |
| 202 | + debug("%s(%d)",__FUNCTION__,hSession->network.context->sock); | |
| 201 | 203 | return getsockopt(hSession->network.context->sock, level, optname, optval, optlen); |
| 202 | 204 | } |
| 203 | 205 | ... | ... |
src/network_modules/openssl/messages.c
| ... | ... | @@ -66,10 +66,12 @@ const LIB3270_SSL_MESSAGE * lib3270_openssl_message_from_id(long id) { |
| 66 | 66 | { |
| 67 | 67 | .id = X509_V_ERR_UNABLE_TO_GET_CRL, |
| 68 | 68 | .message = { |
| 69 | + .name = "X509UnableToGetCRL", | |
| 69 | 70 | .type = LIB3270_NOTIFY_ERROR, |
| 70 | - .icon = "dialog-error", | |
| 71 | + .icon = "security-low", | |
| 71 | 72 | .summary = N_( "Unable to get certificate CRL." ), |
| 72 | - .body = N_( "The Certificate revocation list (CRL) of a certificate could not be found." ) | |
| 73 | + .body = N_( "The Certificate revocation list (CRL) of a certificate could not be found." ), | |
| 74 | + .label = N_( "Continue" ) | |
| 73 | 75 | } |
| 74 | 76 | }, |
| 75 | 77 | ... | ... |
src/network_modules/state.c
| ... | ... | @@ -75,3 +75,57 @@ void set_ssl_state(H3270 *hSession, LIB3270_SSL_STATE state) |
| 75 | 75 | |
| 76 | 76 | hSession->cbk.update_ssl(hSession,hSession->ssl.state); |
| 77 | 77 | } |
| 78 | + | |
| 79 | +LIB3270_EXPORT const char * lib3270_get_ssl_state_message(const H3270 *hSession) { | |
| 80 | + | |
| 81 | + if(hSession->ssl.message) { | |
| 82 | + | |
| 83 | + if(hSession->ssl.message->summary) | |
| 84 | + return dgettext(GETTEXT_PACKAGE,hSession->ssl.message->summary); | |
| 85 | + | |
| 86 | + return ""; | |
| 87 | + } | |
| 88 | + | |
| 89 | + return _( "The connection is insecure" ); | |
| 90 | + | |
| 91 | +} | |
| 92 | + | |
| 93 | +LIB3270_EXPORT const char * lib3270_get_ssl_state_icon_name(const H3270 *hSession) { | |
| 94 | + | |
| 95 | + if(hSession->ssl.message && hSession->ssl.message->icon) | |
| 96 | + return hSession->ssl.message->icon; | |
| 97 | + | |
| 98 | + return "dialog-error"; | |
| 99 | +} | |
| 100 | + | |
| 101 | +LIB3270_EXPORT const char * lib3270_get_ssl_state_description(const H3270 *hSession) { | |
| 102 | + | |
| 103 | + if(hSession->ssl.message) { | |
| 104 | + | |
| 105 | + if(hSession->ssl.message->body) | |
| 106 | + return dgettext(GETTEXT_PACKAGE,hSession->ssl.message->body); | |
| 107 | + | |
| 108 | + return ""; | |
| 109 | + } | |
| 110 | + | |
| 111 | + return ""; | |
| 112 | + | |
| 113 | +} | |
| 114 | + | |
| 115 | +LIB3270_EXPORT char * lib3270_get_ssl_crl_text(const H3270 *hSession) { | |
| 116 | + | |
| 117 | +#ifndef DEBUG | |
| 118 | + #error Implementar! | |
| 119 | +#endif // DEBUG | |
| 120 | + | |
| 121 | + return NULL; | |
| 122 | +} | |
| 123 | + | |
| 124 | +LIB3270_EXPORT char * lib3270_get_ssl_peer_certificate_text(const H3270 *hSession) { | |
| 125 | + | |
| 126 | +#ifndef DEBUG | |
| 127 | + #error Implementar! | |
| 128 | +#endif // DEBUG | |
| 129 | + | |
| 130 | + return NULL; | |
| 131 | +} | ... | ... |