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;