diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index c91416a02b7a..fc7542754eb9 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -65,6 +65,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Properties; import java.util.concurrent.Executor; import java.util.concurrent.locks.ReentrantLock; @@ -306,7 +307,11 @@ protected HiveConnection(String uri, Properties info, sessConfMap = connParams.getSessionVars(); setupLoginTimeout(); if (isKerberosAuthMode()) { - host = Utils.getCanonicalHostName(connParams.getHost()); + if (isEnableCanonicalHostnameCheck()) { + host = Utils.getCanonicalHostName(connParams.getHost()); + } else { + host = connParams.getHost(); + } } else if (isBrowserAuthMode() && !isHttpTransportMode()) { throw new SQLException("Browser auth mode is only applicable in http mode"); } else { @@ -400,7 +405,7 @@ protected HiveConnection(String uri, Properties info, } // Update with new values jdbcUriString = connParams.getJdbcUriString(); - if (isKerberosAuthMode()) { + if (isKerberosAuthMode() && isEnableCanonicalHostnameCheck()) { host = Utils.getCanonicalHostName(connParams.getHost()); } else { host = connParams.getHost(); @@ -1324,6 +1329,11 @@ private boolean isKerberosAuthMode() { && sessConfMap.containsKey(JdbcConnectionParams.AUTH_PRINCIPAL); } + private boolean isEnableCanonicalHostnameCheck() { + return Boolean.parseBoolean( + sessConfMap.getOrDefault(JdbcConnectionParams.AUTH_KERBEROS_ENABLE_CANONICAL_HOSTNAME_CHECK, "true")); + } + private boolean isBrowserAuthMode() { return JdbcConnectionParams.AUTH_SSO_BROWSER_MODE .equals(sessConfMap.get(JdbcConnectionParams.AUTH_TYPE)); diff --git a/jdbc/src/java/org/apache/hive/jdbc/Utils.java b/jdbc/src/java/org/apache/hive/jdbc/Utils.java index a855d4e2a5d3..765f9bde725a 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ b/jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -99,6 +99,7 @@ public static class JdbcConnectionParams { public static final String AUTH_PASSWD = "password"; public static final String AUTH_KERBEROS_AUTH_TYPE = "kerberosAuthType"; public static final String AUTH_KERBEROS_AUTH_TYPE_FROM_SUBJECT = "fromSubject"; + 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";