git commit: Limit user types to the keyspace they are defined in

2014-05-16 Thread slebresne
Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1 ada8f1257 - c045690b1


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/cassandra-2.1
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

[1/2] git commit: Limit user types to the keyspace they are defined in

2014-05-16 Thread slebresne
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