Commit 68f79a5bbefdaaf2d1f62242a5325ced6dfc98bd

Authored by Perry Werneck
1 parent 0f98ce19

Fixing start tls messages.

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