Adding a keytab test for a different encryption type
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/AdminHelper.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/AdminHelper.java
index a0ca3b0..9e8724d 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/AdminHelper.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/AdminHelper.java
@@ -299,12 +299,10 @@
patternString = patternString.replaceAll("\\*", ".*");
patternString = "^" + patternString + "$";
- Pattern pt;
try {
- pt = Pattern.compile(patternString);
+ return Pattern.compile(patternString);
} catch (PatternSyntaxException e) {
throw new KrbException("Invalid glob pattern string");
}
- return pt;
}
}
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java
index dc67f12..bb914f4 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/kadmin/local/LocalKadminImpl.java
@@ -14,7 +14,7 @@
* "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.
+ * under the License.
*
*/
package org.apache.kerby.kerberos.kerb.admin.kadmin.local;
@@ -37,7 +37,7 @@
import org.slf4j.LoggerFactory;
import java.io.File;
-import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -211,9 +211,7 @@
public void exportKeytab(File keytabFile, String principal)
throws KrbException {
principal = fixPrincipal(principal);
- List<String> principals = new ArrayList<>(1);
- principals.add(principal);
- exportKeytab(keytabFile, principals);
+ exportKeytab(keytabFile, Collections.singletonList(principal));
}
@Override
diff --git a/kerby-kerb/kerb-crypto/src/main/java/org/apache/kerby/kerberos/kerb/crypto/EncryptionHandler.java b/kerby-kerb/kerb-crypto/src/main/java/org/apache/kerby/kerberos/kerb/crypto/EncryptionHandler.java
index db33e53..4122c3e 100644
--- a/kerby-kerb/kerb-crypto/src/main/java/org/apache/kerby/kerberos/kerb/crypto/EncryptionHandler.java
+++ b/kerby-kerb/kerb-crypto/src/main/java/org/apache/kerby/kerberos/kerb/crypto/EncryptionHandler.java
@@ -14,7 +14,7 @@
* "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.
+ * under the License.
*
*/
package org.apache.kerby.kerberos.kerb.crypto;
@@ -52,8 +52,7 @@
* @throws KrbException e
*/
public static EncryptionType getEncryptionType(String eType) throws KrbException {
- EncryptionType result = EncryptionType.fromName(eType);
- return result;
+ return EncryptionType.fromName(eType);
}
/**
@@ -208,8 +207,7 @@
KeyUsage usage) throws KrbException {
EncTypeHandler handler = getEncHandler(key.getKeyType());
- byte[] plainData = handler.decrypt(data, key.getKeyData(), usage.getValue());
- return plainData;
+ return handler.decrypt(data, key.getKeyData(), usage.getValue());
}
/**
@@ -225,9 +223,8 @@
KeyUsage usage) throws KrbException {
EncTypeHandler handler = getEncHandler(key.getKeyType());
- byte[] plainData = handler.decrypt(data.getCipher(),
+ return handler.decrypt(data.getCipher(),
key.getKeyData(), usage.getValue());
- return plainData;
}
/**
@@ -243,7 +240,7 @@
} catch (KrbException e) {
return false;
}
- return handler != null;
+ return handler != null;
}
/**
@@ -291,8 +288,7 @@
byte[] randomBytes = Random.makeBytes(handler.keyInputSize());
byte[] keyBytes = handler.random2Key(randomBytes);
- EncryptionKey encKey = new EncryptionKey(eType, keyBytes);
- return encKey;
+ return new EncryptionKey(eType, keyBytes);
}
/**
@@ -308,8 +304,7 @@
byte[] randomBytes1 = randomBytes;
byte[] keyBytes = handler.random2Key(randomBytes1);
- EncryptionKey encKey = new EncryptionKey(eType, keyBytes);
- return encKey;
+ return new EncryptionKey(eType, keyBytes);
}
/**
diff --git a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/KeytabArcFourMd5LoginTest.java b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/KeytabArcFourMd5LoginTest.java
new file mode 100644
index 0000000..9a42020
--- /dev/null
+++ b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/KeytabArcFourMd5LoginTest.java
@@ -0,0 +1,45 @@
+/**
+ * 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.server;
+
+import org.apache.kerby.kerberos.kerb.identity.backend.BackendConfig;
+import org.junit.Test;
+
+public class KeytabArcFourMd5LoginTest extends LoginTestBase {
+
+ @Override
+ protected void setUpKdcServer() throws Exception {
+ KdcConfig config = new KdcConfig();
+ config.setString(KdcConfigKey.ENCRYPTION_TYPES, "arcfour-hmac");
+ SimpleKdcServer kdcServer = new TestKdcServer(allowTcp(), allowUdp(), config, new BackendConfig());
+ super.setKdcServer(kdcServer);
+
+ configKdcSeverAndClient();
+
+ prepareKdc();
+
+ kdcServer.start();
+ }
+
+ @Test
+ public void testLogin() throws Exception {
+ checkSubject(super.loginServiceUsingKeytab());
+ }
+}
\ No newline at end of file
diff --git a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java
index 955f966..a15d8c9 100644
--- a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java
+++ b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/TestKdcServer.java
@@ -6,16 +6,16 @@
* 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.
- *
+ * under the License.
+ *
*/
package org.apache.kerby.kerberos.kerb.server;
@@ -23,6 +23,7 @@
import org.apache.kerby.kerberos.kerb.client.KrbClient;
import org.apache.kerby.kerberos.kerb.client.KrbConfig;
import org.apache.kerby.kerberos.kerb.client.KrbConfigKey;
+import org.apache.kerby.kerberos.kerb.identity.backend.BackendConfig;
import org.apache.kerby.util.NetworkUtil;
import java.io.File;
@@ -47,6 +48,24 @@
setClient();
}
+ public TestKdcServer(boolean allowTcp, boolean allowUdp, KdcConfig kdcConfig,
+ BackendConfig backendConfig) throws KrbException {
+ super(kdcConfig, backendConfig);
+
+ setKdcRealm(KDC_REALM);
+ setKdcHost(HOSTNAME);
+ setAllowTcp(allowTcp);
+ setAllowUdp(allowUdp);
+
+ if (allowTcp) {
+ setKdcTcpPort(NetworkUtil.getServerPort());
+ }
+ if (allowUdp) {
+ setKdcUdpPort(NetworkUtil.getServerPort());
+ }
+ setClient();
+ }
+
public TestKdcServer(File confDir, KrbConfig krbConfig) throws KrbException {
super(confDir, krbConfig);
setClient();
diff --git a/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcServer.java b/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcServer.java
index 0c3f423..3f2fe0f 100644
--- a/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcServer.java
+++ b/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/server/SimpleKdcServer.java
@@ -27,6 +27,7 @@
import org.apache.kerby.kerberos.kerb.client.KrbConfig;
import org.apache.kerby.kerberos.kerb.client.KrbPkinitClient;
import org.apache.kerby.kerberos.kerb.client.KrbTokenClient;
+import org.apache.kerby.kerberos.kerb.identity.backend.BackendConfig;
import org.apache.kerby.util.NetworkUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,6 +63,16 @@
setKdcPort(NetworkUtil.getServerPort());
}
+ public SimpleKdcServer(KdcConfig kdcConfig,
+ BackendConfig backendConfig) throws KrbException {
+ super(kdcConfig, backendConfig);
+ this.krbClnt = new KrbClient(new KrbConfig());
+
+ setKdcRealm("EXAMPLE.COM");
+ setKdcHost("localhost");
+ setKdcPort(NetworkUtil.getServerPort());
+ }
+
public SimpleKdcServer(KrbConfig krbConfig) {
super();
this.krbClnt = new KrbClient(krbConfig);
diff --git a/kerby-kerb/kerb-util/src/test/java/org/apache/kerby/kerberos/kerb/util/NewEncryptionTest.java b/kerby-kerb/kerb-util/src/test/java/org/apache/kerby/kerberos/kerb/util/NewEncryptionTest.java
index 23de695..3238cbf 100644
--- a/kerby-kerb/kerb-util/src/test/java/org/apache/kerby/kerberos/kerb/util/NewEncryptionTest.java
+++ b/kerby-kerb/kerb-util/src/test/java/org/apache/kerby/kerberos/kerb/util/NewEncryptionTest.java
@@ -88,6 +88,11 @@
testEncWith(EncryptionType.RC4_HMAC_EXP);
}
+ @Test
+ public void testArcfourHmacMd5() throws IOException, KrbException {
+ testEncWith(EncryptionType.ARCFOUR_HMAC_MD5);
+ }
+
/**
* Decryption can leave a little trailing cruft. For the current cryptosystems, this can be up to 7 bytes.
* @param inData
@@ -101,11 +106,7 @@
byte[] resultData = Arrays.copyOf(outData, inData.length);
- if (Arrays.equals(inData, resultData)) {
- return true;
- } else {
- return false;
- }
+ return Arrays.equals(inData, resultData);
}
private void testEncWith(EncryptionType eType) throws KrbException {