You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2012/01/24 21:26:21 UTC

git commit: fixes create/update/drop other keyspaces when system keyspace is used, introduced by CASSANDRA-3759

Updated Branches:
  refs/heads/cassandra-1.0 7c3745477 -> b318404e5


fixes create/update/drop other keyspaces when system keyspace is used, introduced by CASSANDRA-3759


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

Branch: refs/heads/cassandra-1.0
Commit: b318404e539bf82197211ef931a78463944dcf6c
Parents: 7c37454
Author: Pavel Yaskevich <po...@gmail.com>
Authored: Tue Jan 24 23:05:21 2012 +0200
Committer: Pavel Yaskevich <po...@gmail.com>
Committed: Tue Jan 24 23:22:32 2012 +0200

----------------------------------------------------------------------
 .../org/apache/cassandra/cql/QueryProcessor.java   |    2 ++
 .../org/apache/cassandra/service/ClientState.java  |    4 ----
 .../apache/cassandra/thrift/CassandraServer.java   |    3 +++
 .../apache/cassandra/thrift/ThriftValidation.java  |    6 ++++++
 4 files changed, 11 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/b318404e/src/java/org/apache/cassandra/cql/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/QueryProcessor.java b/src/java/org/apache/cassandra/cql/QueryProcessor.java
index 8e90e06..b037d17 100644
--- a/src/java/org/apache/cassandra/cql/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql/QueryProcessor.java
@@ -750,6 +750,7 @@ public class QueryProcessor
             case CREATE_KEYSPACE:
                 CreateKeyspaceStatement create = (CreateKeyspaceStatement)statement.statement;
                 create.validate();
+                ThriftValidation.validateKeyspaceNotSystem(create.getName());
                 clientState.hasKeyspaceSchemaAccess(Permission.WRITE);
                 validateSchemaAgreement();
                 
@@ -893,6 +894,7 @@ public class QueryProcessor
 
             case DROP_KEYSPACE:
                 String deleteKeyspace = (String)statement.statement;
+                ThriftValidation.validateKeyspaceNotSystem(deleteKeyspace);
                 clientState.hasKeyspaceSchemaAccess(Permission.WRITE);
                 validateSchemaAgreement();
                 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b318404e/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 ea1af50..bc8e16f 100644
--- a/src/java/org/apache/cassandra/service/ClientState.java
+++ b/src/java/org/apache/cassandra/service/ClientState.java
@@ -122,10 +122,6 @@ public class ClientState
     public void hasKeyspaceSchemaAccess(Permission perm) throws InvalidRequestException
     {
         validateLogin();
-        
-        // hardcode disallowing messing with system keyspace
-        if (keyspace != null && keyspace.equalsIgnoreCase(Table.SYSTEM_TABLE) && perm == Permission.WRITE)
-            throw new InvalidRequestException("system keyspace is not user-modifiable");
 
         resourceClear();
         Set<Permission> perms = DatabaseDescriptor.getAuthority().authorize(user, resource);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b318404e/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index dc257e5..7650553 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -925,6 +925,7 @@ public class CassandraServer implements Cassandra.Iface
     throws InvalidRequestException, SchemaDisagreementException, TException
     {
         logger.debug("add_keyspace");
+        ThriftValidation.validateKeyspaceNotSystem(ks_def.name);
         state().hasKeyspaceSchemaAccess(Permission.WRITE);
         validateSchemaAgreement();
         ThriftValidation.validateKeyspaceNotYetExisting(ks_def.name);
@@ -971,6 +972,7 @@ public class CassandraServer implements Cassandra.Iface
     throws InvalidRequestException, SchemaDisagreementException, TException
     {
         logger.debug("drop_keyspace");
+        ThriftValidation.validateKeyspaceNotSystem(keyspace);
         state().hasKeyspaceSchemaAccess(Permission.WRITE);
         validateSchemaAgreement();
         
@@ -999,6 +1001,7 @@ public class CassandraServer implements Cassandra.Iface
     throws InvalidRequestException, SchemaDisagreementException, TException
     {
         logger.debug("update_keyspace");
+        ThriftValidation.validateKeyspaceNotSystem(ks_def.name);
         state().hasKeyspaceSchemaAccess(Permission.WRITE);
         ThriftValidation.validateTable(ks_def.name);
         if (ks_def.getCf_defs() != null && ks_def.getCf_defs().size() > 0)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b318404e/src/java/org/apache/cassandra/thrift/ThriftValidation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/ThriftValidation.java b/src/java/org/apache/cassandra/thrift/ThriftValidation.java
index 388769a..ee1f662 100644
--- a/src/java/org/apache/cassandra/thrift/ThriftValidation.java
+++ b/src/java/org/apache/cassandra/thrift/ThriftValidation.java
@@ -737,4 +737,10 @@ public class ThriftValidation
                                                                 ksName));
         }
     }
+
+    public static void validateKeyspaceNotSystem(String modifiedKeyspace) throws InvalidRequestException
+    {
+        if (modifiedKeyspace.equalsIgnoreCase(Table.SYSTEM_TABLE))
+            throw new InvalidRequestException("system keyspace is not user-modifiable");
+    }
 }