]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 3036: adaptation_access acls cannot see myportname
authorAmos Jeffries <amosjeffries@squid-cache.org>
Tue, 19 Oct 2010 02:37:51 +0000 (20:37 -0600)
committerAmos Jeffries <amosjeffries@squid-cache.org>
Tue, 19 Oct 2010 02:37:51 +0000 (20:37 -0600)
Temporary fix to pass myportname to adaptation_access ACLs.

src/HttpRequest.cc
src/HttpRequest.h
src/acl/MyPortName.cc
src/client_side.cc

index b383791a6d68f955a902d565e260df9c548ec95c..b8274800a9987af7dc444887e237aa37b3ef1440 100644 (file)
@@ -104,6 +104,7 @@ HttpRequest::init()
     peer_login = NULL;         // not allocated/deallocated by this class
     peer_domain = NULL;                // not allocated/deallocated by this class
     vary_headers = NULL;
+    myportname = null_string;
     tag = null_string;
     extacl_user = null_string;
     extacl_passwd = null_string;
@@ -152,6 +153,8 @@ HttpRequest::clean()
     if (pinned_connection)
         cbdataReferenceDone(pinned_connection);
 
+    myportname.clean();
+
     tag.clean();
 
     extacl_user.clean();
@@ -211,6 +214,7 @@ HttpRequest::clone() const
     copy->vary_headers = vary_headers ? xstrdup(vary_headers) : NULL;
     // XXX: what to do with copy->peer_domain?
 
+    copy->myportname = myportname;
     copy->tag = tag;
     copy->extacl_user = extacl_user;
     copy->extacl_passwd = extacl_passwd;
index 447bb220178cb69790768c0884d58d2b4b76f937..b632829336169123be5183c4387f21c39494d03f 100644 (file)
@@ -205,6 +205,8 @@ public:
 
     char *peer_domain;         /* Configured peer forceddomain */
 
+    String myportname; // Internal tag name= value from port this requests arrived in.
+
     String tag;                        /* Internal tag for this request */
 
     String extacl_user;                /* User name returned by extacl lookup */
index c95e2ac5babe86928a29ddcfe27bc7671e071d73..75d384473a89b6d819f78711b89205cb102a2d38 100644 (file)
 #include "acl/MyPortName.h"
 #include "acl/StringData.h"
 #include "acl/Checklist.h"
+#include "HttpRequest.h"
 
 /* for ConnStateData */
 #include "client_side.h"
 
-
-
-
 int
-ACLMyPortNameStrategy::match (ACLData<MatchType> * &data, ACLFilledChecklist *checklist)
+ACLMyPortNameStrategy::match(ACLData<MatchType> * &data, ACLFilledChecklist *checklist)
 {
     if (checklist->conn() != NULL)
-        return data->match (checklist->conn()->port->name);
+        return data->match(checklist->conn()->port->name);
+    if (checklist->request != NULL)
+        return data->match(checklist->request->myportname.termedBuf());
     return 0;
 }
 
index 3fecaf764338e9b0fd2abc165c06a16567790699..52b6090313ae660c87e0e88fd270a7368da71a74 100644 (file)
@@ -2476,6 +2476,7 @@ clientProcessRequest(ConnStateData *conn, HttpParser *hp, ClientSocketContext *c
     request->indirect_client_addr = conn->peer;
 #endif /* FOLLOW_X_FORWARDED_FOR */
     request->my_addr = conn->me;
+    request->myportname = conn->port->name;
     request->http_ver = http_ver;
 
     if (request->header.chunked()) {