Repository: incubator-sentry Updated Branches: refs/heads/master 7ae7fc375 -> a3adbb391
SENTRY-703: Calls to add_partition fail when passed a Partition object with a null location (Prasad Mujumdar, reviewed by Dapeng Sun) Project: http://git-wip-us.apache.org/repos/asf/incubator-sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-sentry/commit/a3adbb39 Tree: http://git-wip-us.apache.org/repos/asf/incubator-sentry/tree/a3adbb39 Diff: http://git-wip-us.apache.org/repos/asf/incubator-sentry/diff/a3adbb39 Branch: refs/heads/master Commit: a3adbb39151aa67ed0117897242743ecc6a97cf3 Parents: 7ae7fc3 Author: Prasad Mujumdar <[email protected]> Authored: Wed Apr 22 09:11:09 2015 -0700 Committer: Prasad Mujumdar <[email protected]> Committed: Wed Apr 22 09:11:09 2015 -0700 ---------------------------------------------------------------------- .../metastore/MetastoreAuthzBinding.java | 5 ++- .../e2e/metastore/TestMetastoreEndToEnd.java | 36 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/a3adbb39/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBinding.java ---------------------------------------------------------------------- diff --git a/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBinding.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBinding.java index f16341d..5375f6a 100644 --- a/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBinding.java +++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBinding.java @@ -311,8 +311,11 @@ public class MetastoreAuthzBinding extends MetaStorePreEventListener { // check if we need to validate URI permissions when storage location is // non-default, ie something not under the parent table + String partitionLocation = null; if (mapiPart.isSetSd()) { - String partitionLocation = mapiPart.getSd().getLocation(); + partitionLocation = mapiPart.getSd().getLocation(); + } + if (!StringUtils.isEmpty(partitionLocation)) { String tableLocation = context .getHandler() .get_table(mapiPart.getDbName(), http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/a3adbb39/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java ---------------------------------------------------------------------- diff --git a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java index 09433fd..c13222f 100644 --- a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java +++ b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java @@ -23,6 +23,7 @@ import static org.junit.Assert.fail; import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.Map; @@ -543,6 +544,41 @@ public class TestMetastoreEndToEnd extends + dbName + "." + tabName1, USER1_1, dynamicInsertProperties); } + @Test + public void testAddPartion() throws Exception { + String partVal1 = "part1", partVal2 = "part2", partVal3 = "part5"; + String newPath1 = "fooTab1"; + String tabDir1 = hiveServer.getProperty(HiveServerFactory.WAREHOUSE_DIR) + + File.separator + newPath1; + + policyFile.addRolesToGroup(USERGROUP1, uri_role).addPermissionsToRole( + uri_role, "server=server1->URI=" + tabDir1); + writePolicyFile(policyFile); + + execHiveSQL("DROP TABLE IF EXISTS " + dbName + "." + tabName1, USER1_1); + execHiveSQL("CREATE TABLE " + dbName + "." + tabName1 + + " (id int) PARTITIONED BY (part_col string)", USER1_1); + + execHiveSQL("ALTER TABLE " + dbName + "." + tabName1 + + " ADD PARTITION (part_col ='" + partVal1 + "')", USER1_1); + verifyPartitionExists(dbName, tabName1, partVal1); + + execHiveSQL("ALTER TABLE " + dbName + "." + tabName1 + + " ADD PARTITION (part_col ='" + partVal2 + "') location '" + + tabDir1 + "'", USER1_1); + verifyPartitionExists(dbName, tabName1, partVal2); + + try { + execHiveSQL("ALTER TABLE " + dbName + "." + tabName1 + + " ADD PARTITION (part_col ='" + partVal2 + "') location '" + + tabDir1 + "'", USER2_1); + fail("alter table should have failed due to missing URI privilege"); + } catch (IOException e) { + // Expected error + } + + } + private void verifyPartitionExists(String dbName, String tabName, String partVal) throws Exception { HiveMetaStoreClient client = context.getMetaStoreClient(ADMIN1);
