You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sm...@apache.org on 2006/12/12 12:32:17 UTC

svn commit: r486101 - in /harmony/enhanced/classlib/trunk/modules/luni/src: main/java/java/lang/ main/java/org/apache/harmony/luni/util/ test/java/org/apache/harmony/luni/tests/java/lang/

Author: smishura
Date: Tue Dec 12 03:32:15 2006
New Revision: 486101

URL: http://svn.apache.org/viewvc?view=rev&rev=486101
Log:
Roll back commit r486052 (Fixed HARMONY-2301 [luni] flawed SecurityManager.checkPackageAccess() impl)

CC was down because of it. Also classlib tests fails for me on DRL VM and IBM VME

Modified:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/lang/SecurityManager.java
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/PriviAction.java
    harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/MutableSecurityManager.java
    harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/SecurityManagerTest.java

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/lang/SecurityManager.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/lang/SecurityManager.java?view=diff&rev=486101&r1=486100&r2=486101
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/lang/SecurityManager.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/lang/SecurityManager.java Tue Dec 12 03:32:15 2006
@@ -46,8 +46,7 @@
     private static final PropertyPermission READ_WRITE_ALL_PROPERTIES_PERMISSION = new PropertyPermission(
             "*", "read,write");
 
-    private static final String PKG_ACC_KEY = "package.access";
-    private static final String PKG_DEF_KEY = "package.definition";
+    private static String[] securePackageList;
 
 	/**
 	 * Flag to indicate whether a security check is in progress.
@@ -300,8 +299,26 @@
         if (packageName == null) {
             throw new NullPointerException();
         }
-        if (checkPackageProperty(PKG_ACC_KEY, packageName)) {
-            checkPermission(new RuntimePermission("accessClassInPackage." + packageName));
+        synchronized (SecurityManager.class) {
+            if (securePackageList == null) {
+                String securePackages = getSecurityProperty("package.access");
+                if (securePackages != null) {
+                    StringTokenizer tokenizer = new StringTokenizer(securePackages, ", ");
+                    int i = 0;
+                    securePackageList = new String[tokenizer.countTokens()];
+                    while (tokenizer.hasMoreTokens()) {
+                        securePackageList[i++] = tokenizer.nextToken();
+                    }
+                } else {
+                    securePackageList = new String[0];
+                }
+            }
+            for (int i = 0; i < securePackageList.length; i++) {
+                if (packageName.startsWith(securePackageList[i])) {
+                    checkPermission(new RuntimePermission("accessClassInPackage." + packageName));
+                    return;
+                }
+            }
         }
     }
 
@@ -313,44 +330,26 @@
 	 *            the name of the package to add a class to.
 	 */
 	public void checkPackageDefinition(String packageName) {
-	    if (packageName == null) {
-	        throw new NullPointerException();
-	    }
-            if (checkPackageProperty(PKG_DEF_KEY, packageName)) {
-                checkPermission(new RuntimePermission("defineClassInPackage." + packageName));
-            }
-	}
-
-    /**
-     * Returns true if the package name is restricted by 
-     * the specified security property.
-     */
-    private static boolean checkPackageProperty(
-            final String property, final String pkg) 
-    {
-            String list = AccessController.doPrivileged(PriviAction
-                .getSecurityProperty(property));
-        if (list != null) {
-            int plen = pkg.length();
-            StringTokenizer tokenizer = new StringTokenizer(list, ", ");
-            while (tokenizer.hasMoreTokens()) {
-                String token = tokenizer.nextToken();
-                int tlen = token.length();
-                if (plen > tlen) {
-                    if (pkg.startsWith(token)
-                            && (token.charAt(tlen - 1) == '.' || pkg
-                                    .charAt(tlen) == '.')) {
-                        return true;
-                    }
-                } else if (plen + 1 >= tlen && token.startsWith(pkg)) {
-                    if (plen == tlen || token.charAt(tlen - 1) == '.') {
-                        return true;
-                    }
-                }
-            }
+		if (packageName == null) {
+            throw new NullPointerException();
         }
-
-        return false;
+		String securePackages = getSecurityProperty("package.definition");
+		if (securePackages != null) {
+			StringTokenizer tokenizer = new StringTokenizer(securePackages,
+					", ");
+			while (tokenizer.hasMoreTokens()) {
+				if (packageName.startsWith(tokenizer.nextToken())) {
+					checkPermission(new RuntimePermission(
+							"defineClassInPackage." + packageName));
+					return;
+				}
+			}
+		}
+	}
+
+	private String getSecurityProperty(final String property) {
+        PrivilegedAction<String> pa = PriviAction.getSecurityProperty(property);
+        return AccessController.doPrivileged(pa);
     }
 
 	/**

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/PriviAction.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/PriviAction.java?view=diff&rev=486101&r1=486100&r2=486101
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/PriviAction.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/PriviAction.java Tue Dec 12 03:32:15 2006
@@ -53,8 +53,8 @@
 	 * 
 	 * @see Security#getProperty
 	 */
-	public static PrivilegedAction<String> getSecurityProperty(String property) {
-		return new PriviAction<String>(GET_SECURITY_PROPERTY, property);
+	public static <T> PrivilegedAction<T> getSecurityProperty(String property) {
+		return new PriviAction<T>(GET_SECURITY_PROPERTY, property);
 	}
 
 	private PriviAction(int action, Object arg) {

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/MutableSecurityManager.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/MutableSecurityManager.java?view=diff&rev=486101&r1=486100&r2=486101
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/MutableSecurityManager.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/MutableSecurityManager.java Tue Dec 12 03:32:15 2006
@@ -17,54 +17,53 @@
 package org.apache.harmony.luni.tests.java.lang;
 
 import java.security.Permission;
-import java.security.PermissionCollection;
-import java.security.Permissions;
+import java.util.HashSet;
+import java.util.Set;
 
 class MutableSecurityManager extends SecurityManager {
 
     static final RuntimePermission SET_SECURITY_MANAGER = new RuntimePermission("setSecurityManager");
     
-    private PermissionCollection enabled;
+    private final Set<Permission> permissions;
     
-    private PermissionCollection denied;
+    private String deny;
 
     public MutableSecurityManager() {
         super();
-        this.enabled = new Permissions();
+        this.permissions = new HashSet<Permission>();
     }
     
     public MutableSecurityManager(Permission... permissions) {
         this();
         for (int i = 0; i < permissions.length; i++) {
-            this.enabled.add(permissions[i]);
+            this.permissions.add(permissions[i]);
         }
     }
 
     void addPermission(Permission permission) {
-        enabled.add(permission);
+        permissions.add(permission);
+    }
+
+    void removePermission(Permission permission) {
+        permissions.remove(permission);
     }
 
     void clearPermissions() {
-        enabled = new Permissions();
+        permissions.clear();
     }
     
-    void denyPermission(Permission p) {
-        if (denied == null) {
-            denied = new Permissions();
-        }
-        denied.add(p);
+    void denyPermission(String name) {
+        deny = name;
     }
 
     @Override
     public void checkPermission(Permission permission) {
-        if (enabled.implies(permission)) {
+        if (permissions.contains(permission)) {
             return;
         }
-        
-        if (denied != null && denied.implies(permission)){
-            throw new SecurityException("Denied " + permission);
+        if (permission.getName().equals(deny)){
+            throw new SecurityException();
         }
-        
         super.checkPermission(permission);
     }
 }

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/SecurityManagerTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/SecurityManagerTest.java?view=diff&rev=486101&r1=486100&r2=486101
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/SecurityManagerTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/SecurityManagerTest.java Tue Dec 12 03:32:15 2006
@@ -17,7 +17,7 @@
 package org.apache.harmony.luni.tests.java.lang;
 
 import java.io.File;
-import java.security.Security;
+
 import tests.support.Support_Exec;
 
 import junit.framework.TestCase;
@@ -25,102 +25,12 @@
 public class SecurityManagerTest extends TestCase {
     
     /**
-     * @tests java.lang.SecurityManager#checkPackageAccess(String)
-     */
-    public void test_checkPackageAccessLjava_lang_String() {
-        final String old = Security.getProperty("package.access");
-        Security.setProperty("package.access", "a.,bbb, c.d.");
-
-        MutableSecurityManager sm = new MutableSecurityManager();
-        sm.denyPermission(new RuntimePermission("accessClassInPackage.*"));
-        
-        try {
-            sm.checkPackageAccess("z.z.z");
-            sm.checkPackageAccess("aa");
-            sm.checkPackageAccess("bb");
-            sm.checkPackageAccess("c");
-
-            try {
-                sm.checkPackageAccess("a");
-                fail("This should throw a SecurityException.");
-            } catch (SecurityException ok) {}
-            
-            try {
-                sm.checkPackageAccess("bbb");
-                fail("This should throw a SecurityException.");
-            } catch (SecurityException ok) {}
-
-            try {
-                sm.checkPackageAccess("c.d.e");
-                fail("This should throw a SecurityException.");
-            } catch (SecurityException ok) {}
-            
-            Security.setProperty("package.access", "QWERTY");
-            sm.checkPackageAccess("a");
-            sm.checkPackageAccess("qwerty");
-            try {
-                sm.checkPackageAccess("QWERTY");
-                fail("This should throw a SecurityException.");
-            } catch (SecurityException ok) {}
-
-        } finally {
-            Security.setProperty("package.access", 
-                    old == null ? "" : old);
-        }
-    }
-
-    /**
-     * @tests java.lang.SecurityManager#checkPackageDefinition(String)
-     */
-    public void test_checkPackageDefinitionLjava_lang_String() {
-        final String old = Security.getProperty("package.definition");
-        Security.setProperty("package.definition", "a.,bbb, c.d.");
-
-        MutableSecurityManager sm = new MutableSecurityManager();
-        sm.denyPermission(new RuntimePermission("defineClassInPackage.*"));
-        
-        try {
-            sm.checkPackageDefinition("z.z.z");
-            sm.checkPackageDefinition("aa");
-            sm.checkPackageDefinition("bb");
-            sm.checkPackageDefinition("c");
-
-            try {
-                sm.checkPackageDefinition("a");
-                fail("This should throw a SecurityException.");
-            } catch (SecurityException ok) {}
-            
-            try {
-                sm.checkPackageDefinition("bbb");
-                fail("This should throw a SecurityException.");
-            } catch (SecurityException ok) {}
-
-            try {
-                sm.checkPackageDefinition("c.d.e");
-                fail("This should throw a SecurityException.");
-            } catch (SecurityException ok) {}
-
-            Security.setProperty("package.definition", "QWERTY");
-            sm.checkPackageDefinition("a");
-            sm.checkPackageDefinition("qwerty");
-            try {
-                sm.checkPackageDefinition("QWERTY");
-                fail("This should throw a SecurityException.");
-            } catch (SecurityException ok) {}
-
-        } finally {
-            Security.setProperty("package.definition", 
-                    old == null ? "" : old);
-        }
-    }
-
-    /**
      * @tests java.lang.SecurityManager#checkMemberAccess(java.lang.Class, int)
      */
     public void test_checkMemberAccessLjava_lang_ClassI() {
         MutableSecurityManager sm = new MutableSecurityManager();
         sm.addPermission(MutableSecurityManager.SET_SECURITY_MANAGER);
-        sm.denyPermission(new RuntimePermission("accessDeclaredMembers"));
+        sm.denyPermission("accessDeclaredMembers");
         System.setSecurityManager(sm);
         try {
             try {