diff --git a/kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/JdbcConnectionParams.java b/kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/JdbcConnectionParams.java index 0db99da7100..6d34c649b0a 100644 --- a/kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/JdbcConnectionParams.java +++ b/kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/JdbcConnectionParams.java @@ -55,6 +55,8 @@ public class JdbcConnectionParams { public static final String AUTH_KERBEROS_AUTH_TYPE_FROM_KEYTAB = "fromKeytab"; public static final String AUTH_KERBEROS_AUTH_TYPE_FROM_SUBJECT = "fromSubject"; public static final String AUTH_KERBEROS_AUTH_TYPE_FROM_TICKET_CACHE = "fromTicketCache"; + public static final String AUTH_KERBEROS_ENABLE_CANONICAL_HOSTNAME_CHECK = + "kerberosEnableCanonicalHostnameCheck"; public static final String AUTH_TYPE_JWT = "jwt"; public static final String AUTH_TYPE_JWT_KEY = "jwt"; public static final String AUTH_JWT_ENV = "JWT"; diff --git a/kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/KyuubiConnection.java b/kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/KyuubiConnection.java index 8d8922ee7ff..dc2b7afee3d 100644 --- a/kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/KyuubiConnection.java +++ b/kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/KyuubiConnection.java @@ -146,7 +146,11 @@ public KyuubiConnection(String uri, Properties info) throws SQLException { // hive_conf_list -> hiveConfMap // hive_var_list -> hiveVarMap if (isKerberosAuthMode()) { - host = Utils.getCanonicalHostName(connParams.getHost()); + if (isEnableCanonicalHostnameCheck()) { + host = Utils.getCanonicalHostName(connParams.getHost()); + } else { + host = connParams.getHost(); + } } else { host = connParams.getHost(); } @@ -213,7 +217,7 @@ public KyuubiConnection(String uri, Properties info) throws SQLException { } // Update with new values jdbcUriString = connParams.getJdbcUriString(); - if (isKerberosAuthMode()) { + if (isKerberosAuthMode() && isEnableCanonicalHostnameCheck()) { host = Utils.getCanonicalHostName(connParams.getHost()); } else { host = connParams.getHost(); @@ -1003,6 +1007,12 @@ private boolean isKerberosAuthMode() { return isSaslAuthMode() && hasSessionValue(AUTH_PRINCIPAL); } + private boolean isEnableCanonicalHostnameCheck() { + return Boolean.parseBoolean( + sessConfMap.getOrDefault( + JdbcConnectionParams.AUTH_KERBEROS_ENABLE_CANONICAL_HOSTNAME_CHECK, "true")); + } + private Subject createSubject() { if (isKeytabAuthMode()) { String principal = sessConfMap.get(AUTH_KYUUBI_CLIENT_PRINCIPAL);