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/01/12 14:06:22 UTC
[14/50] [abbrv] directory-kerberos git commit: Renaming packages in
haox-kerb projects, using "apache"
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/Identity.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/Identity.java b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/Identity.java
new file mode 100644
index 0000000..cce9c16
--- /dev/null
+++ b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/Identity.java
@@ -0,0 +1,48 @@
+package org.apache.kerberos.kerb.identity;
+
+import java.util.*;
+
+public class Identity {
+ private String name;
+ private Map<String, Attribute> attributes;
+
+ public Identity(String name) {
+ this.name = name;
+ this.attributes = new HashMap<String, Attribute>();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void addAttribute(String name, String value) {
+ attributes.put(name, new SimpleAttribute(name, value));
+ }
+
+ public void addAttribute(Attribute attribute) {
+ attributes.put(attribute.getName(), attribute);
+ }
+
+ public Set<String> getAttributes() {
+ return Collections.unmodifiableSet(attributes.keySet());
+ }
+
+ public String getSimpleAttribute(String name) {
+ Attribute attr = attributes.get(name);
+ if (! (attr instanceof SimpleAttribute)) {
+ throw new RuntimeException("Not simple attribute");
+ }
+ return ((SimpleAttribute) attr).getValue();
+ }
+
+ public void setAttributes(List<Attribute> attributes) {
+ this.attributes.clear();
+ for (Attribute attr : attributes) {
+ addAttribute(attr);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/IdentityService.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/IdentityService.java b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/IdentityService.java
new file mode 100644
index 0000000..9201f2e
--- /dev/null
+++ b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/IdentityService.java
@@ -0,0 +1,12 @@
+package org.apache.kerberos.kerb.identity;
+
+import java.util.List;
+
+public interface IdentityService {
+ public List<KrbIdentity> getIdentities();
+ public boolean checkIdentity(String name);
+ public KrbIdentity getIdentity(String name);
+ public void addIdentity(KrbIdentity identity);
+ public void updateIdentity(KrbIdentity identity);
+ public void deleteIdentity(KrbIdentity identity);
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/KrbAttributes.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/KrbAttributes.java b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/KrbAttributes.java
new file mode 100644
index 0000000..0939cf2
--- /dev/null
+++ b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/KrbAttributes.java
@@ -0,0 +1,6 @@
+package org.apache.kerberos.kerb.identity;
+
+public class KrbAttributes {
+ public static final String PRINCIPAL = "principal";
+ public static final String PASSWORD = "password";
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/KrbIdentity.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/KrbIdentity.java b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/KrbIdentity.java
new file mode 100644
index 0000000..a672b01
--- /dev/null
+++ b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/KrbIdentity.java
@@ -0,0 +1,107 @@
+package org.apache.kerberos.kerb.identity;
+
+import org.apache.kerberos.kerb.spec.KerberosTime;
+import org.apache.kerberos.kerb.spec.common.EncryptionKey;
+import org.apache.kerberos.kerb.spec.common.EncryptionType;
+import org.apache.kerberos.kerb.spec.common.PrincipalName;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class KrbIdentity {
+ private String principalName;
+ private PrincipalName principal;
+ private int keyVersion = 1;
+ private int kdcFlags = 0;
+ private boolean disabled = false;
+ private boolean locked = false;
+ private KerberosTime expireTime = KerberosTime.NEVER;
+ private KerberosTime createdTime = KerberosTime.now();
+
+ private Map<EncryptionType, EncryptionKey> keys =
+ new HashMap<EncryptionType, EncryptionKey>();
+
+ public KrbIdentity(String principalName) {
+ this.principalName = principalName;
+ this.principal = new PrincipalName(principalName);
+ }
+
+ public String getPrincipalName() {
+ return principalName;
+ }
+
+ public void setPrincipal(PrincipalName principal) {
+ this.principal = principal;
+ }
+
+ public PrincipalName getPrincipal() {
+ return principal;
+ }
+
+ public void setKeyVersion(int keyVersion) {
+ this.keyVersion = keyVersion;
+ }
+
+ public void setKdcFlags(int kdcFlags) {
+ this.kdcFlags = kdcFlags;
+ }
+
+ public void setDisabled(boolean disabled) {
+ this.disabled = disabled;
+ }
+
+ public void setLocked(boolean locked) {
+ this.locked = locked;
+ }
+
+ public void setExpireTime(KerberosTime expireTime) {
+ this.expireTime = expireTime;
+ }
+
+ public KerberosTime getExpireTime() {
+ return expireTime;
+ }
+
+ public KerberosTime getCreatedTime() {
+ return createdTime;
+ }
+
+ public void setCreatedTime(KerberosTime createdTime) {
+ this.createdTime = createdTime;
+ }
+
+ public boolean isDisabled() {
+ return disabled;
+ }
+
+ public boolean isLocked() {
+ return locked;
+ }
+
+ public void addKey(EncryptionKey encKey) {
+ keys.put(encKey.getKeyType(), encKey);
+ }
+
+ public void addKeys(List<EncryptionKey> encKeys) {
+ for (EncryptionKey key : encKeys) {
+ keys.put(key.getKeyType(), key);
+ }
+ }
+
+ public Map<EncryptionType, EncryptionKey> getKeys() {
+ return keys;
+ }
+
+ public EncryptionKey getKey(EncryptionType encType) {
+ return keys.get(encType);
+ }
+
+ public int getKdcFlags() {
+ return kdcFlags;
+ }
+
+ public int getKeyVersion() {
+ return keyVersion;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/SimpleAttribute.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/SimpleAttribute.java b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/SimpleAttribute.java
new file mode 100644
index 0000000..5774dfa
--- /dev/null
+++ b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/SimpleAttribute.java
@@ -0,0 +1,18 @@
+package org.apache.kerberos.kerb.identity;
+
+public class SimpleAttribute extends Attribute {
+ private String value;
+
+ public SimpleAttribute(String name, String value) {
+ super(name);
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/AbstractIdentityBackend.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/AbstractIdentityBackend.java b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/AbstractIdentityBackend.java
new file mode 100644
index 0000000..7adac7c
--- /dev/null
+++ b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/AbstractIdentityBackend.java
@@ -0,0 +1,7 @@
+package org.apache.kerberos.kerb.identity.backend;
+
+import org.apache.kerberos.kerb.identity.IdentityService;
+
+public abstract class AbstractIdentityBackend implements IdentityService {
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/InMemoryIdentityBackend.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/InMemoryIdentityBackend.java b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/InMemoryIdentityBackend.java
new file mode 100644
index 0000000..5a63f7e
--- /dev/null
+++ b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/InMemoryIdentityBackend.java
@@ -0,0 +1,57 @@
+package org.apache.kerberos.kerb.identity.backend;
+
+import org.apache.kerberos.kerb.identity.KrbIdentity;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class InMemoryIdentityBackend extends AbstractIdentityBackend {
+
+ private Map<String, KrbIdentity> identities;
+
+ public InMemoryIdentityBackend() {
+ this.identities = new HashMap<String, KrbIdentity>();
+ }
+
+ public InMemoryIdentityBackend(Map<String, KrbIdentity> identities) {
+ this();
+ this.identities.putAll(identities);
+ }
+
+ @Override
+ public List<KrbIdentity> getIdentities() {
+ List<KrbIdentity> results = new ArrayList<KrbIdentity>(identities.size());
+ results.addAll(identities.values());
+ return results;
+ }
+
+ @Override
+ public boolean checkIdentity(String name) {
+ return identities.containsKey(name);
+ }
+
+ @Override
+ public KrbIdentity getIdentity(String name) {
+ if (identities.containsKey(name)) {
+ return identities.get(name);
+ }
+ return null;
+ }
+
+ @Override
+ public void addIdentity(KrbIdentity identity) {
+ identities.put(identity.getPrincipalName(), identity);
+ }
+
+ @Override
+ public void updateIdentity(KrbIdentity identity) {
+ identities.put(identity.getPrincipalName(), identity);
+ }
+
+ @Override
+ public void deleteIdentity(KrbIdentity identity) {
+ identities.remove(identity.getPrincipalName());
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/SimpleIdentityBackend.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/SimpleIdentityBackend.java b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/SimpleIdentityBackend.java
new file mode 100644
index 0000000..a74e453
--- /dev/null
+++ b/haox-kerb/kerb-identity/src/main/java/org/apache/kerberos/kerb/identity/backend/SimpleIdentityBackend.java
@@ -0,0 +1,27 @@
+package org.apache.kerberos.kerb.identity.backend;
+
+import java.io.File;
+
+public class SimpleIdentityBackend extends InMemoryIdentityBackend {
+
+ private File identityFile;
+
+ public SimpleIdentityBackend(File identityFile) {
+ super();
+ this.identityFile = identityFile;
+ }
+
+ /**
+ * Load identities from file
+ */
+ public void load() {
+ // todo
+ }
+
+ /**
+ * Persist the updated identities back
+ */
+ public void save() {
+ // todo
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/Attribute.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/Attribute.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/Attribute.java
deleted file mode 100644
index cadd67c..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/Attribute.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.haox.kerb.identity;
-
-public abstract class Attribute {
- private String name;
-
- public Attribute(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/ComplexAttribute.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/ComplexAttribute.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/ComplexAttribute.java
deleted file mode 100644
index 6b05de8..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/ComplexAttribute.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.haox.kerb.identity;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public class ComplexAttribute extends Attribute {
- private List<String> values;
-
- public ComplexAttribute(String name) {
- super(name);
- this.values = new ArrayList<String>(1);
- }
-
- public List<String> getValues() {
- return Collections.unmodifiableList(values);
- }
-
- public void setValues(List<String> values) {
- this.values.clear();
- this.values.addAll(values);
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/Identity.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/Identity.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/Identity.java
deleted file mode 100644
index 8de32b9..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/Identity.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.haox.kerb.identity;
-
-import java.util.*;
-
-public class Identity {
- private String name;
- private Map<String, Attribute> attributes;
-
- public Identity(String name) {
- this.name = name;
- this.attributes = new HashMap<String, Attribute>();
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void addAttribute(String name, String value) {
- attributes.put(name, new SimpleAttribute(name, value));
- }
-
- public void addAttribute(Attribute attribute) {
- attributes.put(attribute.getName(), attribute);
- }
-
- public Set<String> getAttributes() {
- return Collections.unmodifiableSet(attributes.keySet());
- }
-
- public String getSimpleAttribute(String name) {
- Attribute attr = attributes.get(name);
- if (! (attr instanceof SimpleAttribute)) {
- throw new RuntimeException("Not simple attribute");
- }
- return ((SimpleAttribute) attr).getValue();
- }
-
- public void setAttributes(List<Attribute> attributes) {
- this.attributes.clear();
- for (Attribute attr : attributes) {
- addAttribute(attr);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/IdentityService.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/IdentityService.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/IdentityService.java
deleted file mode 100644
index 506f40a..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/IdentityService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.haox.kerb.identity;
-
-import java.util.List;
-
-public interface IdentityService {
- public List<KrbIdentity> getIdentities();
- public boolean checkIdentity(String name);
- public KrbIdentity getIdentity(String name);
- public void addIdentity(KrbIdentity identity);
- public void updateIdentity(KrbIdentity identity);
- public void deleteIdentity(KrbIdentity identity);
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/KrbAttributes.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/KrbAttributes.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/KrbAttributes.java
deleted file mode 100644
index 2246815..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/KrbAttributes.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.haox.kerb.identity;
-
-public class KrbAttributes {
- public static final String PRINCIPAL = "principal";
- public static final String PASSWORD = "password";
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/KrbIdentity.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/KrbIdentity.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/KrbIdentity.java
deleted file mode 100644
index b97ec03..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/KrbIdentity.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.haox.kerb.identity;
-
-import org.haox.kerb.spec.KerberosTime;
-import org.haox.kerb.spec.common.EncryptionKey;
-import org.haox.kerb.spec.common.EncryptionType;
-import org.haox.kerb.spec.common.PrincipalName;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class KrbIdentity {
- private String principalName;
- private PrincipalName principal;
- private int keyVersion = 1;
- private int kdcFlags = 0;
- private boolean disabled = false;
- private boolean locked = false;
- private KerberosTime expireTime = KerberosTime.NEVER;
- private KerberosTime createdTime = KerberosTime.now();
-
- private Map<EncryptionType, EncryptionKey> keys =
- new HashMap<EncryptionType, EncryptionKey>();
-
- public KrbIdentity(String principalName) {
- this.principalName = principalName;
- this.principal = new PrincipalName(principalName);
- }
-
- public String getPrincipalName() {
- return principalName;
- }
-
- public void setPrincipal(PrincipalName principal) {
- this.principal = principal;
- }
-
- public PrincipalName getPrincipal() {
- return principal;
- }
-
- public void setKeyVersion(int keyVersion) {
- this.keyVersion = keyVersion;
- }
-
- public void setKdcFlags(int kdcFlags) {
- this.kdcFlags = kdcFlags;
- }
-
- public void setDisabled(boolean disabled) {
- this.disabled = disabled;
- }
-
- public void setLocked(boolean locked) {
- this.locked = locked;
- }
-
- public void setExpireTime(KerberosTime expireTime) {
- this.expireTime = expireTime;
- }
-
- public KerberosTime getExpireTime() {
- return expireTime;
- }
-
- public KerberosTime getCreatedTime() {
- return createdTime;
- }
-
- public void setCreatedTime(KerberosTime createdTime) {
- this.createdTime = createdTime;
- }
-
- public boolean isDisabled() {
- return disabled;
- }
-
- public boolean isLocked() {
- return locked;
- }
-
- public void addKey(EncryptionKey encKey) {
- keys.put(encKey.getKeyType(), encKey);
- }
-
- public void addKeys(List<EncryptionKey> encKeys) {
- for (EncryptionKey key : encKeys) {
- keys.put(key.getKeyType(), key);
- }
- }
-
- public Map<EncryptionType, EncryptionKey> getKeys() {
- return keys;
- }
-
- public EncryptionKey getKey(EncryptionType encType) {
- return keys.get(encType);
- }
-
- public int getKdcFlags() {
- return kdcFlags;
- }
-
- public int getKeyVersion() {
- return keyVersion;
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/SimpleAttribute.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/SimpleAttribute.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/SimpleAttribute.java
deleted file mode 100644
index 8a56cba..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/SimpleAttribute.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.haox.kerb.identity;
-
-public class SimpleAttribute extends Attribute {
- private String value;
-
- public SimpleAttribute(String name, String value) {
- super(name);
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/AbstractIdentityBackend.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/AbstractIdentityBackend.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/AbstractIdentityBackend.java
deleted file mode 100644
index 9d95e3f..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/AbstractIdentityBackend.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.haox.kerb.identity.backend;
-
-import org.haox.kerb.identity.IdentityService;
-
-public abstract class AbstractIdentityBackend implements IdentityService {
-
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/InMemoryIdentityBackend.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/InMemoryIdentityBackend.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/InMemoryIdentityBackend.java
deleted file mode 100644
index ac1eb69..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/InMemoryIdentityBackend.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.haox.kerb.identity.backend;
-
-import org.haox.kerb.identity.KrbIdentity;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class InMemoryIdentityBackend extends AbstractIdentityBackend {
-
- private Map<String, KrbIdentity> identities;
-
- public InMemoryIdentityBackend() {
- this.identities = new HashMap<String, KrbIdentity>();
- }
-
- public InMemoryIdentityBackend(Map<String, KrbIdentity> identities) {
- this();
- this.identities.putAll(identities);
- }
-
- @Override
- public List<KrbIdentity> getIdentities() {
- List<KrbIdentity> results = new ArrayList<KrbIdentity>(identities.size());
- results.addAll(identities.values());
- return results;
- }
-
- @Override
- public boolean checkIdentity(String name) {
- return identities.containsKey(name);
- }
-
- @Override
- public KrbIdentity getIdentity(String name) {
- if (identities.containsKey(name)) {
- return identities.get(name);
- }
- return null;
- }
-
- @Override
- public void addIdentity(KrbIdentity identity) {
- identities.put(identity.getPrincipalName(), identity);
- }
-
- @Override
- public void updateIdentity(KrbIdentity identity) {
- identities.put(identity.getPrincipalName(), identity);
- }
-
- @Override
- public void deleteIdentity(KrbIdentity identity) {
- identities.remove(identity.getPrincipalName());
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/SimpleIdentityBackend.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/SimpleIdentityBackend.java b/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/SimpleIdentityBackend.java
deleted file mode 100644
index 7690830..0000000
--- a/haox-kerb/kerb-identity/src/main/java/org/haox/kerb/identity/backend/SimpleIdentityBackend.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.haox.kerb.identity.backend;
-
-import java.io.File;
-
-public class SimpleIdentityBackend extends InMemoryIdentityBackend {
-
- private File identityFile;
-
- public SimpleIdentityBackend(File identityFile) {
- super();
- this.identityFile = identityFile;
- }
-
- /**
- * Load identities from file
- */
- public void load() {
- // todo
- }
-
- /**
- * Persist the updated identities back
- */
- public void save() {
- // todo
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/test/resources/kdc-krb5.conf
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/test/resources/kdc-krb5.conf b/haox-kerb/kerb-identity/src/test/resources/kdc-krb5.conf
deleted file mode 100644
index d118dd1..0000000
--- a/haox-kerb/kerb-identity/src/test/resources/kdc-krb5.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-[libdefaults]
- default_realm = {0}
- udp_preference_limit = 1
-
-[realms]
- {0} = '{'
- kdc = {1}:{2}
- '}'
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-identity/src/test/resources/kdc.ldiff
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-identity/src/test/resources/kdc.ldiff b/haox-kerb/kerb-identity/src/test/resources/kdc.ldiff
deleted file mode 100644
index e344131..0000000
--- a/haox-kerb/kerb-identity/src/test/resources/kdc.ldiff
+++ /dev/null
@@ -1,30 +0,0 @@
-dn: ou=users,dc=${0},dc=${1}
-objectClass: organizationalUnit
-objectClass: top
-ou: users
-
-dn: uid=krbtgt,ou=users,dc=${0},dc=${1}
-objectClass: top
-objectClass: person
-objectClass: inetOrgPerson
-objectClass: krb5principal
-objectClass: krb5kdcentry
-cn: KDC Service
-sn: Service
-uid: krbtgt
-userPassword: secret
-krb5PrincipalName: krbtgt/${2}.${3}@${2}.${3}
-krb5KeyVersionNumber: 0
-
-dn: uid=ldap,ou=users,dc=${0},dc=${1}
-objectClass: top
-objectClass: person
-objectClass: inetOrgPerson
-objectClass: krb5principal
-objectClass: krb5kdcentry
-cn: LDAP
-sn: Service
-uid: ldap
-userPassword: secret
-krb5PrincipalName: ldap/${4}@${2}.${3}
-krb5KeyVersionNumber: 0
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/main/java/org/apache/kerberos/kerb/server/TestKdcServer.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/main/java/org/apache/kerberos/kerb/server/TestKdcServer.java b/haox-kerb/kerb-kdc-test/src/main/java/org/apache/kerberos/kerb/server/TestKdcServer.java
new file mode 100644
index 0000000..fd1435f
--- /dev/null
+++ b/haox-kerb/kerb-kdc-test/src/main/java/org/apache/kerberos/kerb/server/TestKdcServer.java
@@ -0,0 +1,103 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.kerberos.kerb.common.EncryptionUtil;
+import org.apache.kerberos.kerb.identity.KrbIdentity;
+import org.apache.kerberos.kerb.keytab.Keytab;
+import org.apache.kerberos.kerb.keytab.KeytabEntry;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.KerberosTime;
+import org.apache.kerberos.kerb.spec.common.EncryptionKey;
+import org.apache.kerberos.kerb.spec.common.EncryptionType;
+import org.apache.kerberos.kerb.spec.common.PrincipalName;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+import java.util.UUID;
+
+public class TestKdcServer extends SimpleKdcServer {
+
+ public static final String ORG_DOMAIN = KdcConfigKey.KDC_DOMAIN.getPropertyKey();
+ public static final String KDC_REALM = KdcConfigKey.KDC_REALM.getPropertyKey();
+ public static final String KDC_HOST = KdcConfigKey.KDC_HOST.getPropertyKey();
+ public static final String KDC_PORT = KdcConfigKey.KDC_PORT.getPropertyKey();
+ public static final String WORK_DIR = KdcConfigKey.WORK_DIR.getPropertyKey();
+
+ private static final Properties DEFAULT_CONFIG = new Properties();
+ static {
+ DEFAULT_CONFIG.setProperty(KDC_HOST, "localhost");
+ DEFAULT_CONFIG.setProperty(KDC_PORT, "8018");
+ DEFAULT_CONFIG.setProperty(ORG_DOMAIN, "test.com");
+ DEFAULT_CONFIG.setProperty(KDC_REALM, "TEST.COM");
+ }
+
+ public static Properties createConf() {
+ return (Properties) DEFAULT_CONFIG.clone();
+ }
+
+ public TestKdcServer() {
+ this(createConf());
+ }
+
+ public TestKdcServer(Properties conf) {
+ super();
+ getConfig().getConf().addPropertiesConfig(conf);
+ }
+
+ @Override
+ public void init() {
+ super.init();
+
+ createPrincipals("krbtgt");
+ }
+
+ public String getKdcRealm() {
+ return getConfig().getKdcRealm();
+ }
+
+ public synchronized void createPrincipal(String principal, String password) {
+ KrbIdentity identity = new KrbIdentity(principal);
+ List<EncryptionType> encTypes = getConfig().getEncryptionTypes();
+ List<EncryptionKey> encKeys = null;
+ try {
+ encKeys = EncryptionUtil.generateKeys(fixPrincipal(principal), password, encTypes);
+ } catch (KrbException e) {
+ throw new RuntimeException("Failed to generate encryption keys", e);
+ }
+ identity.addKeys(encKeys);
+ getIdentityService().addIdentity(identity);
+ }
+
+ public void createPrincipals(String ... principals) {
+ String passwd;
+ for (String principal : principals) {
+ passwd = UUID.randomUUID().toString();
+ createPrincipal(fixPrincipal(principal), passwd);
+ }
+ }
+
+ private String fixPrincipal(String principal) {
+ if (! principal.contains("@")) {
+ principal += "@" + getKdcRealm();
+ }
+ return principal;
+ }
+
+ public void exportPrincipals(File keytabFile) throws IOException {
+ Keytab keytab = new Keytab();
+
+ List<KrbIdentity> identities = getIdentityService().getIdentities();
+ for (KrbIdentity identity : identities) {
+ PrincipalName principal = identity.getPrincipal();
+ KerberosTime timestamp = new KerberosTime();
+ for (EncryptionType encType : identity.getKeys().keySet()) {
+ EncryptionKey ekey = identity.getKeys().get(encType);
+ int keyVersion = ekey.getKvno();
+ keytab.addEntry(new KeytabEntry(principal, timestamp, keyVersion, ekey));
+ }
+ }
+
+ keytab.store(keytabFile);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/main/java/org/haox/kerb/server/TestKdcServer.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/main/java/org/haox/kerb/server/TestKdcServer.java b/haox-kerb/kerb-kdc-test/src/main/java/org/haox/kerb/server/TestKdcServer.java
deleted file mode 100644
index cf94888..0000000
--- a/haox-kerb/kerb-kdc-test/src/main/java/org/haox/kerb/server/TestKdcServer.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.haox.kerb.server;
-
-import org.haox.kerb.common.EncryptionUtil;
-import org.haox.kerb.identity.KrbIdentity;
-import org.haox.kerb.keytab.Keytab;
-import org.haox.kerb.keytab.KeytabEntry;
-import org.haox.kerb.KrbException;
-import org.haox.kerb.spec.KerberosTime;
-import org.haox.kerb.spec.common.EncryptionKey;
-import org.haox.kerb.spec.common.EncryptionType;
-import org.haox.kerb.spec.common.PrincipalName;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.Properties;
-import java.util.UUID;
-
-public class TestKdcServer extends SimpleKdcServer {
-
- public static final String ORG_DOMAIN = KdcConfigKey.KDC_DOMAIN.getPropertyKey();
- public static final String KDC_REALM = KdcConfigKey.KDC_REALM.getPropertyKey();
- public static final String KDC_HOST = KdcConfigKey.KDC_HOST.getPropertyKey();
- public static final String KDC_PORT = KdcConfigKey.KDC_PORT.getPropertyKey();
- public static final String WORK_DIR = KdcConfigKey.WORK_DIR.getPropertyKey();
-
- private static final Properties DEFAULT_CONFIG = new Properties();
- static {
- DEFAULT_CONFIG.setProperty(KDC_HOST, "localhost");
- DEFAULT_CONFIG.setProperty(KDC_PORT, "8018");
- DEFAULT_CONFIG.setProperty(ORG_DOMAIN, "test.com");
- DEFAULT_CONFIG.setProperty(KDC_REALM, "TEST.COM");
- }
-
- public static Properties createConf() {
- return (Properties) DEFAULT_CONFIG.clone();
- }
-
- public TestKdcServer() {
- this(createConf());
- }
-
- public TestKdcServer(Properties conf) {
- super();
- getConfig().getConf().addPropertiesConfig(conf);
- }
-
- @Override
- public void init() {
- super.init();
-
- createPrincipals("krbtgt");
- }
-
- public String getKdcRealm() {
- return getConfig().getKdcRealm();
- }
-
- public synchronized void createPrincipal(String principal, String password) {
- KrbIdentity identity = new KrbIdentity(principal);
- List<EncryptionType> encTypes = getConfig().getEncryptionTypes();
- List<EncryptionKey> encKeys = null;
- try {
- encKeys = EncryptionUtil.generateKeys(fixPrincipal(principal), password, encTypes);
- } catch (KrbException e) {
- throw new RuntimeException("Failed to generate encryption keys", e);
- }
- identity.addKeys(encKeys);
- getIdentityService().addIdentity(identity);
- }
-
- public void createPrincipals(String ... principals) {
- String passwd;
- for (String principal : principals) {
- passwd = UUID.randomUUID().toString();
- createPrincipal(fixPrincipal(principal), passwd);
- }
- }
-
- private String fixPrincipal(String principal) {
- if (! principal.contains("@")) {
- principal += "@" + getKdcRealm();
- }
- return principal;
- }
-
- public void exportPrincipals(File keytabFile) throws IOException {
- Keytab keytab = new Keytab();
-
- List<KrbIdentity> identities = getIdentityService().getIdentities();
- for (KrbIdentity identity : identities) {
- PrincipalName principal = identity.getPrincipal();
- KerberosTime timestamp = new KerberosTime();
- for (EncryptionType encType : identity.getKeys().keySet()) {
- EncryptionKey ekey = identity.getKeys().get(encType);
- int keyVersion = ekey.getKvno();
- keytab.addEntry(new KeytabEntry(principal, timestamp, keyVersion, ekey));
- }
- }
-
- keytab.store(keytabFile);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/KdcTest.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/KdcTest.java b/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/KdcTest.java
new file mode 100644
index 0000000..c199c44
--- /dev/null
+++ b/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/KdcTest.java
@@ -0,0 +1,30 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.kerberos.kerb.spec.ticket.ServiceTicket;
+import org.apache.kerberos.kerb.spec.ticket.TgtTicket;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class KdcTest extends KdcTestBase {
+
+ private String password = "123456";
+
+ @Override
+ protected void setUpKdcServer() throws Exception {
+ super.setUpKdcServer();
+ kdcServer.createPrincipal(clientPrincipal, password);
+ }
+
+ @Test
+ public void testKdc() throws Exception {
+ kdcServer.start();
+ Assert.assertTrue(kdcServer.isStarted());
+
+ krbClnt.init();
+ TgtTicket tgt = krbClnt.requestTgtTicket(clientPrincipal, password, null);
+ Assert.assertNotNull(tgt);
+
+ ServiceTicket tkt = krbClnt.requestServiceTicket(tgt, serverPrincipal, null);
+ Assert.assertNotNull(tkt);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/KdcTestBase.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/KdcTestBase.java b/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/KdcTestBase.java
new file mode 100644
index 0000000..56f7741
--- /dev/null
+++ b/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/KdcTestBase.java
@@ -0,0 +1,49 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.kerberos.kerb.client.KrbClient;
+import org.apache.kerberos.kerb.server.TestKdcServer;
+import org.junit.After;
+import org.junit.Before;
+
+public abstract class KdcTestBase {
+
+ protected String kdcRealm;
+ protected String clientPrincipal;
+ protected String serverPrincipal;
+
+ protected String hostname = "localhost";
+ protected short port = 8088;
+
+ protected TestKdcServer kdcServer;
+ protected KrbClient krbClnt;
+
+ @Before
+ public void setUp() throws Exception {
+ setUpKdcServer();
+ setUpClient();
+ }
+
+ protected void setUpKdcServer() throws Exception {
+ kdcServer = new TestKdcServer();
+ kdcServer.setKdcHost(hostname);
+ kdcServer.setKdcPort(port);
+ kdcServer.init();
+
+ kdcRealm = kdcServer.getKdcRealm();
+ clientPrincipal = "drankye@" + kdcRealm;
+
+ serverPrincipal = "test-service/localhost@" + kdcRealm;
+ kdcServer.createPrincipals(serverPrincipal);
+ }
+
+ protected void setUpClient() throws Exception {
+ krbClnt = new KrbClient(hostname, port);
+ krbClnt.setTimeout(5);
+ krbClnt.setKdcRealm(kdcServer.getKdcRealm());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ kdcServer.stop();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/WithCertKdcTest.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/WithCertKdcTest.java b/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/WithCertKdcTest.java
new file mode 100644
index 0000000..a242ec1
--- /dev/null
+++ b/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/WithCertKdcTest.java
@@ -0,0 +1,71 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.ticket.ServiceTicket;
+import org.apache.kerberos.kerb.spec.ticket.TgtTicket;
+import org.haox.pki.Pkix;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.GeneralSecurityException;
+import java.security.PrivateKey;
+import java.security.cert.Certificate;
+
+/**
+ openssl genrsa -out cakey.pem 2048
+ openssl req -key cakey.pem -new -x509 -out cacert.pem -days 3650
+ vi extensions.kdc
+ openssl genrsa -out kdckey.pem 2048
+ openssl req -new -out kdc.req -key kdckey.pem
+ env REALM=SH.INTEL.COM openssl x509 -req -in kdc.req -CAkey cakey.pem \
+ -CA cacert.pem -out kdc.pem -days 365 -extfile extensions.kdc -extensions kdc_cert -CAcreateserial
+ */
+public class WithCertKdcTest extends KdcTestBase {
+
+ private Certificate userCert;
+ private PrivateKey userKey;
+
+ @Override
+ protected void setUpClient() throws Exception {
+ super.setUpClient();
+
+ loadCredentials();
+ }
+
+ @Override
+ protected void setUpKdcServer() throws Exception {
+ super.setUpKdcServer();
+ kdcServer.createPrincipals(clientPrincipal);
+ }
+
+ @Test
+ public void testKdc() throws Exception {
+ Assert.assertNotNull(userCert);
+
+ kdcServer.start();
+ Assert.assertTrue(kdcServer.isStarted());
+ krbClnt.init();
+
+ TgtTicket tgt = null;
+ try {
+ tgt = krbClnt.requestTgtTicket(clientPrincipal, userCert, userKey, null);
+ } catch (KrbException te) {
+ Assert.assertTrue(te.getMessage().contains("timeout"));
+ return;
+ }
+ Assert.assertNull(tgt);
+
+ ServiceTicket tkt = krbClnt.requestServiceTicket(tgt, serverPrincipal, null);
+ Assert.assertNull(tkt);
+ }
+
+ private void loadCredentials() throws IOException, GeneralSecurityException {
+ InputStream res = getClass().getResourceAsStream("/usercert.pem");
+ userCert = Pkix.getCerts(res).iterator().next();
+
+ res = getClass().getResourceAsStream("/userkey.pem");
+ userKey = Pkix.getPrivateKey(res, null);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/WithTokenKdcTest.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/WithTokenKdcTest.java b/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/WithTokenKdcTest.java
new file mode 100644
index 0000000..e6b2f49
--- /dev/null
+++ b/haox-kerb/kerb-kdc-test/src/test/java/org/apache/kerberos/kerb/server/WithTokenKdcTest.java
@@ -0,0 +1,38 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.ticket.ServiceTicket;
+import org.apache.kerberos.kerb.spec.ticket.TgtTicket;
+import org.haox.token.KerbToken;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class WithTokenKdcTest extends KdcTestBase {
+
+ private KerbToken token;
+
+ @Override
+ protected void setUpKdcServer() throws Exception {
+ super.setUpKdcServer();
+ kdcServer.createPrincipals(clientPrincipal);
+ }
+
+ @Test
+ public void testKdc() throws Exception {
+ kdcServer.start();
+ Assert.assertTrue(kdcServer.isStarted());
+ krbClnt.init();
+
+ TgtTicket tgt = null;
+ try {
+ tgt = krbClnt.requestTgtTicket(clientPrincipal, token, null);
+ } catch (KrbException te) {
+ Assert.assertTrue(te.getMessage().contains("timeout"));
+ return;
+ }
+ Assert.assertNull(tgt);
+
+ ServiceTicket tkt = krbClnt.requestServiceTicket(tgt, serverPrincipal, null);
+ Assert.assertNull(tkt);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/KdcTest.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/KdcTest.java b/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/KdcTest.java
deleted file mode 100644
index 92c4cf0..0000000
--- a/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/KdcTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.haox.kerb.server;
-
-import org.haox.kerb.spec.ticket.ServiceTicket;
-import org.haox.kerb.spec.ticket.TgtTicket;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class KdcTest extends KdcTestBase {
-
- private String password = "123456";
-
- @Override
- protected void setUpKdcServer() throws Exception {
- super.setUpKdcServer();
- kdcServer.createPrincipal(clientPrincipal, password);
- }
-
- @Test
- public void testKdc() throws Exception {
- kdcServer.start();
- Assert.assertTrue(kdcServer.isStarted());
-
- krbClnt.init();
- TgtTicket tgt = krbClnt.requestTgtTicket(clientPrincipal, password, null);
- Assert.assertNotNull(tgt);
-
- ServiceTicket tkt = krbClnt.requestServiceTicket(tgt, serverPrincipal, null);
- Assert.assertNotNull(tkt);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/KdcTestBase.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/KdcTestBase.java b/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/KdcTestBase.java
deleted file mode 100644
index 2b26e2a..0000000
--- a/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/KdcTestBase.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.haox.kerb.server;
-
-import org.haox.kerb.client.KrbClient;
-import org.junit.After;
-import org.junit.Before;
-
-public abstract class KdcTestBase {
-
- protected String kdcRealm;
- protected String clientPrincipal;
- protected String serverPrincipal;
-
- protected String hostname = "localhost";
- protected short port = 8088;
-
- protected TestKdcServer kdcServer;
- protected KrbClient krbClnt;
-
- @Before
- public void setUp() throws Exception {
- setUpKdcServer();
- setUpClient();
- }
-
- protected void setUpKdcServer() throws Exception {
- kdcServer = new TestKdcServer();
- kdcServer.setKdcHost(hostname);
- kdcServer.setKdcPort(port);
- kdcServer.init();
-
- kdcRealm = kdcServer.getKdcRealm();
- clientPrincipal = "drankye@" + kdcRealm;
-
- serverPrincipal = "test-service/localhost@" + kdcRealm;
- kdcServer.createPrincipals(serverPrincipal);
- }
-
- protected void setUpClient() throws Exception {
- krbClnt = new KrbClient(hostname, port);
- krbClnt.setTimeout(5);
- krbClnt.setKdcRealm(kdcServer.getKdcRealm());
- }
-
- @After
- public void tearDown() throws Exception {
- kdcServer.stop();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/WithCertKdcTest.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/WithCertKdcTest.java b/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/WithCertKdcTest.java
deleted file mode 100644
index 21658bc..0000000
--- a/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/WithCertKdcTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.haox.kerb.server;
-
-import org.haox.kerb.KrbException;
-import org.haox.kerb.spec.ticket.ServiceTicket;
-import org.haox.kerb.spec.ticket.TgtTicket;
-import org.haox.pki.Pkix;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.GeneralSecurityException;
-import java.security.PrivateKey;
-import java.security.cert.Certificate;
-
-/**
- openssl genrsa -out cakey.pem 2048
- openssl req -key cakey.pem -new -x509 -out cacert.pem -days 3650
- vi extensions.kdc
- openssl genrsa -out kdckey.pem 2048
- openssl req -new -out kdc.req -key kdckey.pem
- env REALM=SH.INTEL.COM openssl x509 -req -in kdc.req -CAkey cakey.pem \
- -CA cacert.pem -out kdc.pem -days 365 -extfile extensions.kdc -extensions kdc_cert -CAcreateserial
- */
-public class WithCertKdcTest extends KdcTestBase {
-
- private Certificate userCert;
- private PrivateKey userKey;
-
- @Override
- protected void setUpClient() throws Exception {
- super.setUpClient();
-
- loadCredentials();
- }
-
- @Override
- protected void setUpKdcServer() throws Exception {
- super.setUpKdcServer();
- kdcServer.createPrincipals(clientPrincipal);
- }
-
- @Test
- public void testKdc() throws Exception {
- Assert.assertNotNull(userCert);
-
- kdcServer.start();
- Assert.assertTrue(kdcServer.isStarted());
- krbClnt.init();
-
- TgtTicket tgt = null;
- try {
- tgt = krbClnt.requestTgtTicket(clientPrincipal, userCert, userKey, null);
- } catch (KrbException te) {
- Assert.assertTrue(te.getMessage().contains("timeout"));
- return;
- }
- Assert.assertNull(tgt);
-
- ServiceTicket tkt = krbClnt.requestServiceTicket(tgt, serverPrincipal, null);
- Assert.assertNull(tkt);
- }
-
- private void loadCredentials() throws IOException, GeneralSecurityException {
- InputStream res = getClass().getResourceAsStream("/usercert.pem");
- userCert = Pkix.getCerts(res).iterator().next();
-
- res = getClass().getResourceAsStream("/userkey.pem");
- userKey = Pkix.getPrivateKey(res, null);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/WithTokenKdcTest.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/WithTokenKdcTest.java b/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/WithTokenKdcTest.java
deleted file mode 100644
index b2edd95..0000000
--- a/haox-kerb/kerb-kdc-test/src/test/java/org/haox/kerb/server/WithTokenKdcTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.haox.kerb.server;
-
-import org.haox.kerb.KrbException;
-import org.haox.kerb.spec.ticket.ServiceTicket;
-import org.haox.kerb.spec.ticket.TgtTicket;
-import org.haox.token.KerbToken;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class WithTokenKdcTest extends KdcTestBase {
-
- private KerbToken token;
-
- @Override
- protected void setUpKdcServer() throws Exception {
- super.setUpKdcServer();
- kdcServer.createPrincipals(clientPrincipal);
- }
-
- @Test
- public void testKdc() throws Exception {
- kdcServer.start();
- Assert.assertTrue(kdcServer.isStarted());
- krbClnt.init();
-
- TgtTicket tgt = null;
- try {
- tgt = krbClnt.requestTgtTicket(clientPrincipal, token, null);
- } catch (KrbException te) {
- Assert.assertTrue(te.getMessage().contains("timeout"));
- return;
- }
- Assert.assertNull(tgt);
-
- ServiceTicket tkt = krbClnt.requestServiceTicket(tgt, serverPrincipal, null);
- Assert.assertNull(tkt);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/resources/kdc-krb5.conf
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/resources/kdc-krb5.conf b/haox-kerb/kerb-kdc-test/src/test/resources/kdc-krb5.conf
deleted file mode 100644
index d118dd1..0000000
--- a/haox-kerb/kerb-kdc-test/src/test/resources/kdc-krb5.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-[libdefaults]
- default_realm = {0}
- udp_preference_limit = 1
-
-[realms]
- {0} = '{'
- kdc = {1}:{2}
- '}'
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-kdc-test/src/test/resources/kdc.ldiff
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-kdc-test/src/test/resources/kdc.ldiff b/haox-kerb/kerb-kdc-test/src/test/resources/kdc.ldiff
deleted file mode 100644
index e344131..0000000
--- a/haox-kerb/kerb-kdc-test/src/test/resources/kdc.ldiff
+++ /dev/null
@@ -1,30 +0,0 @@
-dn: ou=users,dc=${0},dc=${1}
-objectClass: organizationalUnit
-objectClass: top
-ou: users
-
-dn: uid=krbtgt,ou=users,dc=${0},dc=${1}
-objectClass: top
-objectClass: person
-objectClass: inetOrgPerson
-objectClass: krb5principal
-objectClass: krb5kdcentry
-cn: KDC Service
-sn: Service
-uid: krbtgt
-userPassword: secret
-krb5PrincipalName: krbtgt/${2}.${3}@${2}.${3}
-krb5KeyVersionNumber: 0
-
-dn: uid=ldap,ou=users,dc=${0},dc=${1}
-objectClass: top
-objectClass: person
-objectClass: inetOrgPerson
-objectClass: krb5principal
-objectClass: krb5kdcentry
-cn: LDAP
-sn: Service
-uid: ldap
-userPassword: secret
-krb5PrincipalName: ldap/${4}@${2}.${3}
-krb5KeyVersionNumber: 0
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcConfig.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcConfig.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcConfig.java
new file mode 100644
index 0000000..8afff46
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcConfig.java
@@ -0,0 +1,105 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.haox.config.Conf;
+import org.apache.kerberos.kerb.common.KrbConfHelper;
+import org.apache.kerberos.kerb.spec.common.EncryptionType;
+
+import java.util.List;
+
+public class KdcConfig {
+ protected Conf conf;
+
+ public KdcConfig() {
+ this.conf = new Conf();
+ }
+
+ public Conf getConf() {
+ return this.conf;
+ }
+
+ public boolean enableDebug() {
+ return conf.getBoolean(KdcConfigKey.KRB_DEBUG);
+ }
+
+ public String getKdcServiceName() {
+ return conf.getString(KdcConfigKey.KDC_SERVICE_NAME);
+ }
+
+ public String getWorkDir() {
+ return conf.getString(KdcConfigKey.WORK_DIR);
+ }
+
+ public String getKdcHost() {
+ return conf.getString(KdcConfigKey.KDC_HOST);
+ }
+
+ public short getKdcPort() {
+ Integer kdcPort = conf.getInt(KdcConfigKey.KDC_PORT);
+ return kdcPort.shortValue();
+ }
+
+ public String getKdcRealm() {
+ return conf.getString(KdcConfigKey.KDC_REALM);
+ }
+
+ public String getKdcDomain() {
+ return conf.getString(KdcConfigKey.KDC_DOMAIN);
+ }
+
+ public boolean isPreauthRequired() {
+ return conf.getBoolean(KdcConfigKey.PREAUTH_REQUIRED);
+ }
+
+ public String getTgsPrincipal() {
+ return conf.getString(KdcConfigKey.TGS_PRINCIPAL);
+ }
+
+ public long getAllowableClockSkew() {
+ return conf.getLong(KdcConfigKey.ALLOWABLE_CLOCKSKEW);
+ }
+
+ public boolean isEmptyAddressesAllowed() {
+ return conf.getBoolean(KdcConfigKey.EMPTY_ADDRESSES_ALLOWED);
+ }
+
+ public boolean isForwardableAllowed() {
+ return conf.getBoolean(KdcConfigKey.FORWARDABLE_ALLOWED);
+ }
+
+ public boolean isPostdatedAllowed() {
+ return conf.getBoolean(KdcConfigKey.POSTDATED_ALLOWED);
+ }
+
+ public boolean isProxiableAllowed() {
+ return conf.getBoolean(KdcConfigKey.PROXIABLE_ALLOWED);
+ }
+
+ public boolean isRenewableAllowed() {
+ return conf.getBoolean(KdcConfigKey.RENEWABLE_ALLOWED);
+ }
+
+ public long getMaximumRenewableLifetime() {
+ return conf.getLong(KdcConfigKey.MAXIMUM_RENEWABLE_LIFETIME);
+ }
+
+ public long getMaximumTicketLifetime() {
+ return conf.getLong(KdcConfigKey.MAXIMUM_TICKET_LIFETIME);
+ }
+
+ public long getMinimumTicketLifetime() {
+ return conf.getLong(KdcConfigKey.MINIMUM_TICKET_LIFETIME);
+ }
+
+ public List<EncryptionType> getEncryptionTypes() {
+ List<String> eTypes = conf.getList(KdcConfigKey.ENCRYPTION_TYPES);
+ return KrbConfHelper.getEncryptionTypes(eTypes);
+ }
+
+ public boolean isPaEncTimestampRequired() {
+ return conf.getBoolean(KdcConfigKey.PA_ENC_TIMESTAMP_REQUIRED);
+ }
+
+ public boolean isBodyChecksumVerified() {
+ return conf.getBoolean(KdcConfigKey.VERIFY_BODY_CHECKSUM);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcConfigKey.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcConfigKey.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcConfigKey.java
new file mode 100644
index 0000000..fde73c7
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcConfigKey.java
@@ -0,0 +1,47 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.haox.config.ConfigKey;
+
+public enum KdcConfigKey implements ConfigKey {
+ KRB_DEBUG(true),
+ WORK_DIR,
+ KDC_SERVICE_NAME("Haox_KDC_Server"),
+ KDC_HOST("127.0.0.1"),
+ KDC_PORT(8015),
+ KDC_DOMAIN("example.com"),
+ KDC_REALM("EXAMPLE.COM"),
+ TGS_PRINCIPAL("krbtgt@EXAMPLE.COM"),
+ PREAUTH_REQUIRED(true),
+ ALLOWABLE_CLOCKSKEW(5 * 60L),
+ EMPTY_ADDRESSES_ALLOWED(true),
+ PA_ENC_TIMESTAMP_REQUIRED(true),
+ MAXIMUM_TICKET_LIFETIME(24 * 3600L),
+ MINIMUM_TICKET_LIFETIME(1 * 3600L),
+ MAXIMUM_RENEWABLE_LIFETIME(48 * 3600L),
+ FORWARDABLE_ALLOWED(true),
+ POSTDATED_ALLOWED(true),
+ PROXIABLE_ALLOWED(true),
+ RENEWABLE_ALLOWED(true),
+ VERIFY_BODY_CHECKSUM(true),
+ ENCRYPTION_TYPES(new String[] { "aes128-cts-hmac-sha1-96", "des-cbc-md5", "des3-cbc-sha1-kd" });
+
+ private Object defaultValue;
+
+ private KdcConfigKey() {
+ this.defaultValue = null;
+ }
+
+ private KdcConfigKey(Object defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ @Override
+ public String getPropertyKey() {
+ return "kdc." + name().toLowerCase();
+ }
+
+ @Override
+ public Object getDefaultValue() {
+ return this.defaultValue;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcContext.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcContext.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcContext.java
new file mode 100644
index 0000000..3b090f7
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcContext.java
@@ -0,0 +1,72 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.kerberos.kerb.identity.IdentityService;
+import org.apache.kerberos.kerb.server.preauth.PreauthHandler;
+import org.apache.kerberos.kerb.server.replay.ReplayCheckService;
+
+import java.util.List;
+
+public class KdcContext {
+ private KdcConfig config;
+ private List<String> supportedKdcRealms;
+ private String kdcRealm;
+ private IdentityService identityService;
+ private ReplayCheckService replayCache;
+ private PreauthHandler preauthHandler;
+
+ public void init(KdcConfig config) {
+ this.config = config;
+ }
+
+ public KdcConfig getConfig() {
+ return config;
+ }
+
+ public void setPreauthHandler(PreauthHandler preauthHandler) {
+ this.preauthHandler = preauthHandler;
+ }
+
+ public PreauthHandler getPreauthHandler() {
+ return this.preauthHandler;
+ }
+
+ public List<String> getSupportedKdcRealms() {
+ return supportedKdcRealms;
+ }
+
+ public void setSupportedKdcRealms(List<String> supportedKdcRealms) {
+ this.supportedKdcRealms = supportedKdcRealms;
+ }
+
+ public void setKdcRealm(String realm) {
+ this.kdcRealm = realm;
+ }
+
+ public String getServerRealm() {
+ return config.getKdcRealm();
+ }
+
+ public String getKdcRealm() {
+ if (kdcRealm != null) {
+ return kdcRealm;
+ }
+ return config.getKdcRealm();
+ }
+
+ public void setReplayCache(ReplayCheckService replayCache) {
+ this.replayCache = replayCache;
+ }
+
+ public ReplayCheckService getReplayCache() {
+ return replayCache;
+ }
+
+ public void setIdentityService(IdentityService identityService) {
+ this.identityService = identityService;
+ }
+
+
+ public IdentityService getIdentityService() {
+ return identityService;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcHandler.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcHandler.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcHandler.java
new file mode 100644
index 0000000..fc0ebc5
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcHandler.java
@@ -0,0 +1,129 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.kerberos.kerb.common.KrbUtil;
+import org.apache.kerberos.kerb.identity.IdentityService;
+import org.apache.kerberos.kerb.server.preauth.PreauthHandler;
+import org.apache.kerberos.kerb.server.replay.ReplayCheckService;
+import org.apache.kerberos.kerb.server.request.AsRequest;
+import org.apache.kerberos.kerb.server.request.KdcRequest;
+import org.apache.kerberos.kerb.server.request.TgsRequest;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.common.KrbMessage;
+import org.apache.kerberos.kerb.spec.common.KrbMessageType;
+import org.apache.kerberos.kerb.spec.kdc.AsReq;
+import org.apache.kerberos.kerb.spec.kdc.KdcReq;
+import org.apache.kerberos.kerb.spec.kdc.TgsReq;
+import org.apache.haox.transport.MessageHandler;
+import org.apache.haox.transport.Transport;
+import org.apache.haox.transport.event.MessageEvent;
+import org.apache.haox.transport.tcp.TcpTransport;
+
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class KdcHandler extends MessageHandler {
+
+ private List<String> kdcRealms = new ArrayList<String>(1);
+ private Map<String, KdcContext> kdcContexts;
+
+ private KdcConfig kdcConfig;
+ private PreauthHandler preauthHandler;
+
+ // TODO: per realm for below
+ private IdentityService identityService;
+ private ReplayCheckService replayCheckService;
+
+ /**
+ * Should be called when all the necessary properties are set
+ */
+ public void init() {
+ loadKdcRealms();
+
+ preauthHandler = new PreauthHandler();
+ preauthHandler.init(kdcConfig);
+
+ kdcContexts = new HashMap<String, KdcContext>(1);
+ for (String realm : kdcRealms) {
+ initRealmContext(realm);
+ }
+ }
+
+ private void initRealmContext(String kdcRealm) {
+ KdcContext kdcContext = new KdcContext();
+ kdcContext.init(kdcConfig);
+ kdcContext.setKdcRealm(kdcRealm);
+ kdcContext.setPreauthHandler(preauthHandler);
+ kdcContext.setIdentityService(identityService);
+ kdcContext.setReplayCache(replayCheckService);
+
+ kdcContexts.put(kdcRealm, kdcContext);
+ }
+
+ public void setKdcRealm(String realm) {
+ this.kdcRealms.add(realm);
+ }
+
+ public void setConfig(KdcConfig config) {
+ this.kdcConfig = config;
+ }
+
+ public void setIdentityService(IdentityService identityService) {
+ this.identityService = identityService;
+ }
+
+ @Override
+ protected void handleMessage(MessageEvent event) throws Exception {
+ ByteBuffer message = event.getMessage();
+ Transport transport = event.getTransport();
+
+ KrbMessage krbRequest = KrbUtil.decodeMessage(message);
+ KdcRequest kdcRequest = null;
+
+ KrbMessageType messageType = krbRequest.getMsgType();
+ if (messageType == KrbMessageType.TGS_REQ || messageType == KrbMessageType.AS_REQ) {
+ KdcReq kdcReq = (KdcReq) krbRequest;
+ String realm = getRequestRealm(kdcReq);
+ if (realm == null || !kdcContexts.containsKey(realm)) {
+ throw new KrbException("Invalid realm from kdc request: " + realm);
+ }
+
+ KdcContext kdcContext = kdcContexts.get(realm);
+ if (messageType == KrbMessageType.TGS_REQ) {
+ kdcRequest = new TgsRequest((TgsReq) kdcReq, kdcContext);
+ } else if (messageType == KrbMessageType.AS_REQ) {
+ kdcRequest = new AsRequest((AsReq) kdcReq, kdcContext);
+ }
+ }
+
+ InetSocketAddress clientAddress = transport.getRemoteAddress();
+ kdcRequest.setClientAddress(clientAddress.getAddress());
+ boolean isTcp = (transport instanceof TcpTransport);
+ kdcRequest.isTcp(isTcp);
+
+ kdcRequest.process();
+
+ KrbMessage krbResponse = kdcRequest.getReply();
+ KrbUtil.sendMessage(krbResponse, transport);
+ }
+
+ private void loadKdcRealms() {
+ if (kdcRealms.isEmpty()) {
+ kdcRealms.add(kdcConfig.getKdcRealm());
+ }
+ }
+
+ private String getRequestRealm(KdcReq kdcReq) {
+ String realm = kdcReq.getReqBody().getRealm();
+ if (realm == null && kdcReq.getReqBody().getCname() != null) {
+ realm = kdcReq.getReqBody().getCname().getRealm();
+ }
+ if (realm == null || realm.isEmpty()) {
+ realm = "NULL-KDC-REALM";
+ }
+ return realm;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcServer.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcServer.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcServer.java
new file mode 100644
index 0000000..41ce0de
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/KdcServer.java
@@ -0,0 +1,164 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.haox.event.EventHub;
+import org.apache.kerberos.kerb.common.KrbStreamingDecoder;
+import org.apache.kerberos.kerb.identity.IdentityService;
+import org.apache.haox.transport.Acceptor;
+import org.apache.haox.transport.tcp.TcpAcceptor;
+
+import java.io.File;
+
+public class KdcServer {
+ private String kdcHost;
+ private short kdcPort;
+ private String kdcRealm;
+
+ private boolean started;
+ private String serviceName = "HaoxKdc";
+
+ private KdcHandler kdcHandler;
+ private EventHub eventHub;
+
+ protected KdcConfig kdcConfig;
+ protected IdentityService identityService;
+ protected File workDir;
+
+ public KdcServer() {
+ kdcConfig = new KdcConfig();
+ }
+
+ public void init() {
+ initConfig();
+
+ initWorkDir();
+ }
+
+ protected void initWorkDir() {
+ String path = kdcConfig.getWorkDir();
+ File file;
+ if (path != null) {
+ file = new File(path);
+ file.mkdirs();
+ } else {
+ file = new File(".");
+ }
+
+ this.workDir = file;
+ }
+
+ protected void initConfig() {}
+
+ public void start() {
+ try {
+ doStart();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to start " + getServiceName(), e);
+ }
+
+ started = true;
+ }
+
+ public String getKdcRealm() {
+ if (kdcRealm != null) {
+ return kdcRealm;
+ }
+ return kdcConfig.getKdcRealm();
+ }
+
+ private String getKdcHost() {
+ if (kdcHost != null) {
+ return kdcHost;
+ }
+ return kdcConfig.getKdcHost();
+ }
+
+ private short getKdcPort() {
+ if (kdcPort > 0) {
+ return kdcPort;
+ }
+ return kdcConfig.getKdcPort();
+ }
+
+ public void setKdcHost(String kdcHost) {
+ this.kdcHost = kdcHost;
+ }
+
+ public void setKdcPort(short kdcPort) {
+ this.kdcPort = kdcPort;
+ }
+
+ public void setKdcRealm(String realm) {
+ this.kdcRealm = realm;
+ }
+
+ public boolean enableDebug() {
+ return kdcConfig.enableDebug();
+ }
+
+ protected void doStart() throws Exception {
+ prepareHandler();
+
+ this.eventHub = new EventHub();
+
+ eventHub.register(kdcHandler);
+
+ Acceptor acceptor = new TcpAcceptor(new KrbStreamingDecoder());
+ eventHub.register(acceptor);
+
+ eventHub.start();
+ acceptor.listen(getKdcHost(), getKdcPort());
+ }
+
+ private void prepareHandler() {
+ this.kdcHandler = new KdcHandler();
+ kdcHandler.setConfig(kdcConfig);
+ kdcHandler.setIdentityService(identityService);
+ if (kdcRealm != null) {
+ kdcHandler.setKdcRealm(kdcRealm);
+ }
+ kdcHandler.init();
+ }
+
+ public void stop() {
+ try {
+ doStop();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to stop " + getServiceName());
+ }
+ }
+
+ protected void doStop() throws Exception {
+ eventHub.stop();
+ }
+
+ public KdcConfig getConfig() {
+ return kdcConfig;
+ }
+
+ public boolean isStarted() {
+ return started;
+ }
+
+ protected void setStarted( boolean started ) {
+ this.started = started;
+ }
+
+ protected void setServiceName( String name ) {
+ this.serviceName = name;
+ }
+
+ protected String getServiceName() {
+ if (serviceName != null) {
+ return serviceName;
+ }
+ return kdcConfig.getKdcServiceName();
+ }
+
+ public IdentityService getIdentityService() {
+ return identityService;
+ }
+
+ protected void setIdentityService(IdentityService identityService) {
+ this.identityService = identityService;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/SimpleKdcServer.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/SimpleKdcServer.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/SimpleKdcServer.java
new file mode 100644
index 0000000..cf85161
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/SimpleKdcServer.java
@@ -0,0 +1,24 @@
+package org.apache.kerberos.kerb.server;
+
+import org.apache.kerberos.kerb.identity.IdentityService;
+import org.apache.kerberos.kerb.identity.backend.SimpleIdentityBackend;
+
+import java.io.File;
+
+public class SimpleKdcServer extends KdcServer {
+
+ public SimpleKdcServer() {
+ super();
+ }
+
+ public void init() {
+ super.init();
+ initIdentityService();
+ }
+
+ protected void initIdentityService() {
+ File identityFile = new File(workDir, "simplekdb.dat");
+ IdentityService identityService = new SimpleIdentityBackend(identityFile);
+ setIdentityService(identityService);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/AbstractPreauthPlugin.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/AbstractPreauthPlugin.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/AbstractPreauthPlugin.java
new file mode 100644
index 0000000..d23a7e3
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/AbstractPreauthPlugin.java
@@ -0,0 +1,72 @@
+package org.apache.kerberos.kerb.server.preauth;
+
+import org.apache.kerberos.kerb.preauth.PaFlags;
+import org.apache.kerberos.kerb.preauth.PluginRequestContext;
+import org.apache.kerberos.kerb.preauth.PreauthPluginMeta;
+import org.apache.kerberos.kerb.server.KdcContext;
+import org.apache.kerberos.kerb.server.request.KdcRequest;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerberos.kerb.spec.pa.PaDataEntry;
+import org.apache.kerberos.kerb.spec.pa.PaDataType;
+
+public class AbstractPreauthPlugin implements KdcPreauth {
+
+ private PreauthPluginMeta pluginMeta;
+
+ public AbstractPreauthPlugin(PreauthPluginMeta meta) {
+ this.pluginMeta = meta;
+ }
+
+ @Override
+ public String getName() {
+ return pluginMeta.getName();
+ }
+
+ public int getVersion() {
+ return pluginMeta.getVersion();
+ }
+
+ public PaDataType[] getPaTypes() {
+ return pluginMeta.getPaTypes();
+ }
+
+ @Override
+ public void initWith(KdcContext kdcContext) {
+
+ }
+
+ @Override
+ public PluginRequestContext initRequestContext(KdcRequest kdcRequest) {
+ return null;
+ }
+
+ @Override
+ public void provideEdata(KdcRequest kdcRequest, PluginRequestContext requestContext,
+ PaData outPaData) throws KrbException {
+
+ }
+
+ @Override
+ public boolean verify(KdcRequest kdcRequest, PluginRequestContext requestContext,
+ PaDataEntry paData) throws KrbException {
+ return false;
+ }
+
+ @Override
+ public void providePaData(KdcRequest kdcRequest, PluginRequestContext requestContext,
+ PaData paData) {
+
+ }
+
+ @Override
+ public PaFlags getFlags(KdcRequest kdcRequest, PluginRequestContext requestContext,
+ PaDataType paType) {
+ return null;
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/FastContext.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/FastContext.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/FastContext.java
new file mode 100644
index 0000000..e367fbf
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/FastContext.java
@@ -0,0 +1,17 @@
+package org.apache.kerberos.kerb.server.preauth;
+
+import org.apache.kerberos.kerb.spec.common.EncryptionKey;
+import org.apache.kerberos.kerb.spec.fast.FastOptions;
+import org.apache.kerberos.kerb.spec.fast.KrbFastArmor;
+import org.apache.kerberos.kerb.spec.kdc.KdcReq;
+
+public class FastContext {
+
+ public KdcReq fastOuterRequest;
+ public EncryptionKey armorKey;
+ public KrbFastArmor fastArmor;
+ public FastOptions fastOptions;
+ public int nonce;
+ public int fastFlags;
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/KdcPreauth.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/KdcPreauth.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/KdcPreauth.java
new file mode 100644
index 0000000..691a581
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/KdcPreauth.java
@@ -0,0 +1,62 @@
+package org.apache.kerberos.kerb.server.preauth;
+
+import org.apache.kerberos.kerb.preauth.PaFlags;
+import org.apache.kerberos.kerb.preauth.PluginRequestContext;
+import org.apache.kerberos.kerb.preauth.PreauthPluginMeta;
+import org.apache.kerberos.kerb.server.KdcContext;
+import org.apache.kerberos.kerb.server.request.KdcRequest;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerberos.kerb.spec.pa.PaDataEntry;
+import org.apache.kerberos.kerb.spec.pa.PaDataType;
+
+/**
+ * KDC side preauth plugin module
+ */
+public interface KdcPreauth extends PreauthPluginMeta {
+
+ /**
+ * Initializing plugin context for each realm
+ */
+ public void initWith(KdcContext context);
+
+ /**
+ * Initializing request context
+ */
+ public PluginRequestContext initRequestContext(KdcRequest kdcRequest);
+
+ /**
+ * Optional: provide pa_data to send to the client as part of the "you need to
+ * use preauthentication" error.
+ */
+ public void provideEdata(KdcRequest kdcRequest, PluginRequestContext requestContext,
+ PaData outPaData) throws KrbException;
+
+ /**
+ * Optional: verify preauthentication data sent by the client, setting the
+ * TKT_FLG_PRE_AUTH or TKT_FLG_HW_AUTH flag in the enc_tkt_reply's "flags"
+ * field as appropriate.
+ */
+ public boolean verify(KdcRequest kdcRequest, PluginRequestContext requestContext,
+ PaDataEntry paData) throws KrbException;
+
+ /**
+ * Optional: generate preauthentication response data to send to the client as
+ * part of the AS-REP.
+ */
+ public void providePaData(KdcRequest kdcRequest, PluginRequestContext requestContext,
+ PaData paData);
+
+ /**
+ * Return PA_REAL if pa_type is a real preauthentication type or PA_INFO if it is
+ * an informational type.
+ */
+ public PaFlags getFlags(KdcRequest kdcRequest, PluginRequestContext requestContext,
+ PaDataType paType);
+
+ /**
+ * When exiting...
+ */
+ public void destroy();
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthContext.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthContext.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthContext.java
new file mode 100644
index 0000000..67aa7f7
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthContext.java
@@ -0,0 +1,25 @@
+package org.apache.kerberos.kerb.server.preauth;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PreauthContext {
+ private boolean preauthRequired = true;
+ private List<PreauthHandle> handles = new ArrayList<PreauthHandle>(5);
+
+ public PreauthContext() {
+
+ }
+
+ public boolean isPreauthRequired() {
+ return preauthRequired;
+ }
+
+ public void setPreauthRequired(boolean preauthRequired) {
+ this.preauthRequired = preauthRequired;
+ }
+
+ public List<PreauthHandle> getHandles() {
+ return handles;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthHandle.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthHandle.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthHandle.java
new file mode 100644
index 0000000..88ff628
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthHandle.java
@@ -0,0 +1,37 @@
+package org.apache.kerberos.kerb.server.preauth;
+
+import org.apache.kerberos.kerb.preauth.PluginRequestContext;
+import org.apache.kerberos.kerb.server.request.KdcRequest;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerberos.kerb.spec.pa.PaDataEntry;
+
+public class PreauthHandle {
+
+ public KdcPreauth preauth;
+ public PluginRequestContext requestContext;
+
+ public PreauthHandle(KdcPreauth preauth) {
+ this.preauth = preauth;
+ }
+
+ public void initRequestContext(KdcRequest kdcRequest) {
+ requestContext = preauth.initRequestContext(kdcRequest);
+ }
+
+ public void provideEdata(KdcRequest kdcRequest, PaData outPaData) throws KrbException {
+ preauth.provideEdata(kdcRequest, requestContext, outPaData);
+ }
+
+ public void verify(KdcRequest kdcRequest, PaDataEntry paData) throws KrbException {
+ preauth.verify(kdcRequest, requestContext, paData);
+ }
+
+ public void providePaData(KdcRequest kdcRequest, PaData paData) {
+ preauth.providePaData(kdcRequest, requestContext, paData);
+ }
+
+ public void destroy() {
+ preauth.destroy();
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthHandler.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthHandler.java b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthHandler.java
new file mode 100644
index 0000000..2e2464f
--- /dev/null
+++ b/haox-kerb/kerb-server/src/main/java/org/apache/kerberos/kerb/server/preauth/PreauthHandler.java
@@ -0,0 +1,105 @@
+package org.apache.kerberos.kerb.server.preauth;
+
+import org.apache.kerberos.kerb.server.KdcConfig;
+import org.apache.kerberos.kerb.server.KdcContext;
+import org.apache.kerberos.kerb.server.preauth.builtin.EncTsPreauth;
+import org.apache.kerberos.kerb.server.preauth.builtin.TgtPreauth;
+import org.apache.kerberos.kerb.server.request.KdcRequest;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerberos.kerb.spec.pa.PaDataEntry;
+import org.apache.kerberos.kerb.spec.pa.PaDataType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PreauthHandler {
+
+ private List<KdcPreauth> preauths;
+
+ /**
+ * Should be called only once, for global
+ */
+ public void init(KdcConfig kdcConfig) {
+ loadPreauthPlugins(kdcConfig);
+ }
+
+ private void loadPreauthPlugins(KdcConfig kdcConfig) {
+ preauths = new ArrayList<KdcPreauth>();
+
+ KdcPreauth preauth = new EncTsPreauth();
+ preauths.add(preauth);
+
+ preauth = new TgtPreauth();
+ preauths.add(preauth);
+ }
+
+ /**
+ * Should be called per realm
+ * @param context
+ */
+ public void initWith(KdcContext context) {
+ for (KdcPreauth preauth : preauths) {
+ preauth.initWith(context);
+ }
+ }
+
+ public PreauthContext preparePreauthContext(KdcRequest kdcRequest) {
+ PreauthContext preauthContext = new PreauthContext();
+
+ KdcContext kdcContext = kdcRequest.getKdcContext();
+ preauthContext.setPreauthRequired(kdcContext.getConfig().isPreauthRequired());
+
+ for (KdcPreauth preauth : preauths) {
+ PreauthHandle handle = new PreauthHandle(preauth);
+ handle.initRequestContext(kdcRequest);
+ preauthContext.getHandles().add(handle);
+ }
+
+ return preauthContext;
+ }
+
+ public void provideEdata(KdcRequest kdcRequest, PaData outPaData) throws KrbException {
+ PreauthContext preauthContext = kdcRequest.getPreauthContext();
+
+ for (PreauthHandle handle : preauthContext.getHandles()) {
+ handle.provideEdata(kdcRequest, outPaData);
+ }
+ }
+
+ public void verify(KdcRequest kdcRequest, PaData paData) throws KrbException {
+ for (PaDataEntry paEntry : paData.getElements()) {
+ PreauthHandle handle = findHandle(kdcRequest, paEntry.getPaDataType());
+ if (handle != null) {
+ handle.verify(kdcRequest, paEntry);
+ }
+ }
+ }
+
+ public void providePaData(KdcRequest kdcRequest, PaData paData) {
+ PreauthContext preauthContext = kdcRequest.getPreauthContext();
+
+ for (PreauthHandle handle : preauthContext.getHandles()) {
+ handle.providePaData(kdcRequest, paData);
+ }
+ }
+
+ private PreauthHandle findHandle(KdcRequest kdcRequest, PaDataType paType) {
+ PreauthContext preauthContext = kdcRequest.getPreauthContext();
+
+ for (PreauthHandle handle : preauthContext.getHandles()) {
+ for (PaDataType pt : handle.preauth.getPaTypes()) {
+ if (pt == paType) {
+ return handle;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void destroy() {
+ for (KdcPreauth preauth : preauths) {
+ preauth.destroy();
+ }
+ }
+}