Commit e5febe418be66e78e5145859f550ab4037852b76

Authored by Perry Werneck
1 parent 77471b00
Exists in master and in 2 other branches develop, macos

Adjustments on SSL error message.

src/network_modules/openssl/context.c
... ... @@ -67,6 +67,8 @@ static void info_callback(INFO_CONST SSL *s, int where, int ret)
67 67 H3270 *hSession = (H3270 *) SSL_get_ex_data(s,ssl_ex_index);
68 68 LIB3270_NET_CONTEXT * context = hSession->network.context;
69 69  
  70 + debug("************************ %s where=%d",__FUNCTION__,where);
  71 +
70 72 switch(where)
71 73 {
72 74 case SSL_CB_CONNECT_LOOP:
... ... @@ -125,12 +127,10 @@ static void info_callback(INFO_CONST SSL *s, int where, int ret)
125 127 trace_ssl(hSession,"SSL Current state is \"%s\"\n",context->state.message);
126 128 }
127 129  
128   -#ifdef DEBUG
129 130 if(where & SSL_CB_EXIT)
130 131 {
131   - trace("%s: SSL_CB_EXIT ret=%d\n",__FUNCTION__,ret);
  132 + trace_ssl(hSession,"SSL_CB_EXIT ret=%d\n",ret);
132 133 }
133   -#endif
134 134  
135 135 if(where & SSL_CB_ALERT)
136 136 {
... ...
src/network_modules/openssl/start.c
... ... @@ -221,19 +221,39 @@
221 221  
222 222 if (rv != 1)
223 223 {
  224 + LIB3270_SSL_MESSAGE message = {
  225 + .type = LIB3270_NOTIFY_ERROR,
  226 + .title = N_( "SSL Connect failed" ),
  227 + .summary = N_("The client was unable to negotiate a secure connection with the host"),
  228 + };
  229 +
224 230 int code = SSL_get_error(context->con,rv);
225 231  
226   - if(code == SSL_ERROR_SYSCALL && hSession->ssl.error)
227   - code = hSession->ssl.error;
228   - else
229   - hSession->ssl.error = code;
  232 + if(code == SSL_ERROR_SYSCALL) {
230 233  
231   - trace_ssl(hSession,"SSL_connect failed: %s\n",ERR_reason_error_string(code));
  234 + // Some I/O error occurred.
  235 + // The OpenSSL error queue may contain more information on the error.
  236 + // If the error queue is empty (i.e. ERR_get_error() returns 0), ret
  237 + // can be used to find out more about the error:
  238 + // If ret == 0, an EOF was observed that violates the protocol.
  239 + // If ret == -1, the underlying BIO reported an I/O error
  240 + // (for socket I/O on Unix systems, consult errno for details).
232 241  
233   - static const LIB3270_SSL_MESSAGE message = {
234   - .summary = N_( "SSL Connect failed" ),
235   - .body = N_("The client was unable to negotiate a secure connection with the host")
236   - };
  242 + if(rv == 0) {
  243 + message.body = N_("An EOF was observed that violates the protocol");
  244 + } else if(errno)
  245 + message.body = strerror(errno);
  246 + else
  247 + message.body = N_("Unexpected I/O error");
  248 +
  249 + } else {
  250 +
  251 + message.body = ERR_reason_error_string(code);
  252 +
  253 + }
  254 +
  255 + debug("SSL_connect failed: %s (rc=%d)\n",message.body ? message.body : message.summary, code);
  256 + trace_ssl(hSession,"SSL_connect failed: %s (rc=%d)\n",message.body ? message.body : message.summary, code);
237 257  
238 258 hSession->ssl.message = &message;
239 259 return -1;
... ...