You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by br...@apache.org on 2014/06/09 00:58:20 UTC

git commit: SENTRY-166 - Sentry does not accept URIs with an equals sign (=) in path. Fails with llegalArgumentException: Invalid key value (Jarcec via Brock)

Repository: incubator-sentry
Updated Branches:
  refs/heads/master fcb561e28 -> 9afc663d0


SENTRY-166 - Sentry does not accept URIs with an equals sign (=) in path. Fails with llegalArgumentException: Invalid key value (Jarcec via Brock)


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

Branch: refs/heads/master
Commit: 9afc663d0d2e746180b3bf26315d32d64e7c7c1c
Parents: fcb561e
Author: Brock Noland <br...@apache.org>
Authored: Sun Jun 8 15:58:09 2014 -0700
Committer: Brock Noland <br...@apache.org>
Committed: Sun Jun 8 15:58:09 2014 -0700

----------------------------------------------------------------------
 .../thrift/TestSentryServiceIntegration.java    | 29 ++++++++++++++++++++
 .../apache/sentry/provider/file/KeyValue.java   |  3 +-
 .../sentry/provider/file/TestKeyValue.java      | 11 ++++++--
 .../e2e/dbprovider/TestDatabaseProvider.java    | 28 +++++++++++++++++++
 4 files changed, 67 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/9afc663d/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceIntegration.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceIntegration.java b/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceIntegration.java
index efc5671..788c1fb 100644
--- a/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceIntegration.java
+++ b/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceIntegration.java
@@ -259,4 +259,33 @@ public class TestSentryServiceIntegration extends SentryServiceIntegrationBase {
     client.dropRole(requestorUserName, roleName);
   }
 
+  // See SENTRY-166
+  @Test
+  public void testUriWithEquals() throws Exception {
+    String requestorUserName = ADMIN_USER;
+    Set<String> requestorUserGroupNames = Sets.newHashSet(ADMIN_GROUP);
+    String roleName = "admin_testdb";
+    String server = "server1";
+    String uri = "file://u/w/h/t/partition=value/";
+    setLocalGroupMapping(requestorUserName, requestorUserGroupNames);
+    writePolicyFile();
+
+    // Creating associated role
+    client.dropRoleIfExists(requestorUserName, roleName);
+    client.createRole(requestorUserName, roleName);
+    Set<TSentryRole> roles = client.listRoles(requestorUserName);
+    assertEquals("Incorrect number of roles", 1, roles.size());
+
+    client.grantURIPrivilege(requestorUserName, roleName, server, uri);
+    Set<TSentryPrivilege> privileges = client.listAllPrivilegesByRoleName(requestorUserName, roleName);
+    assertTrue(privileges.size() == 1);
+
+    // Revoking the same privilege
+    client.revokeURIPrivilege(requestorUserName, roleName, server, uri);
+    privileges = client.listAllPrivilegesByRoleName(requestorUserName, roleName);
+    assertTrue(privileges.size() == 0);
+
+    // Clean up
+    client.dropRole(requestorUserName, roleName);
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/9afc663d/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/KeyValue.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/KeyValue.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/KeyValue.java
index 622736a..8015561 100644
--- a/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/KeyValue.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/KeyValue.java
@@ -27,8 +27,9 @@ import com.google.common.collect.Lists;
 public class KeyValue {
   private final String key;
   private final String value;
+
   public KeyValue(String keyValue) {
-    List<String> kvList = Lists.newArrayList(KV_SPLITTER.trimResults().split(keyValue));
+    List<String> kvList = Lists.newArrayList(KV_SPLITTER.trimResults().limit(2).split(keyValue));
     if(kvList.size() != 2) {
       throw new IllegalArgumentException("Invalid key value: " + keyValue + " " + kvList);
     }

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/9afc663d/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestKeyValue.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestKeyValue.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestKeyValue.java
index 1d8c9ae..4353a03 100644
--- a/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestKeyValue.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestKeyValue.java
@@ -25,18 +25,23 @@ import org.junit.Test;
 
 public class TestKeyValue {
 
-  @Test(expected=IllegalArgumentException.class)
-  public void testKeyValueValue() throws Exception {
-    new KeyValue(KV_JOINER.join("a", "b", "c"));
+  @Test
+  public void testWithSeparators() throws Exception {
+    KeyValue kv = new KeyValue("URI=/u/h/w/t/partition=value/");
+    assertEquals("URI", kv.getKey());
+    assertEquals("/u/h/w/t/partition=value/", kv.getValue());
   }
+
   @Test(expected=IllegalArgumentException.class)
   public void testEmptyKey() throws Exception {
     new KeyValue(KV_JOINER.join("", "b"));
   }
+
   @Test(expected=IllegalArgumentException.class)
   public void testEmptyValue() throws Exception {
     new KeyValue(KV_JOINER.join("a", ""));
   }
+
   @Test
   public void testOneParameterConstructor() throws Exception {
     KeyValue kv1 = new KeyValue(KV_JOINER.join("k1", "v1"));

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/9afc663d/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestDatabaseProvider.java
----------------------------------------------------------------------
diff --git a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestDatabaseProvider.java b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestDatabaseProvider.java
index dd45a31..44f41be 100644
--- a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestDatabaseProvider.java
+++ b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestDatabaseProvider.java
@@ -714,4 +714,32 @@ public class TestDatabaseProvider extends AbstractTestWithDbProvider {
     statement.close();
     connection.close();
   }
+
+  // See SENTRY-166
+  @Test
+  public void testUriWithEquals() throws Exception {
+    Connection connection = context.createConnection(ADMIN1);
+    Statement statement = context.createStatement(connection);
+    statement.execute("CREATE ROLE role1");
+    statement.execute("GRANT ALL ON URI 'file:///tmp/partition=value/file.txt' TO ROLE role1");
+
+    ResultSet resultSet = statement.executeQuery("SHOW GRANT ROLE role1");
+    assertResultSize(resultSet, 1);
+    while ( resultSet.next()) {
+      assertThat(resultSet.getString(1), equalToIgnoringCase("file:///tmp/partition=value/file.txt"));
+      assertThat(resultSet.getString(2), equalToIgnoringCase(""));//table
+      assertThat(resultSet.getString(3), equalToIgnoringCase(""));//partition
+      assertThat(resultSet.getString(4), equalToIgnoringCase(""));//column
+      assertThat(resultSet.getString(5), equalToIgnoringCase("role1"));//principalName
+      assertThat(resultSet.getString(6), equalToIgnoringCase("role"));//principalType
+      assertThat(resultSet.getString(7), equalToIgnoringCase("*"));
+      assertThat(resultSet.getBoolean(8), is(new Boolean("False")));//grantOption
+      //Create time is not tested
+      //assertThat(resultSet.getLong(9), is(new Long(0)));
+      assertThat(resultSet.getString(10), equalToIgnoringCase(ADMIN1));//grantor
+    }
+    statement.close();
+    connection.close();
+  }
+
 }