You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pl...@apache.org on 2016/03/11 08:58:54 UTC
directory-kerby git commit: DIRKRB-534 Implementing remote KAdmin and
KPasswd(part1), contributed by Yan.
Repository: directory-kerby
Updated Branches:
refs/heads/kadmin-remote 8188a1277 -> b1f7256c7
DIRKRB-534 Implementing remote KAdmin and KPasswd(part1), contributed by Yan.
Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/b1f7256c
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/b1f7256c
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/b1f7256c
Branch: refs/heads/kadmin-remote
Commit: b1f7256c79a708b074b8c09907aa042ccefd1feb
Parents: 8188a12
Author: plusplusjiajia <ji...@intel.com>
Authored: Fri Mar 11 16:03:32 2016 +0800
Committer: plusplusjiajia <ji...@intel.com>
Committed: Fri Mar 11 16:03:32 2016 +0800
----------------------------------------------------------------------
.../admin/server/kadmin/AdminServerHandler.java | 90 +++++---------------
.../kadmin/impl/DefaultAdminServerHandler.java | 4 +-
.../kerb/admin/admin/AdminServerTest.java | 50 +++++++++++
.../kerberos/kerb/admin/admin/KadminTest.java | 24 ------
.../kerberos/kerb/admin/kadmin/Kadmin.java | 2 +-
.../admin/kadmin/local/LocalKadminImpl.java | 2 +
.../kerb/admin/kadmin/remote/AdminClient.java | 9 ++
.../kerb/admin/kadmin/remote/AdminHandler.java | 45 +++++-----
.../admin/kadmin/remote/RemoteKadminImpl.java | 39 +++++++++
.../impl/AbstractInternalAdminClient.java | 1 +
.../kadmin/remote/impl/DefaultAdminHandler.java | 25 +++---
.../remote/impl/DefaultInternalAdminClient.java | 16 +++-
.../kadmin/remote/impl/InternalAdminClient.java | 2 +
.../admin/kadmin/remote/request/AdRequest.java | 48 +++++++++++
.../kadmin/remote/request/AdminRequest.java | 36 ++++++++
.../kerby/kerberos/kerb/admin/tool/AdRep.java | 31 +++++++
.../kerby/kerberos/kerb/admin/tool/AdReq.java | 31 +++++++
.../kerberos/kerb/admin/tool/AdminMessage.java | 49 +++++++++++
.../kerb/admin/tool/AdminMessageType.java | 62 ++++++++++++++
.../kerberos/kerb/admin/tool/AdminRep.java | 34 ++++++++
.../kerberos/kerb/admin/tool/AdminReq.java | 37 ++++++++
.../kerberos/kerb/admin/tool/KadminCode.java | 60 +++++++++++++
.../kerberos/kerb/admin/admin/KadminTest.java | 24 ------
.../kerberos/kerb/admin/admin/adminTest.java | 50 +++++++++++
24 files changed, 613 insertions(+), 158 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/AdminServerHandler.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/AdminServerHandler.java b/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/AdminServerHandler.java
index 57bb9f0..3592b48 100644
--- a/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/AdminServerHandler.java
+++ b/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/AdminServerHandler.java
@@ -19,10 +19,16 @@
*/
package org.apache.kerby.kerberos.kerb.admin.server.kadmin;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.local.LocalKadmin;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.local.LocalKadminImpl;
+import org.apache.kerby.kerberos.kerb.admin.tool.KadminCode;
import org.apache.kerby.kerberos.kerb.KrbException;
+import org.apache.kerby.kerberos.kerb.admin.tool.AdRep;
+import org.apache.kerby.kerberos.kerb.admin.tool.AdminMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
import java.net.InetAddress;
import java.nio.ByteBuffer;
@@ -51,77 +57,25 @@ public class AdminServerHandler {
* @return The response message
*/
public ByteBuffer handleMessage(ByteBuffer receivedMessage,
- InetAddress remoteAddress) throws KrbException {
- return null;
- /*
- KrbMessage krbRequest;
- KdcRequest kdcRequest = null;
- KrbMessage krbResponse;
+ InetAddress remoteAddress) throws KrbException, IOException {
+ AdminMessage requestMessage = KadminCode.decodeMessage(receivedMessage);
+ System.out.println("receive message type: " + requestMessage.getAdminMessageType());
+ String receiveMsg = new String (requestMessage.getMessageBuffer().array());
+ System.out.println("server handleMessage: " + receiveMsg);
+ String[] principal = receiveMsg.split("@");
+ System.out.println("clientName: " + principal[0]);
+ System.out.println("realm: " + principal[1]);
- ByteBuffer message = receivedMessage.duplicate();
+ /**Add principal to backend here*/
+ //LocalKadmin localKadmin = new LocalKadminImpl(adminServerContext.getAdminServerSetting().getAdminServerConfig(),
+ // adminServerContext.getAdminServerSetting().getBackendConfig());
+ //localKadmin.addPrincipal(principal[0]);
- try {
- krbRequest = KrbCodec.decodeMessage(receivedMessage);
- } catch (IOException e) {
- LOG.error("Krb decoding message failed", e);
- throw new KrbException(KrbErrorCode.KRB_AP_ERR_MSG_TYPE, "Krb decoding message failed");
- }
-
- 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.getAdminRealm().equals(realm)) {
- LOG.error("Invalid realm from kdc request: " + 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);
- } else {
- LOG.error("Invalid message type: " + messageType);
- throw new KrbException(KrbErrorCode.KRB_AP_ERR_MSG_TYPE);
- }
- }
-
- // For checksum
- if (kdcRequest == null) {
- throw new KrbException("Kdc request is null.");
- }
- kdcRequest.setReqPackage(message);
- if (remoteAddress == null) {
- throw new KrbException("Remote address is null, not available.");
- }
- kdcRequest.setClientAddress(remoteAddress);
- kdcRequest.isTcp(isTcp);
-
- try {
- kdcRequest.process();
- krbResponse = kdcRequest.getReply();
- } catch (KrbException e) {
- if (e instanceof KdcRecoverableException) {
- krbResponse = handleRecoverableException(
- (KdcRecoverableException) e, kdcRequest);
- } else {
- throw e;
- }
- }
-
- int bodyLen = krbResponse.encodingLength();
- ByteBuffer responseMessage;
- if (isTcp) {
- responseMessage = ByteBuffer.allocate(bodyLen + 4);
- responseMessage.putInt(bodyLen);
- } else {
- responseMessage = ByteBuffer.allocate(bodyLen);
- }
- KrbCodec.encode(krbResponse, responseMessage);
- responseMessage.flip();
+ String message = "add principal of " + principal[0];
+ AdminMessage replyMeesage = new AdRep(ByteBuffer.wrap(message.getBytes()));
+ ByteBuffer responseMessage = KadminCode.encodeMessage(replyMeesage);
return responseMessage;
- */
+
}
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/impl/DefaultAdminServerHandler.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/impl/DefaultAdminServerHandler.java b/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/impl/DefaultAdminServerHandler.java
index 7f8db73..1e230ce 100644
--- a/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/impl/DefaultAdminServerHandler.java
+++ b/kerby-kerb/kerb-admin-server/src/main/java/org/apache/kerby/kerberos/kerb/admin/server/kadmin/impl/DefaultAdminServerHandler.java
@@ -64,8 +64,8 @@ public class DefaultAdminServerHandler extends AdminServerHandler implements Run
boolean isTcp = transport instanceof KrbTcpTransport;
try {
- ByteBuffer krbResponse = handleMessage(message, clientAddress);
- transport.sendMessage(krbResponse);
+ ByteBuffer adminResponse = handleMessage(message, clientAddress);
+ transport.sendMessage(adminResponse);
} catch (Exception e) {
transport.release();
logger.error("Error occured while processing request:", e);
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin-server/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/AdminServerTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin-server/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/AdminServerTest.java b/kerby-kerb/kerb-admin-server/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/AdminServerTest.java
new file mode 100644
index 0000000..dea13f6
--- /dev/null
+++ b/kerby-kerb/kerb-admin-server/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/AdminServerTest.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.admin.admin;
+
+
+import org.apache.kerby.kerberos.kerb.KrbException;
+import org.apache.kerby.kerberos.kerb.admin.server.kadmin.AdminServer;
+import org.apache.kerby.util.NetworkUtil;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+
+public class AdminServerTest {
+ public static void main(String[] args) throws KrbException {
+ String serverHost = "localhost";
+ AdminServer adminServer;
+
+ adminServer = new AdminServer();
+ adminServer.setAdminHost(serverHost);
+ adminServer.setAllowUdp(false);
+ adminServer.setAllowTcp(true);
+ adminServer.setAdminTcpPort(65417);
+ adminServer.init();
+ adminServer.start();
+ System.out.println("Server started!");
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin-server/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/KadminTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin-server/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/KadminTest.java b/kerby-kerb/kerb-admin-server/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/KadminTest.java
deleted file mode 100644
index fcdaee7..0000000
--- a/kerby-kerb/kerb-admin-server/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/KadminTest.java
+++ /dev/null
@@ -1,24 +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.admin.admin;
-
-public class KadminTest {
-
-}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/Kadmin.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/Kadmin.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/Kadmin.java
index 8f95b37..84d0c76 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/Kadmin.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/Kadmin.java
@@ -48,7 +48,7 @@ public interface Kadmin {
/**
* Add principal to backend.
*
- * @param principal The principal to be added into backend
+ * @par am principal The principal to be added into backend
* @param kOptions The KOptions with principal info
* @throws KrbException e
*/
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java
index 48d0031..1e870f3 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java
@@ -65,6 +65,8 @@ public class LocalKadminImpl implements LocalKadmin {
this.kdcSetting = new KdcSetting(kdcConfig, backendConfig);
}
+ //
+
/**
* Construct with prepared conf dir.
*
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminClient.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminClient.java
index d4cf515..78788b8 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminClient.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminClient.java
@@ -21,8 +21,12 @@ package org.apache.kerby.kerberos.kerb.admin.kadmin.remote;
import org.apache.kerby.KOptions;
import org.apache.kerby.kerberos.kerb.KrbException;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.Kadmin;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl.DefaultAdminHandler;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl.InternalAdminClient;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl.DefaultInternalAdminClient;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdRequest;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdminRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -166,4 +170,9 @@ public class AdminClient {
public AdminConfig getAdminConfig() {
return adminConfig;
}
+
+ public void requestAddPrincial(String principal) throws KrbException {
+ Kadmin remote = new RemoteKadminImpl(innerClient);
+ remote.addPrincipal(principal);
+ }
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminHandler.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminHandler.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminHandler.java
index 38ebe13..faa81e2 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminHandler.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminHandler.java
@@ -19,8 +19,12 @@
*/
package org.apache.kerby.kerberos.kerb.admin.kadmin.remote;
+import org.apache.kerby.kerberos.kerb.admin.tool.KadminCode;
import org.apache.kerby.kerberos.kerb.KrbException;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdminRequest;
+import org.apache.kerby.kerberos.kerb.admin.tool.AdminReq;
+import org.apache.kerby.kerberos.kerb.admin.tool.AdminMessage;
+import org.apache.kerby.kerberos.kerb.admin.tool.AdminMessageType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,26 +47,25 @@ public abstract class AdminHandler {
/**
* Handle the kdc request.
*
- * @param adminRequest The kdc request
+ * @param adminRequest The admin request
* @throws KrbException e
*/
public void handleRequest(AdminRequest adminRequest) throws KrbException {
adminRequest.process();
- /*
- ByteBuffer requestMessage;
-
- requestMessage = ByteBuffer.allocate(bodyLen + 4);
- requestMessage.putInt(bodyLen);
+ AdminReq adminReq = adminRequest.getAdminReq();
+ ByteBuffer requestMessage = KadminCode.encodeMessage(adminReq);
+ requestMessage.flip();
try {
sendMessage(adminRequest, requestMessage);
} catch (IOException e) {
- throw new KrbException("sending message failed", e);
- }*/
+ throw new KrbException("Admin sends request message failed", e);
+ }
+
}
/**
- * Process the response messabe from kdc.
+ * Process the response message from kdc.
*
* @param adminRequest The admin request
* @param responseMessage The message from kdc
@@ -70,28 +73,26 @@ public abstract class AdminHandler {
*/
public void onResponseMessage(AdminRequest adminRequest,
ByteBuffer responseMessage) throws KrbException {
- /*
- KrbMessage kdcRep = null;
+ AdminMessage replyMessage = null;
try {
- kdcRep = KrbCodec.decodeMessage(responseMessage);
+ replyMessage = KadminCode.decodeMessage(responseMessage);
} catch (IOException e) {
- throw new KrbException("Krb decoding message failed", e);
+ throw new KrbException("Kadmin decoding message failed", e);
}
-
- KrbMessageType messageType = kdcRep.getMsgType();
- if (messageType == KrbMessageType.AS_REP) {
-
- kdcRequest.processResponse((KdcRep) kdcRep);
- } else if (messageType == KrbMessageType.TGS_REP) {
- kdcRequest.processResponse((KdcRep) kdcRep);
+ AdminMessageType messageType = replyMessage.getAdminMessageType();
+ if (messageType == AdminMessageType.AD_REP &&
+ adminRequest.getAdminReq().getAdminMessageType() == AdminMessageType.AD_REQ) {
+ String receiveMsg = new String(replyMessage.getMessageBuffer().array());
+ System.out.println("Admin receive message success: " + receiveMsg);
+ } else {
+ throw new RuntimeException("Receive wrong reply");
}
- */
}
/**
* Send message to kdc.
*
- * @param adminRequest The kdc request
+ * @param adminRequest The admin request
* @param requestMessage The request message to kdc
* @throws IOException e
*/
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/RemoteKadminImpl.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/RemoteKadminImpl.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/RemoteKadminImpl.java
index 4245e0d..efccc34 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/RemoteKadminImpl.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/RemoteKadminImpl.java
@@ -22,8 +22,16 @@ package org.apache.kerby.kerberos.kerb.admin.kadmin.remote;
import org.apache.kerby.KOptions;
import org.apache.kerby.kerberos.kerb.KrbException;
import org.apache.kerby.kerberos.kerb.admin.kadmin.Kadmin;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl.DefaultAdminHandler;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl.InternalAdminClient;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdRequest;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdminRequest;
+import org.apache.kerby.kerberos.kerb.transport.KrbNetwork;
+import org.apache.kerby.kerberos.kerb.transport.KrbTransport;
+import org.apache.kerby.kerberos.kerb.transport.TransportPair;
import java.io.File;
+import java.io.IOException;
import java.util.List;
/**
@@ -37,6 +45,31 @@ import java.util.List;
*/
public class RemoteKadminImpl implements Kadmin {
+ private InternalAdminClient innerClient;
+ private KrbTransport transport;
+
+ public RemoteKadminImpl(InternalAdminClient innerClient) throws KrbException {
+ this.innerClient = innerClient;
+ TransportPair tpair = null;
+ try {
+ tpair = AdminUtil.getTransportPair(innerClient.getSetting());
+ } catch (KrbException e) {
+ e.printStackTrace();
+ }
+ KrbNetwork network = new KrbNetwork();
+ network.setSocketTimeout(innerClient.getSetting().getTimeout());
+ try {
+ transport = network.connect(tpair);
+ } catch (IOException e) {
+ throw new KrbException("Failed to create transport", e);
+ }
+ }
+
+ public InternalAdminClient getInnerClient() {
+ return innerClient;
+ }
+
+
@Override
public String getKadminPrincipal() {
return null;
@@ -44,6 +77,12 @@ public class RemoteKadminImpl implements Kadmin {
@Override
public void addPrincipal(String principal) throws KrbException {
+ //generate an admin request
+ AdminRequest adRequest = new AdRequest(principal);
+ adRequest.setTransport(transport);
+ //handle it
+ AdminHandler adminHandler = new DefaultAdminHandler();
+ adminHandler.handleRequest(adRequest);
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/AbstractInternalAdminClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/AbstractInternalAdminClient.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/AbstractInternalAdminClient.java
index 1f1635f..0123488 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/AbstractInternalAdminClient.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/AbstractInternalAdminClient.java
@@ -22,6 +22,7 @@ package org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl;
import org.apache.kerby.kerberos.kerb.KrbException;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminContext;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminSetting;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdminRequest;
/**
* A krb client API for applications to interact with KDC
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultAdminHandler.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultAdminHandler.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultAdminHandler.java
index deaa722..eed8b55 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultAdminHandler.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultAdminHandler.java
@@ -22,6 +22,7 @@ package org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl;
import org.apache.kerby.kerberos.kerb.KrbException;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminHandler;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdminRequest;
+import org.apache.kerby.kerberos.kerb.transport.KrbTransport;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -32,31 +33,27 @@ public class DefaultAdminHandler extends AdminHandler {
* {@inheritDoc}
*/
@Override
- public void handleRequest(AdminRequest kdcRequest) throws KrbException {
- /*
- KrbTransport transport = (KrbTransport) kdcRequest.getSessionData();
- transport.setAttachment(kdcRequest);
+ public void handleRequest(AdminRequest adminRequest) throws KrbException {
+ //
+ super.handleRequest(adminRequest);
- super.handleRequest(kdcRequest);
- ByteBuffer receivedMessage = null;
+ KrbTransport transport = adminRequest.getTransport();
+ ByteBuffer receiveMessage = null;
try {
- receivedMessage = transport.receiveMessage();
+ receiveMessage = transport.receiveMessage();
} catch (IOException e) {
- throw new KrbException("Receiving response message failed", e);
+ throw new KrbException("Admin receives response message failed", e);
}
- super.onResponseMessage(kdcRequest, receivedMessage);
- */
+ super.onResponseMessage(adminRequest, receiveMessage);
}
/**
* {@inheritDoc}
*/
@Override
- protected void sendMessage(AdminRequest kdcRequest,
+ protected void sendMessage(AdminRequest adminRequest,
ByteBuffer requestMessage) throws IOException {
- /*
- KrbTransport transport = (KrbTransport) kdcRequest.getSessionData();
+ KrbTransport transport = adminRequest.getTransport();
transport.sendMessage(requestMessage);
- */
}
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultInternalAdminClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultInternalAdminClient.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultInternalAdminClient.java
index 97e1db4..109570f 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultInternalAdminClient.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultInternalAdminClient.java
@@ -20,8 +20,10 @@
package org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl;
import org.apache.kerby.kerberos.kerb.KrbException;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminHandler;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminSetting;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminUtil;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdminRequest;
import org.apache.kerby.kerberos.kerb.transport.KrbNetwork;
import org.apache.kerby.kerberos.kerb.transport.KrbTransport;
import org.apache.kerby.kerberos.kerb.transport.TransportPair;
@@ -33,13 +35,21 @@ import java.io.IOException;
*/
public class DefaultInternalAdminClient extends AbstractInternalAdminClient {
- private DefaultAdminHandler krbHandler;
+ private DefaultAdminHandler adminHandler;
private KrbTransport transport;
public DefaultInternalAdminClient(AdminSetting krbSetting) {
super(krbSetting);
}
+ public AdminHandler getAdminHanlder() {
+ return adminHandler;
+ }
+
+ public KrbTransport getTransport() {
+ return transport;
+ }
+
/**
* {@inheritDoc}
*/
@@ -47,8 +57,8 @@ public class DefaultInternalAdminClient extends AbstractInternalAdminClient {
public void init() throws KrbException {
super.init();
- this.krbHandler = new DefaultAdminHandler();
- krbHandler.init(getContext());
+ this.adminHandler = new DefaultAdminHandler();
+ adminHandler.init(getContext());
TransportPair tpair = AdminUtil.getTransportPair(getSetting());
KrbNetwork network = new KrbNetwork();
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/InternalAdminClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/InternalAdminClient.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/InternalAdminClient.java
index 47bfd3d..b862703 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/InternalAdminClient.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/InternalAdminClient.java
@@ -21,6 +21,8 @@ package org.apache.kerby.kerberos.kerb.admin.kadmin.remote.impl;
import org.apache.kerby.kerberos.kerb.KrbException;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminSetting;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdminRequest;
+import org.apache.kerby.kerberos.kerb.transport.KrbTransport;
/**
* An internal krb client interface.
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdRequest.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdRequest.java
new file mode 100644
index 0000000..c7ba7f7
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdRequest.java
@@ -0,0 +1,48 @@
+/**
+ * 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.admin.kadmin.remote.request;
+
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminContext;
+import org.apache.kerby.kerberos.kerb.admin.tool.AdReq;
+
+import java.nio.ByteBuffer;
+
+/**
+ * AddPrincipal request
+ */
+public class AdRequest extends AdminRequest {
+
+ public AdRequest(AdminContext context) {
+ super(context);
+ }
+
+ public AdRequest(String principal) {
+ super(principal);
+ }
+
+ @Override
+ public void process() {
+ super.process();
+ AdReq adReq = new AdReq(ByteBuffer.wrap(super.getPrincipal().getBytes()));
+ setAdminReq(adReq);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdminRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdminRequest.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdminRequest.java
index 54968b2..bac47f0 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdminRequest.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdminRequest.java
@@ -20,14 +20,24 @@
package org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request;
import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminContext;
+import org.apache.kerby.kerberos.kerb.transport.KrbTransport;
+import org.apache.kerby.kerberos.kerb.admin.tool.AdminReq;
public class AdminRequest {
+ private String principal;
+ private KrbTransport transport;
+ private AdminReq adminReq;
+
private AdminContext context;
public AdminRequest(AdminContext context) {
this.context = context;
}
+ public AdminRequest(String principal) {
+ this.principal = principal;
+ }
+
public AdminContext getContext() {
return context;
}
@@ -36,7 +46,33 @@ public class AdminRequest {
this.context = context;
}
+ public String getPrincipal() {
+ return principal;
+ }
+
+ public void setPrincipal(String principal) {
+ this.principal = principal;
+ }
+
+ public void setAdminReq(AdminReq adminReq) {
+ this.adminReq = adminReq;
+ }
+
+ public AdminReq getAdminReq() {
+ return adminReq;
+ }
+
public void process() {
+ //
+
+ }
+
+
+ public void setTransport(KrbTransport transport) {
+ this.transport = transport;
+ }
+ public KrbTransport getTransport() {
+ return transport;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdRep.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdRep.java
new file mode 100644
index 0000000..0cd6d60
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdRep.java
@@ -0,0 +1,31 @@
+/**
+ * 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.admin.tool;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Add principal reply, to general admin message
+ */
+public class AdRep extends AdminRep {
+ public AdRep(ByteBuffer messageBuffer) {
+ super(AdminMessageType.AD_REP, messageBuffer);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdReq.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdReq.java
new file mode 100644
index 0000000..37a2d7e
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdReq.java
@@ -0,0 +1,31 @@
+/**
+ * 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.admin.tool;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Add principal request, to general admin message
+ */
+public class AdReq extends AdminReq {
+ public AdReq(ByteBuffer messageBuffer) {
+ super(AdminMessageType.AD_REQ, messageBuffer);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminMessage.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminMessage.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminMessage.java
new file mode 100644
index 0000000..5efe961
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminMessage.java
@@ -0,0 +1,49 @@
+/**
+ * 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.admin.tool;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Deal with messages sent and received between Kadmin and Kadmin Server.
+ */
+public class AdminMessage {
+ private AdminMessageType adminMessageType;
+ private ByteBuffer messageBuffer;
+
+ public AdminMessage(AdminMessageType adminMessageType, ByteBuffer messageBuffer) {
+ this.adminMessageType = adminMessageType;
+ this.messageBuffer = messageBuffer;
+ }
+
+ public AdminMessageType getAdminMessageType() {
+ return adminMessageType;
+ }
+
+ public ByteBuffer getMessageBuffer() {
+ return messageBuffer;
+ }
+
+ public int encodingLength() {
+ return messageBuffer.limit() + 4; // 4 is the length of type
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminMessageType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminMessageType.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminMessageType.java
new file mode 100644
index 0000000..2cd487b
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminMessageType.java
@@ -0,0 +1,62 @@
+/**
+ * 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.admin.tool;
+
+import org.apache.kerby.asn1.EnumType;
+
+/**
+ * Type of Admin Message:
+ * NONE(-1)
+ * AD_REQ(0) add principal request
+ * AD_REP(1) add principal reply
+ */
+
+public enum AdminMessageType implements EnumType {
+ NONE(-1),
+ AD_REQ(0),
+ AD_REP(1);
+
+ private int value;
+
+ AdminMessageType(int value) {
+ this.value = value;
+ }
+
+ @Override
+ public int getValue() {
+ return value;
+ }
+
+ @Override
+ public String getName() {
+ return name();
+ }
+
+ public static AdminMessageType findType(int value) {
+ if (value >= 0) {
+ for (EnumType e : values()) {
+ if (e.getValue() == value) {
+ return (AdminMessageType) e;
+ }
+ }
+ }
+ return NONE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminRep.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminRep.java
new file mode 100644
index 0000000..a4a8735
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminRep.java
@@ -0,0 +1,34 @@
+/**
+ * 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.admin.tool;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Use to construct Admin message.
+ * Probably two kinds of reply.
+ * add principal -- AdRep
+ * change password? -- chRep
+ */
+public class AdminRep extends AdminMessage {
+ public AdminRep(AdminMessageType messageType, ByteBuffer messageBuffer) {
+ super(messageType, messageBuffer);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminReq.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminReq.java
new file mode 100644
index 0000000..297567d
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/AdminReq.java
@@ -0,0 +1,37 @@
+/**
+ * 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.admin.tool;
+
+import java.nio.ByteBuffer;
+
+
+/**
+ * Use to construct Admin message.
+ * Probably two kinds of request.
+ * add principal -- AdReq
+ * change password? -- chReq
+ */
+public class AdminReq extends AdminMessage {
+ public AdminReq(AdminMessageType messageType, ByteBuffer messageBuffer) {
+ super(messageType, messageBuffer);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/KadminCode.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/KadminCode.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/KadminCode.java
new file mode 100644
index 0000000..e99ec88
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/tool/KadminCode.java
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.kerby.kerberos.kerb.admin.tool;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * Used to decode messages between admin and admin server.
+ */
+public class KadminCode {
+ public static ByteBuffer encodeMessage(AdminMessage adminMessage) {
+ int length = adminMessage.encodingLength();
+ ByteBuffer buffer = ByteBuffer.allocate(length + 4); // 4 is the head to go through network
+ buffer.putInt(length); // head in network
+ buffer.putInt(adminMessage.getAdminMessageType().getValue()); // type
+ buffer.put(adminMessage.getMessageBuffer());
+ buffer.flip();
+ return buffer;
+ }
+
+
+ public static AdminMessage decodeMessage(ByteBuffer buffer) throws IOException {
+ //go through network, the total length has been removed.
+ int type = buffer.getInt();
+ System.out.println("type: " + type);
+ AdminMessageType adminMessageType = AdminMessageType.findType(type);
+ AdminMessage adminMessage = null;
+ byte[] bytes = new byte[buffer.remaining()];
+ buffer.get(bytes);
+ if (adminMessageType == AdminMessageType.AD_REQ) {
+ adminMessage = new AdReq(ByteBuffer.wrap(bytes));
+ System.out.println("check if decoding right: " + new String(ByteBuffer.wrap(bytes).array()));
+ } else if (adminMessageType == AdminMessageType.AD_REP) {
+ adminMessage = new AdRep(ByteBuffer.wrap(bytes));
+ System.out.println("check if decoding right2: " + new String(ByteBuffer.wrap(bytes).array()));
+ } else {
+ throw new IOException("Unknown Admin Message Type: " + type);
+ }
+
+ return adminMessage;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/KadminTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/KadminTest.java b/kerby-kerb/kerb-admin/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/KadminTest.java
deleted file mode 100644
index fcdaee7..0000000
--- a/kerby-kerb/kerb-admin/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/KadminTest.java
+++ /dev/null
@@ -1,24 +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.admin.admin;
-
-public class KadminTest {
-
-}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b1f7256c/kerby-kerb/kerb-admin/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/adminTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/adminTest.java b/kerby-kerb/kerb-admin/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/adminTest.java
new file mode 100644
index 0000000..6a5f2f3
--- /dev/null
+++ b/kerby-kerb/kerb-admin/src/test/java/org/apache/kerby/kerberos/kerb/admin/admin/adminTest.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.admin.admin;
+
+import org.apache.kerby.kerberos.kerb.KrbException;
+import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminClient;
+import org.apache.kerby.util.NetworkUtil;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.net.InetSocketAddress;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+
+public class AdminTest {
+ private final String KDC_REALM = "TEST.COM";
+ private final String clientPrincipalName = "alice";
+ private final String clientPrincipal =
+ clientPrincipalName + "@" + KDC_REALM;
+ private AdminClient adminClient;
+
+ @Test
+ public void testAdminClient() throws KrbException {
+ adminClient = new AdminClient();
+ adminClient.setAdminRealm(KDC_REALM);
+ adminClient.setAllowTcp(true);
+ adminClient.setAllowUdp(false);
+ adminClient.setAdminTcpPort(65417);
+ adminClient.init();
+ adminClient.requestAddPrincial(clientPrincipal);
+ }
+}