GEODE-1571: Allow AuthInit to take either a constructor or a static factory 
method

* Allow AuthInit to take either a constructor or a static factory method
* add more javadoc
* simplify security check
* fix test failures


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/d37e08e6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/d37e08e6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/d37e08e6

Branch: refs/heads/master
Commit: d37e08e69fe3b5920c98bd9198ad37a9edd17ed7
Parents: 701909f
Author: Jinmei Liao <jil...@pivotal.io>
Authored: Mon Jul 18 11:48:44 2016 -0700
Committer: Jinmei Liao <jil...@pivotal.io>
Committed: Tue Jul 19 09:50:27 2016 -0700

----------------------------------------------------------------------
 .../membership/gms/auth/GMSAuthenticator.java   |  24 ++--
 .../cache/tier/sockets/AcceptorImpl.java        |   4 +-
 .../internal/cache/tier/sockets/HandShake.java  |  26 ++---
 .../internal/security/GeodeSecurityUtil.java    | 117 +++++++++++++------
 .../security/shiro/CustomAuthRealm.java         |   6 +-
 .../gemfire/security/AuthInitialize.java        |  12 +-
 .../apache/geode/security/GeodePermission.java  |  21 ++++
 .../apache/geode/security/PostProcessor.java    |   2 +-
 .../security/templates/SamplePostProcessor.java |  16 ++-
 .../gms/auth/GMSAuthenticatorJUnitTest.java     |  46 ++++----
 .../security/GeodeSecurityUtilTest.java         |   4 +-
 .../security/ClientAuthenticationTestCase.java  |   4 +-
 .../gemfire/security/SecurityTestUtils.java     |   9 ++
 13 files changed, 191 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticator.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticator.java
 
b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticator.java
index b82fdb1..f16a722 100755
--- 
a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticator.java
+++ 
b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticator.java
@@ -16,6 +16,14 @@
  */
 package com.gemstone.gemfire.distributed.internal.membership.gms.auth;
 
+import static com.gemstone.gemfire.distributed.ConfigurationProperties.*;
+import static com.gemstone.gemfire.internal.i18n.LocalizedStrings.*;
+
+import java.lang.reflect.Method;
+import java.security.Principal;
+import java.util.Properties;
+import java.util.Set;
+
 import com.gemstone.gemfire.LogWriter;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
@@ -26,19 +34,12 @@ import 
com.gemstone.gemfire.distributed.internal.membership.gms.interfaces.Authe
 import com.gemstone.gemfire.internal.ClassLoadUtil;
 import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.logging.InternalLogWriter;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 import com.gemstone.gemfire.security.AuthInitialize;
 import com.gemstone.gemfire.security.AuthenticationFailedException;
 import com.gemstone.gemfire.security.AuthenticationRequiredException;
 import com.gemstone.gemfire.security.GemFireSecurityException;
 
-import java.lang.reflect.Method;
-import java.security.Principal;
-import java.util.Properties;
-import java.util.Set;
-
-import static com.gemstone.gemfire.internal.i18n.LocalizedStrings.*;
-import static com.gemstone.gemfire.distributed.ConfigurationProperties.*;
-
 // static messages
 
 public class GMSAuthenticator implements Authenticator {
@@ -195,12 +196,7 @@ public class GMSAuthenticator implements Authenticator {
 
     try {
       if (authMethod != null && authMethod.length() > 0) {
-        Method getter = ClassLoadUtil.methodFromName(authMethod);
-        AuthInitialize auth = (AuthInitialize)getter.invoke(null, (Object[]) 
null);
-        if (auth == null) {
-          throw new 
AuthenticationRequiredException(AUTH_FAILED_TO_ACQUIRE_AUTHINITIALIZE_INSTANCE.toLocalizedString(authMethod));
-        }
-
+        AuthInitialize auth = GeodeSecurityUtil.getObjectOfType(authMethod, 
AuthInitialize.class);
         try {
           LogWriter logWriter = services.getLogWriter();
           LogWriter securityLogWriter = services.getSecurityLogWriter();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java
 
b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java
index e93faf8..43f90d5 100644
--- 
a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java
+++ 
b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java
@@ -638,9 +638,9 @@ public class AcceptorImpl extends Acceptor implements 
Runnable
       this.hsPool = tmp_hsPool;
     }
 
-    isAuthenticationRequired = 
GeodeSecurityUtil.isSecurityRequired(this.cache.getDistributedSystem().getSecurityProperties());
+    isAuthenticationRequired = GeodeSecurityUtil.isSecurityRequired();
 
-    isIntegratedSecurity = 
GeodeSecurityUtil.isIntegratedSecurity(this.cache.getDistributedSystem().getSecurityProperties());
+    isIntegratedSecurity = GeodeSecurityUtil.isIntegratedSecurity();
 
     String postAuthzFactoryName = this.cache.getDistributedSystem()
         .getProperties().getProperty(SECURITY_CLIENT_ACCESSOR_PP);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HandShake.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HandShake.java
 
b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HandShake.java
index a2951f5..2dcf8e7 100755
--- 
a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HandShake.java
+++ 
b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HandShake.java
@@ -899,7 +899,7 @@ public class HandShake implements ClientHandShake
       throws GemFireSecurityException, IOException {
 
     Properties credentials = null;
-    boolean requireAuthentication = 
GeodeSecurityUtil.isSecurityRequired(system.getSecurityProperties());
+    boolean requireAuthentication = GeodeSecurityUtil.isSecurityRequired();
     try {
       byte secureMode = dis.readByte();
       if (secureMode == CREDENTIALS_NONE) {
@@ -1161,7 +1161,7 @@ public class HandShake implements ClientHandShake
     // non-blank setting for DH symmetric algo, or this is a server
     // that has authenticator defined.
     if ((dhSKAlgo != null && dhSKAlgo.length() > 0)
-        || GeodeSecurityUtil.isSecurityRequired(config.getSecurityProps())) {
+        || GeodeSecurityUtil.isSecurityRequired()) {
       KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
       DHParameterSpec dhSpec = new DHParameterSpec(dhP, dhG, dhL);
       keyGen.initialize(dhSpec);
@@ -1599,19 +1599,13 @@ public class HandShake implements ClientHandShake
     Properties credentials = null;
     try {
       if (authInitMethod != null && authInitMethod.length() > 0) {
-        Method instanceGetter = ClassLoadUtil.methodFromName(authInitMethod);
-        AuthInitialize auth = (AuthInitialize)instanceGetter.invoke(null,
-            (Object[])null);
-        if (auth != null) {
-          auth.init(logWriter, 
-                    securityLogWriter);
-          try {
-            credentials = auth.getCredentials(securityProperties, server,
-                isPeer);
-          }
-          finally {
-            auth.close();
-          }
+        AuthInitialize auth = 
GeodeSecurityUtil.getObjectOfType(authInitMethod, AuthInitialize.class);
+        auth.init(logWriter, securityLogWriter);
+        try {
+          credentials = auth.getCredentials(securityProperties, server, 
isPeer);
+        }
+        finally {
+          auth.close();
         }
       }
     }
@@ -1638,7 +1632,7 @@ public class HandShake implements ClientHandShake
       DataOutputStream dos, DistributedSystem system)
       throws GemFireSecurityException, IOException {
 
-    boolean requireAuthentication = 
GeodeSecurityUtil.isSecurityRequired(system.getSecurityProperties());
+    boolean requireAuthentication = GeodeSecurityUtil.isSecurityRequired();
     Properties credentials = null;
     try {
       byte secureMode = dis.readByte();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
 
b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
index 8707a78..d439b19 100644
--- 
a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
+++ 
b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
@@ -19,6 +19,7 @@ package com.gemstone.gemfire.internal.security;
 
 import static com.gemstone.gemfire.distributed.ConfigurationProperties.*;
 
+import java.lang.reflect.Method;
 import java.security.AccessController;
 import java.security.Principal;
 import java.util.Properties;
@@ -26,10 +27,14 @@ import java.util.Set;
 import java.util.concurrent.Callable;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.geode.security.GeodePermission;
+import org.apache.geode.security.GeodePermission.Operation;
+import org.apache.geode.security.GeodePermission.Resource;
+import org.apache.geode.security.PostProcessor;
+import org.apache.geode.security.SecurityManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.ShiroException;
-import org.apache.shiro.UnavailableSecurityManagerException;
 import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.config.Ini.Section;
 import org.apache.shiro.config.IniSecurityManagerFactory;
@@ -47,12 +52,7 @@ import 
com.gemstone.gemfire.internal.security.shiro.ShiroPrincipal;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
 import com.gemstone.gemfire.security.AuthenticationFailedException;
 import com.gemstone.gemfire.security.GemFireSecurityException;
-import org.apache.geode.security.GeodePermission;
-import org.apache.geode.security.GeodePermission.Operation;
-import org.apache.geode.security.GeodePermission.Resource;
 import com.gemstone.gemfire.security.NotAuthorizedException;
-import org.apache.geode.security.PostProcessor;
-import org.apache.geode.security.SecurityManager;
 
 public class GeodeSecurityUtil {
 
@@ -65,7 +65,7 @@ public class GeodeSecurityUtil {
    * @return the shiro subject, null if security is not enabled
    */
   public static Subject getSubject() {
-    if (!isSecured()) {
+    if (!isIntegratedSecure) {
       return null;
     }
 
@@ -102,7 +102,7 @@ public class GeodeSecurityUtil {
    * @return null if security is not enabled, otherwise return a shiro subject
    */
   public static Subject login(String username, String password) {
-    if (!isSecured()) {
+    if (!isIntegratedSecure) {
       return null;
     }
 
@@ -269,18 +269,10 @@ public class GeodeSecurityUtil {
     }
   }
 
-  private static boolean isSecured() {
-    try {
-      SecurityUtils.getSecurityManager();
-    }
-    catch (UnavailableSecurityManagerException e) {
-      return false;
-    }
-    return true;
-  }
-
   private static PostProcessor postProcessor;
   private static SecurityManager securityManager;
+  private static boolean isSecure;
+  private static boolean isIntegratedSecure;
 
   /**
    * initialize Shiro's Security Manager and Security Utilities
@@ -293,6 +285,7 @@ public class GeodeSecurityUtil {
 
     String shiroConfig = securityProps.getProperty(SECURITY_SHIRO_INIT);
     String securityConfig = securityProps.getProperty(SECURITY_MANAGER);
+    String clientAuthenticatorConfig = 
securityProps.getProperty(SECURITY_CLIENT_AUTHENTICATOR);
 
     if (!StringUtils.isBlank(shiroConfig)) {
       IniSecurityManagerFactory factory = new 
IniSecurityManagerFactory("classpath:" + shiroConfig);
@@ -306,24 +299,33 @@ public class GeodeSecurityUtil {
 
       org.apache.shiro.mgt.SecurityManager securityManager = 
factory.getInstance();
       SecurityUtils.setSecurityManager(securityManager);
+      isSecure = true;
+      isIntegratedSecure = true;
     }
-
     // only set up shiro realm if user has implemented SecurityManager
     else if (!StringUtils.isBlank(securityConfig)) {
-      securityManager = getObjectOfType(securityConfig, SecurityManager.class);
+      securityManager = getObjectOfTypeFromClassName(securityConfig, 
SecurityManager.class);
       securityManager.init(securityProps);
       Realm realm = new CustomAuthRealm(securityManager);
       org.apache.shiro.mgt.SecurityManager shiroManager = new 
DefaultSecurityManager(realm);
       SecurityUtils.setSecurityManager(shiroManager);
+      isSecure = true;
+      isIntegratedSecure = true;
+    }
+    else if( !StringUtils.isBlank(clientAuthenticatorConfig)) {
+      isSecure = true;
+      isIntegratedSecure = false;
     }
     else {
       SecurityUtils.setSecurityManager(null);
+      isSecure = false;
+      isIntegratedSecure = false;
     }
 
     // this initializes the post processor
     String customPostProcessor = 
securityProps.getProperty(SECURITY_POST_PROCESSOR);
     if( !StringUtils.isBlank(customPostProcessor)) {
-      postProcessor = getObjectOfType(customPostProcessor, 
PostProcessor.class);
+      postProcessor = getObjectOfTypeFromClassName(customPostProcessor, 
PostProcessor.class);
       postProcessor.init(securityProps);
     }
     else{
@@ -342,6 +344,8 @@ public class GeodeSecurityUtil {
       postProcessor = null;
     }
     ThreadContext.remove();
+    isSecure = false;
+    isIntegratedSecure = false;
   }
 
   /**
@@ -349,8 +353,7 @@ public class GeodeSecurityUtil {
    * But if your postProcess is pretty involved with preparations and you need 
to bypass it entirely, call this first.
    */
   public static boolean needPostProcess(){
-    Subject subject = getSubject();
-    return (subject != null && postProcessor != null);
+    return (isIntegratedSecure && postProcessor != null);
   }
 
   public static Object postProcess(String regionPath, Object key, Object 
result){
@@ -367,42 +370,88 @@ public class GeodeSecurityUtil {
   }
 
 
-  public static <T> T getObjectOfType(String className, Class<T> 
expectedClazz) {
+  /**
+   * this method would never return null, it either throws an exception or 
returns an object
+   * @param className
+   * @param expectedClazz
+   * @param <T>
+   * @return
+   */
+  public static <T> T getObjectOfTypeFromClassName(String className, Class<T> 
expectedClazz) {
     Class actualClass = null;
     try {
       actualClass = ClassLoadUtil.classFromName(className);
     }
     catch (Exception ex) {
-      throw new GemFireSecurityException(ex.toString(), ex);
+      throw new GemFireSecurityException("Instance could not be obtained, 
"+ex.toString(), ex);
     }
 
     if(!expectedClazz.isAssignableFrom(actualClass)){
-      throw new GemFireSecurityException("Expecting a 
"+expectedClazz.getName()+" class.");
+      throw new GemFireSecurityException("Instance could not be obtained. 
Expecting a "+expectedClazz.getName()+" class.");
     }
 
     T actualObject = null;
     try {
       actualObject =  (T)actualClass.newInstance();
     } catch (Exception e) {
-      throw new GemFireSecurityException("Error instantiating 
"+actualClass.getName(), e);
+      throw new GemFireSecurityException("Instance could not be obtained. 
Error instantiating "+actualClass.getName(), e);
     }
     return actualObject;
   }
 
+  /**
+   * this method would never return null, it either throws an exception or 
returns an object
+   * @param factoryMethodName
+   * @param expectedClazz
+   * @param <T>
+   * @return
+   */
+  public static <T> T getObjectOfTypeFromFactoryMethod(String 
factoryMethodName, Class<T> expectedClazz){
+    T actualObject = null;
+    try {
+      Method factoryMethod = ClassLoadUtil.methodFromName(factoryMethodName);
+      actualObject = (T)factoryMethod.invoke(null, (Object[])null);
+    } catch (Exception e) {
+      throw new GemFireSecurityException("Instance could not be obtained from 
"+factoryMethodName, e);
+    }
+
+    if(actualObject == null){
+      throw new GemFireSecurityException("Instance could not be obtained from 
"+factoryMethodName);
+    }
+
+    return actualObject;
+  }
+
+  /**
+   * this method would never return null, it either throws an exception or 
returns an object
+   * @param classOrMethod
+   * @param expectedClazz
+   * @param <T>
+   * @return an object of type expectedClazz. This method would never return 
null. It either returns an non-null
+   * object or throws exception.
+   */
+  public static <T> T getObjectOfType(String classOrMethod, Class<T> 
expectedClazz) {
+    T object = null;
+    try{
+      object = getObjectOfTypeFromClassName(classOrMethod, expectedClazz);
+    }
+    catch (Exception e){
+      object = getObjectOfTypeFromFactoryMethod(classOrMethod, expectedClazz);
+    }
+    return object;
+  }
+
   public static SecurityManager getSecurityManager(){
     return securityManager;
   }
 
 
-  public static boolean isSecurityRequired(Properties securityProps){
-    String authenticator = 
securityProps.getProperty(SECURITY_CLIENT_AUTHENTICATOR);
-    String securityManager = securityProps.getProperty(SECURITY_MANAGER);
-    return !StringUtils.isEmpty(authenticator) || 
!StringUtils.isEmpty(securityManager);
+  public static boolean isSecurityRequired(){
+    return isSecure;
   }
 
-  public static boolean isIntegratedSecurity(Properties securityProps){
-    String securityManager = securityProps.getProperty(SECURITY_MANAGER);
-    return !StringUtils.isEmpty(securityManager);
+  public static boolean isIntegratedSecurity(){
+    return isIntegratedSecure;
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
 
b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
index 3d6275b..db07fe0 100644
--- 
a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
+++ 
b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
@@ -19,6 +19,8 @@ package com.gemstone.gemfire.internal.security.shiro;
 import java.security.Principal;
 import java.util.Properties;
 
+import org.apache.geode.security.GeodePermission;
+import org.apache.geode.security.SecurityManager;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationInfo;
 import org.apache.shiro.authc.AuthenticationToken;
@@ -31,8 +33,6 @@ import org.apache.shiro.subject.PrincipalCollection;
 
 import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 import com.gemstone.gemfire.management.internal.security.ResourceConstants;
-import org.apache.geode.security.SecurityManager;
-import org.apache.geode.security.GeodePermission;
 
 public class CustomAuthRealm extends AuthorizingRealm{
 
@@ -45,7 +45,7 @@ public class CustomAuthRealm extends AuthorizingRealm{
   }
 
   public CustomAuthRealm (String authenticatorFactory) {
-    this.securityManager = 
GeodeSecurityUtil.getObjectOfType(authenticatorFactory, SecurityManager.class);
+    this.securityManager = 
GeodeSecurityUtil.getObjectOfTypeFromClassName(authenticatorFactory, 
SecurityManager.class);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java 
b/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java
index 400c665..e92772b 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java
@@ -23,6 +23,7 @@ import com.gemstone.gemfire.LogWriter;
 import com.gemstone.gemfire.cache.CacheCallback;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.DistributedSystem;
+import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
 
 // TODO Add example usage of this interface and configuration details
 /**
@@ -49,11 +50,21 @@ public interface AuthInitialize extends CacheCallback {
    * 
    * @throws AuthenticationFailedException
    *                 if some exception occurs during the initialization
+   *
+   *  @deprecated since Geode 1.0, use init()
    */
   public void init(LogWriter systemLogger, LogWriter securityLogger)
       throws AuthenticationFailedException;
 
   /**
+   * @since Geode 1.0. implement this method instead of init with logwriters.
+   * Implementation should use log4j instead of these loggers.
+   */
+  default public void init(){
+    GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
+    init(cache.getLogger(), cache.getSecurityLogger());
+  }
+  /**
    * Initialize with the given set of security properties and return the
    * credentials for the peer/client as properties.
    * 
@@ -83,5 +94,4 @@ public interface AuthInitialize extends CacheCallback {
   public Properties getCredentials(Properties securityProps,
       DistributedMember server, boolean isPeer)
       throws AuthenticationFailedException;
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/org/apache/geode/security/GeodePermission.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/security/GeodePermission.java 
b/geode-core/src/main/java/org/apache/geode/security/GeodePermission.java
index 866b14e..0a777a8 100644
--- a/geode-core/src/main/java/org/apache/geode/security/GeodePermission.java
+++ b/geode-core/src/main/java/org/apache/geode/security/GeodePermission.java
@@ -19,6 +19,11 @@ package org.apache.geode.security;
 
 import org.apache.shiro.authz.permission.WildcardPermission;
 
+/**
+ * GeodePermission defines the resource, the operation, the region and the key 
involved in the action to be authorized.
+ *
+ * It is passed to the SecurityManager for the implementation to decide 
whether to grant a user this permission or not.
+ */
 public class GeodePermission extends WildcardPermission {
 
   public static String ALL_REGIONS = "*";
@@ -37,18 +42,34 @@ public class GeodePermission extends WildcardPermission {
     READ
   }
 
+  /**
+   * Returns the resource, could be either DATA or CLUSTER
+   * @return
+   */
   public Resource getResource() {
     return resource;
   }
 
+  /**
+   * Returns the operation, could be either MANAGE, WRITE or READ
+   * @return
+   */
   public Operation getOperation() {
     return operation;
   }
 
+  /**
+   * returns the regionName, could be "*", meaning all regions
+   * @return
+   */
   public String getRegionName() {
     return regionName;
   }
 
+  /**
+   * returns the key, could be "*" meaning all keys.
+   * @return
+   */
   public String getKey() {
     return key;
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/org/apache/geode/security/PostProcessor.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/security/PostProcessor.java 
b/geode-core/src/main/java/org/apache/geode/security/PostProcessor.java
index 0f13b47..1a0e5de 100644
--- a/geode-core/src/main/java/org/apache/geode/security/PostProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/security/PostProcessor.java
@@ -44,7 +44,7 @@ public interface PostProcessor {
    * @param key
    *        the key of the value that's been accessed. This could be null.
    * @param value
-   *        the value, this could be null.
+   *        the original value. The orginal value could be null as well.
    * @return
    *        the value that will be returned to the requester
    */

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/main/java/org/apache/geode/security/templates/SamplePostProcessor.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/security/templates/SamplePostProcessor.java
 
b/geode-core/src/main/java/org/apache/geode/security/templates/SamplePostProcessor.java
index 7e078da..8f61db7 100644
--- 
a/geode-core/src/main/java/org/apache/geode/security/templates/SamplePostProcessor.java
+++ 
b/geode-core/src/main/java/org/apache/geode/security/templates/SamplePostProcessor.java
@@ -22,14 +22,28 @@ import java.util.Properties;
 
 import org.apache.geode.security.PostProcessor;
 
+/**
+ * This is example that implements PostProcessor
+ */
 public class SamplePostProcessor implements PostProcessor{
-  public static String MASK = "****";
 
   @Override
   public void init(final Properties securityProps) {
 
   }
 
+  /**
+   * this simply modifies the value with all the parameter values
+   * @param principal
+   *        The principal that's accessing the value
+   * @param regionName
+   *        The region that's been accessed. This could be null.
+   * @param key
+   *        the key of the value that's been accessed. This could be null.
+   * @param value
+   *        the value, this could be null.
+   * @return
+   */
   @Override
   public Object processRegionValue(Principal principal,
                                    String regionName,

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticatorJUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticatorJUnitTest.java
 
b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticatorJUnitTest.java
index 78f752a..d52b261 100644
--- 
a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticatorJUnitTest.java
+++ 
b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/auth/GMSAuthenticatorJUnitTest.java
@@ -16,6 +16,19 @@
  */
 package com.gemstone.gemfire.distributed.internal.membership.gms.auth;
 
+import static com.gemstone.gemfire.distributed.ConfigurationProperties.*;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
+
+import java.security.Principal;
+import java.util.Properties;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.RestoreSystemProperties;
+import org.junit.experimental.categories.Category;
+
 import com.gemstone.gemfire.LogWriter;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
@@ -27,19 +40,6 @@ import com.gemstone.gemfire.security.Authenticator;
 import com.gemstone.gemfire.security.GemFireSecurityException;
 import com.gemstone.gemfire.test.junit.categories.SecurityTest;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.contrib.java.lang.system.RestoreSystemProperties;
-import org.junit.experimental.categories.Category;
-
-import java.security.Principal;
-import java.util.Properties;
-
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static com.gemstone.gemfire.distributed.ConfigurationProperties.*;
 
 @Category({ UnitTest.class, SecurityTest.class })
 public class GMSAuthenticatorJUnitTest {
@@ -108,13 +108,13 @@ public class GMSAuthenticatorJUnitTest {
   @Test
   public void testGetCredentialWithNotExistAuth() throws Exception {
     props.setProperty(SECURITY_PEER_AUTH_INIT, prefix + "NotExistAuth.create");
-    verifyNegativeGetCredential(props, "Failed to acquire AuthInitialize 
method");
+    verifyNegativeGetCredential(props, "Instance could not be obtained");
   }
 
   @Test
   public void testGetCredentialWithNullAuth() throws Exception {
     props.setProperty(SECURITY_PEER_AUTH_INIT, prefix + 
"TestAuthInit1.create");
-    verifyNegativeGetCredential(props, "AuthInitialize instance could not be 
obtained");
+    verifyNegativeGetCredential(props, "Instance could not be obtained");
   }
 
   @Test
@@ -198,7 +198,7 @@ public class GMSAuthenticatorJUnitTest {
     assertTrue(result, result.startsWith(expectedError));
   }
 
-  private static class TestAuthInit1 implements AuthInitialize {
+  public static class TestAuthInit1 implements AuthInitialize {
     public static AuthInitialize create() {
       return null;
     }
@@ -214,7 +214,7 @@ public class GMSAuthenticatorJUnitTest {
     }
   }
 
-  private static class TestAuthInit2 extends TestAuthInit1 {
+  public static class TestAuthInit2 extends TestAuthInit1 {
 
     private static TestAuthInit2 instance = null;
     private static int createCount = 0;
@@ -245,7 +245,7 @@ public class GMSAuthenticatorJUnitTest {
   }
 
   // used by reflection by test
-  private static class TestAuthInit3 extends TestAuthInit1 {
+  public static class TestAuthInit3 extends TestAuthInit1 {
     public static AuthInitialize create() {
       return new TestAuthInit3();
     }
@@ -255,13 +255,13 @@ public class GMSAuthenticatorJUnitTest {
     }
   }
 
-  private static class TestAuthInit4 extends TestAuthInit1 {
+  public static class TestAuthInit4 extends TestAuthInit1 {
     public static AuthInitialize create() {
       return new TestAuthInit4();
     }
   }
 
-  private static class TestAuthenticator1 implements Authenticator {
+  public static class TestAuthenticator1 implements Authenticator {
     public static Authenticator create() {
       return null;
     }
@@ -277,7 +277,7 @@ public class GMSAuthenticatorJUnitTest {
     }
   }
 
-  private static class TestAuthenticator2 extends TestAuthenticator1 {
+  public static class TestAuthenticator2 extends TestAuthenticator1 {
     public static Authenticator create() {
       return new TestAuthenticator2();
     }
@@ -287,7 +287,7 @@ public class GMSAuthenticatorJUnitTest {
     }
   }
 
-  private static class TestAuthenticator3 extends TestAuthenticator1 {
+  public static class TestAuthenticator3 extends TestAuthenticator1 {
     public static Authenticator create() {
       return new TestAuthenticator3();
     }
@@ -297,7 +297,7 @@ public class GMSAuthenticatorJUnitTest {
     }
   }
 
-  private static class TestAuthenticator4 extends TestAuthenticator1 {
+  public static class TestAuthenticator4 extends TestAuthenticator1 {
 
     private static Authenticator instance = null;
     private static int createCount = 0;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/test/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtilTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtilTest.java
 
b/geode-core/src/test/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtilTest.java
index 5e19a97..a26f06a 100644
--- 
a/geode-core/src/test/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtilTest.java
+++ 
b/geode-core/src/test/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtilTest.java
@@ -18,9 +18,8 @@ package com.gemstone.gemfire.internal.security;
 
 
 import static org.assertj.core.api.Java6Assertions.*;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.*;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
@@ -49,7 +48,6 @@ public class GeodeSecurityUtilTest {
   }
 
   @Test
-  @Ignore
   public void testGetObjectFromFactoryMethod(){
     String string = 
GeodeSecurityUtil.getObjectOfType(Factories.class.getName()+".getString", 
String.class);
     assertNotNull(string);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationTestCase.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationTestCase.java
 
b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationTestCase.java
index f51431a..d7c75c7 100644
--- 
a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationTestCase.java
+++ 
b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationTestCase.java
@@ -221,7 +221,7 @@ public abstract class ClientAuthenticationTestCase extends 
JUnit4DistributedTest
     Properties credentials = gen.getValidCredentials(1);
     getLogWriter().info("testInvalidAuthInit: For first client credentials: " 
+ credentials + " : " + javaProps);
 
-    client1.invoke(() -> createCacheClient("com.gemstone.none", credentials, 
javaProps, new int[] { port1 }, 0, false, multiUser, true, AUTHREQ_EXCEPTION));
+    client1.invoke(() -> createCacheClient("com.gemstone.none", credentials, 
javaProps, new int[] { port1 }, 0, false, multiUser, true, SECURITY_EXCEPTION));
   }
 
   protected void doTestNoAuthInitWithCredentials(final boolean multiUser) 
throws Exception {
@@ -477,7 +477,7 @@ public abstract class ClientAuthenticationTestCase extends 
JUnit4DistributedTest
     // Now try to connect client2 with invalid auth-init method
     // Trying to create the region on client with valid credentials should
     // throw a security exception
-    client2.invoke(() -> createCacheClient("com.gemstone.none", credentials1, 
javaProps1, port1, port2, zeroConns, multiUser, AUTHREQ_EXCEPTION));
+    client2.invoke(() -> createCacheClient("com.gemstone.none", credentials1, 
javaProps1, port1, port2, zeroConns, multiUser, SECURITY_EXCEPTION));
 
     // Try connection with null auth-init on clients.
     // Skip this test for a scheme which does not have an authInit in the

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d37e08e6/geode-core/src/test/java/com/gemstone/gemfire/security/SecurityTestUtils.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/com/gemstone/gemfire/security/SecurityTestUtils.java 
b/geode-core/src/test/java/com/gemstone/gemfire/security/SecurityTestUtils.java
index 5ff0344..b74b054 100644
--- 
a/geode-core/src/test/java/com/gemstone/gemfire/security/SecurityTestUtils.java
+++ 
b/geode-core/src/test/java/com/gemstone/gemfire/security/SecurityTestUtils.java
@@ -103,6 +103,7 @@ public final class SecurityTestUtils {
   protected static final int NOTAUTHZ_EXCEPTION = 4;
   protected static final int OTHER_EXCEPTION = 5;
   protected static final int NO_AVAILABLE_SERVERS = 6;
+  protected static final int SECURITY_EXCEPTION = 7;
   // Indicates that AuthReqException may not necessarily be thrown
   protected static final int NOFORCE_AUTHREQ_EXCEPTION = 16;
 
@@ -468,6 +469,14 @@ public final class SecurityTestUtils {
       }
 
     }
+    catch (GemFireSecurityException ex){
+      if(expectedResult == SECURITY_EXCEPTION){
+        getLogWriter().info("Got expected exception when starting client: " + 
ex);
+      }
+      else {
+        fail("Got unexpected exception when starting client", ex);
+      }
+    }
     catch (Exception ex) {
       fail("Got unexpected exception when starting client", ex);
     }

Reply via email to