From 1791738992af1230dc7d93e456a95da88f9341b8 Mon Sep 17 00:00:00 2001 From: Edoardo Comar Date: Fri, 29 Mar 2019 15:40:03 +0000 Subject: [PATCH 1/3] KAFKA-8162: IBM JDK Class not found error when handling SASL Attempt to load the IBM internal class but fallback on loading the Sun class if the IBM one is not found. --- .../kafka/common/security/kerberos/KerberosError.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java b/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java index c6be441c7ed82..1eaa84f3ae2db 100644 --- a/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java +++ b/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java @@ -49,7 +49,7 @@ public enum KerberosError { static { try { - if (Java.isIbmJdk()) { + if (Java.isIbmJdk() && canLoad("com.ibm.security.krb5.internal.KrbException")) { KRB_EXCEPTION_CLASS = Class.forName("com.ibm.security.krb5.internal.KrbException"); } else { KRB_EXCEPTION_CLASS = Class.forName("sun.security.krb5.KrbException"); @@ -60,6 +60,15 @@ public enum KerberosError { } } + private static boolean canLoad(String clazz) { + try { + Class.forName(clazz); + return true; + } catch (Exception e) { + return false; + } + } + private final int errorCode; private final boolean retriable; From c34e17e9c81ecc354b219f098bbb702a77563339 Mon Sep 17 00:00:00 2001 From: Edoardo Comar Date: Fri, 29 Mar 2019 16:50:54 +0000 Subject: [PATCH 2/3] Handling ibm-java-sfj-8.0-5.30-x86_64 --- .../apache/kafka/common/security/kerberos/KerberosError.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java b/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java index 1eaa84f3ae2db..92bb37b0136b9 100644 --- a/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java +++ b/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java @@ -49,7 +49,9 @@ public enum KerberosError { static { try { - if (Java.isIbmJdk() && canLoad("com.ibm.security.krb5.internal.KrbException")) { + if (Java.isIbmJdk() && canLoad("com.ibm.security.krb5.KrbException")) { + KRB_EXCEPTION_CLASS = Class.forName("com.ibm.security.krb5.KrbException"); + } else if (Java.isIbmJdk() && canLoad("com.ibm.security.krb5.internal.KrbException")) { KRB_EXCEPTION_CLASS = Class.forName("com.ibm.security.krb5.internal.KrbException"); } else { KRB_EXCEPTION_CLASS = Class.forName("sun.security.krb5.KrbException"); From c751ef9d35def9e736370a51b89de0f17db4a62e Mon Sep 17 00:00:00 2001 From: Edoardo Comar Date: Mon, 15 Apr 2019 16:11:04 +0100 Subject: [PATCH 3/3] comment --- .../org/apache/kafka/common/security/kerberos/KerberosError.java | 1 + 1 file changed, 1 insertion(+) diff --git a/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java b/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java index 92bb37b0136b9..9c764829d173a 100644 --- a/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java +++ b/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java @@ -49,6 +49,7 @@ public enum KerberosError { static { try { + // different IBM JDKs versions include different security implementations if (Java.isIbmJdk() && canLoad("com.ibm.security.krb5.KrbException")) { KRB_EXCEPTION_CLASS = Class.forName("com.ibm.security.krb5.KrbException"); } else if (Java.isIbmJdk() && canLoad("com.ibm.security.krb5.internal.KrbException")) {