Updated Branches:
  refs/heads/cassandra-1.1 5796542aa -> 3fdc86ca0

Correctly validate keyspace access in create table statement

patch by slebresne; reviewed by jbellis for CASSANDRA-4296


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

Branch: refs/heads/cassandra-1.1
Commit: 3fdc86ca0aa5c1a23e28a45e4291c72aeee989ec
Parents: 5796542
Author: Sylvain Lebresne <[email protected]>
Authored: Wed May 30 16:03:26 2012 +0200
Committer: Sylvain Lebresne <[email protected]>
Committed: Wed May 30 16:03:26 2012 +0200

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../cql3/statements/SchemaAlteringStatement.java   |    2 +-
 .../org/apache/cassandra/service/ClientState.java  |   15 ++++++++++-----
 3 files changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/3fdc86ca/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index c692bc4..6e8aa8f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -65,6 +65,7 @@
  * Better error messages from improper input in cli (CASSANDRA-3865)
  * Try to stop all compaction upon Keyspace or ColumnFamily drop 
(CASSANDRA-4221)
  * (cql3) Allow keyspace properties to contain hyphens (CASSANDRA-4278)
+ * (cql3) Correctly validate keyspace access in create table (CASSANDRA-4296)
 Merged from 1.0:
  * Fix super columns bug where cache is not updated (CASSANDRA-4190)
  * fix maxTimestamp to include row tombstones (CASSANDRA-4116)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3fdc86ca/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java 
b/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java
index c2d7180..a88ee2b 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java
@@ -81,7 +81,7 @@ public abstract class SchemaAlteringStatement extends 
CFStatement implements CQL
     public void checkAccess(ClientState state) throws InvalidRequestException
     {
         if (isColumnFamilyLevel)
-            state.hasColumnFamilySchemaAccess(Permission.WRITE);
+            state.hasColumnFamilySchemaAccess(keyspace(), Permission.WRITE);
         else
             state.hasKeyspaceSchemaAccess(Permission.WRITE);
     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3fdc86ca/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 3b88a3f..5ef3bad 100644
--- a/src/java/org/apache/cassandra/service/ClientState.java
+++ b/src/java/org/apache/cassandra/service/ClientState.java
@@ -160,14 +160,19 @@ public class ClientState
         hasAccess(user, perms, perm, resource);
     }
 
+    public void hasColumnFamilySchemaAccess(Permission perm) throws 
InvalidRequestException
+    {
+        hasColumnFamilySchemaAccess(keyspace, perm);
+    }
+
     /**
      * Confirms that the client thread has the given Permission for the 
ColumnFamily list of
-     * the current keyspace.
+     * the provided keyspace.
      */
-    public void hasColumnFamilySchemaAccess(Permission perm) throws 
InvalidRequestException
+    public void hasColumnFamilySchemaAccess(String keyspace, Permission perm) 
throws InvalidRequestException
     {
         validateLogin();
-        validateKeyspace();
+        validateKeyspace(keyspace);
 
         // hardcode disallowing messing with system keyspace
         if (keyspace.equalsIgnoreCase(Table.SYSTEM_TABLE) && perm == 
Permission.WRITE)
@@ -192,7 +197,7 @@ public class ClientState
     public void hasColumnFamilyAccess(String keyspace, String columnFamily, 
Permission perm) throws InvalidRequestException
     {
         validateLogin();
-        validateKeyspace();
+        validateKeyspace(keyspace);
 
         resourceClear();
         resource.add(keyspace);
@@ -208,7 +213,7 @@ public class ClientState
             throw new InvalidRequestException("You have not logged in");
     }
 
-    private void validateKeyspace() throws InvalidRequestException
+    private static void validateKeyspace(String keyspace) throws 
InvalidRequestException
     {
         if (keyspace == null)
             throw new InvalidRequestException("You have not set a keyspace for 
this session");

Reply via email to