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