You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2015/04/30 08:37:10 UTC

[1/3] directory-kerby git commit: DIRKRB-231 Support UDP transport for NettyKdcNetwork. Contributed by Yaning

Repository: directory-kerby
Updated Branches:
  refs/heads/master eb2e4c1ae -> ed4f18c3d


DIRKRB-231 Support UDP transport for NettyKdcNetwork. Contributed by Yaning


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/ca258213
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/ca258213
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/ca258213

Branch: refs/heads/master
Commit: ca258213bca815c09aa32b9f6ca09729a23fcbb3
Parents: d7bf961
Author: Drankye <dr...@gmail.com>
Authored: Thu Apr 30 01:31:03 2015 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Thu Apr 30 01:31:03 2015 +0800

----------------------------------------------------------------------
 .../kerberos/kdc/impl/NettyKdcNetwork.java      | 23 ++++++--
 .../kdc/impl/NettyKdcUdpServerHandler.java      | 60 ++++++++++++++++++++
 .../kerby/kerberos/kerb/client/KrbHandler.java  | 16 ++++--
 .../kerb/transport/KrbTcpTransport.java         |  6 ++
 .../kerberos/kerb/transport/KrbTransport.java   |  7 +++
 .../kerb/transport/KrbUdpTransport.java         |  9 ++-
 .../kerby/kerberos/kerb/server/KdcHandler.java  | 10 +++-
 7 files changed, 118 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca258213/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcNetwork.java
----------------------------------------------------------------------
diff --git a/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcNetwork.java b/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcNetwork.java
index 119e089..8379568 100644
--- a/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcNetwork.java
+++ b/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcNetwork.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.kerberos.kdc.impl;
 
+import io.netty.bootstrap.Bootstrap;
 import io.netty.bootstrap.ServerBootstrap;
 import io.netty.channel.*;
 import io.netty.channel.nio.NioEventLoopGroup;
 import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioDatagramChannel;
 import io.netty.channel.socket.nio.NioServerSocketChannel;
 import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
 import io.netty.handler.logging.LogLevel;
@@ -42,6 +44,7 @@ public class NettyKdcNetwork {
     private InetSocketAddress udpAddress;
     private EventLoopGroup bossGroup;
     private EventLoopGroup workerGroup;
+    private EventLoopGroup group;
 
     public void init(KdcContext kdcContext) {
         this.kdcContext = kdcContext;
@@ -54,11 +57,6 @@ public class NettyKdcNetwork {
                        InetSocketAddress udpAddress) throws IOException {
         this.tcpAddress = tcpAddress;
         this.udpAddress = udpAddress;
-
-
-        if (udpAddress != null) {
-
-        }
     }
 
     public void start() {
@@ -79,6 +77,18 @@ public class NettyKdcNetwork {
 
         // Start the server.
         b.bind(tcpAddress.getPort());
+        if (udpAddress != null) {
+            startUDPServer();
+        }
+    }
+
+    private void startUDPServer() {
+        this.group = new NioEventLoopGroup();
+        Bootstrap b = new Bootstrap();
+        b.group(group).channel(NioDatagramChannel.class)
+                .option(ChannelOption.SO_BROADCAST, true)
+                .handler((ChannelHandler) new NettyKdcUdpServerHandler(kdcContext));
+        b.bind(udpAddress.getPort());
     }
 
     static class KrbMessageDecoder extends LengthFieldBasedFrameDecoder {
@@ -104,5 +114,8 @@ public class NettyKdcNetwork {
         // Shut down all event loops to terminate all threads.
         bossGroup.shutdownGracefully();
         workerGroup.shutdownGracefully();
+        if (udpAddress != null) {
+            group.shutdownGracefully();
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca258213/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcUdpServerHandler.java
----------------------------------------------------------------------
diff --git a/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcUdpServerHandler.java b/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcUdpServerHandler.java
new file mode 100644
index 0000000..5464596
--- /dev/null
+++ b/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcUdpServerHandler.java
@@ -0,0 +1,60 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kdc.impl;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.channel.socket.DatagramPacket;
+import org.apache.kerby.kerberos.kerb.server.KdcContext;
+import org.apache.kerby.kerberos.kerb.server.KdcHandler;
+
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+
+
+public class NettyKdcUdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket> {
+
+    private final KdcHandler myKdcHandler;
+
+    public NettyKdcUdpServerHandler(KdcContext kdcContext) {
+        this.myKdcHandler = new KdcHandler(kdcContext);
+    }
+
+    @Override
+    protected void channelRead0(ChannelHandlerContext channelHandlerContext, DatagramPacket datagramPacket) throws Exception {
+        ByteBuf byteBuf = datagramPacket.content();
+        byte[] msgBytes = new byte[byteBuf.readableBytes()];
+        byteBuf.readBytes(msgBytes);
+        ByteBuffer requestMessage = ByteBuffer.wrap(msgBytes);
+        InetSocketAddress clientAddress = datagramPacket.sender();
+
+        boolean isTcp = false;
+        try {
+            ByteBuffer responseMessage = myKdcHandler.handleMessage(requestMessage,
+                    isTcp, clientAddress.getAddress());
+            channelHandlerContext.writeAndFlush(new DatagramPacket(Unpooled.wrappedBuffer(responseMessage), clientAddress));
+        } catch (Exception e) {
+            System.out.println("Error occured while processing request:"
+                    + e.getMessage());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca258213/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbHandler.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbHandler.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbHandler.java
index abb56f1..850ee57 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbHandler.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbHandler.java
@@ -27,6 +27,7 @@ import org.apache.kerby.kerberos.kerb.spec.base.KrbMessage;
 import org.apache.kerby.kerberos.kerb.spec.base.KrbMessageType;
 import org.apache.kerby.kerberos.kerb.spec.kdc.KdcRep;
 import org.apache.kerby.kerberos.kerb.spec.kdc.KdcReq;
+import org.apache.kerby.kerberos.kerb.transport.KrbTransport;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -43,13 +44,20 @@ public abstract class KrbHandler {
     public void handleRequest(KdcRequest kdcRequest) throws KrbException {
         kdcRequest.process();
         KdcReq kdcReq = kdcRequest.getKdcReq();
-
         int bodyLen = kdcReq.encodingLength();
-        ByteBuffer requestMessage = ByteBuffer.allocate(bodyLen + 4);
-        requestMessage.putInt(bodyLen);
+        KrbTransport transport = (KrbTransport) kdcRequest.getSessionData();
+        boolean isTcp = transport.isTcp();
+        ByteBuffer requestMessage;
+
+        if (!isTcp) {
+            requestMessage = ByteBuffer.allocate(bodyLen);
+
+        } else {
+            requestMessage = ByteBuffer.allocate(bodyLen + 4);
+            requestMessage.putInt(bodyLen);
+        }
         kdcReq.encode(requestMessage);
         requestMessage.flip();
-
         try {
             sendMessage(kdcRequest, requestMessage);
         } catch (IOException e) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca258213/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java
index 01b5706..89b5ec5 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java
@@ -43,6 +43,7 @@ public class KrbTcpTransport
         this.messageBuffer = new byte[1024 * 1024]; // TODO.
     }
 
+
     @Override
     public void sendMessage(ByteBuffer message) throws IOException {
         outputStream.write(message.array()); // TODO: may not be backed by array
@@ -60,6 +61,11 @@ public class KrbTcpTransport
     }
 
     @Override
+    public boolean isTcp() {
+        return true;
+    }
+
+    @Override
     public InetAddress getRemoteAddress() {
         return socket.getInetAddress();
     }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca258213/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTransport.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTransport.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTransport.java
index 0fa5663..3c54c27 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTransport.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTransport.java
@@ -41,6 +41,13 @@ public interface KrbTransport {
     ByteBuffer receiveMessage() throws IOException;
 
     /**
+     * Judge the type of transport, return true if it is tcp,
+     * reture false if it is udp.
+     */
+
+    boolean isTcp();
+
+    /**
      * Get address from remote side.
      * @return address
      */

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca258213/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java
index 068f1eb..4457a91 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java
@@ -37,6 +37,7 @@ public class KrbUdpTransport
     public KrbUdpTransport(InetSocketAddress remoteAddress) throws IOException {
         this.remoteAddress = remoteAddress;
         this.channel = DatagramChannel.open();
+        this.channel.configureBlocking(true);
         this.recvBuffer = ByteBuffer.allocate(1024 * 1024); // TODO.
         channel.connect(remoteAddress);
     }
@@ -48,12 +49,18 @@ public class KrbUdpTransport
 
     @Override
     public ByteBuffer receiveMessage() throws IOException {
-        recvBuffer.reset();
+        recvBuffer.clear();
         channel.receive(recvBuffer);
+        recvBuffer.flip();
         return recvBuffer;
     }
 
     @Override
+    public boolean isTcp() {
+        return false;
+    }
+
+    @Override
     public InetAddress getRemoteAddress() {
         return remoteAddress.getAddress();
     }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca258213/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcHandler.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcHandler.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcHandler.java
index 909b232..4c00a44 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcHandler.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcHandler.java
@@ -78,11 +78,15 @@ public class KdcHandler {
 
         KrbMessage krbResponse = kdcRequest.getReply();
         int bodyLen = krbResponse.encodingLength();
-        ByteBuffer responseMessage = ByteBuffer.allocate(bodyLen + 4);
-        responseMessage.putInt(bodyLen);
+        ByteBuffer responseMessage;
+        if (isTcp) {
+            responseMessage = ByteBuffer.allocate(bodyLen + 4);
+            responseMessage.putInt(bodyLen);
+        } else {
+            responseMessage = ByteBuffer.allocate(bodyLen);
+        }
         krbResponse.encode(responseMessage);
         responseMessage.flip();
-
         return responseMessage;
     }
 


[3/3] directory-kerby git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/directory-kerby

Posted by dr...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/directory-kerby


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/ed4f18c3
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/ed4f18c3
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/ed4f18c3

Branch: refs/heads/master
Commit: ed4f18c3d8a81a378f6ce93c49f19f70d2819291
Parents: 638e6c1 eb2e4c1
Author: Drankye <dr...@gmail.com>
Authored: Thu Apr 30 04:31:30 2015 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Thu Apr 30 04:31:30 2015 +0800

----------------------------------------------------------------------
 kerby-kerb/kerb-kdc-test/pom.xml                |   7 +
 .../kerberos/kerb/server/GSSInteropTest.java    | 192 +++++++++++++++++++
 .../src/test/resources/kerberos.jaas            |   5 +
 .../kerb-kdc-test/src/test/resources/krb5.conf  |   8 +
 4 files changed, 212 insertions(+)
----------------------------------------------------------------------



[2/3] directory-kerby git commit: Merged some conflicts

Posted by dr...@apache.org.
Merged some conflicts


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/638e6c1e
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/638e6c1e
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/638e6c1e

Branch: refs/heads/master
Commit: 638e6c1e336651a6e81d3230095a85b0e6342d30
Parents: ca25821 e452f18
Author: Drankye <dr...@gmail.com>
Authored: Thu Apr 30 01:34:31 2015 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Thu Apr 30 01:34:31 2015 +0800

----------------------------------------------------------------------
 .../org/apache/kerby/kerberos/kdc/impl/NettyKdcNetwork.java  | 2 +-
 .../java/org/apache/kerby/kerberos/tool/klist/Klist.java     | 8 ++++----
 .../org/apache/kerby/kerberos/tool/token/TokenCache.java     | 8 ++++----
 3 files changed, 9 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/638e6c1e/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/impl/NettyKdcNetwork.java
----------------------------------------------------------------------