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/08 15:51:32 UTC
[12/50] [abbrv] incubator-geode git commit: Alter permission to
Cluster:Read for GetClientPartitionAttribute
Alter permission to Cluster:Read for GetClientPartitionAttribute
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/0f8694c3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/0f8694c3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/0f8694c3
Branch: refs/heads/develop
Commit: 0f8694c3b0aec4950e21d198cca42ce9e7ec1925
Parents: 088e406
Author: gmeilen <gr...@gmail.com>
Authored: Mon Jun 27 14:22:01 2016 -0700
Committer: gmeilen <gr...@gmail.com>
Committed: Mon Jun 27 14:22:01 2016 -0700
----------------------------------------------------------------------
.../GetClientPartitionAttributesCommand.java | 137 +++++++-------
.../GetClientPartitionAttributesCommand66.java | 180 ++++++++++---------
...ientPartitionAttrCmdAuthDistributedTest.java | 61 +++++++
3 files changed, 228 insertions(+), 150 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f8694c3/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java
index 204391d..0873635 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package com.gemstone.gemfire.internal.cache.tier.sockets.command;
import java.io.IOException;
@@ -34,12 +35,11 @@ import com.gemstone.gemfire.internal.cache.tier.sockets.Message;
import com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
+
/**
- * {@link Command} for {@link GetClientPartitionAttributesOp} operation
- *
- *
+ * {@link Command} for {@link GetClientPartitionAttributesOp} operation
* @since GemFire 6.5
- *
*/
public class GetClientPartitionAttributesCommand extends BaseCommand {
@@ -55,7 +55,8 @@ public class GetClientPartitionAttributesCommand extends BaseCommand {
@SuppressWarnings("unchecked")
@Override
public void cmdExecute(Message msg, ServerConnection servConn, long start)
- throws IOException, ClassNotFoundException, InterruptedException {
+ throws IOException, ClassNotFoundException, InterruptedException
+ {
String regionFullPath = null;
CachedRegionHelper crHelper = servConn.getCachedRegionHelper();
regionFullPath = msg.getPart(0).getString();
@@ -63,77 +64,81 @@ public class GetClientPartitionAttributesCommand extends BaseCommand {
if (regionFullPath == null) {
logger.warn(LocalizedMessage.create(LocalizedStrings.GetClientPartitionAttributes_THE_INPUT_REGION_PATH_IS_NULL));
errMessage = LocalizedStrings.GetClientPartitionAttributes_THE_INPUT_REGION_PATH_IS_NULL
- .toLocalizedString();
+ .toLocalizedString();
writeErrorResponse(msg,
- MessageType.GET_CLIENT_PARTITION_ATTRIBUTES_ERROR, errMessage
- .toString(), servConn);
+ MessageType.GET_CLIENT_PARTITION_ATTRIBUTES_ERROR, errMessage
+ .toString(), servConn);
servConn.setAsTrue(RESPONDED);
+ return;
}
- else {
- Region region = crHelper.getRegion(regionFullPath);
- if (region == null) {
- logger.warn(LocalizedMessage.create(LocalizedStrings.GetClientPartitionAttributes_REGION_NOT_FOUND_FOR_SPECIFIED_REGION_PATH, regionFullPath));
- errMessage = LocalizedStrings.GetClientPartitionAttributes_REGION_NOT_FOUND
- .toLocalizedString()
- + regionFullPath;
- writeErrorResponse(msg,
- MessageType.GET_CLIENT_PARTITION_ATTRIBUTES_ERROR, errMessage
- .toString(), servConn);
- servConn.setAsTrue(RESPONDED);
+ Region region = crHelper.getRegion(regionFullPath);
+ if (region == null) {
+ logger.warn(LocalizedMessage
+ .create(LocalizedStrings.GetClientPartitionAttributes_REGION_NOT_FOUND_FOR_SPECIFIED_REGION_PATH,
+ regionFullPath));
+ errMessage = LocalizedStrings.GetClientPartitionAttributes_REGION_NOT_FOUND
+ .toLocalizedString()
+ + regionFullPath;
+ writeErrorResponse(msg,
+ MessageType.GET_CLIENT_PARTITION_ATTRIBUTES_ERROR, errMessage
+ .toString(), servConn);
+ servConn.setAsTrue(RESPONDED);
+ return;
+ }
+
+ try {
+ GeodeSecurityUtil.authorizeClusterRead();
+ Message responseMsg = servConn.getResponseMessage();
+ responseMsg.setTransactionId(msg.getTransactionId());
+ responseMsg
+ .setMessageType(MessageType.RESPONSE_CLIENT_PARTITION_ATTRIBUTES);
+
+ PartitionedRegion prRgion = (PartitionedRegion) region;
+
+ PartitionResolver partitionResolver = prRgion.getPartitionResolver();
+ int numParts = 2; // MINUMUM PARTS
+ if (partitionResolver != null) {
+ numParts++;
}
- else {
- try {
- Message responseMsg = servConn.getResponseMessage();
- responseMsg.setTransactionId(msg.getTransactionId());
- responseMsg
- .setMessageType(MessageType.RESPONSE_CLIENT_PARTITION_ATTRIBUTES);
+ responseMsg.setNumberOfParts(numParts);
+ // PART 1
+ responseMsg.addObjPart(prRgion.getTotalNumberOfBuckets());
- PartitionedRegion prRgion = (PartitionedRegion)region;
+ // PART 2
+ if (partitionResolver != null) {
+ responseMsg.addObjPart(partitionResolver.getClass().toString()
+ .substring(6));
+ }
- PartitionResolver partitionResolver = prRgion.getPartitionResolver();
- int numParts = 2; // MINUMUM PARTS
- if (partitionResolver != null) {
- numParts++;
- }
- responseMsg.setNumberOfParts(numParts);
- // PART 1
- responseMsg.addObjPart(prRgion.getTotalNumberOfBuckets());
-
- // PART 2
- if (partitionResolver != null) {
- responseMsg.addObjPart(partitionResolver.getClass().toString()
- .substring(6));
+ // PART 3
+ String leaderRegionPath = null;
+ PartitionedRegion leaderRegion = null;
+ String leaderRegionName = prRgion.getColocatedWith();
+ if (leaderRegionName != null) {
+ Cache cache = prRgion.getCache();
+ while (leaderRegionName != null) {
+ leaderRegion = (PartitionedRegion) cache
+ .getRegion(leaderRegionName);
+ if (leaderRegion.getColocatedWith() == null) {
+ leaderRegionPath = leaderRegion.getFullPath();
+ break;
}
-
- // PART 3
- String leaderRegionPath=null;
- PartitionedRegion leaderRegion = null;
- String leaderRegionName = prRgion.getColocatedWith();
- if (leaderRegionName != null) {
- Cache cache = prRgion.getCache();
- while (leaderRegionName != null) {
- leaderRegion = (PartitionedRegion)cache
- .getRegion(leaderRegionName);
- if (leaderRegion.getColocatedWith() == null) {
- leaderRegionPath=leaderRegion.getFullPath();
- break;
- } else {
- leaderRegionName = leaderRegion.getColocatedWith();
- }
- }
+ else {
+ leaderRegionName = leaderRegion.getColocatedWith();
}
- responseMsg.addObjPart(leaderRegionPath);
- responseMsg.send();
- msg.clearParts();
- }
- catch (Exception e) {
- writeException(msg, e, false, servConn);
- }
- finally {
- servConn.setAsTrue(Command.RESPONDED);
}
}
+ responseMsg.addObjPart(leaderRegionPath);
+ responseMsg.send();
+ msg.clearParts();
+ }
+ catch (Exception e) {
+ writeException(msg, e, false, servConn);
+ }
+ finally {
+ servConn.setAsTrue(Command.RESPONDED);
}
}
-
}
+
+
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f8694c3/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand66.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand66.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand66.java
index 3eca123..72cdcf2 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand66.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand66.java
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package com.gemstone.gemfire.internal.cache.tier.sockets.command;
import java.io.IOException;
@@ -34,13 +35,12 @@ import com.gemstone.gemfire.internal.cache.tier.sockets.Message;
import com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
/**
* {@link Command} for {@link GetClientPartitionAttributesOp} operation for 6.6
* clients
- *
* @since GemFire 6.6
- *
*/
public class GetClientPartitionAttributesCommand66 extends BaseCommand {
@@ -56,7 +56,8 @@ public class GetClientPartitionAttributesCommand66 extends BaseCommand {
@SuppressWarnings("unchecked")
@Override
public void cmdExecute(Message msg, ServerConnection servConn, long start)
- throws IOException, ClassNotFoundException, InterruptedException {
+ throws IOException, ClassNotFoundException, InterruptedException
+ {
String regionFullPath = null;
CachedRegionHelper crHelper = servConn.getCachedRegionHelper();
regionFullPath = msg.getPart(0).getString();
@@ -64,95 +65,106 @@ public class GetClientPartitionAttributesCommand66 extends BaseCommand {
if (regionFullPath == null) {
logger.warn(LocalizedMessage.create(LocalizedStrings.GetClientPartitionAttributes_THE_INPUT_REGION_PATH_IS_NULL));
errMessage = LocalizedStrings.GetClientPartitionAttributes_THE_INPUT_REGION_PATH_IS_NULL
- .toLocalizedString();
+ .toLocalizedString();
writeErrorResponse(msg,
- MessageType.GET_CLIENT_PARTITION_ATTRIBUTES_ERROR,
- errMessage.toString(), servConn);
+ MessageType.GET_CLIENT_PARTITION_ATTRIBUTES_ERROR,
+ errMessage.toString(), servConn);
servConn.setAsTrue(RESPONDED);
- } else {
- Region region = crHelper.getRegion(regionFullPath);
- if (region == null) {
- logger.warn(LocalizedMessage.create(LocalizedStrings.GetClientPartitionAttributes_REGION_NOT_FOUND_FOR_SPECIFIED_REGION_PATH, regionFullPath));
- errMessage = LocalizedStrings.GetClientPartitionAttributes_REGION_NOT_FOUND
- .toLocalizedString() + regionFullPath;
- writeErrorResponse(msg,
- MessageType.GET_CLIENT_PARTITION_ATTRIBUTES_ERROR,
- errMessage.toString(), servConn);
- servConn.setAsTrue(RESPONDED);
- } else {
- try {
- Message responseMsg = servConn.getResponseMessage();
- responseMsg.setTransactionId(msg.getTransactionId());
- responseMsg
- .setMessageType(MessageType.RESPONSE_CLIENT_PARTITION_ATTRIBUTES);
-
- if (!(region instanceof PartitionedRegion)) {
- responseMsg.setNumberOfParts(2);
- responseMsg.addObjPart(-1);
- responseMsg.addObjPart(region.getFullPath());
- } else {
-
- PartitionedRegion prRgion = (PartitionedRegion)region;
-
- PartitionResolver partitionResolver = prRgion
- .getPartitionResolver();
- int numParts = 2; // MINUMUM PARTS
- if (partitionResolver != null) {
- numParts++;
- }
- if (prRgion.isFixedPartitionedRegion()) {
- numParts++;
- }
- responseMsg.setNumberOfParts(numParts);
- // PART 1
- responseMsg.addObjPart(prRgion.getTotalNumberOfBuckets());
-
- // PART 2
- String leaderRegionPath = null;
- PartitionedRegion leaderRegion = null;
- String leaderRegionName = prRgion.getColocatedWith();
- if (leaderRegionName != null) {
- Cache cache = prRgion.getCache();
- while (leaderRegionName != null) {
- leaderRegion = (PartitionedRegion)cache
- .getRegion(leaderRegionName);
- if (leaderRegion.getColocatedWith() == null) {
- leaderRegionPath = leaderRegion.getFullPath();
- break;
- } else {
- leaderRegionName = leaderRegion.getColocatedWith();
- }
- }
- }
- responseMsg.addObjPart(leaderRegionPath);
+ return;
+ }
+ Region region = crHelper.getRegion(regionFullPath);
+ if (region == null) {
+ logger.warn(LocalizedMessage
+ .create(LocalizedStrings.GetClientPartitionAttributes_REGION_NOT_FOUND_FOR_SPECIFIED_REGION_PATH,
+ regionFullPath));
+ errMessage = LocalizedStrings.GetClientPartitionAttributes_REGION_NOT_FOUND
+ .toLocalizedString() + regionFullPath;
+ writeErrorResponse(msg,
+ MessageType.GET_CLIENT_PARTITION_ATTRIBUTES_ERROR,
+ errMessage.toString(), servConn);
+ servConn.setAsTrue(RESPONDED);
+ return;
+ }
+
+ try {
+ GeodeSecurityUtil.authorizeClusterRead();
+ Message responseMsg = servConn.getResponseMessage();
+ responseMsg.setTransactionId(msg.getTransactionId());
+ responseMsg
+ .setMessageType(MessageType.RESPONSE_CLIENT_PARTITION_ATTRIBUTES);
+
+ if (!(region instanceof PartitionedRegion)) {
+ responseMsg.setNumberOfParts(2);
+ responseMsg.addObjPart(-1);
+ responseMsg.addObjPart(region.getFullPath());
+ }
+ else {
+
+ PartitionedRegion prRgion = (PartitionedRegion) region;
+
+ PartitionResolver partitionResolver = prRgion
+ .getPartitionResolver();
+ int numParts = 2; // MINUMUM PARTS
+ if (partitionResolver != null) {
+ numParts++;
+ }
+ if (prRgion.isFixedPartitionedRegion()) {
+ numParts++;
+ }
+ responseMsg.setNumberOfParts(numParts);
+ // PART 1
+ responseMsg.addObjPart(prRgion.getTotalNumberOfBuckets());
- // PART 3
- if (partitionResolver != null) {
- responseMsg.addObjPart(partitionResolver.getClass().toString()
- .substring(6));
+ // PART 2
+ String leaderRegionPath = null;
+ PartitionedRegion leaderRegion = null;
+ String leaderRegionName = prRgion.getColocatedWith();
+ if (leaderRegionName != null) {
+ Cache cache = prRgion.getCache();
+ while (leaderRegionName != null) {
+ leaderRegion = (PartitionedRegion) cache
+ .getRegion(leaderRegionName);
+ if (leaderRegion.getColocatedWith() == null) {
+ leaderRegionPath = leaderRegion.getFullPath();
+ break;
}
- // PART 4
- if (prRgion.isFixedPartitionedRegion()) {
- Set<FixedPartitionAttributes> fpaSet = null;
- if (leaderRegion != null) {
- fpaSet = PartitionedRegionHelper
- .getAllFixedPartitionAttributes(leaderRegion);
- } else {
- fpaSet = PartitionedRegionHelper
- .getAllFixedPartitionAttributes(prRgion);
- }
- responseMsg.addObjPart(fpaSet);
+ else {
+ leaderRegionName = leaderRegion.getColocatedWith();
}
}
- responseMsg.send();
- msg.clearParts();
- } catch (Exception e) {
- writeException(msg, e, false, servConn);
- } finally {
- servConn.setAsTrue(Command.RESPONDED);
+ }
+ responseMsg.addObjPart(leaderRegionPath);
+
+ // PART 3
+ if (partitionResolver != null) {
+ responseMsg.addObjPart(partitionResolver.getClass().toString()
+ .substring(6));
+ }
+ // PART 4
+ if (prRgion.isFixedPartitionedRegion()) {
+ Set<FixedPartitionAttributes> fpaSet = null;
+ if (leaderRegion != null) {
+ fpaSet = PartitionedRegionHelper
+ .getAllFixedPartitionAttributes(leaderRegion);
+ }
+ else {
+ fpaSet = PartitionedRegionHelper
+ .getAllFixedPartitionAttributes(prRgion);
+ }
+ responseMsg.addObjPart(fpaSet);
}
}
+ responseMsg.send();
+ msg.clearParts();
+ }
+ catch (Exception e) {
+ writeException(msg, e, false, servConn);
+ }
+ finally {
+ servConn.setAsTrue(Command.RESPONDED);
}
- }
+ }
}
+
+
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f8694c3/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedClientGetClientPartitionAttrCmdAuthDistributedTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedClientGetClientPartitionAttrCmdAuthDistributedTest.java b/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedClientGetClientPartitionAttrCmdAuthDistributedTest.java
new file mode 100644
index 0000000..fbbdc05
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedClientGetClientPartitionAttrCmdAuthDistributedTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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 java.util.Arrays;
+
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.client.ClientCache;
+import com.gemstone.gemfire.cache.client.ClientCacheFactory;
+import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
+import com.gemstone.gemfire.cache.client.internal.GetClientPartitionAttributesOp;
+import com.gemstone.gemfire.cache.client.internal.PoolImpl;
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(DistributedTest.class)
+public class IntegratedClientGetClientPartitionAttrCmdAuthDistributedTest extends AbstractIntegratedClientAuthDistributedTest {
+
+ @Test
+ public void testGetClientPartitionAttrCmd() {
+ client1.invoke("logging in super-user with correct password", () -> {
+ ClientCache cache = new ClientCacheFactory(createClientProperties("stranger", "1234567"))
+ .setPoolSubscriptionEnabled(true)
+ .addPoolServer("localhost", serverPort)
+ .create();
+
+ Region region = cache.createClientRegionFactory(ClientRegionShortcut.PROXY).create(REGION_NAME);
+
+ assertNotAuthorized(() -> GetClientPartitionAttributesOp.execute((PoolImpl)cache.getDefaultPool(), REGION_NAME), "CLUSTER:READ");
+ });
+
+ client2.invoke("logging in super-user with correct password", () -> {
+ ClientCache cache = new ClientCacheFactory(createClientProperties("super-user", "1234567"))
+ .setPoolSubscriptionEnabled(true)
+ .addPoolServer("localhost", serverPort)
+ .create();
+
+ Region region = cache.createClientRegionFactory(ClientRegionShortcut.PROXY).create(REGION_NAME);
+
+ GetClientPartitionAttributesOp.execute((PoolImpl)cache.getDefaultPool(), REGION_NAME);
+ });
+ }
+}
+
+