Replaced AA ARP processing.
authorwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Wed, 29 Jan 2003 23:10:54 +0000 (23:10 +0000)
committerwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Wed, 29 Jan 2003 23:10:54 +0000 (23:10 +0000)
git-svn-id: https://subversion.switch.ch/svn/shibboleth/java-idp/trunk@434 ab3bd59b-922f-494d-bb5f-6f0a3c29deca

32 files changed:
bin/ArpUtil [deleted file]
src/edu/internet2/middleware/shibboleth/aa/AAAttributes.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/AAPermissionException.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/AAResponder.java
src/edu/internet2/middleware/shibboleth/aa/AAServlet.java
src/edu/internet2/middleware/shibboleth/aa/AA_Acl.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/AA_AclEntry.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/AA_Identity.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/AA_Permission.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/Arp.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpAttribute.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpCore.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpFilter.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpFilterValue.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpRepository.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpRepositoryException.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpRepositoryFactory.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpResource.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/ArpShar.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/FileArpRepository.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/TName.java [deleted file]
src/edu/internet2/middleware/shibboleth/aa/arp/provider/ShibArpAttribute.java [new file with mode: 0755]
src/edu/internet2/middleware/shibboleth/ui/UI.java [deleted file]
src/edu/internet2/middleware/shibboleth/ui/UIException.java [deleted file]
src/edu/internet2/middleware/shibboleth/ui/UIedit.jsp [deleted file]
src/edu/internet2/middleware/shibboleth/ui/UIerror.jsp [deleted file]
src/edu/internet2/middleware/shibboleth/ui/UIfilter.jsp [deleted file]
src/edu/internet2/middleware/shibboleth/ui/UIlist.jsp [deleted file]
src/edu/internet2/middleware/shibboleth/ui/UIlogin.jsp [deleted file]
src/edu/internet2/middleware/shibboleth/utils/ArpUtil.java [deleted file]
webApplication/WEB-INF/conf/arps/admin [deleted file]
webApplication/WEB-INF/conf/arps/arp.site.xml [new file with mode: 0755]

diff --git a/bin/ArpUtil b/bin/ArpUtil
deleted file mode 100755 (executable)
index 66c9e85..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-
-##We need a JVM
-if [ ! -n "$JAVA_HOME" ] ; then
-  echo "Error: JAVA_HOME is not defined."
-  exit
-fi
-
-if [ ! -n "$JAVACMD" ] ; then
-  JAVACMD=$JAVA_HOME/bin/java
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly."
-  echo "Cannot execute $JAVACMD"
-  exit
-fi
-
-
-##Find the shibboleth components
-if [ ! -n "$SHIB_HOME" ] ; then
-  echo "Error: SHIB_HOME is not defined."
-  exit
-fi
-
-if [ ! \( -f "$SHIB_HOME/lib/shib-util.jar" -a -r "$SHIB_HOME/lib/shib-util.jar" \) ] ; then
-  echo "Error: Cannot find shibboleth utility jar."
-  echo "       If you downloaded the shibboleth source, you need to run \"ant build-util\""
-  exit
-fi
-
-if [ ! -n "$ARP_DIR" ] ; then
-  echo "Warning: Using working directory for ARP storage.  Define ARP_DIR to use another directory."
-  ARP_DIR=.
-fi
-
-if [ ! -n "$LOG_CONFIG" ] ; then
-  LOG_CONFIG=$SHIB_HOME/conf/log4j.properties
-fi
-
-
-##Grab all the dependencies
-if [ -n "$CLASSPATH" ] ; then
-  SHIB_UTIL_CLASSPATH=$CLASSPATH
-fi
-
-DIRLIBS=${SHIB_HOME}/lib/*.jar
-for i in ${DIRLIBS}
-do
-    # if the directory is empty, then it will return the input string
-    # this is stupid, so case for it
-    if [ "$i" != "${DIRLIBS}" ] ; then
-      if [ -z "$SHIB_UTIL_CLASSPATH" ] ; then
-        SHIB_UTIL_CLASSPATH=$i
-      else
-        SHIB_UTIL_CLASSPATH="$i":$SHIB_UTIL_CLASSPATH
-      fi
-    fi
-done
-
-
-##Here we go
-$JAVACMD -Dlog.config=$LOG_CONFIG -Darp.dir=$ARP_DIR -classpath $SHIB_UTIL_CLASSPATH edu.internet2.middleware.shibboleth.utils.ArpUtil "$@"
diff --git a/src/edu/internet2/middleware/shibboleth/aa/AAAttributes.java b/src/edu/internet2/middleware/shibboleth/aa/AAAttributes.java
deleted file mode 100755 (executable)
index 9d5f138..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* 
- * 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;
-
-//import aa.*;
-import java.io.*;
-import java.util.*;
-import java.util.zip.*;
-import java.util.jar.*;
-
-/**
- * A class for managing local attributes
- */
-public class AAAttributes{
-
-    Class[] attrClasses = new Class[1];
-
-    /**
-     * Sole constructor. Takes a jarfile name in the local file system
-     * where attribute classes reside
-     */
-
-    public AAAttributes(String jarFileName)
-       throws AAException{
-
-       try{
-
-           JarFile jf = new JarFile(jarFileName);
-           Vector attrs = new Vector();
-           Enumeration en = jf.entries();
-           while(en.hasMoreElements()){
-               JarEntry je = (JarEntry)en.nextElement();
-               String filename = (String)je.getName();
-               if(filename.endsWith(".class")){
-                   String name = filename.substring(0, filename.lastIndexOf(".class"));
-                   Class attr = Class.forName(name);
-                   attrs.add(attr);
-               }
-           }
-           attrClasses = (Class[])attrs.toArray(attrClasses);
-       }catch(Exception e){
-           throw new AAException("Failed to get the list of attribute classes: "+e);
-       }
-    }
-
-
-    public Class[] listClasses(){
-       return attrClasses;
-    }
-
-    public String[] list(){
-       String[] a = new String[attrClasses.length];
-       for(int i=0; i<a.length; i++){
-           a[i] = attrClasses[i].getName();
-       }
-       return a;
-    }
-}
diff --git a/src/edu/internet2/middleware/shibboleth/aa/AAPermissionException.java b/src/edu/internet2/middleware/shibboleth/aa/AAPermissionException.java
deleted file mode 100755 (executable)
index e8c3453..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Any Permission Problem accessing ARPs
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-public class AAPermissionException extends Exception{
-    String msg;
-    AAPermissionException(String s){
-       msg = s;
-    }
-    public String toString(){
-       return msg;
-    }
-}
index 81a60d4..d32feb3 100755 (executable)
@@ -54,12 +54,15 @@ package edu.internet2.middleware.shibboleth.aa;
  *  Main logic that decides what to release 
  *
  * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
+ * @author     Walter Hoehn (wassa@columbia.edu)
  */
 
-
+import java.net.URI;
+import java.net.URL;
+import java.security.Principal;
+import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 import java.util.Vector;
 
@@ -68,6 +71,7 @@ import javax.naming.NameNotFoundException;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
 import javax.naming.directory.DirContext;
 import javax.naming.directory.InitialDirContext;
 import javax.naming.directory.SearchControls;
@@ -77,88 +81,120 @@ import org.apache.log4j.Logger;
 import org.opensaml.SAMLAttribute;
 import org.opensaml.SAMLException;
 
-public class AAResponder{
+import edu.internet2.middleware.shibboleth.aa.arp.ArpAttribute;
+import edu.internet2.middleware.shibboleth.aa.arp.ArpEngine;
+import edu.internet2.middleware.shibboleth.aa.arp.ArpProcessingException;
+import edu.internet2.middleware.shibboleth.aa.arp.provider.ShibArpAttribute;
 
-    ArpRepository arpFactory;
-    Arp adminArp;
-    DirContext ctx;
-    String domain;
-    private static Logger log = Logger.getLogger(AAResponder.class.getName());    
+public class AAResponder {
 
-    public AAResponder(ArpRepository arpFactory, DirContext ctx, String domain)
-       throws AAException{
+       protected ArpEngine arpEngine;
+       protected DirContext ctx;
+       protected String domain;
+       private static Logger log = Logger.getLogger(AAResponder.class.getName());
 
-       this.arpFactory = arpFactory;
-       try {
-               adminArp = arpFactory.lookupArp("admin", true);
-       } catch (ArpRepositoryException e) {
-               log.error("Error while searching Arp Repository (" + arpFactory + ") : " + e.getMessage());
-           throw new AAException("Unable to load admin ARP.");
-       }
-       if(adminArp ==  null) {
-               log.error("Admin ARP not found in Arp Repository (" + arpFactory + ").");
-           throw new AAException("Unable to load admin ARP.");
-       }
-       this.ctx = ctx;
-       this.domain = domain;
-    }
+       public AAResponder(ArpEngine arpEngine, DirContext ctx, String domain) throws AAException {
 
+               this.arpEngine = arpEngine;
+               this.ctx = ctx;
+               this.domain = domain;
+       }
 
        public SAMLAttribute[] getReleaseAttributes(
-               String userName,
+               Principal principal,
                String searchFilter,
-               String handle,
-               String sharName,
-               String url)
+               String requester,
+               URL resource)
                throws AAException {
 
-               DirContext userCtx = null;
+               DirContext userCtx = queryDataSource(principal, searchFilter);
 
                try {
-                       try {
-                               userCtx = queryDataSource(userName, searchFilter);
-                       } catch (CommunicationException ce) {
-                               synchronized (ctx) {
-                                       log.debug(ce);
-                                       log.warn("Encountered a connection problem while querying for attributes.  Re-initializing JNDI context and retrying...");
-                                       ctx = new InitialDirContext(ctx.getEnvironment());
+                       //optimization... find out which attributes to resolve
+                       URI[] potentialAttributes =
+                               arpEngine.listPossibleReleaseAttributes(principal, requester, resource);
+
+                       //resolve for each attribute
+                       Set arpAttributes = new HashSet();
+
+                       for (int i = 0; i < potentialAttributes.length; i++) {
+                               ShibArpAttribute arpAttribute = new ShibArpAttribute(potentialAttributes[i].toString());
+
+                               Attributes attrs =
+                                       ctx.getAttributes(
+                                               "",
+                                               new String[] {
+                                                        arpAttribute.getName().substring(arpAttribute.getName().lastIndexOf(":") + 1)});
+                               Attribute dAttr =
+                                       attrs.get(arpAttribute.getName().substring(arpAttribute.getName().lastIndexOf(":") + 1));
+                               NamingEnumeration directoryValuesEnum = dAttr.getAll();
+                               List directoryValues = new ArrayList();
+                               while (directoryValuesEnum.hasMoreElements()) {
+                                       directoryValues.add(directoryValuesEnum.next());
                                }
-                               userCtx = queryDataSource(userName, searchFilter);
+                               arpAttribute.setValues(directoryValues.toArray());
+                               arpAttributes.add(arpAttribute);
+                       }
+
+                       //filter and convert to SAML
+                       ArpAttribute[] filteredAttributes =
+                               arpEngine.filterAttributes(
+                                       (ArpAttribute[]) arpAttributes.toArray(new ArpAttribute[0]),
+                                       principal,
+                                       requester,
+                                       resource);
+
+                       Set samlAttributes = new HashSet();
+                       for (int i = 0; i < filteredAttributes.length; i++) {
+                               samlAttributes.add(toSaml(filteredAttributes[i], requester));
                        }
+                       return (SAMLAttribute[]) samlAttributes.toArray(new SAMLAttribute[0]);
+
                } catch (NamingException e) {
                        log.error(
-                               "An error occurred while retieving data for principal (" + userName + ") :" + e.getMessage());
-                       throw new AAException("Error retrieving data for principal (" + userName + ")");
+                               "An error occurred while retieving data for principal ("
+                                       + principal.getName()
+                                       + ") :"
+                                       + e.getMessage());
+                       throw new AAException("Error retrieving data for principal.");
+               } catch (ArpProcessingException e) {
+                       log.error(
+                               "An error occurred while processing the ARPs for principal ("
+                                       + principal.getName()
+                                       + ") :"
+                                       + e.getMessage());
+                       throw new AAException("Error retrieving data for principal.");
                }
 
-               Set s = getCombinedReleaseSet(adminArp, sharName, url, userName);
-               // go throu the set and find values for each attribute
+       }
+
+       private DirContext queryDataSource(Principal principal, String searchFilter)
+               throws AAException {
                try {
-                       Vector sAttrs = new Vector();
-                       Iterator it = s.iterator();
-                       while (it.hasNext()) {
-                               ArpAttribute aAttr = (ArpAttribute) it.next();
-                               Attribute dAttr = aAttr.getDirAttribute(userCtx, true);
-                               if (dAttr != null) {
-                                       SAMLAttribute sAttr = jndi2saml(dAttr, sharName);
-                                       if (sAttr != null) {
-                                               sAttrs.add(sAttr);
-                                       }
+                       try {
+                               return getUserContext(principal.getName(), searchFilter);
+                       } catch (CommunicationException ce) {
+                               synchronized (ctx) {
+                                       log.debug(ce);
+                                       log.warn(
+                                               "Encountered a connection problem while querying for attributes.  Re-initializing JNDI context and retrying...");
+                                       ctx = new InitialDirContext(ctx.getEnvironment());
                                }
+                               return getUserContext(principal.getName(), searchFilter);
                        }
-                       SAMLAttribute[] sa = new SAMLAttribute[sAttrs.size()];
-                       return (SAMLAttribute[]) sAttrs.toArray(sa);
                } catch (NamingException e) {
                        log.error(
-                               "An error occurred while retieving data for principal (" + userName + ") :" + e.getMessage());
-                       throw new AAException("Error retrieving data for principal (" + userName + ")");
+                               "An error occurred while retieving data for principal ("
+                                       + principal.getName()
+                                       + ") :"
+                                       + e.getMessage());
+                       throw new AAException("Error retrieving data for principal.");
                }
        }
 
-
-       private DirContext queryDataSource(String userName, String searchFilter)
+       private DirContext getUserContext(String userName, String searchFilter)
                throws CommunicationException, NamingException, AAException {
-                       
+
                DirContext userCtx = null;
                if (searchFilter == null) {
                        searchFilter = "";
@@ -208,174 +244,34 @@ public class AAResponder{
                return userCtx;
        }
 
+       private SAMLAttribute toSaml(ArpAttribute attribute, String recipient)
+               throws NamingException, AAException {
 
-       private Set getCombinedReleaseSet(Arp admin, String sharName, String url, String userName)
-               throws AAException {
-
-               try {
-                       Set adminSet;
-                       Set userSet;
-                       Arp userArp;
-
-                       userArp = arpFactory.lookupArp(userName, false);
-
-                       if (userArp == null) {
-                               // no user ARP just use the admin
-                               // only go throu and drop the exclude ones
-                               adminSet = getReleaseSet(adminArp, sharName, url, adminArp);
-                               Iterator it = adminSet.iterator();
-                               while (it.hasNext()) {
-                                       ArpAttribute attr = (ArpAttribute) it.next();
-                                       if (attr.mustExclude())
-                                               adminSet.remove(attr);
-                               }
-                               return adminSet;
-                       }
-
-                       adminSet = getReleaseSet(adminArp, sharName, url, adminArp);
-                       userSet = getReleaseSet(userArp, sharName, url, adminArp);
-                       // combine the two
-                       Iterator it = adminSet.iterator();
-                       while (it.hasNext()) {
-                               ArpAttribute aAttr = (ArpAttribute) it.next();
-                               if (aAttr.mustExclude()) {
-                                       userSet.remove(aAttr); // ok if not there
-                                       adminSet.remove(aAttr);
-                               }
-                               if (userSet.contains(aAttr)) {
-                                       // in both. Combine filters
-                                       ArpFilter f = combineFilters(aAttr, getAttr(userSet, aAttr));
-                                       log.info(
-                                               "Combining filters: "
-                                                       + aAttr.getFilter()
-                                                       + " AND "
-                                                       + getAttr(userSet, aAttr).getFilter()
-                                                       + " = "
-                                                       + f);
-                                       if (f != null)
-                                               aAttr.setFilter(f, true); // force it
-                                       userSet.remove(aAttr);
-                               }
-                       }
-                       adminSet.addAll(userSet);
-                       return adminSet;
-
-               } catch (ArpRepositoryException e) {
-                       log.error("Error while searching Arp Repository (" + arpFactory + ") : " + e.getMessage());
-                       throw new AAException("Unable to load user ARP.");
-               }
-
-       }                   
-                   
-
-    private Set getReleaseSet(Arp arp, String sharName, String url, Arp admin)
-       throws AAException{
-
-       boolean usingDefault = false;
-
-       log.info("using ARP: "+arp);
-
-       ArpShar shar = arp.getShar(sharName);
-       if(shar == null){
-           shar = admin.getDefaultShar();
-           usingDefault = true;
-       }
-       if(shar == null)
-           throw new AAException("No default SHAR.");
-
-       log.debug("\t using shar: "+shar+(usingDefault?"(default)":""));
-       log.debug("\t using url: "+url);
-
-       if(url == null || url.length() == 0)
-           throw new AAException("Given url to AA is null or blank");
-
-       ArpResource resource = shar.bestFit(url);
-       log.debug("\t\t best fit is: "+resource);
-       if(resource == null){
-           if(usingDefault)
-               return new HashSet(); // empty set
-
-           shar = admin.getDefaultShar();
-           if(shar == null)
-               throw new AAException("No default SHAR.");
-
-           resource = shar.bestFit(url);
-           if(resource == null)
-               return new HashSet(); // empty set
-       }
-       Set s = new HashSet();
-       ArpAttribute[] attrs = resource.getAttributes();
-       for(int i=0; i<attrs.length; i++){
-           log.info("\t\t\t attribute: "+attrs[i]+" FILTER: "+attrs[i].getFilter());
-           s.add(attrs[i]);
-       }
-       return s;
-    }
-
-    private ArpFilter combineFilters(ArpAttribute attr1, ArpAttribute attr2){
-
-       ArpFilter filt1 = attr1.getFilter();
-       ArpFilter filt2 = attr2.getFilter();
-       
-       if(filt1 == null)
-           return filt2;
-
-       if(filt2 == null)
-           return filt1;
-
-       ArpFilterValue[]  fv1Array = filt1.getFilterValues();
-       
-       for(int i=0; i<fv1Array.length; i++){
-           ArpFilterValue afv = fv1Array[i];
-
-           if(afv.mustInclude()){  // cannot be filtered out
-               filt2.removeFilterValue(afv); // ok if not there
-           }else{
-               filt2.addAFilterValue(afv);
-           }
-       }
-
-       return filt2;
-    
-    }
-    
-
-    private ArpAttribute getAttr(Set s, ArpAttribute a){
-       Iterator it = s.iterator();
-       while(it.hasNext()){
-           ArpAttribute attr = (ArpAttribute)it.next();
-           if(attr.equals(a))
-               return attr;
-       }
-       return null;
-    }
-    
-       private SAMLAttribute jndi2saml(Attribute jAttr, String recipient) throws NamingException, AAException {
-
-               if (jAttr == null) {
+               if (attribute == null) {
                        return null;
                }
 
-               log.debug("Converting Attribute (" + jAttr.getID() + ") to SAML.");
-               Vector vals = new Vector();
-
-               NamingEnumeration ne = jAttr.getAll();
-
-               while (ne.hasMore()) {
-                       vals.add(ne.next());
-               }
+               log.debug("Converting Attribute (" + attribute.getName() + ") to SAML.");
 
                try {
-                       Class attrClass = Class.forName("edu.internet2.middleware.shibboleth.aaLocal.attributes." + jAttr.getID());
+                       Class attrClass =
+                               Class.forName(
+                                       "edu.internet2.middleware.shibboleth.aaLocal.attributes."
+                                               + attribute.getName().substring(
+                                                       attribute.getName().lastIndexOf(":") + 1));
                        log.debug("Loaded the class for " + attrClass);
                        ShibAttribute sa = (ShibAttribute) attrClass.newInstance();
-                       return sa.toSamlAttribute(this.domain, vals.toArray(), recipient);
-                       
+                       return sa.toSamlAttribute(this.domain, attribute.getValues(), recipient);
+
                } catch (SAMLException e) {
-                       log.error("Error converting attribute to SAML (" + jAttr.getID() + ") :" + e.getMessage());
+                       log.error(
+                               "Error converting attribute to SAML ("
+                                       + attribute.getName()
+                                       + ") :"
+                                       + e.getMessage());
                        return null;
                } catch (Exception e) {
-                       log.error("Failed to load the class for attribute (" + jAttr.getID() + ") :" + e);
+                       log.error("Failed to load the class for attribute (" + attribute.getName() + ") :" + e);
                        return null;
                }
 
index 568f75e..ab1f4c3 100755 (executable)
@@ -50,6 +50,8 @@
 package edu.internet2.middleware.shibboleth.aa;
 
 import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.*;
 import javax.servlet.*;
 import javax.servlet.http.*;
@@ -58,6 +60,9 @@ import javax.naming.directory.*;
 import org.opensaml.*;
 import org.w3c.dom.*;
 import edu.internet2.middleware.shibboleth.*;
+import edu.internet2.middleware.shibboleth.aa.arp.AAPrincipal;
+import edu.internet2.middleware.shibboleth.aa.arp.ArpEngine;
+import edu.internet2.middleware.shibboleth.aa.arp.ArpException;
 import edu.internet2.middleware.shibboleth.common.*;
 import edu.internet2.middleware.shibboleth.hs.*;
 import edu.internet2.middleware.eduPerson.*;
@@ -81,7 +86,6 @@ public class AAServlet extends HttpServlet {
     String ctxFactory;
     AAResponder responder;
     HandleRepositoryFactory hrf;
-    ArpRepository arpFactory;
     private static Logger log = Logger.getLogger(AAServlet.class.getName());    
     
     public void init()
@@ -101,8 +105,16 @@ public class AAServlet extends HttpServlet {
             // build a properties object to be handed to ArpFactories
             // include all parameters :-(
             Enumeration en = getInitParameterNames();
+            
+            
+            
             Properties defaultProps = new Properties();
-            defaultProps.setProperty("edu.internet2.middleware.shibboleth.aa.FileArpRepository.Path", getServletContext().getRealPath("/WEB-INF/conf/arps"));
+            defaultProps.setProperty("edu.internet2.middleware.shibboleth.aa.arp.provider.FileSystemArpRepository.Path"
+               , getServletContext().getRealPath("/WEB-INF/conf/arps"));
+            defaultProps.setProperty("edu.internet2.middleware.shibboleth.aa.arp.ArpRepository.implementation"
+               , "edu.internet2.middleware.shibboleth.aa.arp.provider.FileSystemArpRepository");
+            
+            
             Properties props = new Properties(defaultProps);
             while(en.hasMoreElements()){
                 String key = (String)en.nextElement();
@@ -110,12 +122,8 @@ public class AAServlet extends HttpServlet {
                 props.setProperty(key, val);
             }
 
-            arpFactoryMethod = getInitParameter("arpFactoryMethod");
-                       if (arpFactoryMethod == null) {
-                               arpFactoryMethod = "edu.internet2.middleware.shibboleth.aa.FileArpRepository";  
-                       }
-   
-            arpFactory = ArpRepositoryFactory.getInstance(arpFactoryMethod, props);
+                       ArpEngine arpEngine = new ArpEngine(props);
+       
 
            log.info("Using "+ctxFactory+" as directory for attributes.");
 
@@ -130,7 +138,7 @@ public class AAServlet extends HttpServlet {
            
            DirContext ctx = new InitialDirContext(env);
            
-           responder = new AAResponder(arpFactory, ctx, myName);
+           responder = new AAResponder(arpEngine, ctx, myName);
 
            hrf = getHandleRepository();
 
@@ -139,6 +147,9 @@ public class AAServlet extends HttpServlet {
        }catch(NamingException ne){
            log.fatal("AA init failed: "+ne);
            throw new ServletException("Init failed: "+ne);
+       }catch(ArpException ae){
+           log.fatal("AA init failed: "+ae);
+           throw new ServletException("Init failed: "+ae);
        }catch(AAException ae){
            log.fatal("AA init failed: "+ae);
            throw new ServletException("Init failed: "+ae);
@@ -164,13 +175,19 @@ public class AAServlet extends HttpServlet {
        try{
            saml = new AASaml(myName);
            saml.receive(req);
-           String resource = saml.getResource();
-           String handle = saml.getHandle();
+           
+           URL resource = null; 
+           try {
+               resource = new URL(saml.getResource());
+           } catch (MalformedURLException mue) {
+               log.error("Request contained an improperly formatted resource identifier.  Attempting to "
+                       + "handle request without one.");
+           }
+           
            String shar = saml.getShar();
-           log.info("AA: handle:"+handle);
            log.info("AA: shar:"+shar);
-
-
+           String handle = saml.getHandle();
+               log.info("AA: handle:"+handle);
            if(handle.equalsIgnoreCase("foo")){
                // for testing only
                userName = "dummy"; 
@@ -185,7 +202,7 @@ public class AAServlet extends HttpServlet {
                }
            }
 
-           attrs = Arrays.asList(responder.getReleaseAttributes(userName, uidSyntax, handle, shar, resource));
+           attrs = Arrays.asList(responder.getReleaseAttributes(new AAPrincipal(userName), uidSyntax, shar, resource));
            log.info("Got " + attrs.size() + " attributes for " + userName);
            saml.respond(resp, attrs, null);
            log.info("Successfully responded about "+userName);
diff --git a/src/edu/internet2/middleware/shibboleth/aa/AA_Acl.java b/src/edu/internet2/middleware/shibboleth/aa/AA_Acl.java
deleted file mode 100755 (executable)
index b411385..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Access Control List for ARPs
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.util.*;
-import java.io.*;
-import java.security.acl.*;
-
-public class AA_Acl implements java.security.acl.Acl, Serializable{
-
-       static final long serialVersionUID = 1L;
-    HashSet positives;
-    HashSet negatives;
-    HashSet owners;
-    String name;
-
-    AA_Acl(String name, java.security.Principal root){
-       positives = new HashSet();
-       negatives = new HashSet();
-       owners = new HashSet();
-       this.name = name;
-       owners.add(root);
-    }
-
-    AA_Acl(Collection p, Collection n, String name, java.security.Principal root){
-       positives = new HashSet(p);
-       negatives = new HashSet(n);
-       owners = new HashSet();
-       this.name = name;
-       owners.add(root);
-    }
-
-    /////// Methods //////////
-
-    public boolean addEntry(java.security.Principal p, AclEntry entry)throws NotOwnerException{
-
-       if(this.isOwner(p) == false)
-           throw new NotOwnerException();
-       if(entry.isNegative()){
-           if(negatives.contains(entry)){
-               return false;
-           }else{
-               negatives.add(entry);
-               return true;
-           }
-       }else{  // is positive ACL
-           if(positives.contains(entry)){
-               return false;
-           }else{
-               positives.add(entry);
-               return true;
-           }
-       }
-    }
-
-    public boolean checkPermission(java.security.Principal user, java.security.acl.Permission perm){
-       for(Iterator it = positives.iterator(); it.hasNext();){
-           AclEntry entry = (AclEntry)it.next();
-           java.security.Principal p = entry.getPrincipal();
-           if(p.equals(user)){
-               if(entry.checkPermission(perm)){
-                   //make sure it is not in negative list
-                   for(Iterator it2 = negatives.iterator(); it2.hasNext();){
-                       AclEntry entry2 = (AclEntry)it2.next();
-                       java.security.Principal p2 = entry2.getPrincipal();
-                       if(p2.equals(user)){
-                           if(entry2.checkPermission(perm)){
-                               return false; // in both list
-                           }
-                           continue;
-                       }
-                   }
-                   // not in negative list
-                   return true;  // give permission
-               }else{
-                   continue;
-               }
-           }else{
-               continue;
-           }
-       }
-       return false;  // not in any positive entry
-    }
-
-    public Enumeration entries(){
-       return new AclEntryEnumeration(positives, negatives);
-    }
-
-    public String getName(){
-       return name;
-    }
-
-    public Enumeration getPermissions(java.security.Principal user){
-       return new AclPermissionEnumeration(user, positives, negatives);
-    }
-
-    public boolean removeEntry(java.security.Principal caller, AclEntry entry)
-    throws NotOwnerException{
-       
-       if(this.isOwner(caller) == false)
-           throw new NotOwnerException();
-       if(entry.isNegative()){
-           if(negatives.contains(entry)){
-               negatives.remove(entry);
-               return true;
-           }else{
-               return false;
-           }
-       }else{  // is positive ACL
-           if(positives.contains(entry)){
-               positives.remove(entry);
-               return true;
-           }else{
-               return false;
-           }
-       }
-    }
-
-
-    public void setName(java.security.Principal caller, String name)
-       throws NotOwnerException{
-       if(this.isOwner(caller) == false)
-           throw new NotOwnerException();
-       this.name = name;
-    }
-
-    public String toString(){
-       return name+
-           "{"
-           +positives
-           +"}{"
-           +negatives
-           +"}";
-
-    }
-
-    /////////// Owner methods ///////////////
-    public boolean addOwner(java.security.Principal caller, java.security.Principal owner)
-       throws NotOwnerException{
-       if(owners.contains(caller) == false)
-           throw new NotOwnerException();
-       return owners.add(owner);
-    }
-
-    public boolean deleteOwner(java.security.Principal caller, java.security.Principal owner)
-       throws NotOwnerException,
-        LastOwnerException{
-       if(owners.contains(caller) == false)
-           throw new NotOwnerException();
-       return owners.remove(owner);    
-    }
-
-    public boolean isOwner(java.security.Principal owner){
-       return owners.contains(owner);
-    }
-       
-    
-}
-class AclEntryEnumeration implements java.util.Enumeration{
-    HashSet entries;
-    Iterator it;
-
-    AclEntryEnumeration(HashSet p, HashSet n){
-       entries = p;
-       entries.addAll(n);  
-       it = entries.iterator();
-    }
-
-    public boolean hasMoreElements(){
-       return it.hasNext();
-    }
-
-    public Object nextElement(){
-       return it.next();
-    }
-}
-
-
-
-class AclPermissionEnumeration implements java.util.Enumeration{
-    HashSet permissions;
-    Iterator it;
-
-    AclPermissionEnumeration(java.security.Principal user, HashSet p, HashSet n){
-       permissions = new HashSet();
-       // go throu entries and find the one for this user
-       for(Iterator i = p.iterator(); i.hasNext();){
-           AclEntry ae = (AclEntry)i.next();
-           if(ae.getPrincipal().equals(user)){
-               // go throu permissions and add it to enum
-               for(Enumeration j=ae.permissions(); j.hasMoreElements();){
-                   permissions.add((Permission)j.nextElement());
-               }
-           }
-       }
-       // now go throu negatives and either add it or remove positve one
-       for(Iterator i = n.iterator(); i.hasNext();){
-           AclEntry ae = (AclEntry)i.next();
-           if(ae.getPrincipal().equals(user)){
-               // go throu permissions and check it
-               for(Enumeration j=ae.permissions(); j.hasMoreElements();){
-                   Permission perm = (Permission)j.nextElement();
-                   if(permissions.contains(perm)){
-                       permissions.remove(perm);
-                   }else{
-                       permissions.add(perm);
-                   }
-               }
-           }
-       }
-
-       it = permissions.iterator();
-    }
-
-    public boolean hasMoreElements(){
-       return it.hasNext();
-    }
-
-    public Object nextElement(){
-       return it.next();
-    }
-}
-
-
-
-
-
diff --git a/src/edu/internet2/middleware/shibboleth/aa/AA_AclEntry.java b/src/edu/internet2/middleware/shibboleth/aa/AA_AclEntry.java
deleted file mode 100755 (executable)
index 87caf2b..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Access Control List Entry for ARPs
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-import java.util.*;
-import java.io.*;
-import java.security.acl.*;
-import java.security.*;
-
-public class AA_AclEntry implements java.security.acl.AclEntry, Serializable{
-
-       static final long serialVersionUID = 1L;
-    HashSet permissions;
-    boolean isNegative;
-    Principal principal;
-
-    AA_AclEntry(Principal p){
-       permissions = new HashSet();
-       isNegative = false;
-       principal = p;
-    }
-
-    AA_AclEntry(Collection c, boolean n, Principal p){
-       permissions = new HashSet(c);
-       isNegative = n;
-       principal = p;
-    }
-
-    /////// Methods //////////
-
-    public boolean addPermission(java.security.acl.Permission p){
-       return permissions.add(p);
-    }
-
-    public boolean checkPermission(java.security.acl.Permission p){
-       if(permissions.contains(new AA_Permission(AA_Permission.ALL)))
-           return true;
-       boolean rc = permissions.contains(p);
-       return rc;
-    }
-
-    public Object clone(){
-       return new AA_AclEntry(permissions, isNegative, principal);
-    }
-
-    public Principal getPrincipal(){
-       return principal;
-    }
-
-    public boolean isNegative(){
-       return isNegative;
-    }
-
-    public Enumeration permissions(){
-       return new PermissionsEnumeration(permissions);
-    }
-
-    public boolean removePermission(java.security.acl.Permission p){
-       return permissions.remove(p);
-    }
-
-    public void setNegativePermissions(){
-       isNegative = true;
-    }
-
-    public boolean setPrincipal(Principal p){
-       if(principal != null){
-           return false;
-       }else{
-           principal = p;
-           return true;
-       }
-    }
-
-    public String toString(){
-       return (isNegative?"-":"+")
-           +principal
-           +"("
-           +permissions
-           +")";
-    }
-
-    public boolean equals(Object o){
-       AclEntry ae = (AclEntry)o;
-       if(this.principal.equals(ae.getPrincipal()) && 
-          (ae.isNegative() == isNegative))
-           return true;
-       return false;
-    }
-
-    public int hashCode(){
-       return principal.hashCode();
-    }
-          
-    
-}
-
-class PermissionsEnumeration implements java.util.Enumeration{
-    HashSet perms;
-    Iterator it;
-
-    PermissionsEnumeration(HashSet p){
-       perms = p;
-       it = perms.iterator();
-    }
-
-    public boolean hasMoreElements(){
-       return it.hasNext();
-    }
-
-    public Object nextElement(){
-       return it.next();
-    }
-}
-
-
-
-
-
diff --git a/src/edu/internet2/middleware/shibboleth/aa/AA_Identity.java b/src/edu/internet2/middleware/shibboleth/aa/AA_Identity.java
deleted file mode 100755 (executable)
index 394d08f..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Simple Identity class to get Access Control for  ARPs going.
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.security.*;
-import java.io.*;
-
-public class AA_Identity implements java.security.Principal, Serializable{
-
-       static final long serialVersionUID = 1L;
-    String ident;
-
-    public AA_Identity(String ident){
-       this.ident = ident;
-    }
-
-    /////// Methods //////////
-
-    public boolean equals(Object o){
-       return (ident.equalsIgnoreCase(o.toString()));
-    }
-
-    public String getName(){
-       return ident;
-    }
-
-    public String toString(){
-       return ident;
-    }
-    public int hashCode(){
-       return ident.hashCode();
-    }
-}
-
-
-
-
-
diff --git a/src/edu/internet2/middleware/shibboleth/aa/AA_Permission.java b/src/edu/internet2/middleware/shibboleth/aa/AA_Permission.java
deleted file mode 100755 (executable)
index d75cb7a..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Simple permissions on ARPs
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.security.acl.*;
-import java.io.*;
-public class AA_Permission implements java.security.acl.Permission, Serializable{
-
-       static final long serialVersionUID = 1L;
-    protected static int LOOKUP = 0;
-    protected static int READ = 1;
-    protected static int WRITE = 2;
-    protected static int INSERT = 3;
-    protected static int DELETE = 4;
-    protected static int ALL = 5;
-
-    protected static String names[] = {
-       "LOOKUP",
-       "READ",
-       "WRITE",
-       "INSERT",
-       "DELETE",
-       "ALL"};
-
-
-    int permission;
-
-    AA_Permission(int p){
-       permission = p;
-    }
-
-    /////// Methods //////////
-
-    public boolean equals(Object o){
-       return (permission == ((AA_Permission)o).getIntVal());
-    }
-
-    public int getIntVal(){
-       return permission;
-    }
-
-    public String toString(){
-       return names[permission];
-    }
-    public int hashCode(){
-       return permission+1;
-    }
-}
-
-
-
-
-
diff --git a/src/edu/internet2/middleware/shibboleth/aa/Arp.java b/src/edu/internet2/middleware/shibboleth/aa/Arp.java
deleted file mode 100755 (executable)
index a9ef311..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Attribute Release Policy for a User
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.io.*;
-import java.util.*;
-import java.security.Principal;
-import java.security.acl.*;
-
-public class Arp extends ArpCore implements Serializable{
-       
-       static final long serialVersionUID = 1L;
-
-    // Attributes
-    protected String name;
-    protected boolean isAdmin;
-    private boolean everWritten = false;
-    private Date lastRead;
-    private boolean hasDefaultShar = false;
-    private ArpShar defaultShar;
-
-    // Associations
-    protected Vector  shars;
-
-    // Constructors
-    public Arp(String name, boolean isAdmin)
-       throws NotOwnerException{
-
-       this.name = name;
-       this.isAdmin = isAdmin;
-       shars  = new Vector();
-       makeAcl("arpAcl");
-    }
-
-    // Operations
-    public boolean isNew(){
-       return !everWritten;
-    }
-
-    public void setNew(boolean b){
-       everWritten = !b;
-    }
-
-    public void setLastRead(Date d){
-       lastRead = d;
-    }
-
-    public Date getLastRead(){
-       return lastRead;
-    }
-
-    /**
-     * Add a new SHAR to the list of SHARs for this ARP.
-     * returns false and does not replace if SHAR already exists.
-     */
-    public boolean addAShar(String name, boolean isDefault)
-       throws NotOwnerException,AAPermissionException, AAException{
-
-       if(isDefault && hasDefaultShar)
-           throw new AAException("Already has a Default SHAR");
-
-       ArpShar newShar = new ArpShar(name, isDefault);
-       if(shars.contains(newShar))
-           return false; // already there
-       if(! insertPermitted())
-           throw new AAPermissionException("No INSERT right for "+getCaller());
-       shars.add(newShar);
-       if(isDefault){
-           hasDefaultShar = true;
-           defaultShar = newShar;
-       }
-       return true;
-    }
-
-    /**
-     * Add the given SHAR to the list of SHARs for this ARP.
-     * returns false and does not replace if SHAR already exists.
-     */
-    public boolean addAShar(ArpShar shar)
-       throws AAPermissionException, AAException{
-
-       return addAShar(shar, false);
-    }
-
-    /**
-     * Adds the given shar to the shars for this Arp.
-     * if force flag is true and shar already exists
-     * then replaces the existing reource otherwise leaves the existing 
-     * shar untouched.  
-     * returns false if reource already existed.
-     * Throws AAPermissionException if caller is not permitted to insert or replace.
-     */
-    public boolean addAShar(ArpShar shar, boolean force)
-       throws AAPermissionException, AAException {
-               
-       if(shars.contains(shar)){
-           if(force){
-               if(! replacePermitted())
-                   throw new AAPermissionException("No replace right for "+getCaller());
-               shars.remove(shar);
-               shars.add(shar);
-           }
-           return false; // already there
-       }
-       if(! insertPermitted())
-           throw new AAPermissionException("No INSERT right for "+getCaller());
-       if(shar.isDefault() &&  hasDefaultShar)
-           throw new AAException("Already has a Default SHAR");
-
-       shars.add(shar);
-       if(shar.isDefault()){
-           hasDefaultShar = true;
-           defaultShar = shar;
-       }
-       return true;
-    }
-
-
-
-    public boolean removeAShar(String name)
-       throws NotOwnerException, AAPermissionException{
-
-       ArpShar newShar = new ArpShar(name, false);
-       if(shars.contains(newShar)){
-           if(! removePermitted())
-               throw new AAPermissionException("No DELETE rights for "+getCaller());
-           shars.remove(newShar);
-           if(hasDefaultShar && newShar.equals(defaultShar)){
-               defaultShar = null;
-               hasDefaultShar = false;
-           }
-           return true;
-       }
-       return false; // not found
-    }
-
-
-    public ArpShar getShar(String name) {
-       Enumeration en = shars.elements();
-       while(en.hasMoreElements()){
-           ArpShar aShar = (ArpShar)en.nextElement();
-           if(aShar.getName().equals(name))
-               return aShar;
-       }
-       return null;
-    }
-
-    public ArpShar[] getShars() {
-       int len = shars.size();
-       ArpShar[] a = new ArpShar[len];
-       for(int i = 0; i < len; i++)
-           a[i] = (ArpShar)shars.get(i);
-       return a;
-    }
-
-    public ArpShar getDefaultShar(){
-       return defaultShar;
-    }
-
-    public String getName(){
-       return name;
-    }
-
-    //public void setAcl(Acl acl){
-    //this.acl = acl;
-    //}
-
-    public String toString(){
-       return name+(isAdmin?"(admin)":"");
-    }
-
-    public boolean isAdmin(){
-       return isAdmin;
-    }
-
-    public boolean equals(Object arp){
-       return name.equals(((Arp)arp).getName());
-    }
-
-} /* end class Arp */
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpAttribute.java b/src/edu/internet2/middleware/shibboleth/aa/ArpAttribute.java
deleted file mode 100755 (executable)
index 8c376ed..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Attribute node in ARP tree.
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.io.*;
-import java.util.*;
-import javax.naming.directory.*;
-
-public class ArpAttribute implements Serializable{
-
-       static final long serialVersionUID = 1L;
-       
-    // Attributes
-    protected String ID;
-    protected boolean exclude;
-
-    // Associations
-    protected ArpFilter filter;
-
-    // Constructor
-    public ArpAttribute(String ID, boolean exclude){
-       this.ID = ID;
-       this.exclude = exclude;
-    }
-
-    // Operations
-    public Attribute getDirAttribute(DirContext ctx, boolean doFilter)
-       throws javax.naming.NamingException{
-
-       String[] ids = new String[1];
-       ids[0] = ID;
-       Attributes attrs = ctx.getAttributes("", ids);
-       Attribute attr = attrs.get(ID);
-
-       if(doFilter && hasFilter()){
-           ArpFilterValue[] fvArray = filter.getFilterValues();
-           for(int i=0; i < fvArray.length; i++){
-               if(fvArray[i].mustInclude())
-                   ; //skip. do not filter.
-               else
-                   attr.remove(fvArray[i].getValue());
-           }
-       }
-       return attr;
-    }
-
-
-    public String getName(){
-       return ID;
-    }
-
-    /**
-     * lists all known attribute names.  Probably by consulting a 
-     * database or LDAP schemas
-     */
-    public String[] list(){
-       return null;
-    }
-
-    public boolean hasFilter(){
-       if(filter == null)
-           return false;
-       return true;
-    }
-
-    public ArpFilter getFilter(){
-       return filter;
-    }
-
-    /**
-     * sets a filter for this attribute.  returns true if succeeds
-     * returns false if there is already a filter set.
-     * If flag Force is true it replaces the existing filter,
-     * otherwise does not replace the existing filter.
-     */
-    public boolean setFilter(ArpFilter filter, boolean force){
-       if(hasFilter()){
-           if(force)
-               this.filter = filter;
-           return false;
-       }
-       this.filter = filter;
-       return true;
-    }
-    
-    public boolean mustExclude(){
-       return exclude;
-    }
-
-    public boolean equals(Object attr){
-       return ID.equals(((ArpAttribute)attr).getName());
-    }
-
-    public int hashCode(){
-       return ID.hashCode();
-    }
-
-    public String toString(){
-       return ID+(exclude?"(exclude)":"");
-    }
-
-} /* end class ArpAttribute */
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpCore.java b/src/edu/internet2/middleware/shibboleth/aa/ArpCore.java
deleted file mode 100755 (executable)
index 2552bfe..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Core structure for all ARP nodes
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.util.Enumeration;
-import java.security.Principal;
-import java.security.acl.*;
-import java.io.Serializable;
-
-public class ArpCore implements Serializable{
-
-       static final long serialVersionUID = 1L;
-       
-    // Attributes
-    protected String userEnv = "user.name";
-    protected Acl acl;
-
-    // Associations
-
-    // Constructors
-
-
-    // Operations
-    public Principal getCaller(){
-       // return new KerberosPrincipal(System.getProperty(userEnv));
-       return new AA_Identity(System.getProperty(userEnv));
-    }
-
-    public void makeAcl(String name)throws NotOwnerException{
-       Principal owner = getCaller();
-       acl = new AA_Acl(name, owner);
-       AclEntry entry = new AA_AclEntry(owner);
-       entry.addPermission(new AA_Permission(AA_Permission.ALL));
-       acl.addEntry(owner, entry);
-    }
-
-
-    public Acl getAcl(){
-       return acl;
-    }
-
-    public void setAcl(String user, String permit)
-       throws AAPermissionException, NotOwnerException{
-
-       Principal prince = new AA_Identity(user);
-       if(permit.equalsIgnoreCase("NONE")){
-           setAcl(prince, null);
-           return;
-       }
-       String[] permitNames = AA_Permission.names;
-       for(int i=0; i < permitNames.length; i++){
-           if(permitNames[i].equalsIgnoreCase(permit)){
-               setAcl(prince, new AA_Permission(i));
-               return;
-           }
-       }
-       throw new AAPermissionException("No such ACL: "+permit);
-    }
-
-    public void setAcl(Principal user, Permission permit)
-       throws NotOwnerException, AAPermissionException{
-
-       if(!setAclPermitted())
-           throw new AAPermissionException("ALL access is needed to set ACL.");
-       if(permit == null){
-           AclEntry entry = getAclEntry(user);
-           if(entry == null)
-               throw new AAPermissionException("No ACL entry found for user: "+user);
-           if(!acl.removeEntry(getCaller(), entry))
-               throw new AAPermissionException("No ACL entry found. System Eror");
-           return;
-       }
-
-       if(acl.checkPermission(user, permit))
-           return; // already has it
-       AclEntry entry = getAclEntry(user);
-       if(entry == null){
-           entry = new AA_AclEntry(user);
-           entry.addPermission(permit);
-           acl.addEntry(getCaller(), entry);
-       }else{
-           entry.addPermission(permit);
-       }
-       return;
-    }
-
-    private AclEntry getAclEntry(Principal user){
-       AclEntry entry = null;
-
-       Enumeration en = acl.entries();
-       while(en.hasMoreElements()){
-           entry = (AclEntry)en.nextElement();
-           if(entry.getPrincipal().equals(user))
-               return entry;
-       }
-       return null;
-    }
-
-       
-    /**
-     * Check to see if caller has permission to remove and insert (i.e replace) for this object.
-     * Returns true if permitted.
-     */
-    
-    public boolean replacePermitted(){
-       Permission rm = new AA_Permission(AA_Permission.DELETE);
-       Permission add = new AA_Permission(AA_Permission.INSERT);
-       Principal user = getCaller();
-       if(acl.checkPermission(user, rm) && acl.checkPermission(user, add))
-           return true;
-       return false;
-    }
-
-    public boolean insertPermitted(){
-       Permission add = new AA_Permission(AA_Permission.INSERT);
-       if(acl.checkPermission(getCaller(), add))
-           return true;
-       return false;
-    }
-
-    public boolean removePermitted(){
-       Permission rm = new AA_Permission(AA_Permission.DELETE);
-       if(acl.checkPermission(getCaller(), rm))
-           return true;
-       return false;
-    }
-
-    public boolean setAclPermitted(){
-       Permission all = new AA_Permission(AA_Permission.ALL);
-       if(acl.checkPermission(getCaller(), all))
-           return true;
-       return false;
-    }
-
-
-           
-
-
-} /* end class ArpCore */
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpFilter.java b/src/edu/internet2/middleware/shibboleth/aa/ArpFilter.java
deleted file mode 100755 (executable)
index bb55246..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Filter node in the ARP tree.
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.io.*;
-import java.util.*;
-public class ArpFilter implements Serializable{
-
-       static final long serialVersionUID = 1L;
-       
-    // Associations
-    protected Vector values;
-    
-    // Constructor
-    public ArpFilter(){
-       values = new Vector();
-    }
-
-    // Operations
-    public ArpFilterValue[] getFilterValues() {
-       ArpFilterValue[] afva = new ArpFilterValue[values.size()];
-       return (ArpFilterValue[])values.toArray(afva);
-    }
-
-    public boolean addAFilterValue(ArpFilterValue afv) {
-       return addAFilterValue(afv, false);
-    }
-
-    /**
-     * Adds the given value to the values for this Filter.
-     * if force flag is true and value already exists
-     * then replaces the existing reource otherwise leaves the existing 
-     * value untouched.  
-     * returns false if reource already existed.
-     */
-    public boolean addAFilterValue(ArpFilterValue afv, boolean force) {
-       if(values.contains(afv)){
-           if(force){
-               values.remove(afv);
-               values.add(afv);
-           }
-           return false; // already there
-       }
-       values.add(afv);
-       return true;
-    }
-
-    public boolean removeFilterValue(ArpFilterValue afv) {
-       if(values.contains(afv)){
-           values.remove(afv);
-           return true;
-       }
-       return false; // not found
-    }
-
-    public boolean contains(ArpFilterValue afv) {
-       return values.contains(afv);
-    }
-
-    public ArpFilterValue[] getInclusions() {
-       Vector incs = new Vector();
-       Enumeration en = values.elements();
-       while(en.hasMoreElements()){
-           ArpFilterValue afv = (ArpFilterValue)en.nextElement();
-           if(afv.mustInclude())
-               incs.add(afv);
-       }
-       return (ArpFilterValue[])incs.toArray();
-    }
-    
-    public String toString(){
-       StringBuffer buf = new StringBuffer();
-       Enumeration en = values.elements();
-       while(en.hasMoreElements()){
-           buf.append((ArpFilterValue)en.nextElement());
-           buf.append(", ");
-       }
-       return buf.toString();
-    }
-       
-
-} /* end class ArpFilter */
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpFilterValue.java b/src/edu/internet2/middleware/shibboleth/aa/ArpFilterValue.java
deleted file mode 100755 (executable)
index f4c6f1d..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  ARP representation of an attribute value
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.io.*;
-public class ArpFilterValue implements Serializable{
-
-       static final long serialVersionUID = 1L;
-       
-    // Associations
-    protected Object value;
-    protected boolean include;
-
-
-    // Constructor
-    public ArpFilterValue(Object value, boolean include){
-       this.value = value;
-       this.include = include;
-    }
-
-    // Operations
-
-    public boolean mustInclude(){
-       return include; 
-    }
-
-    public Object getValue(){
-       return value;
-    }
-    
-    public boolean equals(Object afv){
-       return value.equals(((ArpFilterValue)afv).getValue());
-    }
-
-    public String toString(){
-       return value+(include?"(include)":"");
-    }
-
-} /* end class ArpFilterValue */
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpRepository.java b/src/edu/internet2/middleware/shibboleth/aa/ArpRepository.java
deleted file mode 100755 (executable)
index 022caed..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Defines interaction with an ARP storage/retrieval mechanism.
- *
- * @author Parviz Dousti (dousti@cmu.edu)
- * @author Walter Hoehn (wassa@columbia.edu)
- */
-
-public interface ArpRepository {
-
-       /**
-        * Searches the repository for the named ARP.
-        * @return an instance of <code>Arp</code> or null
-        *  if the ARP is not found in the repository 
-        */
-
-       public Arp lookupArp(String arpName, boolean isDefault) throws ArpRepositoryException ;
-
-       /**
-        * If an ARP is found in the repository that matches the results of getName(), 
-        * it is replaced with the specified ARP.  If not, the specified ARP is added to the repository
-        */
-
-       public void update(Arp arp) throws ArpRepositoryException;
-
-       /**
-        * Removes the specified ARP from the repository if it exists
-        */
-
-       public void remove(Arp arp) throws ArpRepositoryException;
-
-}
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpRepositoryException.java b/src/edu/internet2/middleware/shibboleth/aa/ArpRepositoryException.java
deleted file mode 100755 (executable)
index f0dbc37..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* 
- * 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;
-/**
- * Indicates an error occurred while manipulating an Arp Repository
- * 
- * @author Walter Hoehn (wassa@columbia.edu)
- */
-
-class ArpRepositoryException extends Exception {
-       
-       ArpRepositoryException(String message) {
-               super(message); 
-       }       
-
-}
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpRepositoryFactory.java b/src/edu/internet2/middleware/shibboleth/aa/ArpRepositoryFactory.java
deleted file mode 100755 (executable)
index fb20e6d..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/* 
- * 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;
-
-import java.lang.reflect.Constructor;
-import java.util.Properties;
-
-import org.apache.log4j.Logger;
-
-/**
- * Factory for generating instances of <code>ArpRepository</code>.  Configuration
- * is delegated to the Arp Repository.  Runtime options are passed to conrecte constructors
- * via a <code>Properties</code> object.
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-public class ArpRepositoryFactory {
-
-       private static Logger log = Logger.getLogger(ArpRepositoryFactory.class.getName());
-
-       public static ArpRepository getInstance(String repositoryClassName, Properties props)
-               throws AAException {
-
-               try {
-                       Class implementorClass = Class.forName(repositoryClassName);
-                       Class[] params = new Class[1];
-                       params[0] = Class.forName("java.util.Properties");
-                       Constructor implementorConstructor = implementorClass.getConstructor(params);
-                       Object[] args = new Object[1];
-                       args[0] = props;
-                       log.debug("Initializing Arp Repository of type (" + implementorClass.getName() + ").");
-                       return (ArpRepository) implementorConstructor.newInstance(args);
-
-               } catch (Exception e) {
-                       log.error("Failed to instantiate an Arp Repository: " + e.getMessage());
-                       throw new AAException("Failed to instantiate an Arp Repository.");
-
-               }
-       }
-}
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpResource.java b/src/edu/internet2/middleware/shibboleth/aa/ArpResource.java
deleted file mode 100755 (executable)
index 43f4813..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Resource (or URL) node in the ARP tree.
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-
-import java.io.*;
-import java.util.*;
-import java.security.acl.*;
-
-public class ArpResource extends ArpCore implements Serializable{
-
-       static final long serialVersionUID = 1L;
-       
-    // Attributes
-    protected String name;
-    protected String comment;
-
-    // Associations
-    protected TName tName;
-    protected Vector attributes;
-    protected AA_Acl acl;
-
-    // constructors
-    public ArpResource(String name) throws NotOwnerException{
-       this.name = name;
-       tName = new TName(name);
-       attributes = new Vector();
-       makeAcl("resourceAcl");
-    }
-
-    public ArpResource(String name, String comment) throws NotOwnerException{
-       this(name);
-       this.comment = comment;
-    }
-
-
-    // Operations
-    public String toString() {
-       return name+" ["+tName+"]";
-    }
-
-
-    public boolean addAnAttribute(String name, boolean exclude)
-       throws AAPermissionException{
-
-       if(attributes.contains(new ArpAttribute(name, exclude)))
-           return false; // already there
-       if(! insertPermitted())
-           throw new AAPermissionException("No INSERT right for "+getCaller());
-       attributes.add(new ArpAttribute(name, exclude));
-       return true;
-    }
-
-    public boolean addAnAttribute(ArpAttribute attr)
-       throws AAPermissionException{
-       return addAnAttribute(attr, false);
-    }
-
-    /**
-     * Adds the given attribute to the attributes for this Resource.
-     * if force flag is true and attribute already exists
-     * then replaces the existing reource otherwise leaves the existing 
-     * attribute untouched.  
-     * returns false if reource already existed.
-     */
-    public boolean addAnAttribute(ArpAttribute attr, boolean force)
-       throws AAPermissionException {
-
-       if(attributes.contains(attr)){
-           if(force){
-               if(! replacePermitted())
-                   throw new AAPermissionException("No replace right for "+getCaller());               
-               attributes.remove(attr);
-               attributes.add(attr);
-           }
-           return false; // already there
-       }
-       if(! insertPermitted())
-           throw new AAPermissionException("No INSERT right for "+getCaller());        
-       attributes.add(attr);
-       return true;
-    }
-
-    public boolean removeAnAttribute(String name)
-       throws AAPermissionException {
-
-       if(attributes.contains(new ArpAttribute(name, false))){
-           if(! insertPermitted())
-               throw new AAPermissionException("No DELETE right for "+getCaller());        
-           attributes.remove(new ArpAttribute(name, false));
-           return true;
-       }
-       return false; // not found
-    }
-
-    public ArpAttribute getAttribute(String name) {
-       Enumeration en = attributes.elements();
-       while(en.hasMoreElements()){
-           ArpAttribute aAttribute = (ArpAttribute)en.nextElement();
-           if(aAttribute.getName().equals(name))
-               return aAttribute;
-       }
-       return null;
-    }
-
-    public ArpAttribute[] getAttributes() {
-       int len = attributes.size();
-       ArpAttribute[] a = new ArpAttribute[len];
-       for(int i = 0; i < len; i++)
-           a[i] = (ArpAttribute)attributes.get(i);
-       return a;
-    }
-
-
-    public int fit(String resrcName) {
-       TName tn = new TName(resrcName);
-       return tName.compare(tn);
-    }
-
-    public TName getTName(){
-       return tName;
-    }
-
-    public String getName(){
-       return name;
-    }
-
-    public String getComment(){
-       return comment;
-    }
-
-    public void setComment(String s){
-       this.comment = s;
-    }
-
-    public boolean equals(Object rsrc){
-       return name.equals(((ArpResource)rsrc).getName());
-    }
-
-} /* end class ArpResource */
diff --git a/src/edu/internet2/middleware/shibboleth/aa/ArpShar.java b/src/edu/internet2/middleware/shibboleth/aa/ArpShar.java
deleted file mode 100755 (executable)
index 68ecda3..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Shar node in ARP tree.
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-import java.io.*;
-import java.util.*;
-import java.security.acl.*;
-
-public class ArpShar extends ArpCore implements Serializable{
-
-       static final long serialVersionUID = 1L;
-
-    // Attributes
-    protected String name;
-    protected boolean isDefault;
-
-    // Associations
-    protected Vector  resources;
-    protected AA_Acl acl;
-
-    // Construstor
-    public ArpShar(String name, boolean isDefault)throws NotOwnerException{
-       this.name = name;
-       this.isDefault = isDefault;
-       resources  = new Vector();
-       makeAcl("sharAcl");
-    }
-
-    // Operations
-    public String toString() {
-       return name+(isDefault?"(default)":"");
-    }
-
-    public boolean isDefault(){
-       return isDefault;
-    }
-
-    public boolean addAResource(String url)
-       throws NotOwnerException,AAPermissionException{
-
-       if(resources.contains(new ArpResource(url)))
-           return false; // already there
-
-       if(! insertPermitted())
-           throw new AAPermissionException("No INSERT right for "+getCaller());
-
-       resources.add(new ArpResource(url));
-       return true;
-    }
-
-    /**
-     * Adds a given resource to the resources for this Shar.
-     * Does not replace if resource already exists.
-     * returns false if resource already exists.
-     */
-
-    public boolean addAResource(ArpResource rsrc) 
-       throws AAPermissionException{
-       return addAResource(rsrc, false);
-    }
-
-    /**
-     * Adds the given resource to the resources for this Shar.
-     * if force flag is true and resource already exists
-     * then replaces the existing reource otherwise leaves the existing 
-     * resource untouched.  
-     * returns false if reource already existed.
-     */
-    public boolean addAResource(ArpResource rsrc, boolean force)
-       throws AAPermissionException{
-
-       if(resources.contains(rsrc)){
-           if(force){
-               if(! replacePermitted())
-                   throw new AAPermissionException("No replace right for "+getCaller());
-               resources.remove(rsrc);
-               resources.add(rsrc);
-           }
-           return false; // already there
-       }
-       if(! insertPermitted())
-           throw new AAPermissionException("No INSERT right for "+getCaller());
-       resources.add(rsrc);
-       return true;
-    }
-
-    public boolean removeAResource(String url)
-       throws NotOwnerException, AAPermissionException{
-       if(resources.contains(new ArpResource(url))){
-           if(! removePermitted())
-               throw new AAPermissionException("No DELETE right for "+getCaller());
-           resources.remove(new ArpResource(url));
-           return true;
-       }
-       return false; // not found
-    }
-
-    public ArpResource getResource(String url) {
-       Enumeration en = resources.elements();
-       while(en.hasMoreElements()){
-           ArpResource aResource = (ArpResource)en.nextElement();
-           if(aResource.getName().equals(url))
-               return aResource;
-       }
-       return null;
-    }
-
-    public ArpResource[] getResources() {
-       int len = resources.size();
-       ArpResource[] a = new ArpResource[len];
-       for(int i = 0; i < len; i++)
-           a[i] = (ArpResource)resources.get(i);
-       return a;
-    }
-
-
-    /**
-     * Go throu all resource objects and find the one that
-     * best matches the given url.  This is based on comparison 
-     * of TNames of urls provided by fit method of ArpResource.
-     *
-     * returns an ArpResource or null if no match found;
-     */
-    public ArpResource bestFit(String url) {
-
-       ArpResource[] ara = new ArpResource[resources.size()];
-       ara = (ArpResource[])resources.toArray(ara);
-       int bestScore = 0;
-       ArpResource bestResource = null;
-       for(int i=0; i < ara.length; i++){
-           int score =  ara[i].fit(url);
-           if(score > bestScore){
-               bestScore = score;
-               bestResource = ara[i];
-           }
-       }
-       return bestResource;
-    }
-
-    public String getName(){
-       return name;
-    }
-
-    public boolean equals(Object shar){
-       return name.equals(((ArpShar)shar).getName());
-    }
-
-} /* end class ArpShar */
diff --git a/src/edu/internet2/middleware/shibboleth/aa/FileArpRepository.java b/src/edu/internet2/middleware/shibboleth/aa/FileArpRepository.java
deleted file mode 100755 (executable)
index 1fd2933..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/* 
- * 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;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.security.acl.NotOwnerException;
-import java.util.Date;
-import java.util.Properties;
-
-import org.apache.log4j.Logger;
-
-/**
- *  Attribute Authority & Release Policy
- *  File implementation of a repository for ARPs
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-public class FileArpRepository implements ArpRepository {
-
-       private String dataStorePath;
-       private static Logger log = Logger.getLogger(FileArpRepository.class.getName());
-       public FileArpRepository(Properties props) throws ArpRepositoryException {
-               
-               if (props.getProperty("edu.internet2.middleware.shibboleth.aa.FileArpRepository.Path", null) == null) {
-                       log.error("Cannot initialize FileArpRepository: attribute (edu.internet2.middleware.shibboleth.aa.FileArpRepository.Path) not specified");
-                       throw new ArpRepositoryException("Cannot initialize FileArpRepository");
-               }
-               
-               File givenPath = new File(props.getProperty("edu.internet2.middleware.shibboleth.aa.FileArpRepository.Path"));
-               if (!givenPath.isDirectory()) {
-                       log.error("Cannot initialize FileArpRepository: specified path is not a directory.");
-                       throw new ArpRepositoryException("Cannot initialize FileArpRepository");                
-               }
-               
-               log.info("Initializing File Arp Repository with a root of (" + givenPath.getAbsolutePath() + ").");
-               dataStorePath = props.getProperty("edu.internet2.middleware.shibboleth.aa.FileArpRepository.Path");
-       }
-
-       public Arp lookupArp(String arpName, boolean isAdmin) throws ArpRepositoryException {
-               try {
-
-                       String fileName = dataStorePath + System.getProperty("file.separator") + arpName;
-                       log.info("Searching for ARP " + arpName);
-                       log.debug("Looking at : " + fileName);
-                       
-                       File arpFile = new File(fileName);
-                       if (!arpFile.exists()) {
-                               log.info("No ARP matching (" + arpName + ") exists in the ARP Repository.");
-                               return null;    
-                       }
-
-                       FileInputStream f = new FileInputStream(fileName);
-                       ObjectInput s = new ObjectInputStream(f);
-                       Arp arp = (Arp) s.readObject();
-                       if (!arpName.equals(arp.getName())) {
-                               log.warn("Unexpected ARP name: expected - (" + arpName + ") actual - (" + arp.getName() + ")");
-                       }
-                       arp.setNew(false);
-                       arp.setLastRead(new Date());
-                       log.info("Found ARP (" + arpName + ").");
-                       return arp;
-               } catch (FileNotFoundException fnfe) {
-                       log.error("Unable to read ARP storage: " + fnfe.getMessage());
-                       throw new ArpRepositoryException("Unable to read ARP storage.");                        
-               } catch (IOException ioe) {
-                       log.error("Unable to unmarshall ARP from file: " + ioe.getMessage());
-                       throw new ArpRepositoryException("Unable to unmarshall ARP.");  
-               } catch (ClassNotFoundException cnfe) {
-                       log.error("Serious Problem! Unable to unmarhsall ARP because (Arp) class not found: " + cnfe.getMessage());
-                       throw new ArpRepositoryException("Unable to unmarshall ARP.");  
-               }
-       }
-
-       public void update(Arp arp) throws ArpRepositoryException {
-
-               try {
-                       String fileName = dataStorePath + System.getProperty("file.separator") + arp.getName();
-                       FileOutputStream f = new FileOutputStream(fileName);
-                       ObjectOutput s = new ObjectOutputStream(f);
-                       s.writeObject(arp);
-                       s.flush();
-                       arp.setNew(false);
-               } catch (FileNotFoundException e) {
-                       log.error("Unable to write ARP to file:" + e.getMessage());
-                       throw new ArpRepositoryException("Unable to update ARP.");
-               } catch (IOException ioe) {
-                       log.error("Error serializing ARP:" + ioe.getMessage());
-                       throw new ArpRepositoryException("Unable to update ARP.");
-               }
-       }
-
-       public void remove(Arp arp) throws ArpRepositoryException {
-               try {
-               String fileName = dataStorePath + System.getProperty("file.separator") + arp.getName();
-               File f = new File(fileName);
-               f.delete();
-               } catch (SecurityException e) {
-                       log.error("Cannot write ARP with current Security Manager configuration" + e.getMessage());
-                       throw new ArpRepositoryException("Unable to remove ARP.");
-               }
-       }
-
-       public String toString() {
-               return "FileArpRepository:dir=" + dataStorePath;
-       }
-}
diff --git a/src/edu/internet2/middleware/shibboleth/aa/TName.java b/src/edu/internet2/middleware/shibboleth/aa/TName.java
deleted file mode 100755 (executable)
index 48f8425..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/* 
- * 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;
-
-/**
- *  Attribute Authority & Release Policy
- *  Tokenized form of a resource.
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-import java.io.*;
-import java.util.*;
-class TName implements Serializable{
-
-       static final long serialVersionUID = 1L;
-       
-    // Attributes
-    private String name;
-    private String[] tokens;
-    final static String WILD = "*";
-
-    // Associations
-    protected ArpResource myArpResource;
-
-    // Constructors
-    /** 
-     * This class is a tokenized reprezentation of a URL so 
-     * URLs can be compared against each other and see what is
-     * the best match or best fit.
-     */
-    TName(String url){
-       // break down the url and store it in a String[]
-       if(url.startsWith("http://"))
-           url = url.substring(7);
-       if(url.startsWith("https://"))
-           url = url.substring(8);
-
-       int i = 0;
-       StringTokenizer slash = new StringTokenizer(url, ":/\\");
-       if(slash.hasMoreTokens()){
-           // first element generally host name
-           String hostname = slash.nextToken();
-           StringTokenizer dot = new StringTokenizer(hostname, ".");
-           int count = dot.countTokens();
-           tokens = new String[count+slash.countTokens()];
-           for(int n = count; n > 0;  n--){
-               tokens[n-1] = dot.nextToken();
-           }
-           i += count;
-       }
-       while(slash.hasMoreTokens()){
-           tokens[i++] = slash.nextToken();
-       }
-    }
-
-    // Operations
-    public String[] getTokens() {
-       return tokens;
-    }
-
-    public int compare(TName t){
-       String[] gTokens = t.getTokens();
-       int len = tokens.length;
-       int glen = gTokens.length;
-       if(len == 0 || glen == 0)
-           return 0;
-       for(int i=0; i<Math.min(len, glen); i++){
-           if(tokens[i].equalsIgnoreCase(gTokens[i]))
-               continue;
-           if(tokens[i].equals(WILD) || gTokens[i].equals(WILD))
-               continue;
-           return 0;
-       }
-       return Math.min(len,glen);
-    }
-    
-    public String toString(){
-       StringBuffer buf = new StringBuffer();
-       int len =tokens.length;
-       for(int i = 0; i < len-1; i++){
-           buf.append(tokens[i]);
-           buf.append(", ");
-       }
-       if(len > 0)
-           buf.append(tokens[len-1]); // add the last one
-       return buf.toString();
-    }
-} /* end class TName */
diff --git a/src/edu/internet2/middleware/shibboleth/aa/arp/provider/ShibArpAttribute.java b/src/edu/internet2/middleware/shibboleth/aa/arp/provider/ShibArpAttribute.java
new file mode 100755 (executable)
index 0000000..c218bd3
--- /dev/null
@@ -0,0 +1,74 @@
+package edu.internet2.middleware.shibboleth.aa.arp.provider;
+
+import java.util.Arrays;
+import java.util.HashSet;
+
+import edu.internet2.middleware.shibboleth.aa.arp.ArpAttribute;
+
+/**
+ *  Shibboleth implementation of an attribute to which ARPs may be applied.
+ *
+ * @author Walter Hoehn (wassa@columbia.edu)
+ */
+public class ShibArpAttribute implements ArpAttribute {
+
+       private String name;
+       private Object[] values;
+
+       public ShibArpAttribute(String name, Object[] values) {
+               this.name = name;
+               this.values = values;
+       }
+
+       public ShibArpAttribute(String name) {
+               this.name = name;
+       }
+
+       /**
+        * @see edu.internet2.middleware.shibboleth.aa.arp.ArpAttribute#getName()
+        */
+       public String getName() {
+               return name;
+       }
+
+       /**
+        * @see edu.internet2.middleware.shibboleth.aa.arp.ArpAttribute#getValues()
+        */
+       public Object[] getValues() {
+               if (values != null) {
+                       return values;
+               } else {
+                       return new Object[0];
+               }
+       }
+
+       /**
+        * @see edu.internet2.middleware.shibboleth.aa.arp.ArpAttribute#setValues(Object[])
+        */
+       public void setValues(Object[] values) {
+               this.values = values;
+       }
+
+       /**
+        * @see java.lang.Object#equals(Object)
+        */
+       public boolean equals(Object object) {
+               if (!(object instanceof ShibArpAttribute)) {
+                       return false;
+               }
+               return (new HashSet(Arrays.asList(values))).equals(
+                       new HashSet(Arrays.asList(((ShibArpAttribute) object).getValues())));
+       }
+
+       /**
+       * @see java.lang.Object#hashCode()
+       */
+       public int hashCode() {
+               int code = 0;
+               for (int i = 0; i < values.length; i++) {
+                       code += values[i].hashCode();
+               }
+               return name.hashCode() + code;
+       }
+
+}
diff --git a/src/edu/internet2/middleware/shibboleth/ui/UI.java b/src/edu/internet2/middleware/shibboleth/ui/UI.java
deleted file mode 100755 (executable)
index f7f8445..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-/* 
- * 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.ui;
-
-
-import java.io.*;
-import java.util.*;
-import javax.servlet.*;
-import javax.servlet.http.*;
-import javax.naming.*;
-import javax.naming.directory.*;
-import org.apache.log4j.Logger;
-import org.apache.log4j.MDC;
-
-import edu.internet2.middleware.shibboleth.aa.*;
-
-public class UI extends HttpServlet {
-
-    private String adminArpName = "admin";
-    private String debug = "true";
-
-    private String arpDir;
-    private String ldapUrl;
-    private String attrFile;
-    private String domain;
-
-    AAResponder responder;
-    ArpRepository arpFactory;
-    Arp adminArp;
-    Arp userArp;
-
-    private static Logger log = Logger.getLogger(UI.class.getName());
-    
-    public void init(ServletConfig conf)
-       throws ServletException
-    {
-       super.init(conf);
-       getInitParams();
-       log.info("UI: Loading init params");
-       try {
-           Properties props = new Properties();
-           props.setProperty("edu.internet2.middleware.shibboleth.aa.FileArpRepository.Path", "/tmp/shib2");
-           arpFactory = ArpRepositoryFactory.getInstance("edu.internet2.middleware.shibboleth.aa.FileArpRepository", props);
-           responder = new AAResponder(arpFactory, getDirCtx(), 
-                                       getInitParameter("domain"));
-           log.info("Loading Responder");
-           adminArp = arpFactory.lookupArp(adminArpName, true);
-           if(adminArp ==  null) {
-               adminArp = new Arp(adminArpName, true);
-               adminArp.setNew(true);
-               adminArp.setLastRead(new Date());
-               log.info("Admin ARP not found. Creating new.");
-           } else {
-               log.info("Loaded admin ARP.");
-           }
-       } catch (Exception ex) {
-           throw new ServletException(ex);
-       }
-    }
-    
-    private void getInitParams() throws ServletException {
-       arpDir = getInitParameter("ARPdir");
-       if (arpDir == null || arpDir.equals("")) 
-           throw new ServletException("Cannot find location of ARPs in init parameters");
-       log.info("Reading ARPs from arpDir: "+arpDir);
-
-       ldapUrl = getInitParameter("LDAPurl");
-       if (ldapUrl == null || ldapUrl.equals("")) 
-           throw new ServletException("Cannot find URL of LDAP directory in init parameters");
-       log.info("Searching LDAP database at url: "+ldapUrl);
-
-       attrFile = getInitParameter("AttrJarfile");
-       if (attrFile == null || attrFile.equals("")) 
-           throw new ServletException("Cannot find location of attribute jarfile in init parameters");
-       log.info("Reading attribute file "+attrFile);
-    }
-
-    public void service(HttpServletRequest req, 
-                     HttpServletResponse res)
-       throws ServletException, IOException
-    {
-       String username = req.getParameter("username");
-
-       req.setAttribute("username", username);
-       req.setAttribute("requestURL", req.getRequestURI().toString());
-       req.setAttribute("attrFile", attrFile);
-       req.setAttribute("ldapUrl", ldapUrl);
-       req.setAttribute("responder", responder);
-       req.setAttribute("adminArp", adminArp);
-
-       String action = req.getParameter("Submit");
-       String resource = req.getParameter("Resource");
-       String err = "";
-
-       try{
-           if (username !=null) {
-               try{
-                   DirContext userCtx = getUserCtx(username);
-                   userArp = arpFactory.lookupArp(username, false);
-                   if (userArp == null) {
-                       userArp = new Arp(username, false);
-                       userArp.setNew(true);
-                       userArp.setLastRead(new Date());
-                       System.out.println("creating ARP");
-                       log.info("No ARP found for "+username+". Creating new.");
-                   }
-                   else {
-                       log.info("Listing existing ARP for "+username+".");
-                   }
-               } catch (UIException ex) {
-                   err = "Error: No record found for user "+username;
-                   username = "";
-               }
-           }
-           if (username==null || username.equals("") || action==null) {
-               getLogin(req, res, err); 
-               log.info("No username found.  Logging in.");
-           }
-           else {
-           if (action.equals("Change user")) {
-               getLogin(req, res, err); 
-               log.info("Change User action requested");
-           }
-           if (action.equals("Login") || action.equals("Cancel")) {
-               String isNew = req.getParameter("isNew");
-               if (isNew!=null && isNew.equals("true")) {
-                   log.info("User cancelled ARP edit without saving.  Deleting changes.");
-                   deleteArp(username, resource);
-               }
-               listArps(username, req, res);
-           }
-           if (action.equals("Edit")) {
-               editArp(username, resource, req, res, "false");
-           }
-           if (action.equals("Add new resource") || action.equals("Copy")) {
-               log.info("Creating new ARP for resource "+resource);
-               editArp(username, resource, req, res, "true");
-           }
-           if (action.equals("Save")) {
-               saveArp(username, resource, req, res);
-           }
-           if (action.equals("Delete") || action.equals("Delete all ARPs")) {
-               deleteArp(username, resource);
-               listArps(username, req, res);
-           }
-           if (action.equals("Filter")) {
-               editFilter(username, resource, req, res, "false");
-           }
-           if (action.equals("Save Filter")) {
-               saveFilter(username, resource, req, res);
-           }
-           }
-        } catch (Exception ex) {
-               System.out.println(ex);
-               log.error(ex);
-               handleError(req, res, ex);
-           }
-    }
-
-    private void loadJsp(String page, 
-                        HttpServletRequest req, 
-                        HttpServletResponse res)
-       throws UIException 
-    {
-       try { 
-           RequestDispatcher rd = req.getRequestDispatcher(page);
-           rd.forward(req, res);
-       } catch (IOException ex) {
-           throw new UIException
-               ("IO interruption while displaying UI login." + ex);
-       } catch (ServletException ex) {
-           throw new UIException
-               ("Error displaying UI login." + ex);
-       } 
-    }
-
-    private void getLogin(HttpServletRequest req, 
-                        HttpServletResponse res,
-                         String err) 
-       throws UIException
-    {
-       req.setAttribute("err", err);
-       req.setAttribute("debug", debug);
-       loadJsp("/UIlogin.jsp", req, res);
-    }
-
-    private void listArps(String username, HttpServletRequest req, 
-                         HttpServletResponse res) 
-       throws UIException
-    {
-       try{
-           req.setAttribute("shars", userArp.getShars());
-           req.setAttribute("debug", debug);
-           req.setAttribute("userCtx", getUserCtx(username));
-       } catch (Exception ex) {
-           throw new UIException("Error retrieving user " +username+". "+ex);
-       }
-
-       loadJsp("/UIlist.jsp", req, res);
-    } 
-    
-
-    private void editArp(String username,
-                        String resource,
-                        HttpServletRequest req, 
-                        HttpServletResponse res,
-                        String isNew) 
-       throws UIException
-    {
-       try{
-       ArpShar s = userArp.getShar(resource);
-       log.info("Editing ARP for "+username+". SHAR: "+resource+" Resource: "+resource);
-
-       AAAttributes aaa = new AAAttributes(attrFile);
-
-       req.setAttribute("userCtx", getUserCtx(username));
-       req.setAttribute("allAttrs", aaa.list());
-       req.setAttribute("resource", (s==null) ? new ArpResource("", "") : s.getResource(resource));
-       req.setAttribute("isNew", isNew);
-
-       } catch (Exception ex) {
-           log.error("Error retrieving filter." +ex);
-           throw new UIException("Error retrieving filter." +ex);
-       }
-
-       loadJsp("/UIedit.jsp", req, res);
-    }
-
-    /*********
-     ** Loads page to edit ARP filter 
-     **/
-
-    private void editFilter(String username,
-                           String resource,
-                           HttpServletRequest req, 
-                           HttpServletResponse res,
-                           String close)
-       throws UIException
-    {
-       try{
-       String attr = req.getParameter("Attr");
-       log.info("Editing filter for user "+username+", resource "
-                +resource+", attribute "+ attr);
-       ArpShar s = userArp.getShar(resource);
-       ArpResource r = null;
-       ArpAttribute a = null;
-       if (s!=null)
-           r = s.getResource(resource);
-       if (r!=null)
-           a = r.getAttribute(attr);
-       if (a == null)
-           a = new ArpAttribute(attr, false);
-
-       req.setAttribute("userCtx", getUserCtx(username));
-       req.setAttribute("resource", resource);
-       req.setAttribute("attr", new ArpAttribute(attr, false));
-       req.setAttribute("userAttr", a);
-       req.setAttribute("close", close);
-       } catch (Exception ex) {
-           throw new UIException("Error retrieving filter." +ex);
-       }
-       loadJsp("/UIfilter.jsp", req, res);
-    }
-
-    private DirContext getDirCtx() 
-       throws UIException
-    {
-       DirContext ctx = null;
-       Hashtable env = new Hashtable(11);
-       env.put(Context.INITIAL_CONTEXT_FACTORY,
-               "com.sun.jndi.ldap.LdapCtxFactory");
-       env.put(Context.PROVIDER_URL, ldapUrl);
-       try { 
-           ctx = new InitialDirContext(env);
-       } catch (Exception ex) {
-           log.error("Error getting directory context. "+ex);
-           throw new UIException
-               ("Error getting context. "+ex);
-       }
-       return ctx;
-    }
-    private DirContext getUserCtx(String username) 
-       throws UIException
-    {
-       DirContext userCtx = null;
-       try { 
-           DirContext ctx = getDirCtx();
-           userCtx = (DirContext)ctx.lookup("uid="+username);
-       } catch (Exception ex) {
-           log.error("Error getting user context for "+username+". "+ex);
-           throw new UIException
-               ("Error getting user context for "+username+". "+ex);
-       }
-       return userCtx;
-    }
-
-
-    private void handleError( HttpServletRequest req, 
-                            HttpServletResponse res,
-                            Exception e )  
-       throws ServletException, IOException {
-
-       req.setAttribute("errorText", e.toString());
-       req.setAttribute("requestURL", req.getRequestURI().toString());
-       RequestDispatcher rd = req.getRequestDispatcher("/UIerror.jsp");
-       
-       rd.forward(req, res);
-       
-    }
-          
-    private void deleteArp(String username, String resource)
-    {
-       try{ 
-           if (userArp==null)
-               return;
-           if (resource==null || resource.equals("")) {
-               arpFactory.remove(userArp);
-               log.info("Deleting entire ARP for user "+username);
-               return;
-           }
-           /* NOTE: at the time of this interface, SHAR was required for 
-              sorting but, was not being specified by the user, so the 
-              resource and shar are the same thing. Thus, to delete a 
-              resource, delete both resource and shar.  If these two 
-              concepts get separated out again, do it individually */
-           ArpShar s = userArp.getShar(resource);
-           if (s==null) 
-               return;
-           ArpResource r = s.getResource(resource);
-           if (r==null)
-               return;
-           s.removeAResource(resource);
-           userArp.removeAShar(resource);
-           arpFactory.update(userArp);
-           log.info("Deleting ARP for user "+username+", resource "+resource);
-       } catch (Exception e)  {
-       }
-    }
-
-    private void saveArp(String username, 
-                        String resource,
-                        HttpServletRequest req,
-                        HttpServletResponse res)
-    {
-       try{ 
-           String []subAttrs = req.getParameterValues("attr");
-           String []admAttrs = req.getParameterValues("adminAttrs");
-           ArpShar s = userArp.getShar(resource);
-           if (s==null) 
-               s = new ArpShar(resource, false); 
-           ArpResource r = s.getResource(resource);
-           if (r==null)
-               r = new ArpResource(resource);
-           ArpAttribute[] attrs = r.getAttributes();
-
-           ArpResource nr = new ArpResource(resource, req.getParameter("comment"));
-           if (subAttrs!=null){
-               for (int i = 0; i < subAttrs.length; i++) {
-                   ArpAttribute a = r.getAttribute(subAttrs[i]);
-                   if (a!=null) 
-                       nr.addAnAttribute(a);
-                   else {
-                       a = new ArpAttribute(subAttrs[i], false);
-                       nr.addAnAttribute(a);
-                   }
-               }
-           }
-           if (admAttrs!=null){
-               for (int i = 0; i < admAttrs.length; i++) {
-                   ArpAttribute a = r.getAttribute(admAttrs[i]);
-                   if (a!=null) 
-                       nr.addAnAttribute(a);
-                   else {
-                       a = new ArpAttribute(admAttrs[i], false);
-                       nr.addAnAttribute(a);
-                   }
-               }
-           }
-           s.addAResource(nr, true);
-           userArp.addAShar(s);
-           arpFactory.update(userArp);
-           log.info("ARP edited for user "+username+", resource "+resource+".  Saving.");
-
-           listArps(username, req, res);
-
-       } catch (Exception e)  {
-       }
-    }
-
-    private void saveFilter(String username, 
-                           String resource,
-                           HttpServletRequest req,
-                           HttpServletResponse res)
-       throws UIException
-    {
-       try{
-       String attr = req.getParameter("Attr");
-       ArpShar s = userArp.getShar(resource);
-       if (s==null)
-           s = new ArpShar(resource, false);
-       ArpResource r = s.getResource(resource);
-       if (r==null)
-           r = new ArpResource(resource);
-       ArpAttribute a = r.getAttribute(attr);
-       if (a==null)
-           a = new ArpAttribute(attr, false);
-       
-       ArpFilter filter = new ArpFilter();
-
-       String[] vals = req.getParameterValues("filterval");
-       if (vals!=null){
-           for (int i=0; i<vals.length; i++) {
-               ArpFilterValue afv = new ArpFilterValue(vals[i], false);
-               filter.addAFilterValue(afv, true);
-           }
-       }
-       a.setFilter(filter, true);
-       r.addAnAttribute(a);
-       s.addAResource(r);
-       userArp.addAShar(s);
-       arpFactory.update(userArp);
-       log.info("Saved filter for user "+username+". resource: "
-                +resource+" attribute: "+attr);
-
-       editFilter(username, resource, req, res, "true");
-
-       } catch (Exception ex) {
-           log.error("Error: "+ex);
-           System.err.println("error: " +ex);
-       }
-
-    }
-
-}
diff --git a/src/edu/internet2/middleware/shibboleth/ui/UIException.java b/src/edu/internet2/middleware/shibboleth/ui/UIException.java
deleted file mode 100755 (executable)
index cf6198b..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* 
- * 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.ui;
-
-
-public class UIException extends Exception{
-    String msg;
-    public UIException(String s){
-        msg = s;
-    }
-    public String toString(){
-        return msg;
-    }
-}
diff --git a/src/edu/internet2/middleware/shibboleth/ui/UIedit.jsp b/src/edu/internet2/middleware/shibboleth/ui/UIedit.jsp
deleted file mode 100755 (executable)
index e3a3857..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-        PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
-        "DTD/xhtml1-strict.dtd">
-       <%@ page import="edu.internet2.middleware.shibboleth.aa.*" %>
-       <%@ page import="javax.naming.*" %>
-       <%@ page import="javax.naming.directory.*" %>
-       <%@ page import="java.util.*" %>
-        <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
-        <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
-        <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
-        <jsp:useBean id="username" scope="request" class="java.lang.String"/>
-       <jsp:useBean id="resource" scope="request" class="edu.internet2.middleware.shibboleth.aa.ArpResource"/>
-       <jsp:useBean id="allAttrs" scope="request" class="java.lang.String[]"/>
-       <jsp:useBean id="userCtx" scope="request" class="javax.naming.directory.DirContext"/>
-       <jsp:useBean id="isNew" scope="request" class="java.lang.String"/>
-       <jsp:useBean id="adminArp" scope="request" class="edu.internet2.middleware.shibboleth.aa.Arp"/>
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-        <link rel="stylesheet" type="text/css" href="main.css" />
-        <title>Shibboleth ARP</title>
-<SCRIPT TYPE="text/javascript">
-<!--
-function popupFilter(attr) 
-{
-    res = window.document.edit.Resource.value;
-    if (res.length == 0 || res.indexOf(" ") != -1) {
-       alert("Please enter a valid resource URL"); 
-    } else {
-        var url = "<bean:write name="requestURL" />?Submit=Filter&username=<bean:write name="username"/>&Attr="+attr+"&Resource="+res;
-        window.open(url, 'fpage', 'resizable, height=300, width=250, dependant=yes');
-    }
-    return false;
-}
-
-function formSubmit()
-{
-   res = window.document.edit.Resource.value;
-   if (res.length == 0 || res.indexOf(" ") != -1) {
-       alert("Please enter a valid resource URL");
-        return false;
-   }
-   return true;
-}
-function formCancel()
-{
-   return true;
-}
-//-->
-</SCRIPT>
-
-  </head>
-
-
-  <body>
-    <div class="head">
-      <h1>Shibboleth Attribute Release Policy</h1>
-    </div>
-
-    <p><b>Editing ARP for <bean:write name="username" /></b></p>
-
-    <form name="edit" action="<bean:write name="requestURL" />" method="post">
-    <input type=hidden name="username" value="<bean:write name="username"/>">
-    <input type=hidden name="isNew" value="<bean:write name="isNew" />">
-    <p><b>Resource URL:</b> 
-<% 
-    if (isNew.equals("true")) {
-%>
-      <input type=text name="Resource" size=30 value="<jsp:getProperty name="resource" property="name"/>"> 
-<%   
-    } else { 
-%>
-        <input type=hidden name="Resource" value="<jsp:getProperty name="resource" property="name"/>">
-<%
-       out.println(resource.getName());
-    }
-%>     
-
-    </p><br>
-
-    <b>Attribute Release Policy:</b>
-    <hr>
-    <table width="100%" border=0>
-      <tr align="left">
-       <th width="30%">Attribute</th>
-       <th width="40%">All Value(s)</th>
-       <th width="10%">Filter</th>
-       <th width="10%">Release?</th>
-      </tr>
-
-<%
-      for (int i=0; i<allAttrs.length; i++) {
-       ArpAttribute adminAttr = getAdminAttr(adminArp, resource.getName(), 
-                                               allAttrs[i]);
-       ArpAttribute aAttr = new ArpAttribute(allAttrs[i], false);
-       Attribute dAttr = aAttr.getDirAttribute(userCtx, true);
-       if (dAttr != null && dAttr.size() > 0) {
-%>
-          <tr><td>
-           <%=allAttrs[i]%>
-         </td>
-         <td>
-<%
-         if (dAttr.size() > 1) {
-             out.println("<select name=\"values\" size=1>");
-             out.println("<option>[See Values]</option>");
-             for (int j=0; j < dAttr.size(); j++)  {
-               out.println("<option>"+dAttr.get(j)+"</option>");
-             }
-           out.println("</select>");
-         } else {
-             out.println(dAttr.get());
-         }
-
-          String checkbool = "";
-         ArpAttribute a = null;
-         if (resource != null)
-           a = resource.getAttribute(allAttrs[i]);
-         if (a != null) 
-           checkbool = "checked"; 
-         else
-           a = new ArpAttribute(allAttrs[i], false);
-
-         out.println("</td><td>");
-
-         String checkoption = "";
-         String adminInput = "";
-         if (adminAttr != null) {
-           adminInput = "<input type=hidden name=\"adminAttrs\" value=\""+
-            allAttrs[i]+"\">";
-           if (adminAttr.mustExclude())
-             checkoption = "NO";
-           else 
-             checkoption = "YES";
-         } else
-           checkoption = "<input type=checkbox name=\"attr\" value=\""+a.getName()+"\" "+checkbool+" Yes>";
-       
-         if (dAttr.size() > 1) {
-         String filtStr="add";
-         if (a.hasFilter())
-            filtStr="edit";
-
-%>
-
-        <a href="#" onClick="return popupFilter('<%=a.getName()%>','<%=resource.getName()%>');"><%=filtStr%></a>
-<% } %>
-       </td>
-       <td>
-         <%=adminInput%>
-         <%=checkoption%>
-       </td>
-
-      </tr>
-<% } } %>
-      </table>
-      
-      <p><b>Comment:</b>
-       <br>
-       <input type="text" name="comment" value="<jsp:getProperty name="resource" property="comment"/>" size="40">
-       </textarea>
-      </p>
-       
-      <hr>
-       <input type="hidden" name="username" value="<bean:write name="username"/>">     
-
-      <input type="submit" name="Submit" value="Save" onClick="return formSubmit();">&nbsp;&nbsp;
-
-       <input type="submit" name="Submit" value="Cancel" onClick="return formCancel();" >
-      </form>
-    <hr>
-<%!
-public ArpAttribute getAdminAttr(Arp admin, 
-                       String resource, String attr) {
-    if (resource==null || resource.equals(""))
-       return null;
-    ArpShar s = admin.getShar(resource);
-    if (s == null) {
-       s = admin.getDefaultShar();
-    }
-    if (s == null)
-       return null;
-    ArpResource r = s.bestFit(resource);
-    if (r == null)
-       return null;
-    ArpAttribute a = r.getAttribute(attr);
-    return a;
-}
-%>     
-  </body>      
-</html>          
diff --git a/src/edu/internet2/middleware/shibboleth/ui/UIerror.jsp b/src/edu/internet2/middleware/shibboleth/ui/UIerror.jsp
deleted file mode 100755 (executable)
index a0cef85..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-        PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
-        "DTD/xhtml1-strict.dtd">
-        <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
-        <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
-
-        <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
-        <jsp:useBean id="errorText" scope="request" class="java.lang.String"/>
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-        <link rel="stylesheet" type="text/css" href="main.css" />
-        <title>Shibboleth Handle Service Failure</title>
-</head>
-
-<body>
-<div class="head">
-<h1>Shibboleth Handle Service Failure</h1>
-</div>
-
-<p>The inter-institutional access system experienced a technical failure.</p>
-<hr>
-<p class="error">Shib UI failure at (<bean:write name="requestURL" />)</p
->
-
-<p><bean:write name="errorText" /></p>
-
-</body>
-</html>
diff --git a/src/edu/internet2/middleware/shibboleth/ui/UIfilter.jsp b/src/edu/internet2/middleware/shibboleth/ui/UIfilter.jsp
deleted file mode 100755 (executable)
index 441e05b..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-        PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
-        "DTD/xhtml1-strict.dtd">
-       <%@ page import="edu.internet2.middleware.shibboleth.aa.*" %>
-       <%@ page import="javax.naming.*" %>
-       <%@ page import="javax.naming.directory.*" %>
-       <%@ page import="java.util.*" %>
-        <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
-        <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
-        <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
-        <jsp:useBean id="username" scope="request" class="java.lang.String"/>
-       <jsp:useBean id="userCtx" scope="request" class="javax.naming.directory.DirContext"/>
-       <jsp:useBean id="attr" scope="request" class="edu.internet2.middleware.shibboleth.aa.ArpAttribute"/>
-       <jsp:useBean id="userAttr" scope="request" class="edu.internet2.middleware.shibboleth.aa.ArpAttribute"/>
-       <jsp:useBean id="resource" scope="request" class="java.lang.String"/>
-       <jsp:useBean id="close" scope="request" class="java.lang.String"/>
-       <jsp:useBean id="adminArp" scope="request" class="edu.internet2.middleware.shibboleth.aa.Arp"/>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-        <link rel="stylesheet" type="text/css" href="main.css" />
-        <title>Shibboleth ARP</title>
-
-  </head>
-
-<body
-<% 
- if (close.equals("true")) 
-       out.println(" onLoad=window.close()");
-%>
->
-       
-    <p><b>Editing filter for attribute <bean:write name="attr" /></b></p>
-    
-     Select values for this attribute that should <b>not</b> be released:
-
-    <p><form name="filter_form" action="<bean:write name="requestURL" />" method="POST">
-       <table>
-       
-<% 
-    ArpAttribute adminAttr = getAdminAttr(adminArp, resource, userAttr.getName());
-    if (adminAttr == null) {
-       adminAttr = new ArpAttribute(attr.getName(), false);
-    }
-    ArpFilter admFilter = adminAttr.getFilter();
-  
-    ArpFilter filter = userAttr.getFilter();
-
-    Attribute dAttr = attr.getDirAttribute(userCtx, true);
-
-    if (dAttr != null && dAttr.size() > 0) {
-    for (int j=0; j < dAttr.size(); j++)  {
-      String checked = "";
-      if (filter != null) {
-       ArpFilterValue afv = new ArpFilterValue(dAttr.get(j), false);
-       if (filter.contains(afv)) {
-           checked = "<input type=\"checkbox\" name=\"filterval\" value=\""+dAttr.get(j)+"\" checked> Yes";
-       } else {
-           checked = "<input type=\"checkbox\" name=\"filterval\" value=\""+dAttr.get(j)+"\"> Yes";
-       }
-       if (admFilter != null) {
-       ArpFilterValue[] afvi = admFilter.getFilterValues();
-       for (int k=0;k<afvi.length;k++) {
-           if (afvi[k].equals(afv) && (afvi[k].mustInclude() == false)) {
-               checked = "<i>filtered</i>";
-           }
-           if (afvi[k].equals(afv) && (afvi[k].mustInclude())) {
-               checked = "<i>released</i>";
-           }
-       }
-       }
-      } else {
-        checked = "<input type=\"checkbox\" name=\"filterval\" value=\""+dAttr.get(j)+"\"> Yes";
-       }
-
-      out.println("<tr><td>"+dAttr.get(j)+"</td>");
-      out.println("<td>"+checked+"</td></tr>");
-    } 
-  }
-%>
-
-       </table>
-      <p>
-      <input type=hidden name="Attr" value="<jsp:getProperty name="attr" property="name"/>">
-      <input type=hidden name="username" value="<bean:write name="username"/>">
-      <input type=hidden name="Resource" value="<bean:write name="resource"/>"> 
-      <input type=submit name="Submit" value="Save Filter">
-      <input type=submit name="Submit" value="Cancel" onClick="javascript:window.close();">
-  </form>
-  
-<%!
-public ArpAttribute getAdminAttr(Arp admin, 
-                       String resource, String attr) {
-    ArpShar s = admin.getShar(resource);
-    if (s == null) {
-       s = admin.getDefaultShar();
-    }
-    if (s == null)
-       return null;
-    ArpResource r = s.bestFit(resource);
-    if (r == null)
-       return null;
-    ArpAttribute a = r.getAttribute(attr);
-    return a;
-}
-
-%>     
-  </body>      
-</html>          
-
diff --git a/src/edu/internet2/middleware/shibboleth/ui/UIlist.jsp b/src/edu/internet2/middleware/shibboleth/ui/UIlist.jsp
deleted file mode 100755 (executable)
index 51c64a5..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-        PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
-        "DTD/xhtml1-strict.dtd">
-       <%@ page import="edu.internet2.middleware.shibboleth.aa.*" %>
-       <%@ page import="javax.naming.*" %>
-       <%@ page import="javax.naming.directory.*" %>
-       <%@ page import="org.opensaml.*" %>
-        <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
-        <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
-        <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
-        <jsp:useBean id="username" scope="request" class="java.lang.String"/>
-       <jsp:useBean id="shars" scope="request" class="edu.internet2.middleware.shibboleth.aa.ArpShar[]"/>
-       <jsp:useBean id="debug" scope="request" class="java.lang.String"/>
-       <jsp:useBean id="responder" scope="request" class="edu.internet2.middleware.shibboleth.aa.AAResponder"/>
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-        <link rel="stylesheet" type="text/css" href="main.css" />
-        <title>Shibboleth ARP</title>
-  </head>
-
-
-  <body>
-    <div class="head">
-      <h1>Shibboleth Attribute Release Policy</h1>
-    </div>
-
-    <p><b>ARP for <bean:write name="username" /></b></p>
-
-<% if (shars.length > 0) { 
-%>
-    <table width="100%" border=1>
-       <tr>
-         <th width="20%">Resource Name</th>
-         <th width="20%">Notes</th> 
-         <th width="30%">Attributes Released</th>
-         <th>Actions</th>
-       </tr>
-<logic:iterate id="shar" name="shars">
-  <logic:iterate id="resource" name="shar" property="resources">
-    <tr>
-<%
-    String sharname = ((edu.internet2.middleware.shibboleth.aa.ArpShar)shar).getName();
-    String res = ((edu.internet2.middleware.shibboleth.aa.ArpResource)resource).getName();
-    String resourceUrl = (res.startsWith("http")) ? 
-       resourceUrl = res.substring(res.indexOf(":")+3) : res;
-%>
-    <form name="list<jsp:getProperty name="resource" property="name" />" action="<bean:write name="requestURL"/>" method="post">
-       <td><a href="http://<%=resourceUrl%>"><jsp:getProperty name="resource" property="name" /></a></td>
-       <td><jsp:getProperty name="resource" property="comment" /></td>
-       <td>
-<%
-  SAMLAttribute[] attrSet = responder.getReleaseAttributes(
-               username, "uid=", "",   
-               sharname, res );
-
-  for (int j=0; j<attrSet.length; j++) {
-    Object[] vals = attrSet[j].getValues();
-    for (int k=0; k<vals.length; k++) {
-      out.println(vals[k] + "<br>");
-    }
-  }
-%>
-       </td>
-       <input type=hidden name="username" value="<bean:write name="username"/>">
-       <input type=hidden name="Resource" value="<jsp:getProperty name="resource" property="name"/>">
-           <td><input type="submit" name="Submit" value="Delete">&nbsp;
-       <input type="submit" name="Submit" value="Edit">&nbsp;
-       <input type="submit" name="Submit" value="Copy"></td>
-       </form>
-    </tr>
-  </logic:iterate>
-</logic:iterate>
-    </table>
-<% }%>    
-    <p>
-    <form name="act" action="<bean:write name="requestURL" />" method="post">
-    <input type=hidden name="username" value="<bean:write name="username"/>">
-    <input type=submit name="Submit" value="Add new resource"</a><br>
-    <input type=submit name="Submit" value="Delete all ARPs"</a><br>
-<%  if (debug == "true") %>
-    <input type=submit name="Submit" value="Change user"</a><br>
-
-    </form>
-    </p>
-
-  </body>
-</html>
-
diff --git a/src/edu/internet2/middleware/shibboleth/ui/UIlogin.jsp b/src/edu/internet2/middleware/shibboleth/ui/UIlogin.jsp
deleted file mode 100755 (executable)
index 9bb80fe..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-        PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
-        "DTD/xhtml1-strict.dtd">
-        <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
-        <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
-        <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
-        <jsp:useBean id="username" scope="request" class="java.lang.String"/>
-        <jsp:useBean id="err" scope="request" class="java.lang.String"/>
-        <jsp:useBean id="debug" scope="request" class="java.lang.String"/>
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-        <link rel="stylesheet" type="text/css" href="main.css" />
-        <title>Shibboleth Attribute Release Policy Login</title>
-  </head>
-
-  <body>
-    <div class="head">
-      <h1>Shibboleth Attribute Release Policy Login</h1>
-    </div>
-
-    <b><bean:write name="err" /></b>
-    <p><b>Not logged in</b></p>
-
-<% if (debug == "true")  { %>
-    <form action="<bean:write name="requestURL" />" method="post">
-      <p>Editing Attribute Release Policy for user 
-        <input type = "text" size="10" name="username" value="<bean:write name="username" />" /> &nbsp;&nbsp;&nbsp;
-        <input type="submit" name="Submit" value="Login" />
-      </p>
-    </form>
-<%}%>
-  </body>
-</html>
\ No newline at end of file
diff --git a/src/edu/internet2/middleware/shibboleth/utils/ArpUtil.java b/src/edu/internet2/middleware/shibboleth/utils/ArpUtil.java
deleted file mode 100755 (executable)
index 58ce09a..0000000
+++ /dev/null
@@ -1,551 +0,0 @@
-/* 
- * 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.utils;
-
-/**
- *  Attribute Authority & Release Policy
- *  A utility for managing ARPs
- *
- * @author     Parviz Dousti (dousti@cmu.edu)
- * @created    June, 2002
- */
-
-import java.security.Principal;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-
-import javax.naming.Context;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.InitialDirContext;
-
-import org.apache.log4j.BasicConfigurator;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PropertyConfigurator;
-
-import edu.internet2.middleware.shibboleth.aa.AAAttributes;
-import edu.internet2.middleware.shibboleth.aa.AAException;
-import edu.internet2.middleware.shibboleth.aa.AAPermissionException;
-import edu.internet2.middleware.shibboleth.aa.AA_Identity;
-import edu.internet2.middleware.shibboleth.aa.Arp;
-import edu.internet2.middleware.shibboleth.aa.ArpAttribute;
-import edu.internet2.middleware.shibboleth.aa.ArpFilter;
-import edu.internet2.middleware.shibboleth.aa.ArpFilterValue;
-import edu.internet2.middleware.shibboleth.aa.ArpRepository;
-import edu.internet2.middleware.shibboleth.aa.ArpRepositoryFactory;
-import edu.internet2.middleware.shibboleth.aa.ArpResource;
-import edu.internet2.middleware.shibboleth.aa.ArpShar;
-
-class ArpUtil{
-
-    private static Logger log = Logger.getLogger(ArpUtil.class.getName());
-    static Principal user;
-    static ArpRepository arpFactory;
-    static String listUsage = "\tArpUtil list <arp name> [-acls] [-dir <ldap url> <user id>]";
-    static String addUsage = "\tArpUtil add <arp name> [-admin] <shar name> [-default] <url> [-title comment] <attribute name> [-exclude] [-filter [!]<val1> [!]<val2> ...]";    
-    static String removeUsage = "\tArpUtil remove <arp name> [<shar name> [<url> [<attribute name>]]]";
-    static String setAclUsage = "\tArpUtil setAcl <user> <acl> <arp name> [<shar name> [<url>]]";
-    static String attrUsage = "\tArpUtil listAttributes <jar file name>";
-
-       public static void main(String[] args) throws AAException {
-
-               if (System.getProperty("log.config") != null) {
-                       PropertyConfigurator.configure(System.getProperty("log.config"));
-               } else {
-                       BasicConfigurator.configure();
-               }
-
-               Properties props = new Properties();
-               if (System.getProperty("arp.dir") != null) {
-                       props.setProperty(
-                               "edu.internet2.middleware.shibboleth.aa.FileArpRepository.Path",
-                               System.getProperty("arp.dir"));
-               } else {
-                       props.setProperty("edu.internet2.middleware.shibboleth.aa.FileArpRepository.Path", ".");
-               }
-               arpFactory =
-                       ArpRepositoryFactory.getInstance(
-                               "edu.internet2.middleware.shibboleth.aa.FileArpRepository",
-                               props);
-
-               //user = new KerberosPrincipal(System.getProperty("user.name"));
-               user = new AA_Identity(System.getProperty("user.name"));
-
-               log.info("Running as: (" + user + ").");
-
-               String usage =
-                       "Usage:\n"
-                               + listUsage
-                               + "\nor\n"
-                               + addUsage
-                               + "\nor\n"
-                               + removeUsage
-                               + "\nor\n"
-                               + setAclUsage
-                               + "\nor\n"
-                               + attrUsage;
-
-               if (args.length < 2) {
-                       System.out.println(usage);
-                       return;
-               }
-               if (args[0].equalsIgnoreCase("list")) {
-                       doList(args);
-               } else if (args[0].equalsIgnoreCase("add")) {
-                       doAdd(args);
-               } else if (args[0].equalsIgnoreCase("remove")) {
-                       doRemove(args);
-               } else if (args[0].equalsIgnoreCase("setAcl")) {
-                       doSetAcl(args);
-               } else if (args[0].equalsIgnoreCase("listAttributes")) {
-                       doListAttributes(args);
-               } else {
-                       System.out.println(usage);
-               }
-       }
-
-    static void doList(String[] args){
-       try{
-           int len = args.length;
-           if(len < 2){
-               System.out.println("Usage:\n"+listUsage);               
-               return;
-           }
-           String arpName = args[1];
-           DirContext ctx = null;
-           boolean acls = false;
-           if(len > 2){
-               if(args[2].equalsIgnoreCase("-acls"))
-                   acls = true;
-               if(args[2].equalsIgnoreCase("-dir")){
-                   if(len < 4){
-                       System.out.println("Usage:\n"+listUsage);
-                       return;
-                   }else{
-                       ctx = getUserContext(args);
-                   }
-                   if(ctx == null){
-                       System.out.println("Failed to get Directory Context.");
-                       return;
-                   }
-               }
-           }
-
-           Arp arp = arpFactory.lookupArp(arpName, false);
-           if(arp.isNew() == true){
-               System.out.println("Arp not Found: "+arpName);
-           }
-           System.out.println("ARP: "+arp);
-           if(acls)
-               System.out.println("ACL: "+arp.getAcl());
-           ArpShar[] shars = arp.getShars();
-
-           for(int i=0; i < shars.length; i++){
-               System.out.println("\tSHAR: "+shars[i]);
-               if(acls)
-                   System.out.println("\tACL: "+shars[i].getAcl());
-               ArpResource[] resources = shars[i].getResources();
-               for(int j=0; j < resources.length; j++){
-                   System.out.println("\t\tURL: "+resources[j]);
-                   if(resources[j].getComment() != null)
-                       System.out.println("\t\tTITLE: "+resources[j].getComment());
-                   if(acls)
-                       System.out.println("\t\tACL: "+resources[j].getAcl());
-                   ArpAttribute[] attributes = resources[j].getAttributes();
-                   for(int k=0; k < attributes.length; k++){
-                       System.out.print("\t\t\t"+attributes[k]);
-                       if(ctx != null){
-                           Attribute attr = attributes[k].getDirAttribute(ctx, true);
-                           System.out.print(" VALUE(S): ");
-                           if(attr == null)
-                               System.out.print("NULL");
-                           else
-                               for(Enumeration en = attr.getAll();
-                                   en.hasMoreElements();)
-                                   System.out.print(en.nextElement()+" ");
-                                                       
-                       }
-                       ArpFilter filter = attributes[k].getFilter();
-                       if(filter == null)
-                           System.out.println("");
-                       else
-                           System.out.println(" FILTER: "+filter);
-                   }
-               }
-           }
-       }catch(Exception e){
-           e.printStackTrace();
-       }
-    }
-
-    static void doAdd(String[] args){
-
-       if(args.length < 5){
-           System.out.println("Usage:\n"+addUsage);
-           return;
-       }
-       int i = 1;
-       boolean isAdmin = false;
-       boolean isDefault = false;
-       boolean doExclude = false;
-       boolean hasFilter = false;
-       boolean showTitle = false;
-       String resourceName = null;
-       String sharName = null;
-       String attrName = null;
-       String title = null;
-
-       String arpName = args[i++];
-       if(args[i].equalsIgnoreCase("-admin")){
-           isAdmin = true;
-           i++;
-       }
-       
-       sharName = args[i++];
-       if(args[i].equalsIgnoreCase("-default")){
-           isDefault = true;
-           i++;
-       }
-       
-       if(i < args.length)
-           resourceName = args[i++];
-
-       if(i < args.length && args[i].equalsIgnoreCase("-title")){
-           showTitle = true;
-           i++;
-           if(i <args.length)
-               title = args[i++];
-       }
-       
-       if(i < args.length)
-           attrName = args[i++];
-       if(i < args.length && args[i].equalsIgnoreCase("-exclude")){
-           doExclude = true;
-           i++;
-       }
-       if(i < args.length && args[i].equalsIgnoreCase("-filter")){
-           if(doExclude){
-               System.out.println("Cannot set filter for an excluded attribute");
-               return;
-           }
-           hasFilter = true;
-           i++;
-       }
-
-       if(arpName == null || arpName.startsWith("-") ||
-          sharName == null || sharName.startsWith("-") ||
-          resourceName == null || resourceName.startsWith("-") ||
-          attrName == null || attrName.startsWith("-")){
-           System.out.println("Usage:\n"+addUsage);
-           return;
-       }
-
-       if((isDefault || doExclude) && (!isAdmin)){
-           System.out.println("-admin must be specified for -default or -exclude");
-           return;
-       }
-         
-       log.debug("Admin arp?: " + isAdmin);
-       log.debug("Default arp?: " + isDefault);
-       log.debug("Resource name: " + resourceName);
-       log.debug("SHAR name: " + sharName);
-       log.debug("Attribute name: " + attrName);
-       
-
-       try{
-           Arp arp = arpFactory.lookupArp(arpName, isAdmin);
-           if (arp == null) {
-               arp = new Arp(arpName, isAdmin);
-                       arp.setNew(true);
-                       arp.setLastRead(new Date());
-                       log.info("Creating new ARP.");
-           } else {
-               log.info("Editing existing ARP.");
-           }
-           
-           ArpShar s = arp.getShar(sharName);
-
-           if(s == null)
-               s = new ArpShar(sharName, isDefault);
-           ArpResource r = s.getResource(resourceName);
-           if(r == null)
-               r = new ArpResource(resourceName, title);
-           ArpAttribute a = r.getAttribute(attrName);
-           if(a == null)
-               a = new ArpAttribute(attrName, doExclude);
-
-           if(hasFilter){
-               ArpFilter filter = new ArpFilter();
-               while(i < args.length){
-                   String val = args[i++];
-                   boolean include = false;
-                   if(val.startsWith("!")){
-                       val = val.substring(1);
-                       include = true;
-                   }
-                   ArpFilterValue valFilter = new ArpFilterValue(val, include);
-                   filter.addAFilterValue(valFilter, true);
-               }
-               a.setFilter(filter, true);
-           }
-                      
-           r.addAnAttribute(a);
-           s.addAResource(r);
-           arp.addAShar(s);
-           arpFactory.update(arp);
-       }catch(AAPermissionException pe){
-           System.out.println("Permission denied: "+pe);
-       }catch(Exception e){
-           e.printStackTrace();
-       }
-    }
-
-    static void doRemove(String[] args){
-
-       if(args.length < 2){
-               log.fatal("Not enough arguments.");
-           System.out.println("Usage:\n"+removeUsage);
-           return;
-       }
-       int i = 1;
-       String arpName = args[i++];
-       String resourceName = null;
-       String sharName = null;
-       String attrName = null;
-
-       if(i < args.length)
-           sharName = args[i++];
-       if(i < args.length)
-           resourceName = args[i++];
-       if(i < args.length)
-           attrName = args[i++];
-
-       if(arpName.startsWith("-") ||
-          (sharName != null && sharName.startsWith("-")) ||
-          (resourceName != null && resourceName.startsWith("-")) ||
-          (attrName != null && attrName.startsWith("-"))){
-               log.fatal("Unrecognized argument.");
-           System.out.println("Usage:\n"+removeUsage);
-           return;
-       }
-
-       try{
-           Arp arp = arpFactory.lookupArp(arpName, false/* does not matter here */);
-           if(arp.isNew()){
-               System.out.println("ARP not found: "+arp);
-               return;
-           }
-           if(sharName == null){
-               // remove the whole arp
-               arpFactory.remove(arp);
-               return;
-           }
-           ArpShar s = arp.getShar(sharName);
-           if(s == null){
-               System.out.println("SHAR not found for this ARP: "+sharName);
-               return;
-           }
-           if(resourceName == null){
-               // remove the whole shar
-               arp.removeAShar(sharName);
-               arpFactory.update(arp);
-               return;
-           }
-           ArpResource r = s.getResource(resourceName);
-           if(r == null){
-               System.out.println("URL not found for this SHAR: "+resourceName);
-               return;
-           }
-           if(attrName == null){
-               // remove the whole resource
-               s.removeAResource(resourceName);
-               arpFactory.update(arp);
-               return;
-           }
-           ArpAttribute a = r.getAttribute(attrName);
-           if(a == null){
-               System.out.println("ATTRIBUTE not found for this URL: "+attrName);
-               return;
-           }
-           r.removeAnAttribute(attrName);
-           arpFactory.update(arp);
-       }catch(AAPermissionException pe){
-           System.out.println("Permission denied: "+pe);
-       }catch(Exception e){
-           e.printStackTrace();
-       }       
-    }
-
-    public static void doSetAcl(String[] args){
-       int len = args.length;
-       if(len < 4){
-           System.out.println("Usage:\n"+setAclUsage);
-           return;
-       }
-       int i = 1;
-       String user = args[i++];
-       String acl = args[i++];
-       String arpName = args[i++];
-
-       String resourceName = null;
-       String sharName = null;
-
-       if(i < args.length)
-           sharName = args[i++];
-       if(i < args.length)
-           resourceName = args[i++];
-
-       if(arpName.startsWith("-") ||
-          (sharName != null && sharName.startsWith("-")) ||
-          (resourceName != null && resourceName.startsWith("-"))){
-           System.out.println("Usage:\n"+setAclUsage);
-           return;
-       }
-       if(acl.equalsIgnoreCase("LOOKUP") ||
-          acl.equalsIgnoreCase("INSERT") ||
-          acl.equalsIgnoreCase("READ") ||
-          acl.equalsIgnoreCase("WRITE") ||
-          acl.equalsIgnoreCase("DELETE") ||
-          acl.equalsIgnoreCase("ALL"))
-           ;
-       else{
-           System.out.println("Invalid ACL : "+acl);
-           System.out.println("Valid ACLs are: LOOKUP, INSERT, READ, WRITE, DELETE, and ALL");
-           return;
-       }
-
-         
-
-       try{
-           Arp arp = arpFactory.lookupArp(arpName, false/* does not matter here */);
-           if(arp.isNew()){
-               System.out.println("ARP not found: "+arp);
-               return;
-           }
-           if(sharName == null){
-               // set ACL fo the whole arp
-               arp.setAcl(user, acl);
-               arpFactory.update(arp);
-               return;
-           }
-           ArpShar s = arp.getShar(sharName);
-           if(s == null){
-               System.out.println("SHAR not found for this ARP: "+sharName);
-               return;
-           }
-           if(resourceName == null){
-               // set ACL the whole shar
-               s.setAcl(user, acl);
-               arpFactory.update(arp);
-               return;
-           }
-           ArpResource r = s.getResource(resourceName);
-           if(r == null){
-               System.out.println("URL not found for this SHAR: "+resourceName);
-               return;
-           }
-           // set ACL the resource
-           r.setAcl(user, acl);
-           arpFactory.update(arp);
-           return;
-       }catch(AAPermissionException pe){
-           System.out.println("Permission denied: "+pe);
-       }catch(Exception e){
-           e.printStackTrace();
-       }
-    }
-
-    static void doListAttributes(String[] args){
-       try{
-           int len = args.length;
-           if(len < 2){
-               System.out.println("Usage:\n"+attrUsage);               
-               return;
-           }
-           String jarFile = args[1];
-           AAAttributes aaa = new AAAttributes(jarFile);
-           System.out.println("List of all known attributes:");
-           String[] list = aaa.list();
-           for(int i=0; i<list.length; i++)
-               System.out.println("\t"+list[i]);
-       }catch(Exception e){
-           e.printStackTrace();
-       }
-    }
-
-    public static DirContext getUserContext(String[] args)
-    throws Exception{
-
-       if(args.length <5){
-           System.out.println("Usage:\n"+listUsage);
-           return null;
-       }
-
-       String dirUrl = args[3];
-       String uid = args[4];
-       
-        Hashtable env = new Hashtable(11);
-
-       env.put(Context.INITIAL_CONTEXT_FACTORY,
-               "com.sun.jndi.ldap.LdapCtxFactory");
-       env.put(Context.PROVIDER_URL, dirUrl);
-       DirContext ctx = new InitialDirContext(env);
-       return (DirContext)ctx.lookup("uid="+uid);
-               
-    }
-       
-}
-
-
-
-
-
diff --git a/webApplication/WEB-INF/conf/arps/admin b/webApplication/WEB-INF/conf/arps/admin
deleted file mode 100755 (executable)
index 613087c..0000000
Binary files a/webApplication/WEB-INF/conf/arps/admin and /dev/null differ
diff --git a/webApplication/WEB-INF/conf/arps/arp.site.xml b/webApplication/WEB-INF/conf/arps/arp.site.xml
new file mode 100755 (executable)
index 0000000..61ac1d9
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<AttributeReleasePolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mace:shibboleth:arp:1.0" xsi:schemaLocation="urn:mace:shibboleth:arp:1.0 shibboleth-arp-1.0.xsd" >
+       <Description>Simplest possible ARP.</Description>
+       <Rule>
+               <Target>
+                       <AnyTarget/>
+               </Target>
+               <Attribute name="urn:mace:eduPerson:1.0:eduPersonAffiliation">
+                       <AnyValue release="permit"/>
+               </Attribute>
+               <Attribute name="urn:mace:eduPerson:1.0:eduPersonPrincipalName">
+                       <AnyValue release="permit"/>
+               </Attribute>
+       </Rule>
+</AttributeReleasePolicy>