You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pl...@apache.org on 2017/08/10 02:08:47 UTC

directory-kerby git commit: Add the feature of parsing time duration for kinit tool. Contributed by Lin Zeng.

Repository: directory-kerby
Updated Branches:
  refs/heads/1.0.x-fixes 7e2d8e7f8 -> 58fb1500f


Add the feature of parsing time duration for kinit tool. Contributed by Lin Zeng.


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

Branch: refs/heads/1.0.x-fixes
Commit: 58fb1500f8af51ae670a6fc0434e91e89e3053fd
Parents: 7e2d8e7
Author: plusplusjiajia <ji...@intel.com>
Authored: Thu Aug 10 10:01:46 2017 +0800
Committer: plusplusjiajia <ji...@intel.com>
Committed: Thu Aug 10 10:08:45 2017 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/kerby/KOptionType.java |  3 +-
 .../main/java/org/apache/kerby/KOptions.java    | 31 ++++++++++++++++++++
 .../kerby/kerberos/tool/kinit/KinitOption.java  |  6 ++--
 3 files changed, 36 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/58fb1500/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptionType.java
----------------------------------------------------------------------
diff --git a/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptionType.java b/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptionType.java
index d7e53b3..5a7f548 100644
--- a/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptionType.java
+++ b/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptionType.java
@@ -31,5 +31,6 @@ public enum KOptionType {
     FILE, // file path value
     DIR, // dir path value
     OBJ,  // arbitrary object
-    DATE // date value
+    DATE, // date value
+    DURATION // date duration value
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/58fb1500/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptions.java
----------------------------------------------------------------------
diff --git a/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptions.java b/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptions.java
index 9934751..24c6a9d 100644
--- a/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptions.java
+++ b/kerby-common/kerby-util/src/main/java/org/apache/kerby/KOptions.java
@@ -28,6 +28,8 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * A KOption container.
@@ -78,6 +80,35 @@ public class KOptions {
             } catch (ParseException e) {
                 throw new IllegalArgumentException("Fail to parse the date: " + strValue);
             }
+        } else if (kt == KOptionType.DURATION) {
+            int duration;
+            Matcher matcherColon = Pattern.compile("\\d+(?::\\d+){0,2}").matcher(strValue);
+            Matcher matcherWord = Pattern.compile("(?:(\\d+)D)?(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?",
+                Pattern.CASE_INSENSITIVE).matcher(strValue);
+            if (matcherColon.matches()) {
+                String[] durations = strValue.split(":");
+                if (durations.length == 1) {
+                    duration = Integer.valueOf(durations[0]);
+                } else if (durations.length == 2) {
+                    duration = Integer.valueOf(durations[0]) * 3600 + Integer.valueOf(durations[1]) * 60;
+                } else {
+                    duration = Integer.valueOf(durations[0]) * 3600 + Integer.valueOf(durations[1]) * 60;
+                    duration += Integer.valueOf(durations[2]);
+                }
+                kopt.setValue(duration);
+            } else if (matcherWord.matches()) {
+                int[] durations = new int[4];
+                for (int i = 0; i < 4; i++) {
+                    String durationMatch = matcherWord.group(i + 1);
+                    if (durationMatch != null) {
+                        durations[i] = Integer.valueOf(durationMatch);
+                    }
+                }
+                duration = durations[0] * 86400 + durations[1] * 3600 + durations[2] * 60 + durations[3];
+                kopt.setValue(duration);
+            } else {
+                throw new IllegalArgumentException("Text can't be parsed to a Duration: " + strValue);
+            }
         } else if (kt == KOptionType.BOOL) {
             kopt.setValue(Boolean.valueOf(strValue));
         } else {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/58fb1500/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 a4b581d..3eb18f1 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
@@ -30,11 +30,11 @@ public enum KinitOption implements KOption {
     CLIENT_PRINCIPAL(new KOptionInfo("client-principal", "Client principal",
         KrbOptionGroup.KRB, KOptionType.STR)),
     LIFE_TIME(new KOptionInfo("-l", "lifetime",
-        KrbOptionGroup.KRB, KOptionType.INT)),
+        KrbOptionGroup.KRB, KOptionType.DURATION)),
     START_TIME(new KOptionInfo("-s", "start time",
-        KrbOptionGroup.KRB, KOptionType.INT)),
+        KrbOptionGroup.KRB, KOptionType.DURATION)),
     RENEWABLE_LIFE(new KOptionInfo("-r", "renewable lifetime",
-        KrbOptionGroup.KRB, KOptionType.INT)),
+        KrbOptionGroup.KRB, KOptionType.DURATION)),
     AS_ENTERPRISE_PN(new KOptionInfo("-E", "client is enterprise principal name",
         KrbOptionGroup.KRB)),
     INCLUDE_ADDRESSES(new KOptionInfo("-a", "include addresses",