Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 4ECC9200B4C for ; Thu, 7 Jul 2016 08:41:52 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 4D816160A81; Thu, 7 Jul 2016 06:41:52 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id CC604160A75 for ; Thu, 7 Jul 2016 08:41:49 +0200 (CEST) Received: (qmail 70868 invoked by uid 500); 7 Jul 2016 06:41:49 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 69564 invoked by uid 99); 7 Jul 2016 06:41:46 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 07 Jul 2016 06:41:46 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id AA62FE00DB; Thu, 7 Jul 2016 06:41:46 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: plusplusjiajia@apache.org To: commits@directory.apache.org Date: Thu, 07 Jul 2016 06:42:03 -0000 Message-Id: <9c1d22999f234b34b33e2399d4c89eec@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [18/27] directory-kerby git commit: DIRKRB-592 Merge kadmin-remote branch to trunk. archived-at: Thu, 07 Jul 2016 06:41:52 -0000 http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminUtil.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminUtil.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminUtil.java new file mode 100644 index 0000000..00cc409 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/AdminUtil.java @@ -0,0 +1,127 @@ +/** + * 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; + +import org.apache.kerby.kerberos.kerb.KrbException; +import org.apache.kerby.kerberos.kerb.transport.TransportPair; + +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.util.Map; + +public final class AdminUtil { + private AdminUtil() { } + + private static final String KRB5_FILE_NAME = "krb5.conf"; + private static final String KRB5_ENV_NAME = "KRB5_CONFIG"; + + /** + * Load krb5.conf from specified conf dir. + * @param confDir The conf dir + * @return AdminConfig + * @throws KrbException e + */ + public static AdminConfig getConfig(File confDir) throws KrbException { + File confFile = new File(confDir, KRB5_FILE_NAME); + if (!confFile.exists()) { + throw new KrbException(KRB5_FILE_NAME + " not found"); + } + + if (confFile != null && confFile.exists()) { + AdminConfig adminConfig = new AdminConfig(); + try { + adminConfig.addKrb5Config(confFile); + return adminConfig; + } catch (IOException e) { + throw new KrbException("Failed to load krb config " + + confFile.getAbsolutePath()); + } + } + + return null; + } + + /** + * Load default krb5.conf + * @return The AdminConfig + * @throws KrbException e + */ + public static AdminConfig getDefaultConfig() throws KrbException { + File confFile = null; + File confDir; + String tmpEnv; + + try { + Map mapEnv = System.getenv(); + tmpEnv = mapEnv.get(KRB5_ENV_NAME); + } catch (SecurityException e) { + tmpEnv = null; + } + if (tmpEnv != null) { + confFile = new File(tmpEnv); + if (!confFile.exists()) { + throw new KrbException("krb5 conf not found. Invalid env " + + KRB5_ENV_NAME); + } + } else { + confDir = new File("/etc/"); // for Linux. TODO: fix for Win etc. + if (confDir.exists()) { + confFile = new File(confDir, "krb5.conf"); + } + } + + AdminConfig adminConfig = new AdminConfig(); + if (confFile != null && confFile.exists()) { + try { + adminConfig.addKrb5Config(confFile); + } catch (IOException e) { + throw new KrbException("Failed to load krb config " + + confFile.getAbsolutePath()); + } + } + + return adminConfig; + } + + /** + * Get KDC network transport addresses according to krb client setting. + * @param setting The krb setting + * @return UDP and TCP addresses pair + * @throws KrbException e + */ + public static TransportPair getTransportPair( + AdminSetting setting) throws KrbException { + TransportPair result = new TransportPair(); + + int tcpPort = setting.checkGetKdcTcpPort(); + if (tcpPort > 0) { + result.tcpAddress = new InetSocketAddress( + setting.getKdcHost(), tcpPort); + } + int udpPort = setting.checkGetKdcUdpPort(); + if (udpPort > 0) { + result.udpAddress = new InetSocketAddress( + setting.getKdcHost(), udpPort); + } + + return result; + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/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 new file mode 100644 index 0000000..c4ac154 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/RemoteKadminImpl.java @@ -0,0 +1,207 @@ +/** + * 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; + +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.AddPrincipalRequest; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.AdminRequest; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.DeletePrincipalRequest; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.GetprincsRequest; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.request.RenamePrincipalRequest; +import org.apache.kerby.kerberos.kerb.common.KrbUtil; +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; + +/** + * Server side admin facilities from remote, similar to MIT Kadmin remote mode. + * It uses GSSAPI and XDR to communicate with remote KDC/kadmind to do the + * requested operations. In the client side, it simply wraps and sends the + * request info to the admin kadmind side, and then unwraps the response for + * the operation result. + * + * TO BE IMPLEMENTED. + */ +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 KrbUtil.makeKadminPrincipal(innerClient.getSetting().getKdcRealm()).getName(); + } + + @Override + public void addPrincipal(String principal) throws KrbException { + //generate an admin request + AdminRequest adRequest = new AddPrincipalRequest(principal); + adRequest.setTransport(transport); + //handle it + AdminHandler adminHandler = new DefaultAdminHandler(); + adminHandler.handleRequest(adRequest); + + } + + @Override + public void addPrincipal(String principal, + KOptions kOptions) throws KrbException { + AdminRequest adRequest = new AddPrincipalRequest(principal, kOptions); + //wrap buffer problem + adRequest.setTransport(transport); + AdminHandler adminHandler = new DefaultAdminHandler(); + adminHandler.handleRequest(adRequest); + } + + @Override + public void addPrincipal(String principal, + String password) throws KrbException { + AdminRequest addPrincipalRequest = new AddPrincipalRequest(principal, password); + addPrincipalRequest.setTransport(transport); + AdminHandler adminHandler = new DefaultAdminHandler(); + adminHandler.handleRequest(addPrincipalRequest); + } + + @Override + public void addPrincipal(String principal, String password, + KOptions kOptions) throws KrbException { + + } + + @Override + public void exportKeytab(File keytabFile, + String principal) throws KrbException { + + } + + @Override + public void exportKeytab(File keytabFile, + List principals) throws KrbException { + + } + + @Override + public void exportKeytab(File keytabFile) throws KrbException { + + } + + @Override + public void removeKeytabEntriesOf(File keytabFile, + String principal) throws KrbException { + + } + + @Override + public void removeKeytabEntriesOf(File keytabFile, String principal, + int kvno) throws KrbException { + + } + + @Override + public void removeOldKeytabEntriesOf(File keytabFile, + String principal) throws KrbException { + + } + + @Override + public void deletePrincipal(String principal) throws KrbException { + AdminRequest deletePrincipalRequest = new DeletePrincipalRequest(principal); + deletePrincipalRequest.setTransport(transport); + AdminHandler adminHandler = new DefaultAdminHandler(); + adminHandler.handleRequest(deletePrincipalRequest); + } + + @Override + public void modifyPrincipal(String principal, + KOptions kOptions) throws KrbException { + + } + + @Override + public void renamePrincipal(String oldPrincipalName, + String newPrincipalName) throws KrbException { + AdminRequest renamePrincipalRequest = new RenamePrincipalRequest(oldPrincipalName, newPrincipalName); + renamePrincipalRequest.setTransport(transport); + AdminHandler adminHandler = new DefaultAdminHandler(); + adminHandler.handleRequest(renamePrincipalRequest); + } + + @Override + public List getPrincipals() throws KrbException { + AdminRequest grtPrincsRequest = new GetprincsRequest(); + grtPrincsRequest.setTransport(transport); + AdminHandler adminHandler = new DefaultAdminHandler(); + return adminHandler.handleRequestForList(grtPrincsRequest); + } + + @Override + public List getPrincipals(String globString) throws KrbException { + AdminRequest grtPrincsRequest = new GetprincsRequest(globString); + grtPrincsRequest.setTransport(transport); + AdminHandler adminHandler = new DefaultAdminHandler(); + return adminHandler.handleRequestForList(grtPrincsRequest); + } + + @Override + public void changePassword(String principal, + String newPassword) throws KrbException { + + } + + @Override + public void updateKeys(String principal) throws KrbException { + + } + + @Override + public void release() throws KrbException { + + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteAddPrincipalCommand.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteAddPrincipalCommand.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteAddPrincipalCommand.java new file mode 100644 index 0000000..d3d27a5 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteAddPrincipalCommand.java @@ -0,0 +1,65 @@ +/** + * 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.command; + +import org.apache.kerby.kerberos.kerb.KrbException; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminClient; + +/** + * Remote add principal command + */ +public class RemoteAddPrincipalCommand extends RemoteCommand { + + public static final String USAGE = "Usage: add_principal [options] \n" + + "\toptions are:\n" + + "\t\t[-randkey|-nokey]\n" + + "\t\t[-pw password]" + + "\tExample:\n" + + "\t\tadd_principal -pw mypassword alice\n"; + + public RemoteAddPrincipalCommand(AdminClient adminClient) { + super(adminClient); + } + + @Override + public void execute(String input) throws KrbException { + String[] items = input.split("\\s+"); + + if (items.length < 2) { + System.err.println(USAGE); + return; + } + + String adminRealm = adminClient.getAdminConfig().getAdminRealm(); + String clientPrincipal = items[items.length - 1] + "@" + adminRealm; + + if (!items[1].startsWith("-")) { + adminClient.requestAddPrincipal(clientPrincipal); + } else if (items[1].startsWith("-nokey")) { + adminClient.requestAddPrincipal(clientPrincipal); + } else if (items[1].startsWith("-pw")) { + String password = items[2]; + adminClient.requestAddPrincipal(clientPrincipal, password); + } else { + System.err.println("add_principal command format error."); + System.err.println(USAGE); + } + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteCommand.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteCommand.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteCommand.java new file mode 100644 index 0000000..d5ffe0f --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteCommand.java @@ -0,0 +1,41 @@ +/** + * 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.command; + +import org.apache.kerby.kerberos.kerb.KrbException; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminClient; + +/** + * Abstract class of all remote kadmin commands + */ +public abstract class RemoteCommand { + + AdminClient adminClient; + + public RemoteCommand(AdminClient adminClient) { + this.adminClient = adminClient; + } + + /** + * Execute the remote kadmin command + * @param input String includes commands + */ + public abstract void execute(String input) throws KrbException; +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteDeletePrincipalCommand.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteDeletePrincipalCommand.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteDeletePrincipalCommand.java new file mode 100644 index 0000000..e6368bd --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteDeletePrincipalCommand.java @@ -0,0 +1,83 @@ +/** + * 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.command; + +import org.apache.kerby.kerberos.kerb.KrbException; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminClient; + +import java.io.Console; +import java.util.Scanner; + +/** + * Remote delete principal command + */ +public class RemoteDeletePrincipalCommand extends RemoteCommand { + + public static final String USAGE = "Usage: delete_principal \n" + + "\tExample:\n" + + "\t\tdelete_principal alice\n"; + + public RemoteDeletePrincipalCommand(AdminClient adminClient) { + super(adminClient); + } + + @Override + public void execute(String input) throws KrbException { + String[] items = input.split("\\s+"); + if (items.length < 2) { + System.err.println(USAGE); + return; + } + + String principal = items[items.length - 1] + "@" + + adminClient.getAdminConfig().getAdminRealm(); + String reply; + Console console = System.console(); + String prompt = "Are you sure to delete the principal? (yes/no, YES/NO, y/n, Y/N) "; + if (console == null) { + System.out.println("Couldn't get Console instance, " + + "maybe you're running this from within an IDE. " + + "Use scanner to read password."); + Scanner scanner = new Scanner(System.in, "UTF-8"); + reply = getReply(scanner, prompt); + } else { + reply = getReply(console, prompt); + } + if (reply.equals("yes") || reply.equals("YES") || reply.equals("y") || reply.equals("Y")) { + adminClient.requestDeletePrincipal(principal); + } else if (reply.equals("no") || reply.equals("NO") || reply.equals("n") || reply.equals("N")) { + System.out.println("Principal \"" + principal + "\" not deleted."); + } else { + System.err.println("Unknown request, fail to delete the principal."); + System.err.println(USAGE); + } + } + + private String getReply(Scanner scanner, String prompt) { + System.out.println(prompt); + return scanner.nextLine().trim(); + } + + private String getReply(Console console, String prompt) { + console.printf(prompt); + String line = console.readLine(); + return line; + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteGetprincsCommand.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteGetprincsCommand.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteGetprincsCommand.java new file mode 100644 index 0000000..2e15281 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteGetprincsCommand.java @@ -0,0 +1,65 @@ +/** + * 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.command; + +import org.apache.kerby.kerberos.kerb.KrbException; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminClient; +import java.util.List; + +public class RemoteGetprincsCommand extends RemoteCommand { + private static final String USAGE = "Usage: list_principals [expression]\n" + + "\t'expression' is a shell-style glob expression that can contain the wild-card characters ?, *, and []." + + "\tExample:\n" + + "\t\tlist_principals [expression]\n"; + + public RemoteGetprincsCommand(AdminClient adminClient) { + super(adminClient); + } + + @Override + public void execute(String input) throws KrbException { + String[] items = input.split("\\s+"); + //String param = items[0]; + if (items.length > 2) { + System.err.println(USAGE); + return; + } + + List principalLists = null; + + if (items.length == 1) { + principalLists = adminClient.requestGetprincs(); + } else { + //have expression + String exp = items[1]; + principalLists = adminClient.requestGetprincsWithExp(exp); + } + + if (principalLists.size() == 0 || principalLists.size() == 1 && principalLists.get(0).isEmpty()) { + return; + } else { + System.out.println("Principals are listed:"); + for (int i = 0; i < principalLists.size(); i++) { + System.out.println(principalLists.get(i)); + } + } + } + +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemotePrintUsageCommand.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemotePrintUsageCommand.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemotePrintUsageCommand.java new file mode 100644 index 0000000..a27e252 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemotePrintUsageCommand.java @@ -0,0 +1,42 @@ +/** + * 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.command; + +import org.apache.kerby.kerberos.kerb.KrbException; + +public class RemotePrintUsageCommand extends RemoteCommand { + + private static final String LISTPRINCSUSAGE = "Usage: list_principals [expression]\n" + + "\t'expression' is a shell-style glob expression that can contain " + + "the wild-card characters ?, *, and [].\n" + + "\tExample:\n" + + "\t\tlist_principals [expression]\n"; + + public RemotePrintUsageCommand() { + super(null); + } + + @Override + public void execute(String input) throws KrbException { + if (input.startsWith("listprincs")) { + System.out.println(LISTPRINCSUSAGE); + } + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteRenamePrincipalCommand.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteRenamePrincipalCommand.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteRenamePrincipalCommand.java new file mode 100644 index 0000000..fd0cd61 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/command/RemoteRenamePrincipalCommand.java @@ -0,0 +1,85 @@ +/** + * 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.command; + +import org.apache.kerby.kerberos.kerb.KrbException; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminClient; + +import java.io.Console; +import java.util.Scanner; + +/** + * Remote rename principal command + */ +public class RemoteRenamePrincipalCommand extends RemoteCommand { + public static final String USAGE = "Usage: rename_principal " + + " \n" + + "\tExample:\n" + + "\t\trename_principal alice bob\n"; + + public RemoteRenamePrincipalCommand(AdminClient adminClient) { + super(adminClient); + } + + @Override + public void execute(String input) throws KrbException { + String[] items = input.split("\\s+"); + if (items.length < 3) { + System.err.println(USAGE); + return; + } + + String adminRealm = adminClient.getAdminConfig().getAdminRealm(); + String oldPrincipalName = items[items.length - 2] + "@" + adminRealm; + String newPrincipalName = items[items.length - 1] + "@" + adminRealm; + + String reply; + Console console = System.console(); + String prompt = "Are you sure to rename the principal? (yes/no, YES/NO, y/n, Y/N) "; + if (console == null) { + System.out.println("Couldn't get Console instance, " + + "maybe you're running this from within an IDE. " + + "Use scanner to read password."); + Scanner scanner = new Scanner(System.in, "UTF-8"); + reply = getReply(scanner, prompt); + } else { + reply = getReply(console, prompt); + } + if (reply.equals("yes") || reply.equals("YES") || reply.equals("y") || reply.equals("Y")) { + adminClient.requestRenamePrincipal(oldPrincipalName, newPrincipalName); + } else if (reply.equals("no") || reply.equals("NO") || reply.equals("n") || reply.equals("N")) { + System.out.println("Principal \"" + oldPrincipalName + "\" not renamed."); + } else { + System.err.println("Unknown request, fail to rename the principal."); + System.err.println(USAGE); + } + } + + private String getReply(Scanner scanner, String prompt) { + System.out.println(prompt); + return scanner.nextLine().trim(); + } + + private String getReply(Console console, String prompt) { + console.printf(prompt); + String line = console.readLine(); + return line; + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/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 new file mode 100644 index 0000000..1f1635f --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/AbstractInternalAdminClient.java @@ -0,0 +1,71 @@ +/** + * 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.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; + +/** + * A krb client API for applications to interact with KDC + */ +public abstract class AbstractInternalAdminClient + implements InternalAdminClient { + private AdminContext context; + private final AdminSetting krbSetting; + + public AbstractInternalAdminClient(AdminSetting krbSetting) { + this.krbSetting = krbSetting; + } + + protected AdminContext getContext() { + return context; + } + + /** + * {@inheritDoc} + */ + @Override + public AdminSetting getSetting() { + return krbSetting; + } + + /** + * {@inheritDoc} + */ + @Override + public void init() throws KrbException { + context = new AdminContext(); + context.init(krbSetting); + } + + /** + * Fix principal name. + * + * @param principal The principal name + * @return The fixed principal + */ + protected String fixPrincipal(String principal) { + if (!principal.contains("@")) { + principal += "@" + krbSetting.getKdcRealm(); + } + return principal; + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/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 new file mode 100644 index 0000000..3d05b50 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultAdminHandler.java @@ -0,0 +1,79 @@ +/** + * 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.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; +import java.util.List; + +public class DefaultAdminHandler extends AdminHandler { + + /** + * Use super.handleRequest to send message + * and use this to receive message. + */ + @Override + public void handleRequest(AdminRequest adminRequest) throws KrbException { + /**super is used to send message*/ + super.handleRequest(adminRequest); + + KrbTransport transport = adminRequest.getTransport(); + ByteBuffer receiveMessage = null; + try { + receiveMessage = transport.receiveMessage(); + } catch (IOException e) { + throw new KrbException("Admin receives response message failed", e); + } + super.onResponseMessage(adminRequest, receiveMessage); + } + + /** + * {@inheritDoc} + */ + @Override + protected void sendMessage(AdminRequest adminRequest, + ByteBuffer requestMessage) throws IOException { + KrbTransport transport = adminRequest.getTransport(); + transport.sendMessage(requestMessage); + } + + @Override + public List handleRequestForList(AdminRequest adminRequest) throws KrbException { + /**send message*/ + super.handleRequest(adminRequest); + + KrbTransport transport = adminRequest.getTransport(); + ByteBuffer receiveMessage = null; + List prinicalList = null; + try { + receiveMessage = transport.receiveMessage(); + prinicalList = super.onResponseMessageForList(adminRequest, receiveMessage); + } catch (IOException e) { + throw new KrbException("Admin receives response message failed", e); + } + + return prinicalList; + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/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 new file mode 100644 index 0000000..2d40b6f --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/DefaultInternalAdminClient.java @@ -0,0 +1,71 @@ +/** + * 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.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.transport.KrbNetwork; +import org.apache.kerby.kerberos.kerb.transport.KrbTransport; +import org.apache.kerby.kerberos.kerb.transport.TransportPair; + +import java.io.IOException; + +/** + * A default krb client implementation. + */ +public class DefaultInternalAdminClient extends AbstractInternalAdminClient { + + private DefaultAdminHandler adminHandler; + private KrbTransport transport; + + public DefaultInternalAdminClient(AdminSetting krbSetting) { + super(krbSetting); + } + + public AdminHandler getAdminHanlder() { + return adminHandler; + } + + public KrbTransport getTransport() { + return transport; + } + + /** + * {@inheritDoc} + */ + @Override + public void init() throws KrbException { + super.init(); + + this.adminHandler = new DefaultAdminHandler(); + adminHandler.init(getContext()); + + TransportPair tpair = AdminUtil.getTransportPair(getSetting()); + KrbNetwork network = new KrbNetwork(); + network.setSocketTimeout(getSetting().getTimeout()); + try { + transport = network.connect(tpair); + } catch (IOException e) { + throw new KrbException("Failed to create transport", e); + } + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/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 new file mode 100644 index 0000000..47bfd3d --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/impl/InternalAdminClient.java @@ -0,0 +1,41 @@ +/** + * 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.impl; + +import org.apache.kerby.kerberos.kerb.KrbException; +import org.apache.kerby.kerberos.kerb.admin.kadmin.remote.AdminSetting; + +/** + * An internal krb client interface. + */ +public interface InternalAdminClient { + + /** + * Init with all the necessary options. + * @throws KrbException e + */ + void init() throws KrbException; + + /** + * Get krb client settings. + * @return setting + */ + AdminSetting getSetting(); +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AddPrincipalRequest.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AddPrincipalRequest.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AddPrincipalRequest.java new file mode 100644 index 0000000..96622bc --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AddPrincipalRequest.java @@ -0,0 +1,114 @@ +/** + * 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.KOptions; +import org.apache.kerby.kerberos.kerb.KrbException; +import org.apache.kerby.kerberos.kerb.admin.message.AddPrincipalReq; +import org.apache.kerby.kerberos.kerb.admin.message.AdminMessageCode; +import org.apache.kerby.kerberos.kerb.admin.message.AdminMessageType; +import org.apache.kerby.xdr.XdrDataType; +import org.apache.kerby.xdr.XdrFieldInfo; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** + * AddPrincipal request + */ +public class AddPrincipalRequest extends AdminRequest { + + private KOptions kOptions; + private String password; + + public AddPrincipalRequest(String principal) { + super(principal); + } + + public AddPrincipalRequest(String principal, KOptions kOptions) { + super(principal); + this.kOptions = kOptions; + } + + public AddPrincipalRequest(String principal, String password) { + super(principal); + this.password = password; + } + + public AddPrincipalRequest(String princial, KOptions kOptions, String password) { + super(princial); + this.kOptions = kOptions; + this.password = password; + } + + + @Override + public void process() throws KrbException { + super.process(); + /**replace this with encode in handler*/ + AddPrincipalReq addPrincipalReq = new AddPrincipalReq(); + /** encode admin message: + * encode type + * encode paranum + * encode principal name + * (encode koptions) + * (encode passsword) + */ + int paramNum = getParamNum(); + XdrFieldInfo[] xdrFieldInfos = new XdrFieldInfo[paramNum + 2]; + xdrFieldInfos[0] = new XdrFieldInfo(0, XdrDataType.ENUM, AdminMessageType.ADD_PRINCIPAL_REQ); + xdrFieldInfos[1] = new XdrFieldInfo(1, XdrDataType.INTEGER, paramNum); + xdrFieldInfos[2] = new XdrFieldInfo(2, XdrDataType.STRING, getPrincipal()); + if (paramNum == 2 && kOptions != null) { + xdrFieldInfos[3] = new XdrFieldInfo(3, XdrDataType.STRUCT, kOptions); /////koption + } else if (paramNum == 2 && password != null) { + xdrFieldInfos[3] = new XdrFieldInfo(3, XdrDataType.STRING, password); + } else if (paramNum == 3) { + xdrFieldInfos[3] = new XdrFieldInfo(3, XdrDataType.STRUCT, kOptions); ////koption + xdrFieldInfos[4] = new XdrFieldInfo(4, XdrDataType.STRING, password); + } + AdminMessageCode value = new AdminMessageCode(xdrFieldInfos); + byte[] encodeBytes; + try { + encodeBytes = value.encode(); + } catch (IOException e) { + throw new KrbException("Xdr encode error when generate add principal request.", e); + } + ByteBuffer messageBuffer = ByteBuffer.wrap(encodeBytes); + addPrincipalReq.setMessageBuffer(messageBuffer); + + setAdminReq(addPrincipalReq); + } + + public int getParamNum() { + int paramNum = 0; + if (getPrincipal() == null) { + throw new RuntimeException("Principal name missing."); + } + if (kOptions == null && password == null) { + paramNum = 1; + } else if (kOptions == null || password == null) { + paramNum = 2; + } else { + paramNum = 3; + } + return paramNum; + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/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 new file mode 100644 index 0000000..7c8d152 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/AdminRequest.java @@ -0,0 +1,63 @@ +/** + * 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.KrbException; +import org.apache.kerby.kerberos.kerb.transport.KrbTransport; +import org.apache.kerby.kerberos.kerb.admin.message.AdminReq; + +public class AdminRequest { + private String principal; + private KrbTransport transport; + private AdminReq adminReq; + + public AdminRequest(String principal) { + this.principal = principal; + } + + 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() throws KrbException { + //encoding and set adminReq + } + + + 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/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/DeletePrincipalRequest.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/DeletePrincipalRequest.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/DeletePrincipalRequest.java new file mode 100644 index 0000000..929f324 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/DeletePrincipalRequest.java @@ -0,0 +1,70 @@ +/** + * 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.KrbException; +import org.apache.kerby.kerberos.kerb.admin.message.AdminMessageCode; +import org.apache.kerby.kerberos.kerb.admin.message.AdminMessageType; +import org.apache.kerby.kerberos.kerb.admin.message.DeletePrincipalReq; +import org.apache.kerby.xdr.XdrDataType; +import org.apache.kerby.xdr.XdrFieldInfo; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** + * DeletePrincipal request + */ +public class DeletePrincipalRequest extends AdminRequest { + /** Admin delete principal do not need password or koptions. */ + + public DeletePrincipalRequest(String principal) { + super(principal); + } + + @Override + public void process() throws KrbException { + super.process(); + DeletePrincipalReq deletePrincipalReq = new DeletePrincipalReq(); + /** encode admin message: + * encode type + * encode paranum + * encode principal name + * (encode koptions) + * (encode passsword) + */ + XdrFieldInfo[] xdrFieldInfos = new XdrFieldInfo[3]; + xdrFieldInfos[0] = new XdrFieldInfo(0, XdrDataType.ENUM, AdminMessageType.DELETE_PRINCIPAL_REQ); + xdrFieldInfos[1] = new XdrFieldInfo(1, XdrDataType.INTEGER, 1); + xdrFieldInfos[2] = new XdrFieldInfo(2, XdrDataType.STRING, getPrincipal()); + + AdminMessageCode value = new AdminMessageCode(xdrFieldInfos); + byte[] encodeBytes; + try { + encodeBytes = value.encode(); + } catch (IOException e) { + throw new KrbException("Xdr encode error when generate delete principal request.", e); + } + ByteBuffer messageBuffer = ByteBuffer.wrap(encodeBytes); + deletePrincipalReq.setMessageBuffer(messageBuffer); + + setAdminReq(deletePrincipalReq); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/GetprincsRequest.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/GetprincsRequest.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/GetprincsRequest.java new file mode 100644 index 0000000..2794010 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/GetprincsRequest.java @@ -0,0 +1,70 @@ +/** + * 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.KrbException; +import org.apache.kerby.kerberos.kerb.admin.message.AdminMessageCode; +import org.apache.kerby.kerberos.kerb.admin.message.AdminMessageType; +import org.apache.kerby.kerberos.kerb.admin.message.GetprincsReq; +import org.apache.kerby.xdr.XdrDataType; +import org.apache.kerby.xdr.XdrFieldInfo; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** + * GetprincsRequest request. + */ +public class GetprincsRequest extends AdminRequest { + private String globString = null; + + public GetprincsRequest() { + super(null); + } + + public GetprincsRequest(String globString) { + super(null); + this.globString = globString; + } + + @Override + public void process() throws KrbException { + //encoding and set adminReq + + GetprincsReq getprincsReq = new GetprincsReq(); + + XdrFieldInfo[] xdrFieldInfos = new XdrFieldInfo[3]; + xdrFieldInfos[0] = new XdrFieldInfo(0, XdrDataType.ENUM, AdminMessageType.GET_PRINCS_REQ); + xdrFieldInfos[1] = new XdrFieldInfo(1, XdrDataType.INTEGER, 2); + xdrFieldInfos[2] = new XdrFieldInfo(2, XdrDataType.STRING, globString); + + AdminMessageCode value = new AdminMessageCode(xdrFieldInfos); + byte[] encodeBytes; + try { + encodeBytes = value.encode(); + } catch (IOException e) { + throw new KrbException("Xdr encode error when generate get principals request.", e); + } + ByteBuffer messageBuffer = ByteBuffer.wrap(encodeBytes); + getprincsReq.setMessageBuffer(messageBuffer); + + setAdminReq(getprincsReq); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/RenamePrincipalRequest.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/RenamePrincipalRequest.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/RenamePrincipalRequest.java new file mode 100644 index 0000000..a7cfcc2 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/remote/request/RenamePrincipalRequest.java @@ -0,0 +1,74 @@ +/** + * 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.KrbException; +import org.apache.kerby.kerberos.kerb.admin.message.AdminMessageCode; +import org.apache.kerby.kerberos.kerb.admin.message.AdminMessageType; +import org.apache.kerby.kerberos.kerb.admin.message.RenamePrincipalReq; +import org.apache.kerby.xdr.XdrDataType; +import org.apache.kerby.xdr.XdrFieldInfo; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** + * RenamePrincipal request. + */ +public class RenamePrincipalRequest extends AdminRequest { + String newPrincipalName; + + public RenamePrincipalRequest(String oldPrincipalName, String newPrincipalName) { + super(oldPrincipalName); + this.newPrincipalName = newPrincipalName; + } + + @Override + public void process() throws KrbException { + super.process(); + + RenamePrincipalReq renamePrincipalReq = new RenamePrincipalReq(); + + /** encode admin message: + * encode type + * encode paranum + * encode old principal name + * encode new principal name + */ + int paramNum = 2; + XdrFieldInfo[] xdrFieldInfos = new XdrFieldInfo[paramNum + 2]; + xdrFieldInfos[0] = new XdrFieldInfo(0, XdrDataType.ENUM, AdminMessageType.RENAME_PRINCIPAL_REQ); + xdrFieldInfos[1] = new XdrFieldInfo(1, XdrDataType.INTEGER, paramNum); + xdrFieldInfos[2] = new XdrFieldInfo(2, XdrDataType.STRING, getPrincipal()); + xdrFieldInfos[3] = new XdrFieldInfo(3, XdrDataType.STRING, newPrincipalName); + + AdminMessageCode value = new AdminMessageCode(xdrFieldInfos); + byte[] encodeBytes; + try { + encodeBytes = value.encode(); + } catch (IOException e) { + throw new KrbException("Xdr encode error when generate rename principal request.", e); + } + ByteBuffer messageBuffer = ByteBuffer.wrap(encodeBytes); + renamePrincipalReq.setMessageBuffer(messageBuffer); + + setAdminReq(renamePrincipalReq); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AddPrincipalRep.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AddPrincipalRep.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AddPrincipalRep.java new file mode 100644 index 0000000..3c52ab0 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AddPrincipalRep.java @@ -0,0 +1,30 @@ +/** + * 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.message; + + +/** + * Add principal reply, to general admin message + */ +public class AddPrincipalRep extends AdminRep { + public AddPrincipalRep() { + super(AdminMessageType.ADD_PRINCIPAL_REP); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AddPrincipalReq.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AddPrincipalReq.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AddPrincipalReq.java new file mode 100644 index 0000000..0450a0e --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AddPrincipalReq.java @@ -0,0 +1,30 @@ +/** + * 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.message; + + +/** + * Add principal request, to general admin message + */ +public class AddPrincipalReq extends AdminReq { + public AddPrincipalReq() { + super(AdminMessageType.ADD_PRINCIPAL_REQ); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessage.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessage.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessage.java new file mode 100644 index 0000000..ec21f91 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessage.java @@ -0,0 +1,56 @@ +/** + * 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.message; + +import java.nio.ByteBuffer; + +/** + * Deal with messages sent and received between Kadmin and Kadmin Server. + * (MSB) (LSB) + * +-------+-------+-------+-------+ + * |msg_type |para_num |prin_name |...(koptions, password) | + * +-------+-------+-------+-------+ + */ +public class AdminMessage { + private AdminMessageType adminMessageType; + private ByteBuffer messageBuffer; + + public AdminMessage(AdminMessageType adminMessageType) { + this.adminMessageType = adminMessageType; + } + + public AdminMessageType getAdminMessageType() { + return adminMessageType; + } + + public void setMessageBuffer(ByteBuffer messageBuffer) { + this.messageBuffer = messageBuffer; + } + + public ByteBuffer getMessageBuffer() { + return messageBuffer; + } + + public int encodingLength() { + return messageBuffer.limit(); // no + 4 is the length of whole message + } + + +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageCode.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageCode.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageCode.java new file mode 100644 index 0000000..016d577 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageCode.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.admin.message; + +import org.apache.kerby.KOptions; +import org.apache.kerby.xdr.XdrDataType; +import org.apache.kerby.xdr.XdrFieldInfo; +import org.apache.kerby.xdr.type.AbstractXdrType; +import org.apache.kerby.xdr.type.XdrInteger; +import org.apache.kerby.xdr.type.XdrString; +import org.apache.kerby.xdr.type.XdrStructType; +import org.apache.kerby.xdr.type.XdrType; + +/** + * An extend XdrStructType to encode and decode AdminMessage. + */ +public class AdminMessageCode extends XdrStructType { + public AdminMessageCode() { + super(XdrDataType.STRUCT); + } + + public AdminMessageCode(XdrFieldInfo[] fieldInfos) { + super(XdrDataType.STRUCT, fieldInfos); + } + + protected void getStructTypeInstance(final XdrType[] fields, final XdrFieldInfo[] fieldInfos) { + for (int i = 0; i < fieldInfos.length; i++) { + switch (fieldInfos[i].getDataType()) { + case INTEGER: + fields[i] = new XdrInteger((Integer) fieldInfos[i].getValue()); + break; + case ENUM: + fields[i] = new AdminMessageEnum((AdminMessageType) fieldInfos[i].getValue()); + break; + case STRING: + fields[i] = new XdrString((String) fieldInfos[i].getValue()); + break; + default: + fields[i] = null; + } + + } + } + + @Override + protected XdrStructType fieldsToValues(AbstractXdrType[] fields) { + int paramNum = (int) fields[1].getValue(); + XdrFieldInfo[] xdrFieldInfos = new XdrFieldInfo[paramNum + 2]; + xdrFieldInfos[0] = new XdrFieldInfo(0, XdrDataType.ENUM, fields[0].getValue()); + xdrFieldInfos[1] = new XdrFieldInfo(1, XdrDataType.INTEGER, fields[1].getValue()); + xdrFieldInfos[2] = new XdrFieldInfo(2, XdrDataType.STRING, fields[2].getValue()); + if (paramNum == 2 && fields[3].getValue() instanceof KOptions) { + xdrFieldInfos[3] = new XdrFieldInfo(3, XdrDataType.STRUCT, fields[3].getValue()); /////koption + } else if (paramNum == 2 && fields[3].getValue() instanceof String) { + xdrFieldInfos[3] = new XdrFieldInfo(3, XdrDataType.STRING, fields[3].getValue()); + } else if (paramNum == 3) { + xdrFieldInfos[3] = new XdrFieldInfo(3, XdrDataType.STRUCT, fields[3].getValue()); ////koption + xdrFieldInfos[4] = new XdrFieldInfo(4, XdrDataType.STRING, fields[4].getValue()); + } + return new AdminMessageCode(xdrFieldInfos); + } + + @Override + protected AbstractXdrType[] getAllFields() { + AbstractXdrType[] fields = new AbstractXdrType[5]; + fields[0] = new AdminMessageEnum(); + fields[1] = new XdrInteger(); + fields[2] = new XdrString(); + fields[3] = new XdrString(); //suppose it is string + fields[4] = null; // kOptions is not supported. + return fields; + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageEnum.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageEnum.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageEnum.java new file mode 100644 index 0000000..2ea60b8 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageEnum.java @@ -0,0 +1,41 @@ +/** + * 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.message; + +import org.apache.kerby.xdr.EnumType; +import org.apache.kerby.xdr.type.XdrEnumerated; + +/** + * An extend XdrEnumerate to encode and decode AdminMessageType. + */ +public class AdminMessageEnum extends XdrEnumerated { + public AdminMessageEnum() { + super(null); + } + + public AdminMessageEnum(AdminMessageType value) { + super(value); + } + @Override + protected EnumType[] getAllEnumValues() { + return AdminMessageType.values(); + } + +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageType.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageType.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageType.java new file mode 100644 index 0000000..f44187e --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminMessageType.java @@ -0,0 +1,73 @@ +/** + * 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.message; + +import org.apache.kerby.xdr.EnumType; + +/** + * Type of Admin Message: + * NONE(-1) + * ADD_PRINCIPAL_REQ(0) add principal request + * ADD_PRINCIPAL_REP(1) add principal reply + * DELETE_PRINCIPAL_REQ(2), + * DELETE_PRINCIPAL_REP(3); + * RENAME_PRINCIPAL_REQ(4), + * RENAME_PRINCIPAL_REP(5); + * + */ + +public enum AdminMessageType implements EnumType { + NONE(-1), + ADD_PRINCIPAL_REQ(0), + ADD_PRINCIPAL_REP(1), + DELETE_PRINCIPAL_REQ(2), + DELETE_PRINCIPAL_REP(3), + RENAME_PRINCIPAL_REQ(4), + RENAME_PRINCIPAL_REP(5), + GET_PRINCS_REQ(6), + GET_PRINCS_REP(7); + + 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/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminRep.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminRep.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminRep.java new file mode 100644 index 0000000..a26cd6b --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminRep.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.admin.message; + + +/** + * 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) { + super(messageType); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminReq.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminReq.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminReq.java new file mode 100644 index 0000000..c69218f --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/AdminReq.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.message; + + +/** + * 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) { + super(messageType); + } + +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/DeletePrincipalRep.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/DeletePrincipalRep.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/DeletePrincipalRep.java new file mode 100644 index 0000000..35b1f6e --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/DeletePrincipalRep.java @@ -0,0 +1,30 @@ +/** + * 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.message; + + +/** + * Delete principal reply, to general admin message + */ +public class DeletePrincipalRep extends AdminRep { + public DeletePrincipalRep() { + super(AdminMessageType.DELETE_PRINCIPAL_REP); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/DeletePrincipalReq.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/DeletePrincipalReq.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/DeletePrincipalReq.java new file mode 100644 index 0000000..ad3b320 --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/DeletePrincipalReq.java @@ -0,0 +1,30 @@ +/** + * 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.message; + + +/** + * Delete principal request, to general admin message + */ +public class DeletePrincipalReq extends AdminReq { + public DeletePrincipalReq() { + super(AdminMessageType.DELETE_PRINCIPAL_REQ); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/GetprincsRep.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/GetprincsRep.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/GetprincsRep.java new file mode 100644 index 0000000..2a6364a --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/GetprincsRep.java @@ -0,0 +1,26 @@ +/** + * 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.message; + +public class GetprincsRep extends AdminRep { + public GetprincsRep() { + super(AdminMessageType.GET_PRINCS_REP); + } +} http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/9f628e5a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/GetprincsReq.java ---------------------------------------------------------------------- diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/GetprincsReq.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/GetprincsReq.java new file mode 100644 index 0000000..75e819b --- /dev/null +++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/message/GetprincsReq.java @@ -0,0 +1,26 @@ +/** + * 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.message; + +public class GetprincsReq extends AdminReq { + public GetprincsReq() { + super(AdminMessageType.GET_PRINCS_REQ); + } +}