Commit 80abb883be5972c15d1a417949ba46e27573ba11

Authored by perry.werneck@gmail.com
1 parent e3df55ed

Melhorando negociação SSL

Showing 1 changed file with 27 additions and 28 deletions   Show diff stats
src/lib3270/telnet.c
... ... @@ -239,15 +239,20 @@ static const char *trsp_flag[2] = { "POSITIVE-RESPONSE", "NEGATIVE-RESPONSE" };
239 239 #define XMIT_COLS hSession->maxCOLS
240 240  
241 241 #if defined(HAVE_LIBSSL) /*[*/
242   -// static Boolean need_tls_follows = False;
243   -static void ssl_init(H3270 *session);
244   -#if OPENSSL_VERSION_NUMBER >= 0x00907000L /*[*/
245   -#define INFO_CONST const
246   -#else /*][*/
247   -#define INFO_CONST
248   -#endif /*]*/
249   -static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret);
250   -static void continue_tls(H3270 *hSession, unsigned char *sbbuf, int len);
  242 +
  243 + static void ssl_init(H3270 *session);
  244 +
  245 + #if OPENSSL_VERSION_NUMBER >= 0x00907000L /*[*/
  246 + #define INFO_CONST const
  247 + #else /*][*/
  248 + #define INFO_CONST
  249 + #endif /*]*/
  250 +
  251 + static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret);
  252 + static void continue_tls(H3270 *hSession, unsigned char *sbbuf, int len);
  253 +
  254 + static int ssl_3270_ex_index = -1; /**< Index of h3270 handle in SSL session */
  255 +
251 256 #endif /*]*/
252 257  
253 258 #if defined(_WIN32) /*[*/
... ... @@ -3083,6 +3088,9 @@ static void ssl_init(H3270 *session)
3083 3088 SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL);
3084 3089 SSL_CTX_set_info_callback(ssl_ctx, ssl_info_callback);
3085 3090 SSL_CTX_set_default_verify_paths(ssl_ctx);
  3091 +
  3092 + ssl_3270_ex_index = SSL_get_ex_new_index(0,NULL,NULL,NULL,NULL);
  3093 +
3086 3094 }
3087 3095  
3088 3096 if(session->ssl_con)
... ... @@ -3096,32 +3104,23 @@ static void ssl_init(H3270 *session)
3096 3104 return;
3097 3105 }
3098 3106  
3099   - SSL_set_verify(session->ssl_con, 0/*xxx*/, NULL);
3100   -
3101   - /* XXX: May need to get key file and password. */
3102   - /*
3103   - if (appres.cert_file)
3104   - {
3105   - if (!(SSL_CTX_use_certificate_chain_file(ssl_ctx,
3106   - appres.cert_file))) {
3107   - unsigned long e;
3108   - char err_buf[120];
  3107 + SSL_set_ex_data(session->ssl_con,ssl_3270_ex_index,(char *) session);
3109 3108  
3110   - e = ERR_get_error();
3111   - (void) ERR_error_string(e, err_buf);
  3109 + SSL_set_verify(session->ssl_con, 0, NULL);
3112 3110  
3113   - popup_an_error(NULL,"SSL_CTX_use_certificate_chain_file("
3114   - "\"%s\") failed:\n%s",
3115   - appres.cert_file, err_buf);
3116   - }
3117   - }
3118   - */
3119 3111 }
3120 3112  
3121 3113 /* Callback for tracing protocol negotiation. */
3122 3114 static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3123 3115 {
3124   - H3270 *hSession = lib3270_get_default_session_handle(); // TODO: Find a better way!
  3116 +// H3270 *hSession = lib3270_get_default_session_handle(); // TODO: Find a better way!
  3117 + H3270 *hSession = (H3270 *) SSL_get_ex_data(s,ssl_3270_ex_index);
  3118 +
  3119 +#ifdef DEBUG
  3120 + trace("%s: hsession=%p, session=%p",__FUNCTION__,hSession,lib3270_get_default_session_handle());
  3121 + if(hSession != lib3270_get_default_session_handle())
  3122 + exit(-1);
  3123 +#endif // DEBUG
3125 3124  
3126 3125 switch(where)
3127 3126 {
... ...