Author: erodriguez
Date: Tue Mar 22 01:32:41 2005
New Revision: 158585

URL: http://svn.apache.org/viewcvs?view=rev&rev=158585
Log:
Refactored the Kerberos store operations to use the Command pattern.

Added:
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/ContextOperation.java
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStoreImpl.java
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/operations/
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/operations/GetPrincipal.java
Removed:
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/ChangePasswordActionImpl.java
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/LookupPrincipalActionImpl.java
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PasswordStore.java
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/SearchBaseFactory.java
Modified:
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/service/KerberosService.java
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStore.java
    
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/SearchBaseNormalizer.java

Modified: 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/service/KerberosService.java
URL: 
http://svn.apache.org/viewcvs/directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/service/KerberosService.java?view=diff&r1=158584&r2=158585
==============================================================================
--- 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/service/KerberosService.java
 (original)
+++ 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/service/KerberosService.java
 Tue Mar 22 01:32:41 2005
@@ -48,6 +48,8 @@
 import org.apache.kerberos.replay.InMemoryReplayCache;
 import org.apache.kerberos.replay.ReplayCache;
 import org.apache.kerberos.store.PrincipalStore;
+import org.apache.kerberos.store.PrincipalStoreEntry;
+import org.apache.kerberos.store.operations.GetPrincipal;
 
 
 public class KerberosService
@@ -70,20 +72,60 @@
         checksumEngines.put( ChecksumType.SHA1,    new Sha1Checksum() );
     }
     
-    public EncryptionKey getKeyForPrincipal( KerberosPrincipal principal )
+    public EncryptionKey getClientKey( KerberosPrincipal clientPrincipal )
+               throws KerberosException
     {
-               EncryptionKey key = null;
-
-               try
-               {
-                       key = store.getEntry( principal ).getEncryptionKey();
-               }
-               catch (Exception e)
-               {
-            e.printStackTrace();
-               }
-
-        return key;
+        return getKey( clientPrincipal, ErrorType.KDC_ERR_C_PRINCIPAL_UNKNOWN 
);
+    }
+    
+    public EncryptionKey getServerKey( KerberosPrincipal serverPrincipal )
+                       throws KerberosException
+       {
+        return getKey( serverPrincipal, ErrorType.KDC_ERR_S_PRINCIPAL_UNKNOWN 
);
+       }
+    
+    private EncryptionKey getKey( KerberosPrincipal principal, ErrorType 
errorType )
+               throws KerberosException
+    {
+               PrincipalStoreEntry entry = null;
+               
+        try
+        {
+            entry = (PrincipalStoreEntry)store.execute( new GetPrincipal( 
principal ) );
+        }
+        catch (Exception e)
+        {
+            throw new KerberosException( errorType );
+        }
+        
+        if ( entry == null || entry.getEncryptionKey() == null )
+        {
+            throw new KerberosException( errorType );
+        }
+        
+        return entry.getEncryptionKey();
+    }
+    
+    public PrincipalStoreEntry getEntryForClient( KerberosPrincipal 
clientPrincipal )
+               throws KerberosException
+    {
+               PrincipalStoreEntry entry = null;
+               
+        try
+        {
+            entry = (PrincipalStoreEntry)store.execute( new GetPrincipal( 
clientPrincipal ) );
+        }
+        catch (Exception e)
+        {
+            throw new KerberosException( ErrorType.KDC_ERR_C_PRINCIPAL_UNKNOWN 
);
+        }
+        
+        if ( entry == null )
+        {
+            throw new KerberosException( ErrorType.KDC_ERR_C_PRINCIPAL_UNKNOWN 
);
+        }
+        
+        return entry;
     }
     
     protected EncryptionType getBestEncryptionType( EncryptionType[] 
requestedTypes )
@@ -144,7 +186,7 @@
                }
         else
         {
-                       serverKey = getKeyForPrincipal( serverPrincipal );
+                       serverKey = getServerKey( serverPrincipal );
                }
 
                if ( serverKey == null )

Added: 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/ContextOperation.java
URL: 
http://svn.apache.org/viewcvs/directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/ContextOperation.java?view=auto&rev=158585
==============================================================================
--- 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/ContextOperation.java
 (added)
+++ 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/ContextOperation.java
 Tue Mar 22 01:32:41 2005
@@ -0,0 +1,30 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.kerberos.store;
+
+import java.io.Serializable;
+
+import javax.naming.Name;
+import javax.naming.directory.DirContext;
+
+
+public interface ContextOperation extends Serializable
+{
+    public Object execute( DirContext ctx, Name searchBaseDn ) throws 
Exception;
+}
+

Modified: 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStore.java
URL: 
http://svn.apache.org/viewcvs/directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStore.java?view=diff&r1=158584&r2=158585
==============================================================================
--- 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStore.java
 (original)
+++ 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStore.java
 Tue Mar 22 01:32:41 2005
@@ -14,14 +14,12 @@
  *   limitations under the License.
  *
  */
-package org.apache.kerberos.store;
 
-import javax.security.auth.kerberos.KerberosPrincipal;
+package org.apache.kerberos.store;
 
-import org.apache.kerberos.exceptions.KerberosException;
 
-public interface PrincipalStore {
-       public void init();
-       public PrincipalStoreEntry getEntry(KerberosPrincipal principal) throws 
KerberosException;
+public interface PrincipalStore
+{
+    public Object execute( ContextOperation operation ) throws Exception;
 }
 

Added: 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStoreImpl.java
URL: 
http://svn.apache.org/viewcvs/directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStoreImpl.java?view=auto&rev=158585
==============================================================================
--- 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStoreImpl.java
 (added)
+++ 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/PrincipalStoreImpl.java
 Tue Mar 22 01:32:41 2005
@@ -0,0 +1,45 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.kerberos.store;
+
+import javax.naming.Name;
+import javax.naming.ldap.LdapContext;
+
+
+public class PrincipalStoreImpl implements PrincipalStore
+{
+    /** a handle on the provider context */
+    protected LdapContext ctx;
+    /** the search base relative to provider URL to use for reading entries */
+    protected Name searchBaseDn;
+    
+    /**
+     * Creates the action to be used against the embedded ApacheDS DIT.
+     */
+    public PrincipalStoreImpl( LdapContext ctx, Name searchBaseDn )
+    {
+        this.ctx = ctx;
+        this.searchBaseDn = searchBaseDn;
+    }
+    
+    public Object execute( ContextOperation operation ) throws Exception
+    {
+        return operation.execute( ctx, searchBaseDn );
+    }
+}
+

Modified: 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/SearchBaseNormalizer.java
URL: 
http://svn.apache.org/viewcvs/directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/SearchBaseNormalizer.java?view=diff&r1=158584&r2=158585
==============================================================================
--- 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/SearchBaseNormalizer.java
 (original)
+++ 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/SearchBaseNormalizer.java
 Tue Mar 22 01:32:41 2005
@@ -19,7 +19,7 @@
 
 import javax.naming.Name;
 import javax.naming.NamingException;
-import javax.naming.ldap.LdapContext;
+import javax.naming.directory.DirContext;
 
 import org.apache.ldap.common.name.LdapName;
 import org.apache.ldap.common.util.NestableRuntimeException;
@@ -27,7 +27,7 @@
 
 public class SearchBaseNormalizer
 {
-    public static Name getName( String baseDn, LdapContext ctx )
+    public static Name getRelativeName( DirContext ctx, String baseDn )
     {
         Name searchBaseDn = null;
         

Added: 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/operations/GetPrincipal.java
URL: 
http://svn.apache.org/viewcvs/directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/operations/GetPrincipal.java?view=auto&rev=158585
==============================================================================
--- 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/operations/GetPrincipal.java
 (added)
+++ 
directory/shared/kerberos/trunk/common/src/java/org/apache/kerberos/store/operations/GetPrincipal.java
 Tue Mar 22 01:32:41 2005
@@ -0,0 +1,129 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.kerberos.store.operations;
+
+import javax.naming.Name;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.SearchResult;
+import javax.security.auth.kerberos.KerberosPrincipal;
+
+import org.apache.kerberos.messages.value.SamType;
+import org.apache.kerberos.store.ContextOperation;
+import org.apache.kerberos.store.KerberosAttribute;
+import org.apache.kerberos.store.PrincipalStoreEntry;
+import org.apache.kerberos.store.PrincipalStoreEntryModifier;
+
+/**
+ * Encapsulates the action of looking up a principal in an embedded ApacheDS 
DIT.
+ *
+ * @author <a href="mailto:[email protected]";>Apache Directory 
Project</a>
+ * @version $Rev$
+ */
+public class GetPrincipal implements ContextOperation
+{
+    /** The name of the principal to get. */
+    protected KerberosPrincipal principal;
+    
+    /**
+     * Creates the action to be used against the embedded ApacheDS DIT.
+     */
+    public GetPrincipal( KerberosPrincipal principal )
+    {
+        this.principal = principal;
+    }
+    
+    public Object execute( DirContext ctx, Name searchBaseDn )
+       {
+        if ( principal == null )
+        {
+            return null;
+        }
+        
+               String[] attrIDs = { KerberosAttribute.PRINCIPAL, 
KerberosAttribute.VERSION,
+                       KerberosAttribute.TYPE, KerberosAttribute.KEY };
+
+               Attributes matchAttrs = new BasicAttributes( false ); // 
case-sensitive
+               matchAttrs.put( new BasicAttribute( 
KerberosAttribute.PRINCIPAL, principal.getName() ) );
+               
+               PrincipalStoreEntry entry = null;
+               
+               try
+               {
+                   // Search for objects that have those matching attributes
+                   NamingEnumeration answer = ctx.search( searchBaseDn, 
matchAttrs, attrIDs );
+                   
+                       if ( answer.hasMore() )
+                       {
+                               SearchResult result = (SearchResult) 
answer.next();
+                   Attributes attrs = result.getAttributes();
+                   
+                   if ( attrs == null )
+                   {
+                       return null;
+                   }
+                   
+                   entry = getEntry( attrs );
+                       }
+               }
+               catch (NamingException e)
+               {
+                       e.printStackTrace();
+                       return null;
+               }
+               
+               return entry;
+    }
+    
+    /**
+     * Marshals an a PrincipalStoreEntry from an Attributes object.
+     *
+     * @param attrs the attributes of the Kerberos principal
+     * @return the entry for the principal
+     * @throws NamingException if there are any access problems
+     */
+    private PrincipalStoreEntry getEntry( Attributes attrs ) throws 
NamingException
+    {
+        PrincipalStoreEntryModifier modifier = new 
PrincipalStoreEntryModifier();
+
+        String principal = ( String ) attrs.get( KerberosAttribute.PRINCIPAL 
).get();
+        String encryptionType = ( String ) attrs.get( KerberosAttribute.TYPE 
).get();
+        String keyVersionNumber = ( String ) attrs.get( 
KerberosAttribute.VERSION ).get();
+
+        if ( attrs.get( "apacheSamType" ) != null )
+        {
+            String samType = ( String ) attrs.get( "apacheSamType" ).get();
+
+            modifier.setSamType( SamType.getTypeByOrdinal( Integer.parseInt( 
samType ) ) );
+        }
+
+        byte[] keyBytes = (byte[]) attrs.get( KerberosAttribute.KEY ).get();
+
+        modifier.setPrincipal( new KerberosPrincipal( principal ) );
+        modifier.setEncryptionType( Integer.parseInt( encryptionType ) );
+        modifier.setKeyVersionNumber( Integer.parseInt( keyVersionNumber ) );
+        modifier.setKey( keyBytes );
+
+        return modifier.getEntry();
+    }
+}
+


Reply via email to