This doesn't look like it addresses Alan's last comment about "unifying the SSL 
error reporting logic"

> On Jan 12, 2016, at 7:48 AM, shinr...@apache.org wrote:
> 
> Repository: trafficserver
> Updated Branches:
>  refs/heads/master 9399a7641 -> bb40d788b
> 
> 
> [TS-4024] wire tracing enhancements.  This closes #337.
> 
> 
> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/bb40d788
> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/bb40d788
> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/bb40d788
> 
> Branch: refs/heads/master
> Commit: bb40d788bb092670b05e3d084bc14e330e3afa96
> Parents: 9399a76
> Author: ericcarlschwartz <eschwartz1...@gmail.com>
> Authored: Sat Nov 14 13:26:58 2015 -0800
> Committer: shinrich <shinr...@yahoo-inc.com>
> Committed: Tue Jan 12 09:44:00 2016 -0600
> 
> ----------------------------------------------------------------------
> iocore/net/SSLConfig.cc         |  8 ++++----
> iocore/net/SSLNetVConnection.cc | 39 ++++++++++++++++++++++++++----------
> mgmt/RecordsConfig.cc           |  8 ++++----
> proxy/http/HttpSM.cc            | 31 ++++++++++++++--------------
> 4 files changed, 52 insertions(+), 34 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/bb40d788/iocore/net/SSLConfig.cc
> ----------------------------------------------------------------------
> diff --git a/iocore/net/SSLConfig.cc b/iocore/net/SSLConfig.cc
> index 7bb60fe..63540ce 100644
> --- a/iocore/net/SSLConfig.cc
> +++ b/iocore/net/SSLConfig.cc
> @@ -307,10 +307,10 @@ SSLConfigParams::initialize()
>   REC_ReadConfigInt32(ssl_allow_client_renegotiation, 
> "proxy.config.ssl.allow_client_renegotiation");
> 
>   // SSL Wire Trace configurations
> -  REC_ReadConfigInteger(ssl_wire_trace_enabled, 
> "proxy.config.ssl.wire_trace_enabled");
> +  REC_EstablishStaticConfigInt32(ssl_wire_trace_enabled, 
> "proxy.config.ssl.wire_trace_enabled");
>   if (ssl_wire_trace_enabled) {
>     // wire trace specific source ip
> -    REC_ReadConfigStringAlloc(ssl_wire_trace_addr, 
> "proxy.config.ssl.wire_trace_addr");
> +    REC_EstablishStaticConfigStringAlloc(ssl_wire_trace_addr, 
> "proxy.config.ssl.wire_trace_addr");
>     if (ssl_wire_trace_addr) {
>       ssl_wire_trace_ip = new IpAddr();
>       ssl_wire_trace_ip->load(ssl_wire_trace_addr);
> @@ -318,8 +318,8 @@ SSLConfigParams::initialize()
>       ssl_wire_trace_ip = NULL;
>     }
>     // wire trace percentage of requests
> -    REC_ReadConfigInteger(ssl_wire_trace_percentage, 
> "proxy.config.ssl.wire_trace_percentage");
> -    REC_ReadConfigStringAlloc(ssl_wire_trace_server_name, 
> "proxy.config.ssl.wire_trace_server_name");
> +    REC_EstablishStaticConfigInt32(ssl_wire_trace_percentage, 
> "proxy.config.ssl.wire_trace_percentage");
> +    REC_EstablishStaticConfigStringAlloc(ssl_wire_trace_server_name, 
> "proxy.config.ssl.wire_trace_server_name");
>   } else {
>     ssl_wire_trace_addr = NULL;
>     ssl_wire_trace_ip = NULL;
> 
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/bb40d788/iocore/net/SSLNetVConnection.cc
> ----------------------------------------------------------------------
> diff --git a/iocore/net/SSLNetVConnection.cc b/iocore/net/SSLNetVConnection.cc
> index 7199efa..dc48c63 100644
> --- a/iocore/net/SSLNetVConnection.cc
> +++ b/iocore/net/SSLNetVConnection.cc
> @@ -286,12 +286,16 @@ ssl_read_from_net(SSLNetVConnection *sslvc, EThread 
> *lthread, int64_t &ret)
>         Debug("ssl.error", "[SSL_NetVConnection::ssl_read_from_net] 
> SSL_ERROR_ZERO_RETURN");
>         break;
>       case SSL_ERROR_SSL:
> -      default:
> -        TraceIn(trace, sslvc->get_remote_addr(), sslvc->get_remote_port(), 
> "SSL Error: sslErr=%d, errno=%d", sslErr, errno);
> +      default: {
> +        char buf[512];
> +        unsigned long e = ERR_peek_last_error();
> +        ERR_error_string_n(e, buf, sizeof(buf));
> +        TraceIn(trace, sslvc->get_remote_addr(), sslvc->get_remote_port(), 
> "SSL Error: sslErr=%d, ERR_get_error=%ld (%s) errno=%d",
> +                sslErr, e, buf, errno);
>         event = SSL_READ_ERROR;
>         ret = errno;
>         SSL_CLR_ERR_INCR_DYN_STAT(sslvc, ssl_error_ssl, 
> "[SSL_NetVConnection::ssl_read_from_net]: errno=%d", errno);
> -        break;
> +      } break;
>       } // switch
>       break;
>     } // while( block_write_avail > 0 )
> @@ -833,11 +837,15 @@ SSLNetVConnection::load_buffer_and_write(int64_t 
> towrite, int64_t &wattempted, i
>       Debug("ssl.error", "SSL_write-SSL_ERROR_ZERO_RETURN");
>       break;
>     case SSL_ERROR_SSL:
> -    default:
> -      TraceOut(trace, get_remote_addr(), get_remote_port(), "SSL Error: 
> sslErr=%d, errno=%d", err, errno);
> +    default: {
> +      char buf[512];
> +      unsigned long e = ERR_peek_last_error();
> +      ERR_error_string_n(e, buf, sizeof(buf));
> +      TraceIn(trace, get_remote_addr(), get_remote_port(), "SSL Error: 
> sslErr=%d, ERR_get_error=%ld (%s) errno=%d", err, e, buf,
> +              errno);
>       r = -errno;
>       SSL_CLR_ERR_INCR_DYN_STAT(this, ssl_error_ssl, "SSL_write-SSL_ERROR_SSL 
> errno=%d", errno);
> -      break;
> +    } break;
>     }
>     return (r);
>   }
> @@ -1232,10 +1240,15 @@ SSLNetVConnection::sslServerHandShakeEvent(int &err)
>     TraceIn(trace, get_remote_addr(), get_remote_port(), "SSL server 
> handshake ERROR_WANT_ACCEPT");
>     return EVENT_CONT;
> 
> -  case SSL_ERROR_SSL:
> +  case SSL_ERROR_SSL: {
>     SSL_CLR_ERR_INCR_DYN_STAT(this, ssl_error_ssl, 
> "SSLNetVConnection::sslServerHandShakeEvent, SSL_ERROR_SSL errno=%d", errno);
> -    TraceIn(trace, get_remote_addr(), get_remote_port(), "SSL server 
> handshake ERROR_SSL");
> +    char buf[512];
> +    unsigned long e = ERR_peek_last_error();
> +    ERR_error_string_n(e, buf, sizeof(buf));
> +    TraceIn(trace, get_remote_addr(), get_remote_port(),
> +            "SSL server handshake ERROR_SSL: sslErr=%d, ERR_get_error=%ld 
> (%s) errno=%d", ssl_error, e, buf, errno);
>     return EVENT_ERROR;
> +  }
> 
>   case SSL_ERROR_ZERO_RETURN:
>     TraceIn(trace, get_remote_addr(), get_remote_port(), "SSL server 
> handshake ERROR_ZERO_RETURN");
> @@ -1335,15 +1348,19 @@ SSLNetVConnection::sslClientHandShakeEvent(int &err)
> 
> 
>   case SSL_ERROR_SSL:
> -  default:
> +  default: {
>     err = errno;
>     // FIXME -- This triggers a retry on cases of cert validation errors....
>     Debug("ssl", "SSLNetVConnection::sslClientHandShakeEvent, SSL_ERROR_SSL");
>     SSL_CLR_ERR_INCR_DYN_STAT(this, ssl_error_ssl, 
> "SSLNetVConnection::sslClientHandShakeEvent, SSL_ERROR_SSL errno=%d", errno);
>     Debug("ssl.error", "SSLNetVConnection::sslClientHandShakeEvent, 
> SSL_ERROR_SSL");
> -    TraceIn(trace, get_remote_addr(), get_remote_port(), "SSL client 
> handshake SSL_ERROR");
> +    char buf[512];
> +    unsigned long e = ERR_peek_last_error();
> +    ERR_error_string_n(e, buf, sizeof(buf));
> +    TraceIn(trace, get_remote_addr(), get_remote_port(),
> +            "SSL client handshake ERROR_SSL: sslErr=%d, ERR_get_error=%ld 
> (%s) errno=%d", ssl_error, e, buf, errno);
>     return EVENT_ERROR;
> -    break;
> +  } break;
>   }
>   return EVENT_CONT;
> }
> 
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/bb40d788/mgmt/RecordsConfig.cc
> ----------------------------------------------------------------------
> diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
> index c390ac5..34e180d 100644
> --- a/mgmt/RecordsConfig.cc
> +++ b/mgmt/RecordsConfig.cc
> @@ -1304,13 +1304,13 @@ static const RecordElement RecordsConfig[] =
>   ,
>   {RECT_CONFIG, "proxy.config.ssl.handshake_timeout_in", RECD_INT, "0", 
> RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-65535]", RECA_NULL}
>   ,
> -  {RECT_CONFIG, "proxy.config.ssl.wire_trace_enabled", RECD_INT, "0", 
> RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-2]", RECA_NULL}
> +  {RECT_CONFIG, "proxy.config.ssl.wire_trace_enabled", RECD_INT, "0", 
> RECU_DYNAMIC, RR_NULL, RECC_INT, "[0-2]", RECA_NULL}
>   ,
> -  {RECT_CONFIG, "proxy.config.ssl.wire_trace_addr", RECD_STRING, NULL , 
> RECU_RESTART_TS, RR_NULL, RECC_IP, "[0-255]\\.[0-255]\\.[0-255]\\.[0-255]", 
> RECA_NULL}
> +  {RECT_CONFIG, "proxy.config.ssl.wire_trace_addr", RECD_STRING, NULL , 
> RECU_DYNAMIC, RR_NULL, RECC_IP, "[0-255]\\.[0-255]\\.[0-255]\\.[0-255]", 
> RECA_NULL}
>   ,
> -  {RECT_CONFIG, "proxy.config.ssl.wire_trace_percentage", RECD_INT, "0", 
> RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-100]", RECA_NULL}
> +  {RECT_CONFIG, "proxy.config.ssl.wire_trace_percentage", RECD_INT, "0", 
> RECU_DYNAMIC, RR_NULL, RECC_INT, "[0-100]", RECA_NULL}
>   ,
> -  {RECT_CONFIG, "proxy.config.ssl.wire_trace_server_name", RECD_STRING, NULL 
> , RECU_RESTART_TS, RR_NULL, RECC_STR, ".*", RECA_NULL}
> +  {RECT_CONFIG, "proxy.config.ssl.wire_trace_server_name", RECD_STRING, NULL 
> , RECU_DYNAMIC, RR_NULL, RECC_STR, ".*", RECA_NULL}
>   ,
>   
> //##############################################################################
>   //#
> 
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/bb40d788/proxy/http/HttpSM.cc
> ----------------------------------------------------------------------
> diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
> index 5fae64c..ab97380 100644
> --- a/proxy/http/HttpSM.cc
> +++ b/proxy/http/HttpSM.cc
> @@ -5636,24 +5636,25 @@ HttpSM::attach_server_session(HttpServerSession *s)
> 
>   // es - is this a concern here in HttpSM?  Does it belong somewhere else?
>   // Get server and client connections
> -  UnixNetVConnection *server_vc = (UnixNetVConnection 
> *)(server_session->get_netvc());
> +  UnixNetVConnection *server_vc = dynamic_cast<UnixNetVConnection 
> *>(server_session->get_netvc());
>   UnixNetVConnection *client_vc = (UnixNetVConnection 
> *)(ua_session->get_netvc());
>   SSLNetVConnection *ssl_vc = dynamic_cast<SSLNetVConnection *>(client_vc);
> -  if (ssl_vc != NULL) { // if incoming connection is SSL
> -    bool client_trace = ssl_vc->getSSLTrace();
> -    if (client_trace) {
> -      // get remote address and port to mark corresponding traces
> -      const sockaddr *remote_addr = ssl_vc->get_remote_addr();
> -      uint16_t remote_port = ssl_vc->get_remote_port();
> -      server_vc->setOriginTrace(true);
> -      server_vc->setOriginTraceAddr(remote_addr);
> -      server_vc->setOriginTracePort(remote_port);
> -    } else {
> -      server_vc->setOriginTrace(false);
> -      server_vc->setOriginTraceAddr(NULL);
> -      server_vc->setOriginTracePort(0);
> +  bool associated_connection = false;
> +  if (server_vc) { // if server_vc isn't a PluginVC
> +    if (ssl_vc) { // if incoming connection is SSL
> +      bool client_trace = ssl_vc->getSSLTrace();
> +      if (client_trace) {
> +        // get remote address and port to mark corresponding traces
> +        const sockaddr *remote_addr = ssl_vc->get_remote_addr();
> +        uint16_t remote_port = ssl_vc->get_remote_port();
> +        server_vc->setOriginTrace(true);
> +        server_vc->setOriginTraceAddr(remote_addr);
> +        server_vc->setOriginTracePort(remote_port);
> +        associated_connection = true;
> +      }
>     }
> -  } else {
> +  }
> +  if (!associated_connection && server_vc) {
>     server_vc->setOriginTrace(false);
>     server_vc->setOriginTraceAddr(NULL);
>     server_vc->setOriginTracePort(0);
> 

Reply via email to