[squid-dev] Fix external_acl problems

2016-01-28 Thread Christos Tsantilas

Hi all,

After the patch r14351 created the following problems:
 - external_acl requires AccessLogEntry but ALE is not available
   in many cases such as ssl_bump ACLs.
 - The %  - In the case of transparent SSL bumping, the patch uses a local 
AccessLogEntry to allow external_acl work with the ssl_bump access list.


 - The slow acls inside Ssl::PeerConnector can not support external_acl 
in the case of PeerPoolMgr


  - Most of the fast acls does not support ALE based acls. I know that 
currently the only ALE based acl is the external_acl, which is slow acl, 
but my opinion is that it is not bad idea  to support cases the 
external_acl result is stored in cache.


  - Also we need to check and review if the informations passed with 
the ALE is the same passed using the FilledChecklist object. This is not 
obvious.



This is a Measurement Factory project.
Fix external_acl problems after trunk r14351
(Support logformat %macros in external_acl_type format).

The above changes created the following problems:
 - external_acl requires AccessLogEntry but ALE is not available
   in many cases such as ssl_bump ACLs.
 - The %fd, fwdServerClosedWrapper, this);
 
 #if USE_OPENSSL
 if (!request->flags.pinned) {
 const CachePeer *p = serverConnection()->getPeer();
 const bool peerWantsTls = p && p->secure.encryptTransport;
 // userWillTlsToPeerForUs assumes CONNECT == HTTPS
 const bool userWillTlsToPeerForUs = p && p->options.originserver &&
 request->method == Http::METHOD_CONNECT;
 const bool needTlsToPeer = peerWantsTls && !userWillTlsToPeerForUs;
 const bool needTlsToOrigin = !p && request->url.getScheme() == AnyP::PROTO_HTTPS;
 if (needTlsToPeer || needTlsToOrigin || request->flags.sslPeek) {
 HttpRequest::Pointer requestPointer = request;
 AsyncCall::Pointer callback = asyncCall(17,4,
 "FwdState::ConnectedToPeer",
 FwdStatePeerAnswerDialer(::connectedToPeer, this));
 // Use positive timeout when less than one second is left.
 const time_t sslNegotiationTimeout = max(static_cast(1), timeLeft());
 Ssl::PeerConnector *connector = NULL;
 if (request->flags.sslPeek)
-connector = new Ssl::PeekingPeerConnector(requestPointer, serverConnection(), clientConn, callback, sslNegotiationTimeout);
+connector = new Ssl::PeekingPeerConnector(requestPointer, serverConnection(), clientConn, callback, al, sslNegotiationTimeout);
 else
-connector = new Ssl::BlindPeerConnector(requestPointer, serverConnection(), callback, sslNegotiationTimeout);
+connector = new Ssl::BlindPeerConnector(requestPointer, serverConnection(), callback, al, sslNegotiationTimeout);
 AsyncJob::Start(connector); // will call our callback
 return;
 }
 }
 #endif
 
 // if not encrypting just run the post-connect actions
 Security::EncryptorAnswer nil;
 connectedToPeer(nil);
 }
 
 void
 FwdState::connectedToPeer(Security::EncryptorAnswer )
 {
 if (ErrorState *error = answer.error.get()) {
 fail(error);
 answer.error.clear(); // preserve error for errorSendComplete()
 if (CachePeer *p = serverConnection()->getPeer())
 peerConnectFailed(p);
 retryOrBail();

=== modified file 'src/PeerPoolMgr.cc'
--- src/PeerPoolMgr.cc	2016-01-01 00:12:18 +
+++ src/PeerPoolMgr.cc	2016-01-28 15:39:53 +
@@ -113,41 +113,41 @@
 
 Must(params.conn != NULL);
 
 #if USE_OPENSSL
 // Handle SSL peers.
 if (peer->secure.encryptTransport) {
 typedef CommCbMemFunT CloserDialer;
 closer = JobCallback(48, 3, CloserDialer, this,
  PeerPoolMgr::handleSecureClosure);
 comm_add_close_handler(params.conn->fd, closer);
 
 securer = asyncCall(48, 4, "PeerPoolMgr::handleSecuredPeer",
 MyAnswerDialer(this, ::handleSecuredPeer));
 
 const int peerTimeout = peer->connect_timeout > 0 ?
 peer->connect_timeout : Config.Timeout.peer_connect;
 const int timeUsed = squid_curtime - params.conn->startTime();
 // Use positive timeout when less than one second is left for conn.
 const int timeLeft = max(1, (peerTimeout - timeUsed));
 Ssl::BlindPeerConnector *connector =
-new Ssl::BlindPeerConnector(request, params.conn, securer, timeLeft);
+new Ssl::BlindPeerConnector(request, params.conn, securer, NULL, timeLeft);
 AsyncJob::Start(connector); // will call our callback
 return;
 }
 #endif
 
 pushNewConnection(params.conn);
 }
 
 void
 PeerPoolMgr::pushNewConnection(const Comm::ConnectionPointer )
 {
 

Re: [squid-dev] Fix external_acl problems

2016-01-28 Thread Christos Tsantilas

Please ignore this thread it is duplicated mail.

On 01/28/2016 09:10 PM, Christos Tsantilas wrote:

Hi all,

After the patch r14351 created the following problems:
  - external_acl requires AccessLogEntry but ALE is not available
in many cases such as ssl_bump ACLs.
  - The %
___
squid-dev mailing list
squid-dev@lists.squid-cache.org
http://lists.squid-cache.org/listinfo/squid-dev