You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dj...@apache.org on 2007/01/07 07:31:56 UTC

svn commit: r493667 - in /directory/sandbox/triplesec-jacc2: guardian-api/src/main/java/org/safehaus/triplesec/guardian/ guardian-ldap/src/main/java/org/safehaus/triplesec/guardian/ldap/ integration/src/main/java/org/safehaus/triplesec/integration/ ite...

Author: djencks
Date: Sat Jan  6 22:31:55 2007
New Revision: 493667

URL: http://svn.apache.org/viewvc?view=rev&rev=493667
Log:
add some basic support for java permissions in guardian, with a very simple test

Modified:
    directory/sandbox/triplesec-jacc2/guardian-api/src/main/java/org/safehaus/triplesec/guardian/EntryApplicationPolicy.java
    directory/sandbox/triplesec-jacc2/guardian-ldap/src/main/java/org/safehaus/triplesec/guardian/ldap/LdapApplicationPolicy.java
    directory/sandbox/triplesec-jacc2/integration/src/main/java/org/safehaus/triplesec/integration/TriplesecIntegration.java
    directory/sandbox/triplesec-jacc2/itest-data/src/main/resources/server.ldif

Modified: directory/sandbox/triplesec-jacc2/guardian-api/src/main/java/org/safehaus/triplesec/guardian/EntryApplicationPolicy.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc2/guardian-api/src/main/java/org/safehaus/triplesec/guardian/EntryApplicationPolicy.java?view=diff&rev=493667&r1=493666&r2=493667
==============================================================================
--- directory/sandbox/triplesec-jacc2/guardian-api/src/main/java/org/safehaus/triplesec/guardian/EntryApplicationPolicy.java (original)
+++ directory/sandbox/triplesec-jacc2/guardian-api/src/main/java/org/safehaus/triplesec/guardian/EntryApplicationPolicy.java Sat Jan  6 22:31:55 2007
@@ -26,6 +26,8 @@
 import java.util.Set;
 import java.util.HashSet;
 import java.util.HashMap;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 
 import javax.naming.directory.Attributes;
 import javax.naming.directory.Attribute;
@@ -33,7 +35,7 @@
 import javax.naming.NamingEnumeration;
 
 /**
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
  */
 public abstract class EntryApplicationPolicy implements ApplicationPolicy {
     /** the name of the application this store is associated with */
@@ -55,10 +57,57 @@
 
     protected PermissionEntry loadPermission(Attributes attrs) throws NamingException
     {
-        Permission perm;
-        String permName = ( String ) attrs.get( "permName" ).get();
-        perm = new StringPermission( permName );
-        return new PermissionEntry(permName, perm);
+        Permission perm = null;
+        String permId = getStringAttribute(attrs, "permName");
+        String javaClassName = getStringAttribute(attrs, "permJavaClass");
+        if (javaClassName == null) {
+            perm = new StringPermission( permId );
+        } else {
+            String name = getStringAttribute(attrs, "permJavaName");
+            String actions = getStringAttribute(attrs, "permJavaActions");
+            ClassLoader loader = Thread.currentThread().getContextClassLoader();
+            Class permissionClass;
+            try {
+                permissionClass = Class.forName(javaClassName, true, loader);
+            } catch (ClassNotFoundException e) {
+                throw new NamingException("Could not load permission class " + javaClassName + " in classloader " + loader);
+            }
+            try {
+                Constructor<Permission> twoargs = permissionClass.getConstructor(String.class, String.class);
+                perm = twoargs.newInstance(name, actions);
+            } catch (NoSuchMethodException e) {
+                //ignore
+            } catch (IllegalAccessException e) {
+                throw (NamingException) new NamingException("Could not create permission").initCause(e);
+            } catch (InvocationTargetException e) {
+                throw (NamingException) new NamingException("Could not create permission").initCause(e.getTargetException());
+            } catch (InstantiationException e) {
+                throw (NamingException) new NamingException("Could not create permission").initCause(e);
+            }
+            if (perm == null) {
+                try {
+                    Constructor<Permission> onearg = permissionClass.getConstructor(String.class);
+                    perm = onearg.newInstance(name);
+                } catch (NoSuchMethodException e) {
+                    throw (NamingException) new NamingException("Could not create permission").initCause(e);
+                } catch (IllegalAccessException e) {
+                    throw (NamingException) new NamingException("Could not create permission").initCause(e);
+                } catch (InvocationTargetException e) {
+                    throw (NamingException) new NamingException("Could not create permission").initCause(e.getTargetException());
+                } catch (InstantiationException e) {
+                    throw (NamingException) new NamingException("Could not create permission").initCause(e);
+                }
+            }
+        }
+        return new PermissionEntry(permId, perm);
+    }
+
+    private String getStringAttribute(Attributes attrs, String attrID) throws NamingException {
+        Attribute attr = attrs.get(attrID);
+        if (attr == null) {
+            return null;
+        }
+        return ( String ) attr.get();
     }
 
     public String getApplicationName()
@@ -83,7 +132,7 @@
 
     protected Role getRole( Attributes attrs ) throws NamingException
     {
-        String roleName = ( String ) attrs.get( "roleName" ).get();
+        String roleName = getStringAttribute(attrs, "roleName");
         Permissions grants = new Permissions();
         Attribute attributes = attrs.get( "grants" );
 

Modified: directory/sandbox/triplesec-jacc2/guardian-ldap/src/main/java/org/safehaus/triplesec/guardian/ldap/LdapApplicationPolicy.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc2/guardian-ldap/src/main/java/org/safehaus/triplesec/guardian/ldap/LdapApplicationPolicy.java?view=diff&rev=493667&r1=493666&r2=493667
==============================================================================
--- directory/sandbox/triplesec-jacc2/guardian-ldap/src/main/java/org/safehaus/triplesec/guardian/ldap/LdapApplicationPolicy.java (original)
+++ directory/sandbox/triplesec-jacc2/guardian-ldap/src/main/java/org/safehaus/triplesec/guardian/ldap/LdapApplicationPolicy.java Sat Jan  6 22:31:55 2007
@@ -224,7 +224,7 @@
     private void loadPermissions() throws GuardianException
     {
         SearchControls ctrls = new SearchControls();
-        ctrls.setReturningAttributes( new String[] { "permName" } );
+        ctrls.setReturningAttributes( new String[] { "permName", "permJavaClass", "permJavaName", "permJavaActions" } );
         ctrls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
         try
         {
@@ -233,10 +233,9 @@
             while ( list.hasMore() )
             {
                 SearchResult result = list.next();
-                String permName = ( String ) result.getAttributes().get( "permName" ).get();
                 PermissionEntry permEntry = loadPermission( result.getAttributes());
                 permissions.put(permEntry.getPermissionName(), permEntry.getPermission());
-                log.debug( "loading permission " + permName + " for application " + applicationName );
+                log.debug( "loading permission " + permEntry.getPermissionName() + " for application " + applicationName );
             }
         }
         catch ( NamingException e )

Modified: directory/sandbox/triplesec-jacc2/integration/src/main/java/org/safehaus/triplesec/integration/TriplesecIntegration.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc2/integration/src/main/java/org/safehaus/triplesec/integration/TriplesecIntegration.java?view=diff&rev=493667&r1=493666&r2=493667
==============================================================================
--- directory/sandbox/triplesec-jacc2/integration/src/main/java/org/safehaus/triplesec/integration/TriplesecIntegration.java (original)
+++ directory/sandbox/triplesec-jacc2/integration/src/main/java/org/safehaus/triplesec/integration/TriplesecIntegration.java Sat Jan  6 22:31:55 2007
@@ -283,7 +283,7 @@
             String msg = "The configuration resources directory '" +
                     resourcesDirectory + "' does not exist will search classpath for resources";
             resourcesDirectory = null;
-            log.error( msg );
+            log.debug( msg );
         }
 
         // --------------------------------------------------------------------

Modified: directory/sandbox/triplesec-jacc2/itest-data/src/main/resources/server.ldif
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc2/itest-data/src/main/resources/server.ldif?view=diff&rev=493667&r1=493666&r2=493667
==============================================================================
--- directory/sandbox/triplesec-jacc2/itest-data/src/main/resources/server.ldif (original)
+++ directory/sandbox/triplesec-jacc2/itest-data/src/main/resources/server.ldif Sat Jan  6 22:31:55 2007
@@ -351,7 +351,10 @@
 dn: permName=mockPerm0,ou=permissions,appName=mockApplication,ou=applications,dc=example,dc=com
 objectClass: top
 objectClass: policyPermission
+objectClass: javaPermission
 permName: mockPerm0
+permJavaClass: org.safehaus.triplesec.guardian.StringPermission
+permJavaName: mockPerm0
 
 dn: permName=mockPerm1,ou=permissions,appName=mockApplication,ou=applications,dc=example,dc=com
 objectClass: top