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/07/04 06:59:31 UTC
directory-kerby git commit: DIRKRB-319 Added tests between real
application server and client using GSSAPI/KRB to authenticate mutually
Repository: directory-kerby
Updated Branches:
refs/heads/master d3c8272d2 -> 7cbd366ef
DIRKRB-319 Added tests between real application server and client using GSSAPI/KRB to authenticate mutually
Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/7cbd366e
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/7cbd366e
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/7cbd366e
Branch: refs/heads/master
Commit: 7cbd366efa1d689d38e97f5d954aaebfc4967e99
Parents: d3c8272
Author: drankye <ka...@intel.com>
Authored: Sat Jul 4 12:59:12 2015 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Sat Jul 4 12:59:12 2015 +0800
----------------------------------------------------------------------
.../kerberos/kerb/integration/test/AppBase.java | 36 --------
.../kerb/integration/test/AppClient.java | 15 +++-
.../kerb/integration/test/AppServer.java | 17 +++-
.../kerberos/kerb/integration/test/AppUtil.java | 5 ++
.../kerb/integration/test/Transport.java | 5 +-
.../kerb/integration/test/gss/GssAppClient.java | 84 ++++++++++++++++++
.../kerb/integration/test/gss/GssAppServer.java | 83 ++++++++++++++++++
.../kerberos/kerb/integration/test/AppTest.java | 89 ++++++++++++++++++++
.../kerb/integration/test/GssAppTest.java | 50 +++++++++++
.../kerberos/kerb/server/GssInteropTest.java | 8 --
.../kerberos/kerb/server/LoginTestBase.java | 1 -
11 files changed, 339 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppBase.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppBase.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppBase.java
deleted file mode 100644
index 278ce4f..0000000
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppBase.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 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.kerb.integration.test;
-
-/**
- * Making it runnable because the app will be launched in a separate thread in
- * a test.
- */
-public abstract class AppBase implements Runnable {
- private boolean isTestOK = false;
-
- public synchronized void setTestOK(boolean isOK) {
- this.isTestOK = isOK;
- }
-
- public boolean isTestOK() {
- return isTestOK;
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
index 4ae19a6..68b2b09 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
@@ -21,8 +21,9 @@ package org.apache.kerby.kerberos.kerb.integration.test;
import java.io.IOException;
-public abstract class AppClient extends AppBase {
- protected Transport.Connection conn;
+public abstract class AppClient {
+ private Transport.Connection conn;
+ private boolean isTestOK = false;
protected void usage(String[] args) {
if (args.length < 2) {
@@ -36,7 +37,7 @@ public abstract class AppClient extends AppBase {
usage(args);
String hostName = args[0];
- short port = (short) Integer.parseInt(args[1]);
+ int port = Integer.parseInt(args[1]);
this.conn = Transport.Connector.connect(hostName, port);
}
@@ -58,4 +59,12 @@ public abstract class AppClient extends AppBase {
}
protected abstract void withConnection(Transport.Connection conn) throws Exception;
+
+ protected synchronized void setTestOK(boolean isOK) {
+ this.isTestOK = isOK;
+ }
+
+ public boolean isTestOK() {
+ return isTestOK;
+ }
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
index 0d7a8fa..14b0cc7 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
@@ -21,13 +21,17 @@ package org.apache.kerby.kerberos.kerb.integration.test;
import java.io.IOException;
-public abstract class AppServer extends AppBase {
+/**
+ * Making it runnable because the server will be launched in a separate thread
+ * in a test.
+ */
+public abstract class AppServer implements Runnable {
protected Transport.Acceptor acceptor;
private boolean terminated = false;
protected void usage(String[] args) {
if (args.length < 1) {
- System.err.println("Usage: java <options> AppServer <ListenPort>");
+ System.err.println("Usage: AppServer <ListenPort>");
System.exit(-1);
}
}
@@ -35,14 +39,19 @@ public abstract class AppServer extends AppBase {
public AppServer(String[] args) throws IOException {
usage(args);
- short listenPort = (short) Integer.parseInt(args[0]);
+ int listenPort = Integer.parseInt(args[0]);
this.acceptor = new Transport.Acceptor(listenPort);
}
- public synchronized void terminate() {
+ public synchronized void start() {
+ new Thread(this).start();
+ }
+
+ public synchronized void stop() {
terminated = true;
}
+ @Override
public void run() {
try {
synchronized (this) {
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppUtil.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppUtil.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppUtil.java
new file mode 100644
index 0000000..b837689
--- /dev/null
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppUtil.java
@@ -0,0 +1,5 @@
+package org.apache.kerby.kerberos.kerb.integration.test;
+
+public class AppUtil {
+ public static final String JGSS_KERBEROS_OID = "1.2.840.113554.1.2.2";
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java
index ee14e43..727f111 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java
@@ -30,7 +30,7 @@ public class Transport {
public static class Acceptor {
ServerSocket serverSocket;
- public Acceptor(short listenPort) throws IOException {
+ public Acceptor(int listenPort) throws IOException {
this.serverSocket = new ServerSocket(listenPort);
}
@@ -53,7 +53,8 @@ public class Transport {
}
public static class Connector {
- public static Connection connect(String host, short port) throws IOException {
+ public static Connection connect(String host,
+ int port) throws IOException {
Socket socket = new Socket(host, port);
return new Connection(socket);
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
new file mode 100644
index 0000000..64ec1c8
--- /dev/null
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
@@ -0,0 +1,84 @@
+package org.apache.kerby.kerberos.kerb.integration.test.gss;
+
+import org.apache.kerby.kerberos.kerb.integration.test.AppClient;
+import org.apache.kerby.kerberos.kerb.integration.test.AppUtil;
+import org.apache.kerby.kerberos.kerb.integration.test.Transport;
+import org.ietf.jgss.*;
+
+public class GssAppClient extends AppClient {
+ private String clientPrincipal;
+ private String serverPrincipal;
+ private GSSManager manager;
+
+ @Override
+ protected void usage(String[] args) {
+ if (args.length < 3) {
+ System.err.println("Usage: GssAppClient <server-host> <server-port> "
+ + "<client-principal> <server-principal> ");
+ System.exit(-1);
+ }
+ }
+
+ public GssAppClient(String[] args) throws Exception {
+ super(args);
+
+ clientPrincipal = args[2];
+ serverPrincipal = args[3];
+ this.manager = GSSManager.getInstance();
+ }
+
+ @Override
+ protected void withConnection(Transport.Connection conn) throws Exception {
+ Oid krb5Oid = new Oid("1.2.840.113554.1.2.2");
+
+ GSSName serverName = manager.createName(serverPrincipal,
+ GSSName.NT_USER_NAME);
+ Oid oid = new Oid(AppUtil.JGSS_KERBEROS_OID);
+ GSSName clientName = manager.createName(clientPrincipal,
+ GSSName.NT_USER_NAME);
+ GSSCredential myCred = manager.createCredential(clientName,
+ GSSCredential.DEFAULT_LIFETIME, oid, GSSCredential.INITIATE_ONLY);
+ GSSContext context = manager.createContext(serverName,
+ krb5Oid, myCred, GSSContext.DEFAULT_LIFETIME);
+ context.requestMutualAuth(true);
+ context.requestConf(true);
+ context.requestInteg(true);
+
+ byte[] token = new byte[0];
+ while (!context.isEstablished()) {
+ token = context.initSecContext(token, 0, token.length);
+ if (token != null) {
+ conn.sendToken(token);
+ }
+ if (!context.isEstablished()) {
+ token = conn.recvToken();
+ }
+ }
+
+ System.out.println("Context Established! ");
+ System.out.println("Client is " + context.getSrcName());
+ System.out.println("Server is " + context.getTargName());
+
+ if (context.getMutualAuthState()) {
+ System.out.println("Mutual authentication took place!");
+ }
+
+ byte[] messageBytes = "Hello There!\0".getBytes();
+ MessageProp prop = new MessageProp(0, true);
+ token = context.wrap(messageBytes, 0, messageBytes.length, prop);
+ System.out.println("Will send wrap token of size " + token.length);
+ conn.sendToken(token);
+
+ token = conn.recvToken();
+ context.verifyMIC(token, 0, token.length,
+ messageBytes, 0, messageBytes.length, prop);
+ setTestOK(true);
+
+ System.out.println("Verified received MIC for message.");
+ context.dispose();
+ }
+
+ public static void main(String[] args) throws Exception {
+ new GssAppClient(args).run();
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
new file mode 100644
index 0000000..19dc781
--- /dev/null
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
@@ -0,0 +1,83 @@
+package org.apache.kerby.kerberos.kerb.integration.test.gss;
+
+import org.apache.kerby.kerberos.kerb.integration.test.AppServer;
+import org.apache.kerby.kerberos.kerb.integration.test.AppUtil;
+import org.apache.kerby.kerberos.kerb.integration.test.Transport;
+import org.ietf.jgss.*;
+
+public class GssAppServer extends AppServer {
+ private String serverPrincipal;
+ private GSSManager manager;
+ private GSSContext context;
+
+ public GssAppServer(String[] args) throws Exception {
+ super(args);
+ if (args.length < 2) {
+ usage(args);
+ }
+ this.serverPrincipal = args[1];
+
+ this.manager = GSSManager.getInstance();
+ GSSName gssService = manager.createName(
+ serverPrincipal, GSSName.NT_USER_NAME);
+ Oid oid = new Oid(AppUtil.JGSS_KERBEROS_OID);
+ GSSCredential credentials = manager.createCredential(gssService,
+ GSSCredential.DEFAULT_LIFETIME, oid, GSSCredential.ACCEPT_ONLY);
+ this.context = manager.createContext(credentials);
+ }
+
+ protected void usage(String[] args) {
+ if (args.length < 1) {
+ System.err.println("Usage: AppServer <ListenPort> <server-principal>");
+ System.exit(-1);
+ }
+ }
+
+ @Override
+ protected void onConnection(Transport.Connection conn) throws Exception {
+ byte[] token;
+
+ System.out.print("Starting negotiating security context");
+ while (!context.isEstablished()) {
+ token = conn.recvToken();
+ token = context.acceptSecContext(token, 0, token.length);
+ if (token != null) {
+ conn.sendToken(token);
+ }
+ }
+
+ System.out.print("Context Established! ");
+ System.out.println("Client is " + context.getSrcName());
+ System.out.println("Server is " + context.getTargName());
+
+ doWith(context, conn);
+
+ context.dispose();
+ }
+
+ protected void doWith(GSSContext context,
+ Transport.Connection conn) throws Exception {
+ if (context.getMutualAuthState())
+ System.out.println("Mutual authentication took place!");
+
+ MessageProp prop = new MessageProp(0, false);
+ byte[] token = conn.recvToken();
+ byte[] bytes = context.unwrap(token, 0, token.length, prop);
+ String str = new String(bytes);
+ System.out.println("Received data \""
+ + str + "\" of length " + str.length());
+
+ System.out.println("Confidentiality applied: "
+ + prop.getPrivacy());
+
+ prop.setQOP(0);
+ token = context.getMIC(bytes, 0, bytes.length, prop);
+ System.out.println("Will send MIC token of size "
+ + token.length);
+ conn.sendToken(token);
+ }
+
+ public static void main(String[] args) throws Exception {
+ new GssAppServer(args).run();
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/AppTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/AppTest.java b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/AppTest.java
new file mode 100644
index 0000000..16e8fd2
--- /dev/null
+++ b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/AppTest.java
@@ -0,0 +1,89 @@
+/**
+ * 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.kerb.integration.test;
+
+import org.apache.kerby.kerberos.kerb.server.LoginTestBase;
+import org.apache.kerby.util.NetworkUtil;
+import org.junit.Assert;
+import org.junit.Before;
+
+import javax.security.auth.Subject;
+import java.security.PrivilegedAction;
+
+public abstract class AppTest extends LoginTestBase {
+ private int serverPort;
+ protected AppClient appClient;
+ protected AppServer appServer;
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+
+ serverPort = NetworkUtil.getServerPort();
+
+ setupAppServer();
+
+ runAppClient();
+ }
+
+ protected int getServerPort() {
+ return serverPort;
+ }
+
+ protected void setupAppServer() throws Exception {
+ Subject subject = loginServiceUsingKeytab();
+ Subject.doAs(subject, new PrivilegedAction<Object>() {
+ @Override
+ public Object run() {
+ try {
+ appServer = createAppServer();
+ appServer.start();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+ });
+ }
+
+ protected abstract AppServer createAppServer() throws Exception;
+
+ protected void runAppClient() throws Exception {
+ Subject subject = loginClientUsingTicketCache();
+ Subject.doAs(subject, new PrivilegedAction<Object>() {
+ @Override
+ public Object run() {
+ try {
+ appClient = createAppClient();
+ appClient.run();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+ });
+
+ Assert.assertTrue("Client successfully connected and authenticated to server",
+ appClient.isTestOK());
+ }
+
+ protected abstract AppClient createAppClient() throws Exception;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/GssAppTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/GssAppTest.java b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/GssAppTest.java
new file mode 100644
index 0000000..0a045eb
--- /dev/null
+++ b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/GssAppTest.java
@@ -0,0 +1,50 @@
+/**
+ * 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.kerb.integration.test;
+
+import org.apache.kerby.kerberos.kerb.integration.test.gss.GssAppClient;
+import org.apache.kerby.kerberos.kerb.integration.test.gss.GssAppServer;
+import org.junit.Test;
+
+public class GssAppTest extends AppTest {
+
+ @Override
+ protected AppServer createAppServer() throws Exception {
+ return new GssAppServer(new String[] {
+ String.valueOf(getServerPort()),
+ getServerPrincipal()
+ });
+ }
+
+ @Override
+ protected AppClient createAppClient() throws Exception {
+ return new GssAppClient(new String[] {
+ getHostname(),
+ String.valueOf(getServerPort()),
+ getClientPrincipal(),
+ getServerPrincipal()
+ });
+ }
+
+ @Test
+ public void test() throws Exception {
+ runAppClient();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java
index 03298c1..5990b1d 100644
--- a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java
+++ b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java
@@ -19,19 +19,12 @@
*/
package org.apache.kerby.kerberos.kerb.server;
-import org.apache.kerby.kerberos.kerb.client.JaasKrbUtil;
import org.ietf.jgss.*;
import org.junit.Assert;
import org.junit.Test;
import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.kerberos.KerberosTicket;
-import java.io.File;
-import java.io.IOException;
import java.security.Principal;
import java.security.PrivilegedExceptionAction;
import java.util.Set;
@@ -44,7 +37,6 @@ public class GssInteropTest extends LoginTestBase {
@Test
public void testGss() throws Exception {
Subject clientSubject = loginClientUsingTicketCache();
-
Set<Principal> clientPrincipals = clientSubject.getPrincipals();
Assert.assertFalse(clientPrincipals.isEmpty());
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java
index cd67926..7c2f564 100644
--- a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java
+++ b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java
@@ -20,7 +20,6 @@
package org.apache.kerby.kerberos.kerb.server;
import org.apache.kerby.kerberos.kerb.client.JaasKrbUtil;
-import org.apache.kerby.kerberos.kerb.server.KdcTestBase;
import org.apache.kerby.kerberos.kerb.spec.ticket.TgtTicket;
import org.junit.After;
import org.junit.Before;