You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/06/28 02:26:40 UTC

svn commit: r202104 - in /directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos: kdc/AuthenticationService.java sam/SamSubsystem.java sam/SamVerifier.java

Author: akarasulu
Date: Mon Jun 27 17:26:39 2005
New Revision: 202104

URL: http://svn.apache.org/viewcvs?rev=202104&view=rev
Log:
changes ...

 o changed the sam subsystem to be a singleton
 o changed verifier signature to pass down the userContext
 o updates to AS due to call to getInstance()


Modified:
    directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/kdc/AuthenticationService.java
    directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamSubsystem.java
    directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamVerifier.java

Modified: directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/kdc/AuthenticationService.java
URL: http://svn.apache.org/viewcvs/directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/kdc/AuthenticationService.java?rev=202104&r1=202103&r2=202104&view=diff
==============================================================================
--- directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/kdc/AuthenticationService.java (original)
+++ directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/kdc/AuthenticationService.java Mon Jun 27 17:26:39 2005
@@ -64,14 +64,12 @@
 {
     static
     {
-        SamSubsystem.setIntegrityChecker( new TimestampChecker() );
+        SamSubsystem.getInstance().setIntegrityChecker( new TimestampChecker() );
     }
     
 	public AuthenticationService( KdcConfiguration config, PrincipalStore store )
     {
         super( config, store );
-
-        SamSubsystem.setEnvironment( config.getProperties() );
 	}
 	
 	public AuthenticationReply getReplyFor( KdcRequest request ) throws KerberosException
@@ -180,7 +178,7 @@
 			    {
 			        if ( preAuthData[ii].getDataType().equals( PreAuthenticationDataType.PA_ENC_TIMESTAMP ) )
 			        {
-		    		    KerberosKey samKey = SamSubsystem.verify( entry, preAuthData[ii].getDataValue() );
+		    		    KerberosKey samKey = SamSubsystem.getInstance().verify( entry, preAuthData[ii].getDataValue() );
 		    		    clientKey = new EncryptionKey( EncryptionType.getTypeByOrdinal( samKey.getKeyType() ), samKey.getEncoded() );
 			        }
 			    }

Modified: directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamSubsystem.java
URL: http://svn.apache.org/viewcvs/directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamSubsystem.java?rev=202104&r1=202103&r2=202104&view=diff
==============================================================================
--- directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamSubsystem.java (original)
+++ directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamSubsystem.java Mon Jun 27 17:26:39 2005
@@ -21,6 +21,8 @@
 import java.util.Hashtable;
 
 import javax.security.auth.kerberos.KerberosKey;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
 
 import org.apache.kerberos.store.PrincipalStoreEntry;
 
@@ -37,14 +39,33 @@
     /** the property key base used for SAM algorithm verifiers */
     public static final String PROPKEY_BASE = "kerberos.sam.type.";
 
-    /** a map of verifiers so we do not need to create a new one every time */
-    private static final HashMap verifiers = new HashMap();
+    public static SamSubsystem instance;
 
-    /** a set of environment parameters */
-    private static final Hashtable env = new Hashtable();
+    /** a map of verifiers so we do not need to create a new one every time */
+    private final HashMap verifiers = new HashMap();
 
     /** the key integrity checker used by the subsystem for all sam types */
-    private static KeyIntegrityChecker keyChecker;
+    private KeyIntegrityChecker keyChecker;
+
+    /** the user context the SamSubsystem would use to verify passwords */
+    private DirContext userContext;
+    private String userBaseRdn;
+
+
+    /**
+     * Gets the singleton instance of the SamSubsystem.
+     *
+     * @return the singleton for the SamSubsystem
+     */
+    public static SamSubsystem getInstance()
+    {
+        if ( instance == null )
+        {
+            instance = new SamSubsystem();
+        }
+
+        return instance;
+    }
 
 
     /**
@@ -52,9 +73,9 @@
      *
      * @param keyChecker the KeyIntegrityChecker used by the entire SamSubsystem
      */
-    public static void setIntegrityChecker( KeyIntegrityChecker keyChecker )
+    public void setIntegrityChecker( KeyIntegrityChecker keyChecker )
     {
-        SamSubsystem.keyChecker = keyChecker;
+        this.keyChecker = keyChecker;
     }
 
 
@@ -68,7 +89,7 @@
      * @throws SamException thrown when there is a failure within the verifier
      * or a verifier cannot be found.
      */
-    public static KerberosKey verify( PrincipalStoreEntry entry, byte[] sad ) throws SamException
+    public KerberosKey verify( PrincipalStoreEntry entry, byte[] sad ) throws SamException
     {
         SamVerifier verifier = null;
 
@@ -91,6 +112,17 @@
 
         String key = PROPKEY_BASE + entry.getSamType().getOrdinal();
 
+        Hashtable env = new Hashtable();
+
+        try
+        {
+            env.putAll( userContext.getEnvironment() );
+        }
+        catch (NamingException e)
+        {
+            e.printStackTrace();
+        }
+
         if ( ! env.containsKey( key ) )
         {
             String msg = "Could not find property '" + key + "'";
@@ -106,7 +138,15 @@
 
             verifier = ( SamVerifier ) c.newInstance();
 
-            verifier.setEnvironment( env );
+            try
+            {
+                verifier.setUserContext( ( DirContext ) userContext.lookup( userBaseRdn ) );
+            }
+            catch (NamingException e)
+            {
+                e.printStackTrace();
+
+            }
 
             verifier.setIntegrityChecker( keyChecker );
 
@@ -152,8 +192,15 @@
     }
 
 
-    public static void setEnvironment( Hashtable properties )
+    /**
+     * Sets the context under which user entries can be found.
+     *
+     * @param userContext the jndi context under which users can be found.
+     * @param userBaseRdn the container with users
+     */
+    public void setUserContext( DirContext userContext, String userBaseRdn )
     {
-        env.putAll( properties );
+        this.userContext = userContext;
+        this.userBaseRdn = userBaseRdn;
     }
 }

Modified: directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamVerifier.java
URL: http://svn.apache.org/viewcvs/directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamVerifier.java?rev=202104&r1=202103&r2=202104&view=diff
==============================================================================
--- directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamVerifier.java (original)
+++ directory/protocol-providers/kerberos/trunk/src/java/org/apache/kerberos/sam/SamVerifier.java Mon Jun 27 17:26:39 2005
@@ -19,11 +19,10 @@
 
 import javax.security.auth.kerberos.KerberosKey;
 import javax.security.auth.kerberos.KerberosPrincipal;
+import javax.naming.directory.DirContext;
 
 import org.apache.kerberos.messages.value.SamType;
 
-import java.util.Hashtable;
-
 
 /**
  * Single-use Authentication Mechanism verifier (subsystem) interface.
@@ -52,9 +51,6 @@
     /** Shuts down one of many pluggable SAM type subsystem*/
     void shutdown();
 
-    /** Sets the environment properties for a SamVerifier */
-    void setEnvironment( Hashtable env );
-
     /**
      * SamVerifiers require a KeyIntegrityChecker to calculate the integrity of
      * a generated KerberosKey.  The Kerberos service exposes this interface
@@ -81,4 +77,7 @@
      * @return the type value for the SAM algorithm used to verify the SUP.
      */
     SamType getSamType();
+
+    /** sets the user context where users are stored for the primary realm */
+    void setUserContext( DirContext userContext );
 }