Author: rhuijben Date: Thu Oct 29 14:46:15 2015 New Revision: 1711286 URL: http://svn.apache.org/viewvc?rev=1711286&view=rev Log: Detect a specific SSL error that we trigger during testing and handle that as a semi success. I hope this fixes the race condition on the MAC/OS buildbot.
* test/MockHTTPinC/MockHTTP_server.c (connectToServer): Add comment, noting a potential problem. (sslHandshake): Don't handle a client that doesn't report a certificate as an APR_EGENERAL that closes the server with an error. The error needs to be handled at the client. Modified: serf/trunk/test/MockHTTPinC/MockHTTP_server.c Modified: serf/trunk/test/MockHTTPinC/MockHTTP_server.c URL: http://svn.apache.org/viewvc/serf/trunk/test/MockHTTPinC/MockHTTP_server.c?rev=1711286&r1=1711285&r2=1711286&view=diff ============================================================================== --- serf/trunk/test/MockHTTPinC/MockHTTP_server.c (original) +++ serf/trunk/test/MockHTTPinC/MockHTTP_server.c Thu Oct 29 14:46:15 2015 @@ -286,6 +286,9 @@ static apr_status_t connectToServer(mhSe pfd.client_data = cctx; STATUSERR(apr_pollset_add(ctx->pollset, &pfd)); cctx->proxyreqevents = pfd.reqevents; + + /* ### If EINPROGRESS some operations may fail until the + socket is really connected. Shouldn't we wait? */ } return status; @@ -2877,6 +2880,7 @@ static apr_status_t sslHandshake(_mhClie return APR_SUCCESS; } else { int ssl_err; + unsigned long l = ERR_peek_error(); ssl_err = SSL_get_error(ssl_ctx->ssl, result); switch (ssl_err) { @@ -2886,10 +2890,25 @@ static apr_status_t sslHandshake(_mhClie case SSL_ERROR_SYSCALL: return ssl_ctx->bio_status; /* Usually APR_EAGAIN */ default: - _mhLog(MH_VERBOSE, cctx->skt, "SSL Error %d: ", ssl_err); + { + int func = ERR_GET_FUNC(l); + int reason = ERR_GET_REASON(l); + + if (reason == SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE) { + /* The server shouldn't fail for this... + + We test the client. Go on, and report the problem + there */ + return APR_EAGAIN; + } + + _mhLog(MH_VERBOSE, cctx->skt, + "SSL Error %d: Function=%d, Reason=%d", + ssl_err, func, reason); #if MH_VERBOSE - ERR_print_errors_fp(stderr); + ERR_print_errors_fp(stderr); #endif + } return APR_EGENERAL; } }