Author: stevel
Date: Wed Dec 23 12:11:51 2009
New Revision: 893490

URL: http://svn.apache.org/viewvc?rev=893490&view=rev
Log:
HADOOP-6452 Hadoop JSP pages don't work under a security manager

Modified:
    
hadoop/common/trunk/src/java/org/apache/hadoop/security/authorize/ConfiguredPolicy.java
    
hadoop/common/trunk/src/test/core/org/apache/hadoop/security/authorize/TestConfiguredPolicy.java

Modified: 
hadoop/common/trunk/src/java/org/apache/hadoop/security/authorize/ConfiguredPolicy.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/trunk/src/java/org/apache/hadoop/security/authorize/ConfiguredPolicy.java?rev=893490&r1=893489&r2=893490&view=diff
==============================================================================
--- 
hadoop/common/trunk/src/java/org/apache/hadoop/security/authorize/ConfiguredPolicy.java
 (original)
+++ 
hadoop/common/trunk/src/java/org/apache/hadoop/security/authorize/ConfiguredPolicy.java
 Wed Dec 23 12:11:51 2009
@@ -22,6 +22,8 @@
 import java.security.Policy;
 import java.security.Principal;
 import java.security.ProtectionDomain;
+import java.security.CodeSource;
+import java.security.Permissions;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -77,6 +79,19 @@
     return super.implies(domain, permission);
   }
 
+  /**
+   * {...@inheritdoc}
+   * @return a writable permission collection
+   */
+  @Override
+  public PermissionCollection getPermissions(CodeSource codesource) {
+    return new Permissions();
+  }
+
+  /**
+   * {...@inheritdoc}
+   * @return a writable permission collection
+   */
   @Override
   public PermissionCollection getPermissions(ProtectionDomain domain) {
     PermissionCollection permissionCollection = super.getPermissions(domain);
@@ -153,4 +168,14 @@
       LOG.debug("Policy - Adding  " + permission + " to " + principal);
     }
   }
+
+  /**
+   * For debugging: identify ourselves and the policyproviders 
+   *
+   * @return a string representation of the object.
+   */
+  @Override
+  public String toString() {
+    return "Hadoop ConfiguredPolicy " + super.toString() + " Policy provider 
"+ policyProvider;
+  }
 }

Modified: 
hadoop/common/trunk/src/test/core/org/apache/hadoop/security/authorize/TestConfiguredPolicy.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/trunk/src/test/core/org/apache/hadoop/security/authorize/TestConfiguredPolicy.java?rev=893490&r1=893489&r2=893490&view=diff
==============================================================================
--- 
hadoop/common/trunk/src/test/core/org/apache/hadoop/security/authorize/TestConfiguredPolicy.java
 (original)
+++ 
hadoop/common/trunk/src/test/core/org/apache/hadoop/security/authorize/TestConfiguredPolicy.java
 Wed Dec 23 12:11:51 2009
@@ -17,7 +17,13 @@
  */
 package org.apache.hadoop.security.authorize;
 
-import java.security.Permission;
+import java.security.CodeSource;
+import java.security.CodeSigner;
+import java.security.PermissionCollection;
+import java.security.ProtectionDomain;
+import java.net.URL;
+import java.net.NetPermission;
+import java.net.MalformedURLException;
 
 import javax.security.auth.Subject;
 
@@ -36,7 +42,7 @@
   
   private static final String KEY_1 = "test.policy.1";
   private static final String KEY_2 = "test.policy.2";
-  
+
   public static class Protocol1 {
     int i;
   }
@@ -55,11 +61,7 @@
   }
   
   public void testConfiguredPolicy() throws Exception {
-    Configuration conf = new Configuration();
-    conf.set(KEY_1, AccessControlList.WILDCARD_ACL_VALUE);
-    conf.set(KEY_2, USER1 + " " + GROUPS1[0]);
-    
-    ConfiguredPolicy policy = new ConfiguredPolicy(conf, new 
TestPolicyProvider());
+    ConfiguredPolicy policy = createConfiguredPolicy();
     SecurityUtil.setPolicy(policy);
     
     Subject user1 = 
@@ -79,4 +81,60 @@
     }
     assertTrue(failed);
   }
+
+  /**
+   * Create a configured policy with some keys
+   * @return a new configured policy
+   */
+  private ConfiguredPolicy createConfiguredPolicy() {
+    Configuration conf = new Configuration();
+    conf.set(KEY_1, AccessControlList.WILDCARD_ACL_VALUE);
+    conf.set(KEY_2, USER1 + " " + GROUPS1[0]);
+
+    return new ConfiguredPolicy(conf, new TestPolicyProvider());
+  }
+
+  /**
+   * Create a test code source against a test URL
+   * @return a new code source
+   * @throws MalformedURLException
+   */
+  private CodeSource createCodeSource() throws MalformedURLException {
+    return new CodeSource(new URL("http://hadoop.apache.org";),
+        (CodeSigner[]) null);
+  }
+
+  /**
+   * Assert that a permission collection can have new permissions added
+   * @param permissions the collection to check
+   */
+  private void assertWritable(PermissionCollection permissions) {
+    assertFalse(permissions.isReadOnly());
+    NetPermission netPermission = new NetPermission("something");
+    permissions.add(netPermission);
+  }
+
+  /**
+   * test that the {...@link PermissionCollection} returned by
+   * {...@link ConfiguredPolicy#getPermissions(CodeSource)} is writeable
+   * @throws Throwable on any failure
+   */
+  public void testPolicyWritable() throws Throwable {
+    ConfiguredPolicy policy = createConfiguredPolicy();
+    CodeSource source = createCodeSource();
+    PermissionCollection permissions = policy.getPermissions(source);
+    assertWritable(permissions);
+  }
+
+  /**
+   * test that the {...@link PermissionCollection} returned by
+   * {...@link ConfiguredPolicy#getPermissions(CodeSource)} is writeable
+   * @throws Throwable on any failure
+   */
+  public void testProtectionDomainPolicyWritable() throws Throwable {
+    ConfiguredPolicy policy = createConfiguredPolicy();
+    CodeSource source = createCodeSource();
+    PermissionCollection permissions = policy.getPermissions(new 
ProtectionDomain(source, null));
+    assertWritable(permissions);
+  }
 }


Reply via email to