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 | +} | ... | ... |