Validate login for describe_keyspace, describe_keyspaces and set_keyspace patch by Aleksey Yeschenko; reviewed by Jonathan Ellis for CASSANDRA-5144
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/4c25eef0 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/4c25eef0 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/4c25eef0 Branch: refs/heads/trunk Commit: 4c25eef0d7aca92144c8570f3d2e8cee5ebf9ddf Parents: a1b601e Author: Aleksey Yeschenko <[email protected]> Authored: Fri Jan 11 02:53:00 2013 +0300 Committer: Aleksey Yeschenko <[email protected]> Committed: Fri Jan 11 02:57:06 2013 +0300 ---------------------------------------------------------------------- CHANGES.txt | 2 + .../apache/cassandra/thrift/CassandraServer.java | 19 ++++++++++++++- 2 files changed, 20 insertions(+), 1 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c25eef0/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 63c0b1d..f5b3a3f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -29,6 +29,8 @@ * Handle states for non-vnode clusters correctly (CASSANDRA-5127) * Refuse unrecognized replication strategy options (CASSANDRA-4795) * Pick the correct value validator in sstable2json for cql3 tables (CASSANDRA-5134) + * Validate login for describe_keyspace, describe_keyspaces and set_keyspace + (CASSANDRA-5144) Merged from 1.1: * Simplify CompressedRandomAccessReader to work around JDK FD bug (CASSANDRA-5088) * Improve handling a changing target throttle rate mid-compaction (CASSANDRA-5087) http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c25eef0/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 dfeccb7..7baeb17 100644 --- a/src/java/org/apache/cassandra/thrift/CassandraServer.java +++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java @@ -50,6 +50,7 @@ import org.apache.cassandra.dht.*; import org.apache.cassandra.exceptions.ReadTimeoutException; import org.apache.cassandra.exceptions.RequestExecutionException; import org.apache.cassandra.exceptions.RequestValidationException; +import org.apache.cassandra.exceptions.UnauthorizedException; import org.apache.cassandra.io.util.DataOutputBuffer; import org.apache.cassandra.locator.AbstractReplicationStrategy; import org.apache.cassandra.locator.DynamicEndpointSnitch; @@ -57,7 +58,6 @@ import org.apache.cassandra.scheduler.IRequestScheduler; import org.apache.cassandra.service.*; import org.apache.cassandra.tracing.Tracing; import org.apache.cassandra.utils.ByteBufferUtil; -import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.Pair; import org.apache.cassandra.utils.UUIDGen; import org.apache.thrift.TException; @@ -879,8 +879,22 @@ public class CassandraServer implements Cassandra.Iface } } + private void validateLogin() throws InvalidRequestException + { + try + { + state().validateLogin(); + } + catch (UnauthorizedException e) + { + throw new InvalidRequestException(e.getMessage()); + } + } + public KsDef describe_keyspace(String table) throws NotFoundException, InvalidRequestException { + validateLogin(); + KSMetaData ksm = Schema.instance.getTableDefinition(table); if (ksm == null) throw new NotFoundException(); @@ -1148,6 +1162,8 @@ public class CassandraServer implements Cassandra.Iface public List<KsDef> describe_keyspaces() throws TException, InvalidRequestException { + validateLogin(); + Set<String> keyspaces = Schema.instance.getTables(); List<KsDef> ksset = new ArrayList<KsDef>(keyspaces.size()); for (String ks : keyspaces) @@ -1482,6 +1498,7 @@ public class CassandraServer implements Cassandra.Iface public void set_keyspace(String keyspace) throws InvalidRequestException, TException { + validateLogin(); try { ThriftValidation.validateTable(keyspace);
