Repository: cassandra
Updated Branches:
  refs/heads/trunk 7879e7f9b -> 6ac88ab16


Limit user types to the keyspace they are defined in

patch by slebresne; reviewed by iamaleksey for CASSANDRA-6643


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

Branch: refs/heads/trunk
Commit: c045690b126e6b1f594291c6eff3957a6d9079ea
Parents: ada8f12
Author: Sylvain Lebresne <sylv...@datastax.com>
Authored: Fri May 16 15:56:05 2014 +0200
Committer: Sylvain Lebresne <sylv...@datastax.com>
Committed: Fri May 16 15:56:05 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                        |  1 +
 src/java/org/apache/cassandra/cql3/CQL3Type.java   | 17 ++++++++++++++---
 .../cql3/statements/CreateTypeStatement.java       |  3 ---
 .../cql3/statements/DropTypeStatement.java         |  3 ---
 4 files changed, 15 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c045690b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 223f331..d12acc9 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -14,6 +14,7 @@
  * Add server side batching to native transport (CASSANDRA-5663)
  * Make batchlog replay asynchronous (CASSANDRA-6134)
  * remove unused classes (CASSANDRA-7197)
+ * Limit user types to the keyspace they are defined in (CASSANDRA-6643)
 Merged from 2.0:
  * (Hadoop) support authentication in CqlRecordReader (CASSANDRA-7221)
  * (Hadoop) Close java driver Cluster in CQLRR.close (CASSANDRA-7228)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c045690b/src/java/org/apache/cassandra/cql3/CQL3Type.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/CQL3Type.java 
b/src/java/org/apache/cassandra/cql3/CQL3Type.java
index 8ce89ca..f07bc19 100644
--- a/src/java/org/apache/cassandra/cql3/CQL3Type.java
+++ b/src/java/org/apache/cassandra/cql3/CQL3Type.java
@@ -347,7 +347,6 @@ public interface CQL3Type
 
         private static class RawUT extends Raw
         {
-
             private final UTName name;
 
             private RawUT(UTName name)
@@ -357,7 +356,19 @@ public interface CQL3Type
 
             public CQL3Type prepare(String keyspace) throws 
InvalidRequestException
             {
-                name.setKeyspace(keyspace);
+                if (name.hasKeyspace())
+                {
+                    // The provided keyspace is the one of the current 
statement this is part of. If it's different from the keyspace of
+                    // the UTName, we reject since we want to limit user types 
to their own keyspace (see #6643)
+                    if (!keyspace.equals(name.getKeyspace()))
+                        throw new 
InvalidRequestException(String.format("Statement on keyspace %s cannot refer to 
a user type in keyspace %s; "
+                                                                        + 
"user types can only be used in the keyspace they are defined in",
+                                                                        
keyspace, name.getKeyspace()));
+                }
+                else
+                {
+                    name.setKeyspace(keyspace);
+                }
 
                 KSMetaData ksm = 
Schema.instance.getKSMetaData(name.getKeyspace());
                 if (ksm == null)
@@ -374,6 +385,6 @@ public interface CQL3Type
             {
                 return name.toString();
             }
-    }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c045690b/src/java/org/apache/cassandra/cql3/statements/CreateTypeStatement.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/cql3/statements/CreateTypeStatement.java 
b/src/java/org/apache/cassandra/cql3/statements/CreateTypeStatement.java
index de7ce56..aa8b769 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateTypeStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateTypeStatement.java
@@ -50,9 +50,6 @@ public class CreateTypeStatement extends 
SchemaAlteringStatement
     {
         if (!name.hasKeyspace())
             name.setKeyspace(state.getKeyspace());
-
-        if (name.getKeyspace() == null)
-            throw new InvalidRequestException("You need to be logged in a 
keyspace or use a fully qualified user type name");
     }
 
     public void addDefinition(ColumnIdentifier name, CQL3Type.Raw type)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c045690b/src/java/org/apache/cassandra/cql3/statements/DropTypeStatement.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/cql3/statements/DropTypeStatement.java 
b/src/java/org/apache/cassandra/cql3/statements/DropTypeStatement.java
index 08543bd..6521f68 100644
--- a/src/java/org/apache/cassandra/cql3/statements/DropTypeStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/DropTypeStatement.java
@@ -43,9 +43,6 @@ public class DropTypeStatement extends SchemaAlteringStatement
     {
         if (!name.hasKeyspace())
             name.setKeyspace(state.getKeyspace());
-
-        if (name.getKeyspace() == null)
-            throw new InvalidRequestException("You need to be logged in a 
keyspace or use a fully qualified user type name");
     }
 
     public void checkAccess(ClientState state) throws UnauthorizedException, 
InvalidRequestException

Reply via email to