You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2004/11/09 00:30:44 UTC
svn commit: rev 56979 - in incubator/directory/kerberos/trunk/eve-kerberos-seda: . src src/java src/java/org src/java/org/apache src/java/org/apache/kerberos src/java/org/apache/kerberos/kdc src/java/org/apache/kerberos/kdc/server src/java/org/apache/kerberos/kdc/server/seda
Author: erodriguez
Date: Mon Nov 8 15:30:42 2004
New Revision: 56979
Added:
incubator/directory/kerberos/trunk/eve-kerberos-seda/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/EveKerberosSedaMain.java
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosDecoder.java
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosEncoder.java
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosHandler.java
incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosProtocolProvider.java
Log:
First pass at Eve, Kerberos, and SEDA integration.
Added: incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/EveKerberosSedaMain.java
==============================================================================
--- (empty file)
+++ incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/EveKerberosSedaMain.java Mon Nov 8 15:30:42 2004
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2004 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.kdc.server.seda;
+
+
+import org.apache.eve.jndi.EveContextFactory;
+import org.apache.kerberos.kdc.EmbeddedEveStore;
+import org.apache.kerberos.kdc.KdcConfiguration;
+import org.apache.kerberos.kdc.KdcDispatcher;
+import org.apache.kerberos.kdc.store.BootstrapStore;
+import org.apache.kerberos.kdc.store.PrincipalStore;
+import org.apache.seda.DefaultFrontend;
+import org.apache.seda.DefaultFrontendFactory;
+import org.apache.seda.listener.ListenerConfig;
+import org.apache.seda.listener.TCPListenerConfig;
+import org.apache.seda.listener.UDPListenerConfig;
+import org.apache.seda.protocol.DefaultInetServicesDatabase;
+import org.apache.seda.protocol.InetServiceEntry;
+import org.apache.seda.protocol.ProtocolProvider;
+import org.apache.seda.protocol.TransportTypeEnum;
+
+import javax.naming.Context;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+import java.io.File;
+import java.net.InetAddress;
+import java.util.Hashtable;
+
+
+public class EveKerberosSedaMain
+{
+ private final KdcConfiguration config = new KdcConfiguration();
+ private final BootstrapStore bootstrap = new BootstrapStore( config );
+ private PrincipalStore ldap;
+ private KdcDispatcher kdc;
+
+ /** the frontend used to contain the protocols */
+ protected DefaultFrontend fe = null;
+
+ /** the protocol provider */
+ protected ProtocolProvider proto = null;
+
+ /** the listener configuration for the protocol */
+ protected ListenerConfig tcpConfig;
+ protected ListenerConfig udpConfig;
+
+ /** the server port number for the protocol */
+ protected int port;
+
+ public static void main( String[] args )
+ {
+ EveKerberosSedaMain m = new EveKerberosSedaMain();
+ m.go();
+ }
+
+ private void go()
+ {
+ Hashtable env = new Hashtable();
+ env.put( Context.PROVIDER_URL, "dc=example,dc=com" );
+ env.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.eve.jndi.EveContextFactory" );
+ env.put( EveContextFactory.WKDIR_ENV, "target" + File.separator + "eve" );
+
+ BasicAttributes attrs = new BasicAttributes( true );
+ BasicAttribute attr = new BasicAttribute( "objectClass" );
+ attr.add( "top" );
+ attr.add( "organizationalUnit" );
+ attr.add( "extensibleObject" );
+ attrs.put( attr );
+ attr = new BasicAttribute( "ou" );
+ attr.add( "testing" );
+ attrs.put( attr );
+
+ env.put( EveContextFactory.PARTITIONS_ENV, "example" );
+ env.put( EveContextFactory.SUFFIX_BASE_ENV + "example", "dc=example,dc=com" );
+ env.put( EveContextFactory.INDICES_BASE_ENV + "example", "ou objectClass" );
+ env.put( EveContextFactory.ATTRIBUTES_BASE_ENV + "example", attrs );
+
+ env.put( EmbeddedEveStore.KDC_ENTRY_LDIF_FILE, "./src/ldif/example.com" );
+ env.put( EmbeddedEveStore.KDC_ENTRY_BASEDN_KEY, "ou=Users,dc=example,dc=com" );
+
+ ldap = new EmbeddedEveStore( env );
+
+ init();
+
+ try
+ {
+ proto = new KerberosProtocolProvider();
+ setup();
+ kdc = new KdcDispatcher( config, bootstrap, ldap );
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Instantiates the factory then gets a handle on the Frontend.
+ *
+ * @throws Exception due to create()
+ */
+ protected void setup() throws Exception
+ {
+ port = config.getDefaultPort();
+
+ fe = (DefaultFrontend) new DefaultFrontendFactory().create();
+
+ InetServiceEntry srvEntry;
+
+ srvEntry = new InetServiceEntry(proto.getName(), port, proto, TransportTypeEnum.TCP);
+ ((DefaultInetServicesDatabase) fe.getInetServicesDatabase()).addEntry(srvEntry);
+ tcpConfig = new TCPListenerConfig(InetAddress.getLocalHost(), srvEntry);
+ fe.getTCPListenerManager().bind(tcpConfig);
+
+ srvEntry = new InetServiceEntry(proto.getName(), port, proto, TransportTypeEnum.UDP);
+ ((DefaultInetServicesDatabase) fe.getInetServicesDatabase()).addEntry(srvEntry);
+ udpConfig = new UDPListenerConfig(InetAddress.getLocalHost(), srvEntry);
+ fe.getUDPListenerManager().bind(udpConfig);
+ }
+
+ private void init()
+ {
+ Runnable runnable = new Runnable()
+ {
+ public void run()
+ {
+ bootstrap.init();
+ ldap.init();
+ }
+ };
+ Thread storeInit = new Thread( runnable );
+ storeInit.start();
+ }
+}
+
Added: incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosDecoder.java
==============================================================================
--- (empty file)
+++ incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosDecoder.java Mon Nov 8 15:30:42 2004
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2004 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.kdc.server.seda;
+
+import org.apache.commons.codec.stateful.AbstractStatefulDecoder;
+
+
+/**
+ * A decoder for Kerberos requests.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
+ * @version $Rev: 56478 $
+ */
+public class KerberosDecoder extends AbstractStatefulDecoder
+{
+ /**
+ * Returns a decoded Kerberos PDU. The codec is an identity
+ * operation. Each decode call triggers a callback since we're presuming
+ * each chunk to be a valid PDU while streaming the request back.
+ *
+ * @param encoded the object to return which is a buffer
+ */
+ public void decode(Object encoded)
+ {
+ super.decodeOccurred(encoded);
+ }
+}
+
Added: incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosEncoder.java
==============================================================================
--- (empty file)
+++ incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosEncoder.java Mon Nov 8 15:30:42 2004
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2004 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.kdc.server.seda;
+
+import org.apache.commons.codec.stateful.AbstractStatefulEncoder;
+
+
+/**
+ * An encoder for Kerberos replies.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
+ * @version $Rev: 56478 $
+ */
+public class KerberosEncoder extends AbstractStatefulEncoder
+{
+ /**
+ * Returns an encoded Kerberos PDU. The codec is an identity
+ * operation. Each encode call triggers a callback since we're presuming
+ * each chunk to be a valid PDU while streaming the request back as the
+ * response.
+ *
+ * @param substrate the object to return which is a buffer
+ */
+ public void encode(Object substrate)
+ {
+ super.encodeOccurred(substrate);
+ }
+}
+
Added: incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosHandler.java
==============================================================================
--- (empty file)
+++ incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosHandler.java Mon Nov 8 15:30:42 2004
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2004 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.kdc.server.seda;
+
+
+import org.apache.seda.listener.ClientKey;
+import org.apache.seda.protocol.AbstractSingleReplyHandler;
+
+
+/**
+ * A handler for Kerberos requests that returns Kerberos replies.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org"> Apache Directory Project</a>
+ * @version $Rev: 56478 $
+ */
+public class KerberosHandler extends AbstractSingleReplyHandler
+{
+ /**
+ * Processes Kerberos requests and returns Kerberos replies.
+ *
+ * @param request the buffer of data to be processed.
+ * @return the response to the request.
+ */
+ public Object handle(ClientKey key, Object request)
+ {
+ return request;
+ }
+}
+
Added: incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosProtocolProvider.java
==============================================================================
--- (empty file)
+++ incubator/directory/kerberos/trunk/eve-kerberos-seda/src/java/org/apache/kerberos/kdc/server/seda/KerberosProtocolProvider.java Mon Nov 8 15:30:42 2004
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2004 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.kdc.server.seda;
+
+import org.apache.commons.codec.stateful.DecoderFactory;
+import org.apache.commons.codec.stateful.EncoderFactory;
+import org.apache.commons.codec.stateful.StatefulDecoder;
+import org.apache.commons.codec.stateful.StatefulEncoder;
+import org.apache.seda.listener.ClientKey;
+import org.apache.seda.protocol.ProtocolProvider;
+import org.apache.seda.protocol.RequestHandler;
+import org.apache.seda.protocol.SingleReplyHandler;
+
+
+/**
+ * An kerberos protocol service provider for the SEDA framework. The provider along
+ * with the SEDA framework implements an RFC 1510 compliant server.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
+ * @version $Rev: 56478 $
+ */
+public final class KerberosProtocolProvider implements ProtocolProvider
+{
+ /** the authoritative service name of this internet protocol: 'kerberos' */
+ public static final String NAME = "kerberos";
+
+ /** a null decoder that triggers a callback returning the substrate as is */
+ public static final StatefulDecoder KERBEROS_DECODER =
+ new KerberosDecoder();
+
+ /** a null encoder that triggers a callback returning the substrate as is */
+ public static final StatefulEncoder KERBEROS_ENCODER =
+ new KerberosEncoder();
+
+ /** kerberos handler where request is return back as a response */
+ public static final SingleReplyHandler KERBEROS_HANDLER =
+ new KerberosHandler();
+
+ /**
+ * Gets the authoritative name for the service of this provider.
+ *
+ * @return the authoritative service name
+ */
+ public final String getName()
+ {
+ return NAME;
+ }
+
+ /**
+ * Gets a factory used to create a new StatefulDecoder for this service's
+ * protocol.
+ *
+ * @return a new StatefulDecoder for this service's protocol
+ */
+ public final DecoderFactory getDecoderFactory()
+ {
+ return new DecoderFactory()
+ {
+ /**
+ * Creates a really simple factory for decoders that return back
+ * thir request in the same decode call; 1:1 decode to callback.
+ * The same decoder will be returned evertime since no state is
+ * ever stored by these decoders.
+ *
+ * @return a chunking state based decoder
+ */
+ public StatefulDecoder createDecoder()
+ {
+ return KERBEROS_DECODER;
+ }
+ };
+ }
+
+ /**
+ * Gets a factory used to create a new StatefulEncoder for this service's
+ * protocol.
+ *
+ * @return a new StatefulEncoder for this service's protocol
+ */
+ public EncoderFactory getEncoderFactory()
+ {
+ return new EncoderFactory()
+ {
+ /**
+ * Creates a factory that always returns the same encoder which
+ * never really maintains any state. This encoder simply returns
+ * the object to encode as is without affecting it in any way.
+ *
+ * @return a new chunking state based encoder
+ */
+ public StatefulEncoder createEncoder()
+ {
+ return KERBEROS_ENCODER;
+ }
+ };
+ }
+
+ /**
+ * @param request the ByteBuffer containing the data to process
+ * @return the same ByteBuffer without any changes
+ */
+ public RequestHandler getHandler(ClientKey key, Object request)
+ {
+ return KERBEROS_HANDLER;
+ }
+}
+