You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2015/11/20 07:18:08 UTC

[1/2] directory-kerby git commit: DIRKRB-460 Categorize KrbOptions by adding group info

Repository: directory-kerby
Updated Branches:
  refs/heads/master 9063089c0 -> f8ddb69b6


DIRKRB-460 Categorize KrbOptions by adding group info


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/ea2cd2e5
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/ea2cd2e5
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/ea2cd2e5

Branch: refs/heads/master
Commit: ea2cd2e55d3cd2d4dc9a0c350a1940f22a2eb1bd
Parents: b071833
Author: Kai Zheng <ka...@intel.com>
Authored: Fri Nov 20 14:15:47 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Fri Nov 20 14:15:47 2015 +0800

----------------------------------------------------------------------
 .../kerby/kerberos/kerb/admin/KadminOption.java |  18 +++
 .../kerby/kerberos/kerb/client/KrbOption.java   | 118 ++++++++++++-------
 .../kerberos/kerb/client/KrbOptionGroup.java    |  38 ++++++
 .../client/impl/AbstractInternalKrbClient.java  |  15 ---
 .../kerb/client/request/KdcRequest.java         |  19 +++
 .../kerberos/kerb/server/KdcServerOption.java   |  18 +++
 .../kerby/kerberos/tool/kinit/KinitOption.java  |  18 +++
 .../kerby/kerberos/tool/klist/KlistOption.java  |  17 +++
 .../src/main/java/org/apache/kerby/KOption.java |  15 +++
 .../java/org/apache/kerby/KOptionGroup.java     |  33 ++++++
 10 files changed, 251 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/KadminOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/KadminOption.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/KadminOption.java
index ae47809..d152aa4 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/KadminOption.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/KadminOption.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.admin;
 
 import org.apache.kerby.KOption;
+import org.apache.kerby.KOptionGroup;
 import org.apache.kerby.KOptionType;
 
 public enum KadminOption implements KOption {
@@ -38,6 +39,7 @@ public enum KadminOption implements KOption {
     CCACHE("-c", "credentials cache", KOptionType.FILE);
 
     private String name;
+    private KOptionGroup group;
     private KOptionType type = KOptionType.NONE;
     private String description;
     private Object value;
@@ -146,4 +148,20 @@ public enum KadminOption implements KOption {
     public void setValue(Object value) {
         this.value = value;
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setGroup(KOptionGroup group) {
+        this.group = group;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public KOptionGroup getGroup() {
+        return group;
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOption.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOption.java
index b2e0072..e31849b 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOption.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOption.java
@@ -20,38 +20,44 @@
 package org.apache.kerby.kerberos.kerb.client;
 
 import org.apache.kerby.KOption;
+import org.apache.kerby.KOptionGroup;
 import org.apache.kerby.KOptionType;
 
+/**
+ * This defines all the options that come across the client side.
+ */
 public enum KrbOption implements KOption {
-    NONE("NONE"),
+    NONE("NONE", null),
     CLIENT_PRINCIPAL("client-principal", "Client principal", KOptionType.STR),
-    KDC_REALM("kdc realm", KOptionType.STR),
-    KDC_HOST("kdc host", KOptionType.STR),
-    KDC_TCP_PORT("kdc tcp port", KOptionType.INT),
-    ALLOW_UDP("allow udp", KOptionType.BOOL),
-    ALLOW_TCP("allow tcp", KOptionType.BOOL),
-    KDC_UDP_PORT("kdc udp port", KOptionType.INT),
-    CONN_TIMEOUT("connection timeout", KOptionType.INT),
-    LIFE_TIME("life time", KOptionType.INT),
-    START_TIME("start time", KOptionType.INT),
-    RENEWABLE_TIME("renewable lifetime", KOptionType.INT),
-    FORWARDABLE("forwardable"),
-    NOT_FORWARDABLE("not forwardable"),
-    PROXIABLE("proxiable"),
-    NOT_PROXIABLE("not proxiable"),
-    ANONYMOUS("anonymous"),
-    INCLUDE_ADDRESSES("include addresses"),
-    NOT_INCLUDE_ADDRESSES("do not include addresses"),
-    VALIDATE("validate"),
-    RENEW("renew"),
-    CANONICALIZE("canonicalize"),
+    KDC_REALM("kdc-realm", "kdc realm", KOptionType.STR),
+    KDC_HOST("kdc-host", "kdc host", KOptionType.STR),
+    KDC_TCP_PORT("kdc-tcp-port", "kdc tcp port", KOptionType.INT),
+    ALLOW_UDP("allow-udp", "allow udp", KOptionType.BOOL),
+    ALLOW_TCP("allow-tcp", "allow tcp", KOptionType.BOOL),
+    KDC_UDP_PORT("kdc-udp-port", "kdc udp port", KOptionType.INT),
+    CONN_TIMEOUT("conn-timeout", "connection timeout", KOptionType.INT),
+    LIFE_TIME("life-time", "life time", KOptionType.INT),
+    START_TIME("start-time", "start time", KOptionType.INT),
+    RENEWABLE_TIME("renewable_lifetime", "renewable lifetime", KOptionType.INT),
+
+    /* KDC flags */
+    FORWARDABLE("forwardable", "forwardable", KrbOptionGroup.KDC_FLAGS),
+    PROXIABLE("proxiable", "proxiable", KrbOptionGroup.KDC_FLAGS),
+    ANONYMOUS("anonymous", "anonymous", KrbOptionGroup.KDC_FLAGS),
+    VALIDATE("validate", "validate", KrbOptionGroup.KDC_FLAGS),
+    RENEW("renew", "renew", KrbOptionGroup.KDC_FLAGS),
+    RENEWABLE("renewable", "renewable", KrbOptionGroup.KDC_FLAGS),
+    RENEWABLE_OK("renewable-ok", "renewable ok", KrbOptionGroup.KDC_FLAGS),
+    CANONICALIZE("canonicalize", "canonicalize", KrbOptionGroup.KDC_FLAGS),
+
+    INCLUDE_ADDRESSES("include_addresses", "include addresses"),
     AS_ENTERPRISE_PN("as-enterprise-pn", "client is enterprise principal name"),
 
-    USE_PASSWD("using password", "using password"),
+    USE_PASSWD("using-password", "using password"),
     USER_PASSWD("user-passwd", "User plain password"),
 
     USE_KEYTAB("use-keytab", "use keytab"),
-    USE_DFT_KEYTAB("-i", "use default client keytab (with -k)"),
+    USE_DFT_KEYTAB("use-dft-keytab", "use default client keytab (with -k)"),
     KEYTAB_FILE("keytab-file", "filename of keytab to use", KOptionType.FILE),
 
     KRB5_CACHE("krb5-cache", "K5 cache name", KOptionType.FILE),
@@ -60,40 +66,50 @@ public enum KrbOption implements KOption {
     ARMOR_CACHE("armor-cache", "armor credential cache", KOptionType.STR),
 
     USE_PKINIT("use-pkinit", "using pkinit"),
-    PKINIT_X509_IDENTITY("x509-identities", "X509 user private key and cert", KOptionType.STR),
-    PKINIT_X509_PRIVATE_KEY("x509-privatekey", "X509 user private key", KOptionType.STR),
-    PKINIT_X509_CERTIFICATE("x509-cert", "X509 user certificate", KOptionType.STR),
-    PKINIT_X509_ANCHORS("x509-anchors", "X509 anchors", KOptionType.STR),
-    PKINIT_USING_RSA("using-rsa-or-dh", "Using RSA or DH"),
-
-    USE_PKINIT_ANONYMOUS("use-pkinit-anonymous", "X509 anonymous"),
-
-    USE_TOKEN("use-id-token", "Using identity token"),
-    TOKEN_USER_ID_TOKEN("user-id-token", "User identity token", KOptionType.STR),
-    TOKEN_USER_AC_TOKEN("user-ac-token", "User access token", KOptionType.STR),
-    USE_TGT("use tgt", "use tgt to get service ticket", KOptionType.OBJ);
+    PKINIT_X509_IDENTITY("x509-identities", "X509 user private key and cert",
+        KrbOptionGroup.PKINIT, KOptionType.STR),
+    PKINIT_X509_PRIVATE_KEY("x509-privatekey", "X509 user private key",
+        KrbOptionGroup.PKINIT, KOptionType.STR),
+    PKINIT_X509_CERTIFICATE("x509-cert", "X509 user certificate",
+        KrbOptionGroup.PKINIT, KOptionType.STR),
+    PKINIT_X509_ANCHORS("x509-anchors", "X509 anchors",
+        KrbOptionGroup.PKINIT,
+        KOptionType.STR),
+    PKINIT_USING_RSA("using-rsa-or-dh", "Using RSA or DH",
+        KrbOptionGroup.PKINIT),
+    USE_PKINIT_ANONYMOUS("use-pkinit-anonymous", "X509 anonymous",
+        KrbOptionGroup.PKINIT),
+
+    USE_TOKEN("use-id-token", "Using identity token", KrbOptionGroup.TOKEN),
+    TOKEN_USER_ID_TOKEN("user-id-token", "User identity token",
+        KrbOptionGroup.TOKEN, KOptionType.STR),
+    TOKEN_USER_AC_TOKEN("user-ac-token", "User access token",
+        KrbOptionGroup.TOKEN, KOptionType.STR),
+    USE_TGT("use-tgt", "use tgt to get service ticket", KOptionType.OBJ);
 
     private String name;
+    private KOptionGroup group;
     private KOptionType type;
     private String description;
     private Object value;
 
-    KrbOption(String description) {
-        this(description, KOptionType.NOV); // As a flag by default
+    KrbOption(String name, String description) {
+        this(name, description, KOptionType.NOV);
     }
 
-    KrbOption(String description, KOptionType type) {
-        this.description = description;
-        this.type = type;
+    KrbOption(String name, String description, KOptionType type) {
+        this(name, description, null, type);
     }
 
-    KrbOption(String name, String description) {
-        this(name, description, KOptionType.NOV); // As a flag by default
+    KrbOption(String name, String description, KrbOptionGroup group) {
+        this(name, description, group, KOptionType.NOV);
     }
 
-    KrbOption(String name, String description, KOptionType type) {
+    KrbOption(String name, String description,
+              KrbOptionGroup group, KOptionType type) {
         this.name = name;
         this.description = description;
+        this.group = group;
         this.type = type;
     }
 
@@ -175,6 +191,22 @@ public enum KrbOption implements KOption {
     /**
      * {@inheritDoc}
      */
+    @Override
+    public void setGroup(KOptionGroup group) {
+        this.group = group;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public KOptionGroup getGroup() {
+        return group;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public static KrbOption fromName(String name) {
         if (name != null) {
             for (KrbOption ko : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOptionGroup.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOptionGroup.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOptionGroup.java
new file mode 100644
index 0000000..0b2af67
--- /dev/null
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/KrbOptionGroup.java
@@ -0,0 +1,38 @@
+/**
+ *  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.client;
+
+import org.apache.kerby.KOptionGroup;
+
+/**
+ * This defines option groups to categorize the options defined in KrbOption.
+ */
+public enum KrbOptionGroup implements KOptionGroup {
+    NONE,
+    KDC_FLAGS,
+    PKINIT,
+    TOKEN,
+    KINIT;
+
+    @Override
+    public String getGroupName() {
+        return name().toLowerCase();
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/impl/AbstractInternalKrbClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/impl/AbstractInternalKrbClient.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/impl/AbstractInternalKrbClient.java
index 2bcbcc9..40d1827 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/impl/AbstractInternalKrbClient.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/impl/AbstractInternalKrbClient.java
@@ -35,8 +35,6 @@ import org.apache.kerby.kerberos.kerb.client.request.TgsRequestWithTgt;
 import org.apache.kerby.kerberos.kerb.client.request.TgsRequestWithToken;
 import org.apache.kerby.kerberos.kerb.spec.base.NameType;
 import org.apache.kerby.kerberos.kerb.spec.base.PrincipalName;
-import org.apache.kerby.kerberos.kerb.spec.kdc.KdcOption;
-import org.apache.kerby.kerberos.kerb.spec.kdc.KdcOptions;
 import org.apache.kerby.kerberos.kerb.spec.ticket.ServiceTicket;
 import org.apache.kerby.kerberos.kerb.spec.ticket.TgtTicket;
 
@@ -110,19 +108,6 @@ public abstract class AbstractInternalKrbClient implements InternalKrbClient {
             asRequest.setServerPrincipal(serverPrincipal);
         }
 
-        KdcOptions kdcOptions = new KdcOptions();
-        for (KOption koption: requestOptions.getOptions()) {
-            try {
-              KdcOption kdcOption = KdcOption.valueOf(koption.getOptionName());
-              kdcOptions.setFlag(kdcOption, requestOptions.getBooleanOption(koption, false));
-            } catch (IllegalArgumentException | NullPointerException e) {
-              // It's completely acceptable that a request option is NOT a KdcOption
-              // but PMD doesn't like empty finally or catch blocks - here's a message
-              // just for you!
-              e.getMessage();
-            }
-        }
-        asRequest.setKdcOptions(kdcOptions);
         asRequest.setKrbOptions(requestOptions);
 
         return doRequestTgtTicket(asRequest);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java
index 9ee3340..0d7ad6c 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.kerberos.kerb.client.request;
 
+import org.apache.kerby.KOption;
 import org.apache.kerby.KOptions;
 import org.apache.kerby.kerberos.kerb.KrbException;
 import org.apache.kerby.kerberos.kerb.client.KrbContext;
+import org.apache.kerby.kerberos.kerb.client.KrbOptionGroup;
 import org.apache.kerby.kerberos.kerb.client.preauth.KrbFastRequestState;
 import org.apache.kerby.kerberos.kerb.client.preauth.PreauthContext;
 import org.apache.kerby.kerberos.kerb.client.preauth.PreauthHandler;
@@ -37,6 +39,7 @@ import org.apache.kerby.kerberos.kerb.spec.base.HostAddresses;
 import org.apache.kerby.kerberos.kerb.spec.base.KeyUsage;
 import org.apache.kerby.kerberos.kerb.spec.base.PrincipalName;
 import org.apache.kerby.kerberos.kerb.spec.kdc.KdcOptions;
+import org.apache.kerby.kerberos.kerb.spec.kdc.KdcOption;
 import org.apache.kerby.kerberos.kerb.spec.kdc.KdcRep;
 import org.apache.kerby.kerberos.kerb.spec.kdc.KdcReq;
 import org.apache.kerby.kerberos.kerb.spec.kdc.KdcReqBody;
@@ -297,6 +300,7 @@ public abstract class KdcRequest {
     }
 
     public void process() throws KrbException {
+        processKdcOptions();
         preauth();
     }
 
@@ -393,4 +397,19 @@ public abstract class KdcRequest {
     public void cacheValue(String key, Object value) {
         credCache.put(key, value);
     }
+
+    protected void processKdcOptions() {
+        // By default enforce these flags
+        kdcOptions.setFlag(KdcOption.FORWARDABLE);
+        kdcOptions.setFlag(KdcOption.PROXIABLE);
+        kdcOptions.setFlag(KdcOption.RENEWABLE_OK);
+
+        for (KOption kOpt: krbOptions.getOptions()) {
+            if (kOpt.getGroup() == KrbOptionGroup.KDC_FLAGS) {
+                KdcOption kdcOption = KdcOption.valueOf(kOpt.getOptionName());
+                boolean flagValue = krbOptions.getBooleanOption(kOpt, false);
+                kdcOptions.setFlag(kdcOption, flagValue);
+            }
+        }
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java
index b76f91f..5228285 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcServerOption.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.server;
 
 import org.apache.kerby.KOption;
+import org.apache.kerby.KOptionGroup;
 import org.apache.kerby.KOptionType;
 
 /**
@@ -39,6 +40,7 @@ public enum KdcServerOption implements KOption {
     ENABLE_DEBUG("enable debug", KOptionType.BOOL);
 
     private String name;
+    private KOptionGroup group;
     private KOptionType type;
     private String description;
     private Object value;
@@ -137,6 +139,22 @@ public enum KdcServerOption implements KOption {
         return value;
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setGroup(KOptionGroup group) {
+        this.group = group;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public KOptionGroup getGroup() {
+        return group;
+    }
+
     public static KdcServerOption fromName(String name) {
         if (name != null) {
             for (KdcServerOption ko : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/kinit/KinitOption.java
----------------------------------------------------------------------
diff --git a/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/kinit/KinitOption.java b/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/kinit/KinitOption.java
index 23a7091..ad5d23d 100644
--- a/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/kinit/KinitOption.java
+++ b/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/kinit/KinitOption.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.tool.kinit;
 
 import org.apache.kerby.KOption;
+import org.apache.kerby.KOptionGroup;
 import org.apache.kerby.KOptionType;
 
 public enum KinitOption implements KOption {
@@ -51,6 +52,7 @@ public enum KinitOption implements KOption {
     CONF_DIR("-conf", "conf dir", KOptionType.DIR);
 
     private String name;
+    private KOptionGroup group;
     private KOptionType type = KOptionType.NONE;
     private String description;
     private Object value;
@@ -152,6 +154,22 @@ public enum KinitOption implements KOption {
     /**
      * {@inheritDoc}
      */
+    @Override
+    public void setGroup(KOptionGroup group) {
+        this.group = group;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public KOptionGroup getGroup() {
+        return group;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public static KinitOption fromName(String name) {
         if (name != null) {
             for (KinitOption ko : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/klist/KlistOption.java
----------------------------------------------------------------------
diff --git a/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/klist/KlistOption.java b/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/klist/KlistOption.java
index b4d9383..b09fbf2 100644
--- a/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/klist/KlistOption.java
+++ b/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/klist/KlistOption.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.tool.klist;
 
 import org.apache.kerby.KOption;
+import org.apache.kerby.KOptionGroup;
 import org.apache.kerby.KOptionType;
 
 public enum KlistOption implements KOption {
@@ -40,6 +41,7 @@ public enum KlistOption implements KOption {
     SHOW_KTAB_ENTRY_KEY("-K", "show keytab entry keys");
 
     private String name;
+    private KOptionGroup group;
     private KOptionType type = KOptionType.NONE;
     private String description;
     private Object value;
@@ -149,4 +151,19 @@ public enum KlistOption implements KOption {
         this.value = value;
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setGroup(KOptionGroup group) {
+        this.group = group;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public KOptionGroup getGroup() {
+        return group;
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-util/src/main/java/org/apache/kerby/KOption.java
----------------------------------------------------------------------
diff --git a/kerby-util/src/main/java/org/apache/kerby/KOption.java b/kerby-util/src/main/java/org/apache/kerby/KOption.java
index 84ccb97..c458232 100644
--- a/kerby-util/src/main/java/org/apache/kerby/KOption.java
+++ b/kerby-util/src/main/java/org/apache/kerby/KOption.java
@@ -87,5 +87,20 @@ public interface KOption {
      * @return The value
      */
     Object getValue();
+
+    /**
+     * Set group.
+     *
+     * @param value The group
+     */
+    void setGroup(KOptionGroup value);
+
+
+    /**
+     * Get group.
+     *
+     * @return The group
+     */
+    KOptionGroup getGroup();
 }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ea2cd2e5/kerby-util/src/main/java/org/apache/kerby/KOptionGroup.java
----------------------------------------------------------------------
diff --git a/kerby-util/src/main/java/org/apache/kerby/KOptionGroup.java b/kerby-util/src/main/java/org/apache/kerby/KOptionGroup.java
new file mode 100644
index 0000000..1b1424f
--- /dev/null
+++ b/kerby-util/src/main/java/org/apache/kerby/KOptionGroup.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;
+
+/**
+ * Option group.
+ */
+public interface KOptionGroup {
+
+    /**
+     * Get group name.
+     *
+     * @return The group name
+     */
+    String getGroupName();
+}


[2/2] directory-kerby git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/directory-kerby

Posted by dr...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/directory-kerby


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/f8ddb69b
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/f8ddb69b
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/f8ddb69b

Branch: refs/heads/master
Commit: f8ddb69b6e739ca5406497c022ed0684f4c0fa7f
Parents: ea2cd2e 9063089
Author: Kai Zheng <ka...@intel.com>
Authored: Fri Nov 20 14:17:19 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Fri Nov 20 14:17:19 2015 +0800

----------------------------------------------------------------------
 README.md | 45 +++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 41 insertions(+), 4 deletions(-)
----------------------------------------------------------------------