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/05 06:00:25 UTC
[1/2] directory-kerby git commit: DIRKRB-200 Pluggable network
transport for KDC server
Repository: directory-kerby
Updated Branches:
refs/heads/master 8856764c3 -> 2cf323e65
DIRKRB-200 Pluggable network transport for KDC server
Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/e89299f7
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/e89299f7
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/e89299f7
Branch: refs/heads/master
Commit: e89299f7f1d7d844078976c6599ade0da7471ba6
Parents: 6a437e9
Author: Drankye <dr...@gmail.com>
Authored: Sun Apr 5 11:53:50 2015 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Sun Apr 5 11:53:50 2015 +0800
----------------------------------------------------------------------
.../kerby/kerberos/kdc/JsonBackendKdcTest.java | 16 +-
.../apache/kerby/kerberos/kdc/KerbyKdcTest.java | 1 -
.../kerby/kerberos/kdc/WithCertKdcTest.java | 5 +-
.../kerby/kerberos/kdc/WithTokenKdcTest.java | 5 +-
.../kerby/kerberos/kdc/KerbyKdcServer.java | 5 +-
.../kerby/kerberos/kerb/server/KdcTestBase.java | 15 +-
.../kerberos/kerb/server/TestKdcServer.java | 13 +-
.../kerby/kerberos/kerb/server/KdcTest.java | 1 -
.../kerb/server/MultiRequestsKdcTest.java | 1 -
.../kerberos/kerb/server/BackendConfig.java | 33 ++
.../kerby/kerberos/kerb/server/KdcContext.java | 45 +--
.../kerby/kerberos/kerb/server/KdcHandler.java | 155 ----------
.../kerby/kerberos/kerb/server/KdcServer.java | 298 +++++--------------
.../kerberos/kerb/server/KdcServerOption.java | 132 ++++++++
.../kerby/kerberos/kerb/server/KdcSetting.java | 94 ++++++
.../kerberos/kerb/server/SimpleKdcServer.java | 25 --
.../server/impl/AbstractInternalKdcServer.java | 176 +++++++++++
.../kerb/server/impl/InternalKdcServer.java | 59 ++++
.../server/impl/event/EventBasedKdcServer.java | 76 +++++
.../kerb/server/impl/event/KdcHandler.java | 101 +++++++
.../kerb/server/replay/ReplayCheckService.java | 6 +-
.../kerberos/kerb/server/request/AsRequest.java | 2 +-
.../kerb/server/request/KdcRequest.java | 4 +-
.../kerb/server/request/TgsRequest.java | 2 +-
.../kerberos/kerb/server/KdcSimpleTest.java | 90 ------
.../kerberos/kerb/server/SimpleKdcTest.java | 90 ++++++
26 files changed, 882 insertions(+), 568 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/JsonBackendKdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/JsonBackendKdcTest.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/JsonBackendKdcTest.java
index 35b9a11..40fb0f2 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/JsonBackendKdcTest.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/JsonBackendKdcTest.java
@@ -19,10 +19,8 @@
*/
package org.apache.kerby.kerberos.kdc;
-import org.apache.kerby.config.Conf;
-import org.apache.kerby.config.Config;
import org.apache.kerby.kerberos.kdc.identitybackend.JsonIdentityBackend;
-import org.apache.kerby.kerberos.kerb.identity.backend.IdentityBackend;
+import org.apache.kerby.kerberos.kerb.server.BackendConfig;
import org.junit.AfterClass;
import org.junit.Test;
@@ -32,21 +30,19 @@ public class JsonBackendKdcTest extends KerbyKdcTest {
private static File jsonBackendFile;
@Override
- protected void setUpKdcServer() throws Exception {
- super.setUpKdcServer();
+ protected void prepareKdcServer() throws Exception {
+ super.prepareKdcServer();
File testDir = new File(System.getProperty("test.dir", "target"));
jsonBackendFile = new File(testDir, "json-backend-file");
String jsonBackendFileString = jsonBackendFile.getAbsolutePath();
- Config backendConfig = new Conf();
+ BackendConfig backendConfig = new BackendConfig();
backendConfig.setString(
JsonIdentityBackend.JSON_IDENTITY_BACKEND_FILE, jsonBackendFileString);
+ kdcServer.setBackendConfig(backendConfig);
- IdentityBackend backend = new JsonIdentityBackend(backendConfig);
- backend.initialize();
-
- kdcServer.setBackend(backend);
+ kdcServer.init();
}
@Test
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/KerbyKdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/KerbyKdcTest.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/KerbyKdcTest.java
index 0413ac4..5b62724 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/KerbyKdcTest.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/KerbyKdcTest.java
@@ -40,7 +40,6 @@ public abstract class KerbyKdcTest extends KdcTestBase {
protected void performKdcTest() throws Exception {
kdcServer.start();
- assertThat(kdcServer.isStarted()).isTrue();
File testDir = new File(System.getProperty("test.dir", "target"));
File testConfDir = new File(testDir, "conf");
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java
index b211f68..d61428c 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java
@@ -65,8 +65,8 @@ public class WithCertKdcTest extends KdcTestBase {
}
@Override
- protected void setUpKdcServer() throws Exception {
- super.setUpKdcServer();
+ protected void prepareKdcServer() throws Exception {
+ super.prepareKdcServer();
kdcServer.createPrincipals(clientPrincipal);
}
@@ -75,7 +75,6 @@ public class WithCertKdcTest extends KdcTestBase {
assertThat(userCert).isNotNull();
kdcServer.start();
- assertThat(kdcServer.isStarted()).isTrue();
krbClnt.init();
TgtTicket tgt = null;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTest.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTest.java
index 6442323..dce118c 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTest.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTest.java
@@ -81,15 +81,14 @@ public class WithTokenKdcTest extends KdcTestBase {
}
@Override
- protected void setUpKdcServer() throws Exception {
- super.setUpKdcServer();
+ protected void prepareKdcServer() throws Exception {
+ super.prepareKdcServer();
kdcServer.createPrincipals(clientPrincipal);
}
//@Test
public void testKdc() throws Exception {
kdcServer.start();
- assertThat(kdcServer.isStarted()).isTrue();
krbClnt.init();
TgtTicket tgt;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/KerbyKdcServer.java
----------------------------------------------------------------------
diff --git a/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/KerbyKdcServer.java b/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/KerbyKdcServer.java
index f0d014b..13839a9 100644
--- a/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/KerbyKdcServer.java
+++ b/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/KerbyKdcServer.java
@@ -77,6 +77,7 @@ public class KerbyKdcServer extends KdcServer {
}
/**
+ * TODO: THIS IS TO BE MOVED TO KDC-INIT !!
* Verify whether tgt identity has been added.
* If no, add it to identity backend.
*/
@@ -90,7 +91,7 @@ public class KerbyKdcServer extends KdcServer {
private void createPrincipal(String principal, String password) {
KrbIdentity identity = new KrbIdentity(fixPrincipal(principal));
- List<EncryptionType> encTypes = getKdcConfig().getEncryptionTypes();
+ List<EncryptionType> encTypes = getKdcSetting().getKdcConfig().getEncryptionTypes();
List<EncryptionKey> encKeys = null;
try {
encKeys = EncryptionUtil.generateKeys(fixPrincipal(principal), password, encTypes);
@@ -111,7 +112,7 @@ public class KerbyKdcServer extends KdcServer {
private String fixPrincipal(String principal) {
if (! principal.contains("@")) {
- principal += "@" + getKdcRealm();
+ principal += "@" + getKdcSetting().getKdcRealm();
}
return principal;
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcTestBase.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcTestBase.java b/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcTestBase.java
index a4c6235..46a9add 100644
--- a/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcTestBase.java
+++ b/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcTestBase.java
@@ -51,13 +51,17 @@ public abstract class KdcTestBase {
udpPort = getServerPort();
}
- setUpKdcServer();
+ setUpKkdcServer();
+
setUpClient();
createPrincipals();
}
- protected void setUpKdcServer() throws Exception {
- kdcServer = new TestKdcServer();
+ /**
+ * Prepare KDC startup options and config.
+ * @throws Exception
+ */
+ protected void prepareKdcServer() throws Exception {
kdcServer.setKdcHost(hostname);
if (tcpPort > 0) {
kdcServer.setKdcTcpPort(tcpPort);
@@ -66,12 +70,15 @@ public abstract class KdcTestBase {
if (udpPort > 0) {
kdcServer.setKdcUdpPort(udpPort);
}
+ }
+ protected void setUpKkdcServer() throws Exception {
+ kdcServer = new TestKdcServer();
+ prepareKdcServer();
kdcServer.init();
kdcRealm = kdcServer.getKdcRealm();
clientPrincipal = "drankye@" + kdcRealm;
-
serverPrincipal = "test-service/localhost@" + kdcRealm;
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java b/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java
index 1374c97..675be13 100644
--- a/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java
+++ b/kerby-kerb/kerb-kdc-test/src/main/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java
@@ -35,13 +35,13 @@ import java.io.IOException;
import java.util.List;
import java.util.UUID;
-public class TestKdcServer extends SimpleKdcServer {
+public class TestKdcServer extends KdcServer {
/**
* Prepare KDC configuration for the test.
*/
protected void prepareKdcConfig() {
- KdcConfig kdcConfig = getKdcConfig();
+ KdcConfig kdcConfig = getKdcSetting().getKdcConfig();
kdcConfig.setString(KdcConfigKey.KDC_HOST, "localhost");
kdcConfig.setInt(KdcConfigKey.KDC_TCP_PORT, 8018);
@@ -61,12 +61,12 @@ public class TestKdcServer extends SimpleKdcServer {
}
public String getKdcRealm() {
- return getKdcConfig().getKdcRealm();
+ return getKdcSetting().getKdcRealm();
}
public synchronized void createPrincipal(String principal, String password) {
KrbIdentity identity = new KrbIdentity(principal);
- List<EncryptionType> encTypes = getKdcConfig().getEncryptionTypes();
+ List<EncryptionType> encTypes = getKdcSetting().getKdcConfig().getEncryptionTypes();
List<EncryptionKey> encKeys = null;
try {
encKeys = EncryptionUtil.generateKeys(fixPrincipal(principal), password, encTypes);
@@ -77,11 +77,6 @@ public class TestKdcServer extends SimpleKdcServer {
getIdentityService().addIdentity(identity);
}
- public void setBackend(IdentityBackend backend) {
- super.setBackend(backend);
- }
-
-
public void createPrincipals(String ... principals) {
String passwd;
for (String principal : principals) {
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcTest.java b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcTest.java
index 41fdc34..d959c8c 100644
--- a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcTest.java
+++ b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcTest.java
@@ -39,7 +39,6 @@ public abstract class KdcTest extends KdcTestBase {
protected void performKdcTest() throws Exception {
kdcServer.start();
- assertThat(kdcServer.isStarted()).isTrue();
File testDir = new File(System.getProperty("test.dir", "target"));
File testConfDir = new File(testDir, "conf");
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/MultiRequestsKdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/MultiRequestsKdcTest.java b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/MultiRequestsKdcTest.java
index bf1c864..f0af7fd 100644
--- a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/MultiRequestsKdcTest.java
+++ b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/MultiRequestsKdcTest.java
@@ -41,7 +41,6 @@ public class MultiRequestsKdcTest extends KdcTestBase {
@Test
public void multiRequestsTest() throws Exception {
kdcServer.start();
- assertThat(kdcServer.isStarted()).isTrue();
File testDir = new File(System.getProperty("test.dir", "target"));
File testConfDir = new File(testDir, "conf");
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/BackendConfig.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/BackendConfig.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/BackendConfig.java
new file mode 100644
index 0000000..acbee82
--- /dev/null
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/BackendConfig.java
@@ -0,0 +1,33 @@
+/**
+ * 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.server;
+
+import org.apache.kerby.config.Conf;
+import org.apache.kerby.kerberos.kerb.common.KrbConfHelper;
+import org.apache.kerby.kerberos.kerb.spec.base.EncryptionType;
+
+import java.util.List;
+
+/**
+ * Kerb KDC side backend configuration API.
+ */
+public class BackendConfig extends Conf {
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcContext.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcContext.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcContext.java
index bb7b467..a1c68b0 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcContext.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcContext.java
@@ -23,22 +23,23 @@ import org.apache.kerby.kerberos.kerb.identity.IdentityService;
import org.apache.kerby.kerberos.kerb.server.preauth.PreauthHandler;
import org.apache.kerby.kerberos.kerb.server.replay.ReplayCheckService;
-import java.util.List;
-
public class KdcContext {
- private KdcConfig config;
- private List<String> supportedKdcRealms;
- private String kdcRealm;
+ private final KdcSetting kdcSetting;
+
private IdentityService identityService;
private ReplayCheckService replayCache;
private PreauthHandler preauthHandler;
- public void init(KdcConfig config) {
- this.config = config;
+ public KdcContext(KdcSetting kdcSetting) {
+ this.kdcSetting = kdcSetting;
+ }
+
+ public KdcSetting getKdcSetting() {
+ return kdcSetting;
}
public KdcConfig getConfig() {
- return config;
+ return kdcSetting.getKdcConfig();
}
public void setPreauthHandler(PreauthHandler preauthHandler) {
@@ -49,29 +50,6 @@ public class KdcContext {
return this.preauthHandler;
}
- public List<String> getSupportedKdcRealms() {
- return supportedKdcRealms;
- }
-
- public void setSupportedKdcRealms(List<String> supportedKdcRealms) {
- this.supportedKdcRealms = supportedKdcRealms;
- }
-
- public void setKdcRealm(String realm) {
- this.kdcRealm = realm;
- }
-
- public String getServerRealm() {
- return config.getKdcRealm();
- }
-
- public String getKdcRealm() {
- if (kdcRealm != null) {
- return kdcRealm;
- }
- return config.getKdcRealm();
- }
-
public void setReplayCache(ReplayCheckService replayCache) {
this.replayCache = replayCache;
}
@@ -84,8 +62,11 @@ public class KdcContext {
this.identityService = identityService;
}
-
public IdentityService getIdentityService() {
return identityService;
}
+
+ public String getKdcRealm() {
+ return kdcSetting.getKdcRealm();
+ }
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/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
deleted file mode 100644
index 7a0a3d7..0000000
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcHandler.java
+++ /dev/null
@@ -1,155 +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.server;
-
-import org.apache.kerby.kerberos.kerb.common.KrbUtil;
-import org.apache.kerby.kerberos.kerb.identity.IdentityService;
-import org.apache.kerby.kerberos.kerb.server.preauth.PreauthHandler;
-import org.apache.kerby.kerberos.kerb.server.replay.ReplayCheckService;
-import org.apache.kerby.kerberos.kerb.server.request.AsRequest;
-import org.apache.kerby.kerberos.kerb.server.request.KdcRequest;
-import org.apache.kerby.kerberos.kerb.server.request.TgsRequest;
-import org.apache.kerby.kerberos.kerb.KrbException;
-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.AsReq;
-import org.apache.kerby.kerberos.kerb.spec.kdc.KdcReq;
-import org.apache.kerby.kerberos.kerb.spec.kdc.TgsReq;
-import org.apache.kerby.transport.MessageHandler;
-import org.apache.kerby.transport.Transport;
-import org.apache.kerby.transport.event.MessageEvent;
-import org.apache.kerby.transport.tcp.TcpTransport;
-
-import java.net.InetSocketAddress;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class KdcHandler extends MessageHandler {
-
- private List<String> kdcRealms = new ArrayList<String>(1);
- private Map<String, KdcContext> kdcContexts;
-
- private KdcConfig kdcConfig;
- private PreauthHandler preauthHandler;
-
- // TODO: per realm for below
- private IdentityService identityService;
- private ReplayCheckService replayCheckService;
-
- /**
- * Should be called when all the necessary properties are set
- */
- public void init() {
- loadKdcRealms();
-
- preauthHandler = new PreauthHandler();
- preauthHandler.init(kdcConfig);
-
- kdcContexts = new HashMap<String, KdcContext>(1);
- for (String realm : kdcRealms) {
- initRealmContext(realm);
- }
- }
-
- private void initRealmContext(String kdcRealm) {
- KdcContext kdcContext = new KdcContext();
- kdcContext.init(kdcConfig);
- kdcContext.setKdcRealm(kdcRealm);
- kdcContext.setPreauthHandler(preauthHandler);
- kdcContext.setIdentityService(identityService);
- kdcContext.setReplayCache(replayCheckService);
-
- kdcContexts.put(kdcRealm, kdcContext);
- }
-
- public void setKdcRealm(String realm) {
- this.kdcRealms.add(realm);
- }
-
- public void setConfig(KdcConfig config) {
- this.kdcConfig = config;
- }
-
- public void setIdentityService(IdentityService identityService) {
- this.identityService = identityService;
- }
-
- @Override
- protected void handleMessage(MessageEvent event) throws Exception {
- ByteBuffer message = event.getMessage();
- Transport transport = event.getTransport();
-
- KrbMessage krbRequest = KrbUtil.decodeMessageOld(message);
- KdcRequest kdcRequest = null;
-
- KrbMessageType messageType = krbRequest.getMsgType();
- if (messageType == KrbMessageType.TGS_REQ || messageType
- == KrbMessageType.AS_REQ) {
- KdcReq kdcReq = (KdcReq) krbRequest;
- String realm = getRequestRealm(kdcReq);
- if (realm == null || !kdcContexts.containsKey(realm)) {
- throw new KrbException("Invalid realm from kdc request: " + realm);
- }
-
- KdcContext kdcContext = kdcContexts.get(realm);
- if (messageType == KrbMessageType.TGS_REQ) {
- kdcRequest = new TgsRequest((TgsReq) kdcReq, kdcContext);
- } else if (messageType == KrbMessageType.AS_REQ) {
- kdcRequest = new AsRequest((AsReq) kdcReq, kdcContext);
- }
- }
-
- InetSocketAddress clientAddress = transport.getRemoteAddress();
- kdcRequest.setClientAddress(clientAddress.getAddress());
- boolean isTcp = (transport instanceof TcpTransport);
- kdcRequest.isTcp(isTcp);
-
- try {
- kdcRequest.process();
-
- KrbMessage krbResponse = kdcRequest.getReply();
- KrbUtil.sendMessageOld(krbResponse, transport);
- } catch (Exception e) {
- //TODO: log the error
- System.out.println("Error occured while processing request:"
- + e.getMessage());
- }
- }
-
- private void loadKdcRealms() {
- if (kdcRealms.isEmpty()) {
- kdcRealms.add(kdcConfig.getKdcRealm());
- }
- }
-
- private String getRequestRealm(KdcReq kdcReq) {
- String realm = kdcReq.getReqBody().getRealm();
- if (realm == null && kdcReq.getReqBody().getCname() != null) {
- realm = kdcReq.getReqBody().getCname().getRealm();
- }
- if (realm == null || realm.isEmpty()) {
- realm = "NULL-KDC-REALM";
- }
- return realm;
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServer.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServer.java
index c29a22b..bf98f03 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServer.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServer.java
@@ -19,181 +19,75 @@
*/
package org.apache.kerby.kerberos.kerb.server;
-import org.apache.kerby.config.Conf;
-import org.apache.kerby.config.Config;
-import org.apache.kerby.event.EventHub;
-import org.apache.kerby.kerberos.kerb.common.KrbStreamingDecoder;
+import org.apache.kerby.KOptions;
import org.apache.kerby.kerberos.kerb.identity.IdentityService;
-import org.apache.kerby.kerberos.kerb.identity.backend.IdentityBackend;
-import org.apache.kerby.kerberos.kerb.identity.backend.MemoryIdentityBackend;
-import org.apache.kerby.transport.Network;
+import org.apache.kerby.kerberos.kerb.server.impl.InternalKdcServer;
+import org.apache.kerby.kerberos.kerb.server.impl.event.EventBasedKdcServer;
import java.io.File;
-import java.io.IOException;
public class KdcServer {
- private String kdcHost;
- private int kdcTcpPort;
- private Boolean allowUdp;
- private int kdcUdpPort;
- private String kdcRealm;
+ private KOptions commonOptions;
+ private InternalKdcServer innerKdc;
- private boolean started;
- private String serviceName;
-
- private KdcHandler kdcHandler;
- private EventHub eventHub;
-
- private KdcConfig kdcConfig;
- private Conf backendConfig;
+ /**
+ * Default constructor.
+ */
+ public KdcServer() {
+ commonOptions = new KOptions();
+ }
- private IdentityBackend backend;
- private File workDir;
- private File confDir;
+ /**
+ * Set KDC config.
+ * @param kdcConfig
+ */
+ public void setKdcConfig(KdcConfig kdcConfig) {
+ commonOptions.add(KdcServerOption.KDC_CONFIG, kdcConfig);
+ }
/**
- * Set runtime folder.
- * @param workDir
+ * Set backend config.
+ * @param backendConfig
*/
- public void setWorkDir(File workDir) {
- this.workDir = workDir;
+ public void setBackendConfig(BackendConfig backendConfig) {
+ commonOptions.add(KdcServerOption.BACKEND_CONFIG, backendConfig);
}
/**
* Set conf dir where configuration resources can be loaded. Mainly:
* kdc.conf, that contains kdc server related items.
* backend.conf, that contains identity backend related items.
+ *
+ * Note confDir is only used when KDC and backend config aren't set.
+ *
* @param confDir
*/
public void setConfDir(File confDir) {
- this.confDir = confDir;
+ commonOptions.add(KdcServerOption.CONF_DIR, confDir);
}
/**
- * Get configuration folder.
- * @return
+ * Set KDC realm for ticket request
+ * @param realm
*/
- public File getConfDir() {
- return confDir;
+ public void setKdcRealm(String realm) {
+ commonOptions.add(KdcServerOption.KDC_REALM, realm);
}
/**
- * Get the backend identity service.
- * @return
+ * Set KDC host.
+ * @param kdcHost
*/
- public IdentityService getIdentityService() {
- return backend;
- }
-
- public void init() {
- try {
- initConfig();
- } catch (IOException e) {
- throw new RuntimeException("Failed to load configurations", e);
- }
-
- initBackend();
+ public void setKdcHost(String kdcHost) {
+ commonOptions.add(KdcServerOption.KDC_HOST, kdcHost);
}
/**
- * Prepare kdc and backend config, loading kdc.conf and backend.conf.
- * It can be override to add more configuration resources.
- *
- * @throws IOException
+ * Set KDC tcp port.
+ * @param kdcTcpPort
*/
- protected void initConfig() throws IOException {
- kdcConfig = new KdcConfig();
- backendConfig = new Conf();
-
- if (confDir != null && confDir.exists()) {
- File kdcConfFile = new File(confDir, "kdc.conf");
- if (kdcConfFile.exists()) {
- kdcConfig.addIniConfig(kdcConfFile);
- }
-
- File backendConfFile = new File(confDir, "backend.conf");
- if (backendConfFile.exists()) {
- backendConfig.addIniConfig(backendConfFile);
- }
- }
- }
-
- private void initBackend() {
- String backendClassName = backendConfig.getString(
- KdcConfigKey.KDC_IDENTITY_BACKEND);
- if (backendClassName == null) {
- backendClassName = MemoryIdentityBackend.class.getCanonicalName();
- }
-
- Class backendClass = null;
- try {
- backendClass = Class.forName(backendClassName);
- } catch (ClassNotFoundException e) {
- throw new RuntimeException("Failed to load backend class: "
- + backendClassName);
- }
-
- try {
- backend = (IdentityBackend) backendClass.newInstance();
- } catch (InstantiationException e) {
- throw new RuntimeException("Failed to create backend: "
- + backendClassName);
- } catch (IllegalAccessException e) {
- throw new RuntimeException("Failed to create backend: "
- + backendClassName);
- }
-
- backend.setConfig(backendConfig);
- backend.initialize();
- }
-
- public void start() {
- try {
- doStart();
- } catch (Exception e) {
- throw new RuntimeException("Failed to start " + getServiceName(), e);
- }
-
- started = true;
- }
-
- public String getKdcRealm() {
- if (kdcRealm != null) {
- return kdcRealm;
- }
- return kdcConfig.getKdcRealm();
- }
-
- private String getKdcHost() {
- if (kdcHost != null) {
- return kdcHost;
- }
- return kdcConfig.getKdcHost();
- }
-
- private int getKdcTcpPort() {
- if (kdcTcpPort > 0) {
- return kdcTcpPort;
- }
- return kdcConfig.getKdcTcpPort();
- }
-
- private boolean allowUdp() {
- if (allowUdp != null) {
- return allowUdp;
- }
- return kdcConfig.allowKdcUdp();
- }
-
- private int getKdcUdpPort() {
- if (kdcUdpPort > 0) {
- return kdcUdpPort;
- }
- return kdcConfig.getKdcUdpPort();
- }
-
- public void setKdcHost(String kdcHost) {
- this.kdcHost = kdcHost;
+ public void setKdcTcpPort(int kdcTcpPort) {
+ commonOptions.add(KdcServerOption.KDC_TCP_PORT, kdcTcpPort);
}
/**
@@ -201,15 +95,7 @@ public class KdcServer {
* @param allowUdp
*/
public void setAllowUdp(boolean allowUdp) {
- this.allowUdp = allowUdp;
- }
-
- /**
- * Set KDC tcp port.
- * @param kdcTcpPort
- */
- public void setKdcTcpPort(int kdcTcpPort) {
- this.kdcTcpPort = kdcTcpPort;
+ commonOptions.add(KdcServerOption.ALLOW_UDP, allowUdp);
}
/**
@@ -217,99 +103,61 @@ public class KdcServer {
* @param kdcUdpPort
*/
public void setKdcUdpPort(int kdcUdpPort) {
- this.kdcUdpPort = kdcUdpPort;
+ commonOptions.add(KdcServerOption.KDC_UDP_PORT, kdcUdpPort);
}
/**
- * Set KDC realm.
- * @param realm
+ * Use event model. By default blocking model is used.
*/
- public void setKdcRealm(String realm) {
- this.kdcRealm = realm;
- }
-
- public boolean enableDebug() {
- return kdcConfig.enableDebug();
- }
-
- protected void doStart() throws Exception {
- backend.start();
-
- prepareHandler();
-
- this.eventHub = new EventHub();
-
- eventHub.register(kdcHandler);
-
- Network network = new Network();
- network.setStreamingDecoder(new KrbStreamingDecoder());
- eventHub.register(network);
-
- eventHub.start();
- network.tcpListen(getKdcHost(), getKdcTcpPort());
- if (allowUdp()) {
- network.udpListen(getKdcHost(), getKdcUdpPort());
- }
+ public void useEventModel() {
+ commonOptions.add(KdcServerOption.USE_EVENT_MODEL);
}
- private void prepareHandler() {
- this.kdcHandler = new KdcHandler();
- kdcHandler.setConfig(kdcConfig);
- kdcHandler.setIdentityService(backend);
- if (kdcRealm != null) {
- kdcHandler.setKdcRealm(kdcRealm);
- }
- kdcHandler.init();
- }
-
- public void stop() {
- try {
- doStop();
- } catch (Exception e) {
- throw new RuntimeException("Failed to stop " + getServiceName());
- }
-
- started = false;
+ /**
+ * Set runtime folder.
+ * @param workDir
+ */
+ public void setWorkDir(File workDir) {
+ commonOptions.add(KdcServerOption.USE_EVENT_MODEL);
}
- protected void doStop() throws Exception {
- backend.stop();
-
- eventHub.stop();
+ public void enableDebug() {
+ commonOptions.add(KdcServerOption.USE_EVENT_MODEL);
}
/**
- * Get the KDC config.
- * @return
+ * Get KDC setting.
+ * @return setting
*/
- protected KdcConfig getKdcConfig() {
- return kdcConfig;
+ public KdcSetting getKdcSetting() {
+ return innerKdc.getKdcSetting();
}
/**
- * Get backend config.
- * @return
+ * Get identity service.
+ * @return IdentityService
*/
- protected Config getBackendConfig() {
- return backendConfig;
- }
-
- public boolean isStarted() {
- return started;
+ public IdentityService getIdentityService() {
+ return innerKdc.getIdentityService();
}
- protected void setServiceName(String name) {
- this.serviceName = name;
+ /**
+ * Init the KDC server.
+ */
+ public void init() {
+ if (commonOptions.contains(KdcServerOption.USE_EVENT_MODEL)) {
+ innerKdc = new EventBasedKdcServer();
+ } else {
+ innerKdc = new EventBasedKdcServer(); //TODO
+ }
+ innerKdc.init(commonOptions);
}
- protected String getServiceName() {
- if (serviceName != null) {
- return serviceName;
- }
- return kdcConfig.getKdcServiceName();
+ public void start() {
+ innerKdc.start();
}
- protected void setBackend(IdentityBackend backend) {
- this.backend = backend;
+ public void stop() {
+ innerKdc.stop();
}
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java
new file mode 100644
index 0000000..652bae1
--- /dev/null
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java
@@ -0,0 +1,132 @@
+/**
+ * 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.server;
+
+import org.apache.kerby.KOption;
+import org.apache.kerby.KOptionType;
+
+/**
+ * KDC server startup options
+ */
+public enum KdcServerOption implements KOption {
+ NONE("NONE"),
+ USE_EVENT_MODEL("use event model", KOptionType.NOV),
+ KDC_CONFIG("kdc config", KOptionType.OBJ),
+ BACKEND_CONFIG("backend config", KOptionType.OBJ),
+ CONF_DIR("conf dir", KOptionType.DIR),
+ KDC_REALM("kdc realm", KOptionType.STR),
+ KDC_HOST("kdc host", KOptionType.STR),
+ KDC_TCP_PORT("kdc tcp port", KOptionType.INT),
+ ALLOW_UDP("allow udp", KOptionType.BOOL),
+ KDC_UDP_PORT("kdc udp port", KOptionType.INT),
+ ;
+
+ private String name;
+ private KOptionType type;
+ private String description;
+ private Object value;
+
+ KdcServerOption(String description) {
+ this(description, KOptionType.NOV); // As a flag by default
+ }
+
+ KdcServerOption(String description, KOptionType type) {
+ this.description = description;
+ this.type = type;
+ }
+
+ KdcServerOption(String name, String description) {
+ this(name, description, KOptionType.NOV); // As a flag by default
+ }
+
+ KdcServerOption(String name, String description, KOptionType type) {
+ this.name = name;
+ this.description = description;
+ this.type = type;
+ }
+
+ @Override
+ public String getOptionName() {
+ return name();
+ }
+
+ public void setType(KOptionType type) {
+ this.type = type;
+ }
+
+ public KOptionType getType() {
+ return this.type;
+ }
+
+ @Override
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String getName() {
+ if (name != null) {
+ return name;
+ }
+ return name();
+ }
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
+ @Override
+ public Object getValue() {
+ return value;
+ }
+
+ public static KdcServerOption fromName(String name) {
+ if (name != null) {
+ for (KdcServerOption ko : values()) {
+ if (ko.getName().equals(name)) {
+ return (KdcServerOption) ko;
+ }
+ }
+ }
+ return NONE;
+ }
+
+ public static KdcServerOption fromOptionName(String optionName) {
+ if (optionName != null) {
+ for (KdcServerOption ko : values()) {
+ if (ko.getOptionName().equals(optionName)) {
+ return (KdcServerOption) ko;
+ }
+ }
+ }
+ return NONE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcSetting.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcSetting.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcSetting.java
new file mode 100644
index 0000000..b32119e
--- /dev/null
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcSetting.java
@@ -0,0 +1,94 @@
+/**
+ * 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.server;
+
+import org.apache.kerby.KOptions;
+
+import java.io.File;
+
+/**
+ * KDC setting that combines startup options and kdc config.
+ */
+public class KdcSetting {
+ private final KOptions startupOptions;
+ private final KdcConfig kdcConfig;
+
+ public KdcSetting(KOptions startupOptions, KdcConfig config) {
+ this.startupOptions = startupOptions;
+ this.kdcConfig = config;
+ }
+
+ /**
+ * Get the KDC config.
+ * @return
+ */
+ public KdcConfig getKdcConfig() {
+ return kdcConfig;
+ }
+
+ public File getConfDir() {
+ return startupOptions.getDirOption(KdcServerOption.CONF_DIR);
+ }
+
+ public String getKdcHost() {
+ String kdcHost = startupOptions.getStringOption(
+ KdcServerOption.KDC_HOST);
+ if (kdcHost == null) {
+ kdcHost = kdcConfig.getKdcHost();
+ }
+ return kdcHost;
+ }
+
+ public int getKdcTcpPort() {
+ int tcpPort = startupOptions.getIntegerOption(KdcServerOption.KDC_TCP_PORT);
+ if (tcpPort < 1) {
+ tcpPort = kdcConfig.getKdcTcpPort();
+ }
+ return tcpPort;
+ }
+
+ public boolean allowUdp() {
+ Boolean allowUdp = startupOptions.getBooleanOption(KdcServerOption.ALLOW_UDP);
+ if (allowUdp == null) {
+ allowUdp = kdcConfig.allowKdcUdp();
+ }
+ return allowUdp;
+ }
+
+ public int getKdcUdpPort() {
+ int udpPort = startupOptions.getIntegerOption(KdcServerOption.KDC_UDP_PORT);
+ if (udpPort < 1) {
+ udpPort = kdcConfig.getKdcUdpPort();
+ }
+ return udpPort;
+ }
+
+ /**
+ * Get KDC realm.
+ * @return KDC realm
+ */
+ public String getKdcRealm() {
+ String kdcRealm = startupOptions.getStringOption(KdcServerOption.KDC_REALM);
+ if (kdcRealm == null || kdcRealm.isEmpty()) {
+ kdcRealm = kdcConfig.getKdcRealm();
+ }
+ return kdcRealm;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcServer.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcServer.java
deleted file mode 100644
index 6874be8..0000000
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcServer.java
+++ /dev/null
@@ -1,25 +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.server;
-
-public class SimpleKdcServer extends KdcServer {
-
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/AbstractInternalKdcServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/AbstractInternalKdcServer.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/AbstractInternalKdcServer.java
new file mode 100644
index 0000000..53a285a
--- /dev/null
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/AbstractInternalKdcServer.java
@@ -0,0 +1,176 @@
+/**
+ * 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.server.impl;
+
+import org.apache.kerby.KOptions;
+import org.apache.kerby.config.Conf;
+import org.apache.kerby.kerberos.kerb.identity.IdentityService;
+import org.apache.kerby.kerberos.kerb.identity.backend.IdentityBackend;
+import org.apache.kerby.kerberos.kerb.identity.backend.MemoryIdentityBackend;
+import org.apache.kerby.kerberos.kerb.server.*;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Abstract KDC server implementation.
+ */
+public class AbstractInternalKdcServer implements InternalKdcServer {
+
+ private boolean started;
+
+ private KdcConfig kdcConfig;
+ private Conf backendConfig;
+ private KdcSetting kdcSetting;
+ private IdentityBackend backend;
+
+ @Override
+ public KdcSetting getKdcSetting() {
+ return kdcSetting;
+ }
+
+ public boolean isStarted() {
+ return started;
+ }
+
+ protected String getServiceName() {
+ return kdcConfig.getKdcServiceName();
+ }
+
+ protected IdentityBackend getBackend() {
+ return backend;
+ }
+
+ @Override
+ public void init(KOptions startupOptions) {
+ try {
+ initConfig(startupOptions);
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to load configurations", e);
+ }
+
+ this.kdcSetting = new KdcSetting(startupOptions, kdcConfig);
+
+ initBackend();
+ }
+
+ /**
+ * Prepare kdc and backend config, loading kdc.conf and backend.conf.
+ * It can be override to add more configuration resources.
+ *
+ * @throws java.io.IOException
+ */
+ private void initConfig(KOptions startupOptions) throws IOException {
+ if (startupOptions.contains(KdcServerOption.KDC_CONFIG)) {
+ this.kdcConfig = (KdcConfig) startupOptions.getOptionValue(
+ KdcServerOption.KDC_CONFIG);
+ } else {
+ this.kdcConfig = new KdcConfig();
+ File confDir = startupOptions.getDirOption(KdcServerOption.CONF_DIR);
+ if (confDir != null && confDir.exists()) {
+ File kdcConfFile = new File(confDir, "kdc.conf");
+ if (kdcConfFile.exists()) {
+ kdcConfig.addIniConfig(kdcConfFile);
+ }
+ }
+ }
+
+ if (startupOptions.contains(KdcServerOption.BACKEND_CONFIG)) {
+ this.backendConfig = (BackendConfig) startupOptions.getOptionValue(
+ KdcServerOption.BACKEND_CONFIG);
+ } else {
+ backendConfig = new BackendConfig();
+ File confDir = startupOptions.getDirOption(KdcServerOption.CONF_DIR);
+ if (confDir != null && confDir.exists()) {
+ File backendConfFile = new File(confDir, "backend.conf");
+ if (backendConfFile.exists()) {
+ backendConfig.addIniConfig(backendConfFile);
+ }
+ }
+ }
+ }
+
+ private void initBackend() {
+ String backendClassName = backendConfig.getString(
+ KdcConfigKey.KDC_IDENTITY_BACKEND);
+ if (backendClassName == null) {
+ backendClassName = MemoryIdentityBackend.class.getCanonicalName();
+ }
+
+ Class backendClass = null;
+ try {
+ backendClass = Class.forName(backendClassName);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("Failed to load backend class: "
+ + backendClassName);
+ }
+
+ try {
+ backend = (IdentityBackend) backendClass.newInstance();
+ } catch (InstantiationException e) {
+ throw new RuntimeException("Failed to create backend: "
+ + backendClassName);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException("Failed to create backend: "
+ + backendClassName);
+ }
+
+ backend.setConfig(backendConfig);
+ backend.initialize();
+ }
+
+ @Override
+ public void start() {
+ try {
+ doStart();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to start " + getServiceName(), e);
+ }
+
+ started = true;
+ }
+
+ public boolean enableDebug() {
+ return kdcConfig.enableDebug();
+ }
+
+ @Override
+ public IdentityService getIdentityService() {
+ return backend;
+ }
+
+ protected void doStart() throws Exception {
+ backend.start();
+ }
+
+ public void stop() {
+ try {
+ doStop();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to stop " + getServiceName());
+ }
+
+ started = false;
+ }
+
+ protected void doStop() throws Exception {
+ backend.stop();
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/InternalKdcServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/InternalKdcServer.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/InternalKdcServer.java
new file mode 100644
index 0000000..349d8c2
--- /dev/null
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/InternalKdcServer.java
@@ -0,0 +1,59 @@
+/**
+ * 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.server.impl;
+
+import org.apache.kerby.KOptions;
+import org.apache.kerby.kerberos.kerb.identity.IdentityService;
+import org.apache.kerby.kerberos.kerb.server.KdcContext;
+import org.apache.kerby.kerberos.kerb.server.KdcSetting;
+
+/**
+ * An internal KDC server interface.
+ */
+public interface InternalKdcServer {
+
+ /**
+ * Initialize with KDC startup options.
+ * @param options
+ */
+ public void init(KOptions options);
+
+ /**
+ * Start the KDC server.
+ */
+ public void start();
+
+ /**
+ * Stop the KDC server.
+ */
+ public void stop();
+
+ /**
+ * Get KDC setting.
+ * @return setting
+ */
+ public KdcSetting getKdcSetting();
+
+ /**
+ * Get identity service.
+ * @return IdentityService
+ */
+ public IdentityService getIdentityService();
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/event/EventBasedKdcServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/event/EventBasedKdcServer.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/event/EventBasedKdcServer.java
new file mode 100644
index 0000000..8b50b73
--- /dev/null
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/event/EventBasedKdcServer.java
@@ -0,0 +1,76 @@
+/**
+ * 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.server.impl.event;
+
+import org.apache.kerby.event.EventHub;
+import org.apache.kerby.kerberos.kerb.common.KrbStreamingDecoder;
+import org.apache.kerby.kerberos.kerb.server.KdcContext;
+import org.apache.kerby.kerberos.kerb.server.impl.AbstractInternalKdcServer;
+import org.apache.kerby.kerberos.kerb.server.preauth.PreauthHandler;
+import org.apache.kerby.transport.Network;
+
+/**
+ * Event based KDC server.
+ */
+public class EventBasedKdcServer extends AbstractInternalKdcServer {
+
+ private KdcHandler kdcHandler;
+ private EventHub eventHub;
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+
+ prepareHandler();
+
+ this.eventHub = new EventHub();
+
+ eventHub.register(kdcHandler);
+
+ Network network = new Network();
+ network.setStreamingDecoder(new KrbStreamingDecoder());
+ eventHub.register(network);
+
+ eventHub.start();
+ network.tcpListen(getKdcSetting().getKdcHost(),
+ getKdcSetting().getKdcTcpPort());
+ if (getKdcSetting().allowUdp()) {
+ network.udpListen(getKdcSetting().getKdcHost(),
+ getKdcSetting().getKdcUdpPort());
+ }
+ }
+
+ private void prepareHandler() {
+ KdcContext kdcContext = new KdcContext(getKdcSetting());
+ kdcContext.setIdentityService(getBackend());
+ PreauthHandler preauthHandler = new PreauthHandler();
+ preauthHandler.init(kdcContext.getConfig());
+ kdcContext.setPreauthHandler(preauthHandler);
+
+ this.kdcHandler = new KdcHandler(kdcContext);
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ super.doStop();
+
+ eventHub.stop();
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/event/KdcHandler.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/event/KdcHandler.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/event/KdcHandler.java
new file mode 100644
index 0000000..b4f6670
--- /dev/null
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/impl/event/KdcHandler.java
@@ -0,0 +1,101 @@
+/**
+ * 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.server.impl.event;
+
+import org.apache.kerby.kerberos.kerb.KrbException;
+import org.apache.kerby.kerberos.kerb.common.KrbUtil;
+import org.apache.kerby.kerberos.kerb.server.KdcContext;
+import org.apache.kerby.kerberos.kerb.server.request.AsRequest;
+import org.apache.kerby.kerberos.kerb.server.request.KdcRequest;
+import org.apache.kerby.kerberos.kerb.server.request.TgsRequest;
+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.AsReq;
+import org.apache.kerby.kerberos.kerb.spec.kdc.KdcReq;
+import org.apache.kerby.kerberos.kerb.spec.kdc.TgsReq;
+import org.apache.kerby.transport.MessageHandler;
+import org.apache.kerby.transport.Transport;
+import org.apache.kerby.transport.event.MessageEvent;
+import org.apache.kerby.transport.tcp.TcpTransport;
+
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+
+/**
+ * KDC handler to process client requests. Currently only one realm is supported.
+ */
+public class KdcHandler extends MessageHandler {
+
+ private final KdcContext kdcContext;
+
+ public KdcHandler(KdcContext kdcContext) {
+ this.kdcContext = kdcContext;
+ }
+
+ @Override
+ protected void handleMessage(MessageEvent event) throws Exception {
+ ByteBuffer message = event.getMessage();
+ Transport transport = event.getTransport();
+
+ KrbMessage krbRequest = KrbUtil.decodeMessageOld(message);
+ KdcRequest kdcRequest = null;
+
+ KrbMessageType messageType = krbRequest.getMsgType();
+ if (messageType == KrbMessageType.TGS_REQ || messageType
+ == KrbMessageType.AS_REQ) {
+ KdcReq kdcReq = (KdcReq) krbRequest;
+ String realm = getRequestRealm(kdcReq);
+ if (realm == null || ! kdcContext.getKdcRealm().equals(realm)) {
+ throw new KrbException("Invalid realm from kdc request: " + realm);
+ }
+
+ if (messageType == KrbMessageType.TGS_REQ) {
+ kdcRequest = new TgsRequest((TgsReq) kdcReq, kdcContext);
+ } else if (messageType == KrbMessageType.AS_REQ) {
+ kdcRequest = new AsRequest((AsReq) kdcReq, kdcContext);
+ }
+ }
+
+ InetSocketAddress clientAddress = transport.getRemoteAddress();
+ kdcRequest.setClientAddress(clientAddress.getAddress());
+ boolean isTcp = (transport instanceof TcpTransport);
+ kdcRequest.isTcp(isTcp);
+
+ try {
+ kdcRequest.process();
+
+ KrbMessage krbResponse = kdcRequest.getReply();
+ KrbUtil.sendMessageOld(krbResponse, transport);
+ } catch (Exception e) {
+ //TODO: log the error
+ System.out.println("Error occured while processing request:"
+ + e.getMessage());
+ }
+ }
+
+ private String getRequestRealm(KdcReq kdcReq) {
+ String realm = kdcReq.getReqBody().getRealm();
+ if (realm == null && kdcReq.getReqBody().getCname() != null) {
+ realm = kdcReq.getReqBody().getCname().getRealm();
+ }
+
+ return realm;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/ReplayCheckService.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/ReplayCheckService.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/ReplayCheckService.java
index 485621f..b4017e8 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/ReplayCheckService.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/ReplayCheckService.java
@@ -19,7 +19,7 @@
*/
package org.apache.kerby.kerberos.kerb.server.replay;
-public interface ReplayCheckService
-{
- boolean checkReplay(String clientPrincipal, String serverPrincipal, long requestTime, int microseconds);
+public interface ReplayCheckService {
+ boolean checkReplay(String clientPrincipal, String serverPrincipal,
+ long requestTime, int microseconds);
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/AsRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/AsRequest.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/AsRequest.java
index 23d6196..85cf9fe 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/AsRequest.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/AsRequest.java
@@ -41,7 +41,7 @@ public class AsRequest extends KdcRequest {
AsRep reply = new AsRep();
reply.setCname(getClientEntry().getPrincipal());
- reply.setCrealm(kdcContext.getServerRealm());
+ reply.setCrealm(kdcContext.getKdcRealm());
reply.setTicket(ticket);
EncKdcRepPart encKdcRepPart = makeEncKdcRepPart();
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/KdcRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/KdcRequest.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/KdcRequest.java
index ca4767e..99b742a 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/KdcRequest.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/KdcRequest.java
@@ -232,7 +232,7 @@ public abstract class KdcRequest {
PrincipalName clientPrincipal = request.getReqBody().getCname();
String clientRealm = request.getReqBody().getRealm();
if (clientRealm == null || clientRealm.isEmpty()) {
- clientRealm = kdcContext.getServerRealm();
+ clientRealm = kdcContext.getKdcRealm();
}
clientPrincipal.setRealm(clientRealm);
@@ -434,7 +434,7 @@ public abstract class KdcRequest {
PrincipalName principal = request.getReqBody().getSname();
String serverRealm = request.getReqBody().getRealm();
if (serverRealm == null || serverRealm.isEmpty()) {
- serverRealm = kdcContext.getServerRealm();
+ serverRealm = kdcContext.getKdcRealm();
}
principal.setRealm(serverRealm);
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/TgsRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/TgsRequest.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/TgsRequest.java
index 2f5327a..76804e5 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/TgsRequest.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/request/TgsRequest.java
@@ -138,7 +138,7 @@ public class TgsRequest extends KdcRequest {
TgsRep reply = new TgsRep();
reply.setCname(getClientEntry().getPrincipal());
- reply.setCrealm(kdcContext.getServerRealm());
+ reply.setCrealm(kdcContext.getKdcRealm());
reply.setTicket(ticket);
EncKdcRepPart encKdcRepPart = makeEncKdcRepPart();
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcSimpleTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcSimpleTest.java b/kerby-kerb/kerb-server/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcSimpleTest.java
deleted file mode 100644
index a20775f..0000000
--- a/kerby-kerb/kerb-server/src/test/java/org/apache/kerby/kerberos/kerb/server/KdcSimpleTest.java
+++ /dev/null
@@ -1,90 +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.server;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.SocketAddress;
-import java.nio.ByteBuffer;
-import java.nio.channels.SocketChannel;
-
-public class KdcSimpleTest {
-
- private String serverHost = "localhost";
- private int serverPort = 0;
-
- private SimpleKdcServer kdcServer;
-
- @Before
- public void setUp() throws Exception {
- kdcServer = new SimpleKdcServer();
- kdcServer.setKdcHost(serverHost);
- serverPort = getServerPort();
- kdcServer.setKdcTcpPort(serverPort);
- kdcServer.init();
- kdcServer.start();
- }
-
- @Test
- public void testKdc() throws IOException, InterruptedException {
- Thread.sleep(15);
-
- SocketChannel socketChannel = SocketChannel.open();
- socketChannel.configureBlocking(true);
- SocketAddress sa = new InetSocketAddress(serverHost, serverPort);
- socketChannel.connect(sa);
-
- String BAD_KRB_MESSAGE = "Hello World!";
- ByteBuffer writeBuffer = ByteBuffer.allocate(4 + BAD_KRB_MESSAGE.getBytes().length);
- writeBuffer.putInt(BAD_KRB_MESSAGE.getBytes().length);
- writeBuffer.put(BAD_KRB_MESSAGE.getBytes());
- writeBuffer.flip();
-
- socketChannel.write(writeBuffer);
- }
-
- /**
- * Get a server socket point for testing usage, either TCP or UDP.
- * @return server socket point
- */
- private static int getServerPort() {
- int serverPort = 0;
-
- try {
- ServerSocket serverSocket = new ServerSocket(0);
- serverPort = serverSocket.getLocalPort();
- serverSocket.close();
- } catch (IOException e) {
- throw new RuntimeException("Failed to get a server socket point");
- }
-
- return serverPort;
- }
-
- @After
- public void tearDown() throws Exception {
- kdcServer.stop();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e89299f7/kerby-kerb/kerb-server/src/test/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/test/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcTest.java b/kerby-kerb/kerb-server/src/test/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcTest.java
new file mode 100644
index 0000000..8861bc5
--- /dev/null
+++ b/kerby-kerb/kerb-server/src/test/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcTest.java
@@ -0,0 +1,90 @@
+/**
+ * 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.server;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.SocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+
+public class SimpleKdcTest {
+
+ private String serverHost = "localhost";
+ private int serverPort = 0;
+
+ private KdcServer kdcServer;
+
+ @Before
+ public void setUp() throws Exception {
+ kdcServer = new KdcServer();
+ kdcServer.setKdcHost(serverHost);
+ serverPort = getServerPort();
+ kdcServer.setKdcTcpPort(serverPort);
+ kdcServer.init();
+ kdcServer.start();
+ }
+
+ @Test
+ public void testKdc() throws IOException, InterruptedException {
+ Thread.sleep(15);
+
+ SocketChannel socketChannel = SocketChannel.open();
+ socketChannel.configureBlocking(true);
+ SocketAddress sa = new InetSocketAddress(serverHost, serverPort);
+ socketChannel.connect(sa);
+
+ String BAD_KRB_MESSAGE = "Hello World!";
+ ByteBuffer writeBuffer = ByteBuffer.allocate(4 + BAD_KRB_MESSAGE.getBytes().length);
+ writeBuffer.putInt(BAD_KRB_MESSAGE.getBytes().length);
+ writeBuffer.put(BAD_KRB_MESSAGE.getBytes());
+ writeBuffer.flip();
+
+ socketChannel.write(writeBuffer);
+ }
+
+ /**
+ * Get a server socket point for testing usage, either TCP or UDP.
+ * @return server socket point
+ */
+ private static int getServerPort() {
+ int serverPort = 0;
+
+ try {
+ ServerSocket serverSocket = new ServerSocket(0);
+ serverPort = serverSocket.getLocalPort();
+ serverSocket.close();
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to get a server socket point");
+ }
+
+ return serverPort;
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ kdcServer.stop();
+ }
+}
\ No newline at end of file
[2/2] 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/2cf323e6
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/2cf323e6
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/2cf323e6
Branch: refs/heads/master
Commit: 2cf323e65b2a10fde785706a0a22040dac4b6872
Parents: e89299f 8856764
Author: Drankye <dr...@gmail.com>
Authored: Sun Apr 5 11:53:58 2015 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Sun Apr 5 11:53:58 2015 +0800
----------------------------------------------------------------------
.../kerby/kerberos/kdc/KerbyKdcServer.java | 2 +-
.../kerby/kerberos/kerb/ccache/ccache.txt | 98 -----------------
.../kerby/kerberos/kerb/keytab/keytab.txt | 106 -------------------
.../kerb-util/src/main/resources/ccache.txt | 98 +++++++++++++++++
.../kerb-util/src/main/resources/keytab.txt | 106 +++++++++++++++++++
.../apache/kerby/kerberos/tool/kinit/Kinit.java | 3 +
.../kerby/kerberos/tool/kinit/KinitOption.java | 1 +
pom.xml | 2 +-
8 files changed, 210 insertions(+), 206 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/2cf323e6/kerby-kdc/src/main/java/org/apache/kerby/kerberos/kdc/KerbyKdcServer.java
----------------------------------------------------------------------