You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by gd...@apache.org on 2010/07/28 23:02:13 UTC
svn commit: r980226 - in /cassandra/trunk/src/java/org/apache/cassandra:
auth/SimpleAuthenticator.java config/DatabaseDescriptor.java
Author: gdusbabek
Date: Wed Jul 28 21:02:13 2010
New Revision: 980226
URL: http://svn.apache.org/viewvc?rev=980226&view=rev
Log:
apply access.properties to KSM during loadSchemaFromYaml. patch by stuhood, reviewed by gdusbabek. CASSANDRA-1237
Modified:
cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java?rev=980226&r1=980225&r2=980226&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java Wed Jul 28 21:02:13 2010
@@ -26,7 +26,9 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Properties;
import java.util.Map;
+import java.util.HashMap;
+import org.apache.cassandra.avro.AccessLevel;
import org.apache.cassandra.config.ConfigurationException;
import org.apache.cassandra.thrift.AuthenticationException;
import org.apache.cassandra.thrift.AuthorizationException;
@@ -135,6 +137,39 @@ public class SimpleAuthenticator impleme
}
}
+ /**
+ * Loads the user access map for each keyspace from the deprecated access.properties file.
+ */
+ @Deprecated
+ public Map<String,Map<String,AccessLevel>> loadAccessFile() throws ConfigurationException
+ {
+ Map<String,Map<String,AccessLevel>> keyspacesAccess = new HashMap();
+ final String accessFilenameProperty = "access.properties";
+ String afilename = System.getProperty(accessFilenameProperty);
+ Properties props = new Properties();
+ try
+ {
+ FileInputStream in = new FileInputStream(afilename);
+ props.load(in);
+ in.close();
+ }
+ catch (Exception e)
+ {
+ throw new ConfigurationException("Authorization table file given by property " + accessFilenameProperty + " could not be loaded: " + e.getMessage());
+ }
+ for (String keyspace : props.stringPropertyNames())
+ {
+ // structure:
+ // given keyspace X, users A B and C can be authorized like this (separate their names with spaces):
+ // X = A B C
+ Map<String,AccessLevel> usersAccess = new HashMap();
+ for (String user : props.getProperty(keyspace).split(","))
+ usersAccess.put(user, AccessLevel.FULL);
+ keyspacesAccess.put(keyspace, usersAccess);
+ }
+ return keyspacesAccess;
+ }
+
static String authenticationErrorMessage(PasswordMode mode, String username)
{
return String.format("Given password in password mode %s could not be validated for user %s", mode, username);
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=980226&r1=980225&r2=980226&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java Wed Jul 28 21:02:13 2010
@@ -32,7 +32,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.auth.AllowAllAuthenticator;
+import org.apache.cassandra.auth.SimpleAuthenticator;
import org.apache.cassandra.auth.IAuthenticator;
+import org.apache.cassandra.avro.AccessLevel;
import org.apache.cassandra.config.Config.RequestSchedulerId;
import org.apache.cassandra.db.ClockType;
import org.apache.cassandra.db.ColumnFamilyType;
@@ -509,11 +511,18 @@ public class DatabaseDescriptor
CFMetaData.fixMaxId();
}
- /** reads xml. doesn't populate any internal structures. */
+ /**
+ * Reads keyspaces from yaml: doesn't populate any internal structures.
+ * @Deprecated
+ */
public static Collection<KSMetaData> readTablesFromYaml() throws ConfigurationException
{
List<KSMetaData> defs = new ArrayList<KSMetaData>();
+ /* If SimpleAuthenticator is in use, load the (deprecated) access.properties file, to apply it to keyspaces. */
+ Map<String,Map<String,AccessLevel>> keyspacesAccess = new HashMap();
+ if (DatabaseDescriptor.getAuthenticator() instanceof SimpleAuthenticator)
+ keyspacesAccess = ((SimpleAuthenticator)DatabaseDescriptor.getAuthenticator()).loadAccessFile();
/* Read the table related stuff from config */
for (RawKeyspace keyspace : conf.keyspaces)
@@ -622,8 +631,12 @@ public class DatabaseDescriptor
cf.gc_grace_seconds,
metadata);
}
- defs.add(new KSMetaData(keyspace.name, strategyClass, keyspace.replication_factor, null, null, cfDefs));
-
+ defs.add(new KSMetaData(keyspace.name,
+ strategyClass,
+ keyspace.replication_factor,
+ keyspacesAccess.get(keyspace.name),
+ null,
+ cfDefs));
}
return defs;