]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Ported: urllogin ACL from squid 2.7
authorAmos Jeffries <squid3@treenet.co.nz>
Mon, 29 Oct 2012 01:31:29 +0000 (19:31 -0600)
committerAmos Jeffries <squid3@treenet.co.nz>
Mon, 29 Oct 2012 01:31:29 +0000 (19:31 -0600)
doc/release-notes/release-3.2.sgml
doc/release-notes/release-3.3.sgml
src/AclRegs.cc
src/acl/Makefile.am
src/acl/UrlLogin.cc [new file with mode: 0644]
src/acl/UrlLogin.h [new file with mode: 0644]
src/cf.data.pre

index 95875367add2f742beea05a308a95d5c7cf21875..a12767ca96ca5d8c45ca4d416969668788f7938f 100644 (file)
@@ -588,6 +588,7 @@ This section gives a thorough account of those changes in three categories:
        <p>New type <em>random</em>. Pseudo-randomly match requests based on a configured probability.
        <p>Renamed <em>myip</em> to <em>localip</em>. It matches the IP which the client connected to.
        <p>Renamed <em>myport</em> to <em>localport</em>. It matches the port which the client connected to.
+       <p>Ported <em>urllogin</em> option from Squid 2.7, to match a regex pattern on the URL login field (if any).
        <p>The <em>localip</em>/<em>localport</em> differ from earlier releases where they matched a mix of
           of an invalid IP and port 0, the client destination IP/port or the Squid listening IP/port.
           This definition is now consistent across all modes of traffic received by Squid.
@@ -1030,10 +1031,6 @@ This section gives an account of those changes in three categories:
 <sect1>Missing squid.conf options available in Squid-2.7
 <p>
 <descrip>
-       <tag>acl</tag>
-       <p><em>urllogin</em> option not yet ported from 2.6
-       <p><em>urlgroup</em> option not yet ported from 2.6
-
        <tag>broken_vary_encoding</tag>
        <p>Not yet ported from 2.6
 
index 44a9d12660cb727348598a1d042e0ee9e614a06d..16d269837477e3b080d015ddd7939c80b0212873 100644 (file)
@@ -271,9 +271,6 @@ This section gives an account of those changes in three categories:
 <sect1>Missing squid.conf options available in Squid-2.7
 <p>
 <descrip>
-       <tag>acl</tag>
-       <p><em>urllogin</em> option not yet ported from 2.6
-
        <tag>broken_vary_encoding</tag>
        <p>Not yet ported from 2.6
 
index 2035f9015aa934f165d8af4ff17ec8075d5aa3ef..d56c3c289b5cc434dae644694a56c684bfb78d43 100644 (file)
@@ -63,6 +63,7 @@
 #include "acl/TimeData.h"
 #include "acl/Time.h"
 #include "acl/Url.h"
+#include "acl/UrlLogin.h"
 #include "acl/UrlPath.h"
 #include "acl/UrlPort.h"
 #include "acl/UserData.h"
@@ -130,6 +131,8 @@ ACL::Prototype ACLTime::RegistryProtoype(&ACLTime::RegistryEntry_, "time");
 ACLStrategised<time_t> ACLTime::RegistryEntry_(new ACLTimeData, ACLTimeStrategy::Instance(), "time");
 ACL::Prototype ACLUrl::RegistryProtoype(&ACLUrl::RegistryEntry_, "url_regex");
 ACLStrategised<char const *> ACLUrl::RegistryEntry_(new ACLRegexData, ACLUrlStrategy::Instance(), "url_regex");
+ACL::Prototype ACLUrlLogin::RegistryProtoype(&ACLUrlLogin::RegistryEntry_, "urllogin");
+ACLStrategised<char const *> ACLUrlLogin::RegistryEntry_(new ACLRegexData, ACLUrlLoginStrategy::Instance(), "urllogin");
 ACL::Prototype ACLUrlPath::LegacyRegistryProtoype(&ACLUrlPath::RegistryEntry_, "pattern");
 ACL::Prototype ACLUrlPath::RegistryProtoype(&ACLUrlPath::RegistryEntry_, "urlpath_regex");
 ACLStrategised<char const *> ACLUrlPath::RegistryEntry_(new ACLRegexData, ACLUrlPathStrategy::Instance(), "urlpath_regex");
index 8f808fb892823d490be3b8a792114028d6b77c21..d8401f71a0c51d8d3c609ac030c58996839dde19 100644 (file)
@@ -98,6 +98,8 @@ libacls_la_SOURCES = \
        Tag.h \
        Url.cc \
        Url.h \
+       UrlLogin.cc \
+       UrlLogin.h \
        UrlPath.cc \
        UrlPath.h \
        UrlPort.cc \
diff --git a/src/acl/UrlLogin.cc b/src/acl/UrlLogin.cc
new file mode 100644 (file)
index 0000000..38624bc
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * DEBUG: section 28    Access Control
+ * AUTHOR: Duane Wessels
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#include "squid-old.h"
+#include "acl/UrlLogin.h"
+#include "acl/Checklist.h"
+#include "acl/RegexData.h"
+#include "HttpRequest.h"
+#include "rfc1738.h"
+
+int
+ACLUrlLoginStrategy::match (ACLData<char const *> * &data, ACLFilledChecklist *checklist)
+{
+    char *esc_buf = xstrdup(checklist->request->login);
+    rfc1738_unescape(esc_buf);
+    int result = data->match(esc_buf);
+    safe_free(esc_buf);
+    return result;
+}
+
+ACLUrlLoginStrategy *
+ACLUrlLoginStrategy::Instance()
+{
+    return &Instance_;
+}
+
+ACLUrlLoginStrategy ACLUrlLoginStrategy::Instance_;
diff --git a/src/acl/UrlLogin.h b/src/acl/UrlLogin.h
new file mode 100644 (file)
index 0000000..79ea4f5
--- /dev/null
@@ -0,0 +1,72 @@
+
+/*
+ * $Id$
+ *
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ *
+ * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
+ */
+
+#ifndef SQUID_ACLURLLOGIN_H
+#define SQUID_ACLURLLOGIN_H
+#include "acl/Acl.h"
+#include "acl/Data.h"
+#include "acl/Strategy.h"
+#include "acl/Strategised.h"
+
+class ACLUrlLoginStrategy : public ACLStrategy<char const *>
+{
+
+public:
+    virtual int match (ACLData<char const *> * &, ACLFilledChecklist *);
+    virtual bool requiresRequest() const {return true;}
+
+    static ACLUrlLoginStrategy *Instance();
+    /* Not implemented to prevent copies of the instance. */
+    /* Not private to prevent brain dead g+++ warnings about
+     * private constructors with no friends */
+    ACLUrlLoginStrategy(ACLUrlLoginStrategy const &);
+
+private:
+    static ACLUrlLoginStrategy Instance_;
+    ACLUrlLoginStrategy() {}
+
+    ACLUrlLoginStrategy&operator=(ACLUrlLoginStrategy const &);
+};
+
+class ACLUrlLogin
+{
+
+public:
+    static ACL::Prototype RegistryProtoype;
+    static ACL::Prototype LegacyRegistryProtoype;
+    static ACLStrategised<char const *> RegistryEntry_;
+};
+
+#endif /* SQUID_ACLURLLOGIN_H */
index a28c9d153f1917b14c3859fa4e90b7ab1dc863a5..fc19687346369b2d383480666a3339e58da506c3 100644 (file)
@@ -754,6 +754,8 @@ DOC_START
 
        acl aclname url_regex [-i] ^http:// ...
          # regex matching on whole URL [fast]
+       acl aclname urllogin [-i] [^a-zA-Z0-9] ...
+         # regex matching on URL login field
        acl aclname urlpath_regex [-i] \.gif$ ...
          # regex matching on URL path [fast]