You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2016/07/06 22:59:30 UTC
[07/10] incubator-geode git commit: Update init and close on
SecurityManager interface
Update init and close on SecurityManager interface
* Add close() to SecurityManager interface
* Change init(Properties) to have default empty impl
* Create integration test for init and close
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/0fd2288e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/0fd2288e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/0fd2288e
Branch: refs/heads/feature/GEODE-1571
Commit: 0fd2288ecda79f1670553f3198e0ae4aad5e36a6
Parents: 8a26ac0
Author: gmeilen <gr...@gmail.com>
Authored: Wed Jul 6 14:56:26 2016 -0700
Committer: gmeilen <gr...@gmail.com>
Committed: Wed Jul 6 14:57:32 2016 -0700
----------------------------------------------------------------------
.../internal/cache/GemFireCacheImpl.java | 4 +-
.../internal/security/GeodeSecurityUtil.java | 11 ++
.../gemfire/security/SecurityManager.java | 4 +-
...edSecurityCacheLifecycleIntegrationTest.java | 104 +++++++++++++++++++
4 files changed, 121 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0fd2288e/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
index 13e0602..567f377 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
@@ -147,6 +147,7 @@ import com.gemstone.gemfire.internal.logging.LoggingThreadGroup;
import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage;
import com.gemstone.gemfire.internal.offheap.MemoryAllocator;
import com.gemstone.gemfire.internal.process.ClusterConfigurationNotAvailableException;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
import com.gemstone.gemfire.internal.sequencelog.SequenceLoggerImpl;
import com.gemstone.gemfire.internal.tcp.ConnectionTable;
import com.gemstone.gemfire.internal.util.concurrent.FutureResult;
@@ -1898,7 +1899,8 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
return;
}
final boolean isDebugEnabled = logger.isDebugEnabled();
-
+ GeodeSecurityUtil.close(system.getConfig().getSecurityProps());
+
synchronized (GemFireCacheImpl.class) {
// bugfix for bug 36512 "GemFireCache.close is not thread safe"
// ALL CODE FOR CLOSE SHOULD NOW BE UNDER STATIC SYNCHRONIZATION
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0fd2288e/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 048b8ba..ff32f92 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
@@ -337,6 +337,17 @@ public class GeodeSecurityUtil {
}
+ public static void close(Properties securityProps) {
+ if (securityProps != null) {
+ String customAuthenticator = securityProps.getProperty(SECURITY_MANAGER);
+ Object authenticatorObject = getObject(customAuthenticator);
+ if (authenticatorObject != null && authenticatorObject instanceof SecurityManager) {
+ ((SecurityManager) authenticatorObject).close();
+ }
+ }
+ return;
+ }
+
public static Object postProcess(String regionPath, Object key, Object result){
if(postProcessor == null)
return result;
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0fd2288e/geode-core/src/main/java/com/gemstone/gemfire/security/SecurityManager.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/SecurityManager.java b/geode-core/src/main/java/com/gemstone/gemfire/security/SecurityManager.java
index b19e5a8..eff27ae 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/SecurityManager.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/SecurityManager.java
@@ -22,11 +22,13 @@ import java.util.Properties;
public interface SecurityManager {
- void init(Properties securityProps);
+ default void init(Properties securityProps) {}
Principal authenticate(Properties props) throws AuthenticationFailedException;
default boolean authorize(Principal principal, GeodePermission permission) {
return true;
}
+
+ default void close() {}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0fd2288e/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedSecurityCacheLifecycleIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedSecurityCacheLifecycleIntegrationTest.java b/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedSecurityCacheLifecycleIntegrationTest.java
new file mode 100644
index 0000000..96a4a51
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedSecurityCacheLifecycleIntegrationTest.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gemstone.gemfire.security;
+
+import static com.gemstone.gemfire.distributed.ConfigurationProperties.*;
+import static org.assertj.core.api.Assertions.*;
+
+import java.security.Principal;
+import java.util.Properties;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.CacheFactory;
+import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(IntegrationTest.class)
+public class IntegratedSecurityCacheLifecycleIntegrationTest {
+
+ private static SpySecurityManager spySecurityManager;
+
+ private Properties securityProps;
+ private Cache cache;
+
+ @Before
+ public void before() {
+ securityProps = new Properties();
+ securityProps.setProperty(SECURITY_MANAGER, SpySecurityManager.class.getName()+".create");
+
+ spySecurityManager = new SpySecurityManager();
+
+ Properties props = new Properties();
+ props.putAll(securityProps);
+ props.setProperty(MCAST_PORT, "0");
+ props.setProperty(LOCATORS, "");
+
+ cache = new CacheFactory(props).create();
+ }
+
+ @After
+ public void after() {
+ if (cache != null && !cache.isClosed()) {
+ cache.close();
+ }
+ }
+
+ @Test
+ public void initAndCloseTest () {
+ assertThat(spySecurityManager.initInvoked).isEqualTo(1);
+ assertThat(spySecurityManager.securityPropsInvoked).isEqualTo(securityProps);
+ cache.close();
+ assertThat(spySecurityManager.closeInvoked).isEqualTo(1);
+ }
+
+ public static class SpySecurityManager implements SecurityManager {
+
+ private int initInvoked = 0;
+ private int closeInvoked = 0;
+ private Properties securityPropsInvoked;
+
+ public static SecurityManager create() {
+ return spySecurityManager;
+ }
+
+ @Override
+ public void init(final Properties securityProps) {
+ initInvoked++;
+ this.securityPropsInvoked = securityProps;
+ }
+
+ @Override
+ public Principal authenticate(final Properties props) throws AuthenticationFailedException {
+ return null;
+ }
+
+ @Override
+ public boolean authorize(final Principal principal, final GeodePermission permission) {
+ return false;
+ }
+
+ @Override
+ public void close() {
+ closeInvoked++;
+ }
+ }
+}