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
----------------------------------------------------------------------