reenable system ks r/w

Patch by Pavel Yaskevich and eevans for CASSANDRA-4664

Conflicts:
        src/java/org/apache/cassandra/service/ClientState.java


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/487c9168
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/487c9168
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/487c9168

Branch: refs/heads/trunk
Commit: 487c9168fce9a40f6906ee4a7ee250a9bd390fde
Parents: 9d7ba39
Author: Eric Evans <[email protected]>
Authored: Thu Oct 18 21:26:48 2012 -0500
Committer: Eric Evans <[email protected]>
Committed: Thu Oct 18 21:38:43 2012 -0500

----------------------------------------------------------------------
 src/java/org/apache/cassandra/auth/Permission.java |    1 +
 .../org/apache/cassandra/service/ClientState.java  |    8 ++++----
 2 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/487c9168/src/java/org/apache/cassandra/auth/Permission.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/Permission.java 
b/src/java/org/apache/cassandra/auth/Permission.java
index 7518cdd..65cbd29 100644
--- a/src/java/org/apache/cassandra/auth/Permission.java
+++ b/src/java/org/apache/cassandra/auth/Permission.java
@@ -52,6 +52,7 @@ public enum Permission
     public static final EnumSet<Permission> ALL = 
EnumSet.allOf(Permission.class);
     public static final EnumSet<Permission> NONE = 
EnumSet.noneOf(Permission.class);
     public static final EnumSet<Permission> GRANULAR_PERMISSIONS = 
EnumSet.range(FULL_ACCESS, SELECT);
+    public static final EnumSet<Permission> ALLOWED_SYSTEM_ACTIONS = 
EnumSet.of(DESCRIBE, UPDATE, DELETE, SELECT);
 
     /**
      * Maps old permissions to the new ones as we want to support old client 
IAuthority implementations

http://git-wip-us.apache.org/repos/asf/cassandra/blob/487c9168/src/java/org/apache/cassandra/service/ClientState.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/ClientState.java 
b/src/java/org/apache/cassandra/service/ClientState.java
index ba1b502..a68a778 100644
--- a/src/java/org/apache/cassandra/service/ClientState.java
+++ b/src/java/org/apache/cassandra/service/ClientState.java
@@ -165,7 +165,7 @@ public class ClientState
         validateLogin();
         validateKeyspace(keyspace);
 
-        preventSystemKSModification(keyspace, perm);
+        preventSystemKSSchemaModification(keyspace, perm);
 
         resourceClear();
         resource.add(keyspace);
@@ -174,9 +174,9 @@ public class ClientState
         hasAccess(user, perms, perm, resource);
     }
 
-    private void preventSystemKSModification(String keyspace, Permission perm) 
throws InvalidRequestException
+    private void preventSystemKSSchemaModification(String keyspace, Permission 
perm) throws InvalidRequestException
     {
-        if (keyspace.equalsIgnoreCase(Table.SYSTEM_TABLE) && perm != 
Permission.SELECT && perm != Permission.DESCRIBE)
+        if (keyspace.equalsIgnoreCase(Table.SYSTEM_TABLE) && 
!Permission.ALLOWED_SYSTEM_ACTIONS.contains(perm))
             throw new InvalidRequestException("system keyspace is not 
user-modifiable.");
     }
 
@@ -197,7 +197,7 @@ public class ClientState
         resourceClear();
         resource.add(keyspace);
 
-        preventSystemKSModification(keyspace, perm);
+        preventSystemKSSchemaModification(keyspace, perm);
 
         // check if keyspace access is set to Permission.FULL_ACCESS
         // (which means that user has all access on keyspace and it's 
underlying elements)

Reply via email to