The beginnings of effective ARP selection.
authorwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Thu, 12 Dec 2002 23:18:57 +0000 (23:18 +0000)
committerwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Thu, 12 Dec 2002 23:18:57 +0000 (23:18 +0000)
git-svn-id: https://subversion.switch.ch/svn/shibboleth/java-idp/trunk@371 ab3bd59b-922f-494d-bb5f-6f0a3c29deca

src/edu/internet2/middleware/shibboleth/aa/arp/Arp.java
src/edu/internet2/middleware/shibboleth/aa/arp/ArpEngine.java
src/edu/internet2/middleware/shibboleth/aa/arp/ArpException.java [new file with mode: 0755]
src/edu/internet2/middleware/shibboleth/aa/arp/ArpMarshallingException.java
src/edu/internet2/middleware/shibboleth/aa/arp/ArpProcessingException.java [new file with mode: 0755]
src/edu/internet2/middleware/shibboleth/aa/arp/ArpRepositoryException.java
src/edu/internet2/middleware/shibboleth/aa/arp/MatchFunction.java [new file with mode: 0755]
src/edu/internet2/middleware/shibboleth/aa/arp/Rule.java
src/edu/internet2/middleware/shibboleth/aa/arp/provider/ExactSharMatchFunction.java [new file with mode: 0755]
src/edu/internet2/middleware/shibboleth/aa/arp/provider/RegexMatchFunction.java [new file with mode: 0755]
src/edu/internet2/middleware/shibboleth/aa/arp/provider/ResourceTreeMatchFunction.java [new file with mode: 0755]

index b5eea54..35b5aad 100755 (executable)
 
 package edu.internet2.middleware.shibboleth.aa.arp;
 
+import java.net.URL;
 import java.security.Principal;
 import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
 
 import org.apache.xerces.parsers.DOMParser;
 import org.w3c.dom.CharacterData;
@@ -68,7 +71,7 @@ import org.w3c.dom.NodeList;
 public class Arp {
 
        private Principal principal;
-       private HashSet rules = new HashSet();
+       private Set rules = new HashSet();
        private String description;
        private boolean sitePolicy = false;
 
@@ -205,4 +208,31 @@ public class Arp {
                this.description = description;
        }
 
+       /**
+        * Finds all of the rules contained in the <code>Arp</code> object that are applicable 
+        * to a particular request.
+        * @param requester the SHAR for this request
+        * @param resource the resource that the requestis made on behalf of
+        * @return the matching <code>Rule</code> objects
+        */
+       public Rule[] getMatchingRules(String requester, URL resource) {
+               Set effectiveSet = new HashSet();
+               Iterator iterator = rules.iterator();
+               while (iterator.hasNext()) {
+                       Rule rule = (Rule) iterator.next();
+                       if (rule.matchesRequest(requester, resource)) {
+                               effectiveSet.add(rule);
+                       }
+               }
+               return (Rule[]) effectiveSet.toArray(new Rule[0]);
+       }
+
+       /**
+        * Adds an ARP Rule to this <code>ARP</code>.
+        * @param rule the <code>Rule</code> to add
+        */
+       public void addRule(Rule rule) {
+               rules.add(rule);
+       }
+
 }
index bf5e309..cced58c 100755 (executable)
 
 package edu.internet2.middleware.shibboleth.aa.arp;
 
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.security.Principal;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+
 /**
  *  Defines a processing engine for Attribute Release Policies.
  *
  * @author Walter Hoehn (wassa@columbia.edu)
  */
 
-public interface ArpEngine {
+public class ArpEngine {
+
+       private static Logger log = Logger.getLogger(ArpEngine.class.getName());
+       private ArpRepository repository;
+       private static Map matchFunctions = Collections.synchronizedMap(new HashMap());
+       static {
+               //Initialize built-in match functions
+               try {
+                       matchFunctions.put(
+                               new URI("urn:mace:shibboleth:arp:matchFunction:exactShar"),
+                               "edu.internet2.middleware.shibboleth.aa.arp.provider.ExactSharMatchFunction");
+                       matchFunctions.put(
+                               new URI("urn:mace:shibboleth:arp:matchFunction:resourceTree"),
+                               "edu.internet2.middleware.shibboleth.aa.arp.provider.ResourceTreeMatchFunction");
+                       matchFunctions.put(
+                               new URI("urn:mace:shibboleth:arp:matchFunction:regexMatch"),
+                               "edu.internet2.middleware.shibboleth.aa.arp.provider.RegexMatchFunction");
+               } catch (URISyntaxException e) {
+                       log.error("Error mapping standard match functions: " + e);
+               }
+       }
+
+       public ArpEngine(Properties properties) throws ArpException {
+               try {
+                       this.repository = ArpRepositoryFactory.getInstance(properties);
+               } catch (ArpRepositoryException e) {
+                       log.error("Could not start Arp Engine: " + e);
+                       throw new ArpException("Could not start Arp Engine.");
+               }
+       }
+
+       public static MatchFunction lookupMatchFunction(URI functionIdentifier) throws ArpException {
+               String className = null;
+
+               synchronized (matchFunctions) {
+                       className = (String) matchFunctions.get(functionIdentifier);
+               }
+
+               if (className == null) {
+                       return null;
+               }
+               try {
+                       Class matchFunction = Class.forName(className);
+                       Object functionObject = matchFunction.newInstance();
+                       if (functionObject instanceof MatchFunction) {
+                               return (MatchFunction) functionObject;
+                       } else {
+                               log.error(
+                                       "Improperly specified match function, (" + className + ") is not a match function.");
+                               throw new ArpException(
+                                       "Improperly specified match function, (" + className + ") is not a match function.");
+                       }
+               } catch (Exception e) {
+                       log.error("Could not load Match Function: (" + className + "): " + e);
+                       throw new ArpException("Could not load Match Function.");
+               }
+       }
+
+       private Arp createEffectiveArp(Principal principal, String requester, URL resource)
+               throws ArpProcessingException {
+               try {
+                       Arp effectiveArp = new Arp(principal);
+                       effectiveArp.setDescription("Effective ARP.");
+
+                       Arp[] userPolicies = repository.getAllPolicies(principal);
+
+                       for (int i = 0; userPolicies.length > i; i++) {
+                               Rule[] rules = userPolicies[i].getMatchingRules(requester, resource);
+
+                               for (int j = 0; rules.length > i; j++) {
+                                       effectiveArp.addRule(rules[i]);
+                               }
+                       }
+
+                       return effectiveArp;
+               } catch (ArpRepositoryException e) {
+                       log.error("Error creating effective policy: " + e);
+                       throw new ArpProcessingException("Error creating effective policy.");
+               }
+       }
 
 }
diff --git a/src/edu/internet2/middleware/shibboleth/aa/arp/ArpException.java b/src/edu/internet2/middleware/shibboleth/aa/arp/ArpException.java
new file mode 100755 (executable)
index 0000000..784890c
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * The Shibboleth License, Version 1.
+ * Copyright (c) 2002
+ * University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution, if any, must include
+ * the following acknowledgment: "This product includes software developed by
+ * the University Corporation for Advanced Internet Development
+ * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
+ * may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear.
+ *
+ * Neither the name of Shibboleth nor the names of its contributors, nor
+ * Internet2, nor the University Corporation for Advanced Internet Development,
+ * Inc., nor UCAID may be used to endorse or promote products derived from this
+ * software without specific prior written permission. For written permission,
+ * please contact shibboleth@shibboleth.org
+ *
+ * Products derived from this software may not be called Shibboleth, Internet2,
+ * UCAID, or the University Corporation for Advanced Internet Development, nor
+ * may Shibboleth appear in their name, without prior written permission of the
+ * University Corporation for Advanced Internet Development.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
+ * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
+ * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package edu.internet2.middleware.shibboleth.aa.arp;
+
+/**
+ * A generic error occurred relating to Attribute Release Policies
+ *
+ * @author Walter Hoehn (wassa&#064;columbia.edu)
+ */
+public class ArpException extends Exception {
+       public ArpException(String message) {
+               super(message);
+       }
+}
index a9664ff..cecad7d 100755 (executable)
@@ -55,7 +55,7 @@ package edu.internet2.middleware.shibboleth.aa.arp;
  * @author Walter Hoehn (wassa@columbia.edu)
  */
 
-public class ArpMarshallingException extends Exception {
+public class ArpMarshallingException extends ArpException {
 
        public ArpMarshallingException(String message) {
                super(message);
diff --git a/src/edu/internet2/middleware/shibboleth/aa/arp/ArpProcessingException.java b/src/edu/internet2/middleware/shibboleth/aa/arp/ArpProcessingException.java
new file mode 100755 (executable)
index 0000000..9ea43fc
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * The Shibboleth License, Version 1.
+ * Copyright (c) 2002
+ * University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution, if any, must include
+ * the following acknowledgment: "This product includes software developed by
+ * the University Corporation for Advanced Internet Development
+ * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
+ * may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear.
+ *
+ * Neither the name of Shibboleth nor the names of its contributors, nor
+ * Internet2, nor the University Corporation for Advanced Internet Development,
+ * Inc., nor UCAID may be used to endorse or promote products derived from this
+ * software without specific prior written permission. For written permission,
+ * please contact shibboleth@shibboleth.org
+ *
+ * Products derived from this software may not be called Shibboleth, Internet2,
+ * UCAID, or the University Corporation for Advanced Internet Development, nor
+ * may Shibboleth appear in their name, without prior written permission of the
+ * University Corporation for Advanced Internet Development.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
+ * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
+ * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package edu.internet2.middleware.shibboleth.aa.arp;
+
+/**
+ * Indicates an error occurred while evaluating one or more Attribute Release
+ * Policies.
+ *
+ * @author Walter Hoehn (wassa&#064;columbia.edu)
+ */
+public class ArpProcessingException extends ArpException {
+       public ArpProcessingException(String message) {
+               super(message);
+       }
+}
index dda8124..71cf16f 100755 (executable)
@@ -55,7 +55,7 @@ package edu.internet2.middleware.shibboleth.aa.arp;
  * @author Walter Hoehn (wassa@columbia.edu)
  */
 
-public class ArpRepositoryException extends Exception {
+public class ArpRepositoryException extends ArpException {
 
        public ArpRepositoryException(String message) {
                super(message);
diff --git a/src/edu/internet2/middleware/shibboleth/aa/arp/MatchFunction.java b/src/edu/internet2/middleware/shibboleth/aa/arp/MatchFunction.java
new file mode 100755 (executable)
index 0000000..4748483
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * The Shibboleth License, Version 1.
+ * Copyright (c) 2002
+ * University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution, if any, must include
+ * the following acknowledgment: "This product includes software developed by
+ * the University Corporation for Advanced Internet Development
+ * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
+ * may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear.
+ *
+ * Neither the name of Shibboleth nor the names of its contributors, nor
+ * Internet2, nor the University Corporation for Advanced Internet Development,
+ * Inc., nor UCAID may be used to endorse or promote products derived from this
+ * software without specific prior written permission. For written permission,
+ * please contact shibboleth@shibboleth.org
+ *
+ * Products derived from this software may not be called Shibboleth, Internet2,
+ * UCAID, or the University Corporation for Advanced Internet Development, nor
+ * may Shibboleth appear in their name, without prior written permission of the
+ * University Corporation for Advanced Internet Development.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
+ * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
+ * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package edu.internet2.middleware.shibboleth.aa.arp;
+
+/**
+ * Defines an method for determining whether an ARP Rule is applicable to a
+ * particular request
+ *
+ * @author Walter Hoehn (wassa&#064;columbia.edu)
+ */
+public interface MatchFunction {}
index 493a259..88a935b 100755 (executable)
@@ -49,6 +49,8 @@
 
 package edu.internet2.middleware.shibboleth.aa.arp;
 
+import java.net.URL;
+
 import org.apache.xerces.parsers.DOMParser;
 import org.w3c.dom.CharacterData;
 import org.w3c.dom.Document;
@@ -127,4 +129,14 @@ public class Rule {
                }
        }
 
+       /**
+        * Method matchesRequest.
+        * @param requester
+        * @param resource
+        * @return boolean
+        */
+       public boolean matchesRequest(String requester, URL resource) {
+               return false;
+       }
+
 }
diff --git a/src/edu/internet2/middleware/shibboleth/aa/arp/provider/ExactSharMatchFunction.java b/src/edu/internet2/middleware/shibboleth/aa/arp/provider/ExactSharMatchFunction.java
new file mode 100755 (executable)
index 0000000..5057e78
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * The Shibboleth License, Version 1.
+ * Copyright (c) 2002
+ * University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution, if any, must include
+ * the following acknowledgment: "This product includes software developed by
+ * the University Corporation for Advanced Internet Development
+ * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
+ * may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear.
+ *
+ * Neither the name of Shibboleth nor the names of its contributors, nor
+ * Internet2, nor the University Corporation for Advanced Internet Development,
+ * Inc., nor UCAID may be used to endorse or promote products derived from this
+ * software without specific prior written permission. For written permission,
+ * please contact shibboleth@shibboleth.org
+ *
+ * Products derived from this software may not be called Shibboleth, Internet2,
+ * UCAID, or the University Corporation for Advanced Internet Development, nor
+ * may Shibboleth appear in their name, without prior written permission of the
+ * University Corporation for Advanced Internet Development.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
+ * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
+ * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package edu.internet2.middleware.shibboleth.aa.arp.provider;
+
+import edu.internet2.middleware.shibboleth.aa.arp.MatchFunction;
+
+/**
+ * Match function that does exact matching on requesters.
+ *
+ * @author Walter Hoehn (wassa&#064;columbia.edu)
+ */
+public class ExactSharMatchFunction implements MatchFunction {
+       /**
+        * Constructor for ExactSharMatchFunction.
+        */
+       public ExactSharMatchFunction() {
+               super();
+       }
+}
diff --git a/src/edu/internet2/middleware/shibboleth/aa/arp/provider/RegexMatchFunction.java b/src/edu/internet2/middleware/shibboleth/aa/arp/provider/RegexMatchFunction.java
new file mode 100755 (executable)
index 0000000..ed6447e
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * The Shibboleth License, Version 1.
+ * Copyright (c) 2002
+ * University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution, if any, must include
+ * the following acknowledgment: "This product includes software developed by
+ * the University Corporation for Advanced Internet Development
+ * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
+ * may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear.
+ *
+ * Neither the name of Shibboleth nor the names of its contributors, nor
+ * Internet2, nor the University Corporation for Advanced Internet Development,
+ * Inc., nor UCAID may be used to endorse or promote products derived from this
+ * software without specific prior written permission. For written permission,
+ * please contact shibboleth@shibboleth.org
+ *
+ * Products derived from this software may not be called Shibboleth, Internet2,
+ * UCAID, or the University Corporation for Advanced Internet Development, nor
+ * may Shibboleth appear in their name, without prior written permission of the
+ * University Corporation for Advanced Internet Development.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
+ * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
+ * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package edu.internet2.middleware.shibboleth.aa.arp.provider;
+
+import edu.internet2.middleware.shibboleth.aa.arp.MatchFunction;
+
+/**
+ * Match function implementaiton that does regular expression matching on both
+ * requesters and resources.
+ *
+ * @author Walter Hoehn (wassa&#064;columbia.edu)
+ */
+public class RegexMatchFunction implements MatchFunction {
+       /**
+        * Constructor for RegexMatchFunction.
+        */
+       public RegexMatchFunction() {
+               super();
+       }
+}
diff --git a/src/edu/internet2/middleware/shibboleth/aa/arp/provider/ResourceTreeMatchFunction.java b/src/edu/internet2/middleware/shibboleth/aa/arp/provider/ResourceTreeMatchFunction.java
new file mode 100755 (executable)
index 0000000..930786c
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * The Shibboleth License, Version 1.
+ * Copyright (c) 2002
+ * University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution, if any, must include
+ * the following acknowledgment: "This product includes software developed by
+ * the University Corporation for Advanced Internet Development
+ * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
+ * may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear.
+ *
+ * Neither the name of Shibboleth nor the names of its contributors, nor
+ * Internet2, nor the University Corporation for Advanced Internet Development,
+ * Inc., nor UCAID may be used to endorse or promote products derived from this
+ * software without specific prior written permission. For written permission,
+ * please contact shibboleth@shibboleth.org
+ *
+ * Products derived from this software may not be called Shibboleth, Internet2,
+ * UCAID, or the University Corporation for Advanced Internet Development, nor
+ * may Shibboleth appear in their name, without prior written permission of the
+ * University Corporation for Advanced Internet Development.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
+ * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
+ * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package edu.internet2.middleware.shibboleth.aa.arp.provider;
+
+import edu.internet2.middleware.shibboleth.aa.arp.MatchFunction;
+
+/**
+ * MatchFuction implementation that does "tail" matching on resources.
+ *
+ * @author Walter Hoehn (wassa&#064;columbia.edu)
+ */
+public class ResourceTreeMatchFunction implements MatchFunction {
+       /**
+        * Constructor for ResourceTreeMatchFunction.
+        */
+       public ResourceTreeMatchFunction() {
+               super();
+       }
+}