This is an automated email from the ASF dual-hosted git repository.
prasanthj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 67240e7 Revert "HIVE-21783: Avoid authentication for connection from
the same domain (Ashutosh Bapat reviewed by Olli Draese, Prasanth Jayachandran)"
67240e7 is described below
commit 67240e7810387d741e39a07f7acbdc7f4fb0b4bb
Author: Prasanth Jayachandran <[email protected]>
AuthorDate: Sat Jun 15 19:55:35 2019 -0700
Revert "HIVE-21783: Avoid authentication for connection from the same
domain (Ashutosh Bapat reviewed by Olli Draese, Prasanth Jayachandran)"
This reverts commit 24313ab962b2881317bdcb50e67e90d3da3a5cc2.
---
.../java/org/apache/hadoop/hive/conf/HiveConf.java | 8 -
.../java/org/apache/hive/minikdc/MiniHiveKdc.java | 23 +--
...estImproperTrustDomainAuthenticationBinary.java | 28 ---
.../TestImproperTrustDomainAuthenticationHttp.java | 28 ---
.../auth/TestTrustDomainAuthenticationBinary.java | 28 ---
.../auth/TestTrustDomainAuthenticationHttp.java | 28 ---
.../auth/TrustDomainAuthenticationTest.java | 192 ---------------------
.../apache/hive/service/auth/HiveAuthFactory.java | 5 -
.../apache/hive/service/auth/PlainSaslHelper.java | 54 ------
.../hive/service/cli/thrift/ThriftHttpServlet.java | 53 ++----
10 files changed, 25 insertions(+), 422 deletions(-)
diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
index 03a8019..2cea174 100644
--- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
+++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
@@ -3478,14 +3478,6 @@ public class HiveConf extends Configuration {
" (Use with property
hive.server2.custom.authentication.class)\n" +
" PAM: Pluggable authentication module\n" +
" NOSASL: Raw transport"),
- HIVE_SERVER2_TRUSTED_DOMAIN("hive.server2.trusted.domain", "",
- "Specifies the host or a domain to trust connections from.
Authentication is skipped " +
- "for any connection coming from a host whose hostname ends with the
value of this" +
- " property. If authentication is expected to be skipped for
connections from " +
- "only a given host, fully qualified hostname of that host should be
specified. By default" +
- " it is empty, which means that all the connections to HiveServer2 are
authenticated. " +
- "When it is non-empty, the client has to provide a Hive user name. Any
password, if " +
- "provided, will not be used when authentication is skipped."),
HIVE_SERVER2_ALLOW_USER_SUBSTITUTION("hive.server2.allow.user.substitution",
true,
"Allow alternate user to be specified as part of HiveServer2 open
connection request."),
HIVE_SERVER2_KERBEROS_KEYTAB("hive.server2.authentication.kerberos.keytab", "",
diff --git
a/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/MiniHiveKdc.java
b/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/MiniHiveKdc.java
index e604f90..7d1192a 100644
--- a/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/MiniHiveKdc.java
+++ b/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/MiniHiveKdc.java
@@ -36,7 +36,6 @@ import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hive.jdbc.miniHS2.MiniHS2;
import com.google.common.io.Files;
-import org.apache.hive.service.server.HiveServer2;
/**
* Wrapper around Hadoop's MiniKdc for use in hive tests.
@@ -179,21 +178,15 @@ public class MiniHiveKdc {
* @return new MiniHS2 instance
* @throws Exception
*/
- public static MiniHS2 getMiniHS2WithKerb(MiniHiveKdc miniHiveKdc, HiveConf
hiveConf,
+ public static MiniHS2 getMiniHS2WithKerb(MiniHiveKdc miniHiveKdc, HiveConf
hiveConf,
String authType) throws Exception {
- String hivePrincipal =
-
miniHiveKdc.getFullyQualifiedServicePrincipal(MiniHiveKdc.HIVE_SERVICE_PRINCIPAL);
- String hiveKeytab = miniHiveKdc.getKeyTabFile(
-
miniHiveKdc.getServicePrincipalForUser(MiniHiveKdc.HIVE_SERVICE_PRINCIPAL));
-
- MiniHS2.Builder miniHS2Builder = new MiniHS2.Builder()
- .withConf(hiveConf)
- .withMiniKdc(hivePrincipal,
hiveKeytab)
-
.withAuthenticationType(authType);
- if (HiveServer2.isHTTPTransportMode(hiveConf)) {
- miniHS2Builder.withHTTPTransport();
- }
- return miniHS2Builder.build();
+ String hivePrincipal =
+
miniHiveKdc.getFullyQualifiedServicePrincipal(MiniHiveKdc.HIVE_SERVICE_PRINCIPAL);
+ String hiveKeytab = miniHiveKdc.getKeyTabFile(
+
miniHiveKdc.getServicePrincipalForUser(MiniHiveKdc.HIVE_SERVICE_PRINCIPAL));
+
+ return new MiniHS2.Builder().withConf(hiveConf).withMiniKdc(hivePrincipal,
hiveKeytab).
+ withAuthenticationType(authType).build();
}
/**
diff --git
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestImproperTrustDomainAuthenticationBinary.java
b/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestImproperTrustDomainAuthenticationBinary.java
deleted file mode 100644
index b7a8bec..0000000
---
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestImproperTrustDomainAuthenticationBinary.java
+++ /dev/null
@@ -1,28 +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.
- */
-package org.apache.hive.service.auth;
-
-import org.junit.BeforeClass;
-
-public class TestImproperTrustDomainAuthenticationBinary extends
TrustDomainAuthenticationTest {
-
- @BeforeClass
- public static void setUp() throws Exception {
- initialize(HS2_TRANSPORT_MODE_BINARY, false);
- }
-}
diff --git
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestImproperTrustDomainAuthenticationHttp.java
b/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestImproperTrustDomainAuthenticationHttp.java
deleted file mode 100644
index 57bcf4f..0000000
---
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestImproperTrustDomainAuthenticationHttp.java
+++ /dev/null
@@ -1,28 +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.
- */
-package org.apache.hive.service.auth;
-
-import org.junit.BeforeClass;
-
-public class TestImproperTrustDomainAuthenticationHttp extends
TrustDomainAuthenticationTest {
-
- @BeforeClass
- public static void setUp() throws Exception {
- initialize(HS2_TRANSPORT_MODE_HTTP, false);
- }
-}
diff --git
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestTrustDomainAuthenticationBinary.java
b/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestTrustDomainAuthenticationBinary.java
deleted file mode 100644
index 8f6d0b5..0000000
---
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestTrustDomainAuthenticationBinary.java
+++ /dev/null
@@ -1,28 +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.
- */
-package org.apache.hive.service.auth;
-
-import org.junit.BeforeClass;
-
-public class TestTrustDomainAuthenticationBinary extends
TrustDomainAuthenticationTest {
-
- @BeforeClass
- public static void setUp() throws Exception {
- initialize(HS2_TRANSPORT_MODE_BINARY, true);
- }
-}
diff --git
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestTrustDomainAuthenticationHttp.java
b/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestTrustDomainAuthenticationHttp.java
deleted file mode 100644
index 50b195a..0000000
---
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TestTrustDomainAuthenticationHttp.java
+++ /dev/null
@@ -1,28 +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.
- */
-package org.apache.hive.service.auth;
-
-import org.junit.BeforeClass;
-
-public class TestTrustDomainAuthenticationHttp extends
TrustDomainAuthenticationTest {
-
- @BeforeClass
- public static void setUp() throws Exception {
- initialize(HS2_TRANSPORT_MODE_HTTP, true);
- }
-}
diff --git
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TrustDomainAuthenticationTest.java
b/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TrustDomainAuthenticationTest.java
deleted file mode 100644
index 3eba95c..0000000
---
a/itests/hive-unit/src/test/java/org/apache/hive/service/auth/TrustDomainAuthenticationTest.java
+++ /dev/null
@@ -1,192 +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.
- */
-package org.apache.hive.service.auth;
-
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hive.service.server.HiveServer2;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.security.sasl.AuthenticationException;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.Map;
-
-public class TrustDomainAuthenticationTest {
- private static final Logger LOG =
LoggerFactory.getLogger(TrustDomainAuthenticationTest.class);
- private static HiveServer2 hiveserver2;
- private static HiveConf hiveConf;
- private static byte[] hiveConfBackup;
- private static String correctUser = "hive";
- private static String correctPassword = "passwd";
- private static String wrongPassword = "wrong_password";
- private static String wrongUser = "wrong_user";
- static final String HS2_TRANSPORT_MODE_BINARY = "binary";
- static final String HS2_TRANSPORT_MODE_HTTP = "http";
- private static String hs2TransportMode;
- private static boolean properTrustedDomain;
-
- static void initialize(String transportMode, boolean useProperTrustedDomain)
throws Exception {
- Assert.assertNotNull(transportMode);
- Assert.assertTrue(transportMode.equals(HS2_TRANSPORT_MODE_HTTP) ||
- transportMode.equals(HS2_TRANSPORT_MODE_BINARY));
- hs2TransportMode = transportMode;
- properTrustedDomain = useProperTrustedDomain;
-
- hiveConf = new HiveConf();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- hiveConf.writeXml(baos);
- baos.close();
- hiveConfBackup = baos.toByteArray();
- hiveConf.setVar(HiveConf.ConfVars.HIVE_SERVER2_TRANSPORT_MODE,
hs2TransportMode);
- hiveConf.setVar(HiveConf.ConfVars.HIVE_SERVER2_AUTHENTICATION, "CUSTOM");
-
- // These tests run locally and hence all connections are from localhost.
So, when we want to
- // test whether trusted domain setting works, use "localhost". When we
want to test
- // otherwise, use some string other than that. Other authentication tests
test empty trusted
- // domain so that's not covered under these tests.
- hiveConf.setVar(HiveConf.ConfVars.HIVE_SERVER2_TRUSTED_DOMAIN,
- properTrustedDomain ? "localhost" : "no_such_domain");
- hiveConf.setVar(HiveConf.ConfVars.HIVE_SERVER2_CUSTOM_AUTHENTICATION_CLASS,
-
"org.apache.hive.service.auth.TrustDomainAuthenticationTest$SimpleAuthenticationProviderImpl");
- FileOutputStream fos = new FileOutputStream(new
File(hiveConf.getHiveSiteLocation().toURI()));
- hiveConf.writeXml(fos);
- fos.close();
- hiveserver2 = new HiveServer2();
- hiveserver2.init(hiveConf);
- hiveserver2.start();
- Thread.sleep(1000);
- LOG.info("hiveServer2 start ......");
- }
-
- @AfterClass
- public static void tearDown() throws Exception {
- if(hiveConf != null && hiveConfBackup != null) {
- FileOutputStream fos = new FileOutputStream(new
File(hiveConf.getHiveSiteLocation().toURI()));
- fos.write(hiveConfBackup);
- fos.close();
- }
- if (hiveserver2 != null) {
- hiveserver2.stop();
- hiveserver2 = null;
- }
- Thread.sleep(1000);
- LOG.info("hiveServer2 stop ......");
- }
-
- // TODO: This test doesn't work since getRemoteHost returns IP address
instead of a host name
- @Test
- public void testTrustedDomainAuthentication() throws Exception {
- String port = "10000";
- String urlExtra = "";
- if (hs2TransportMode.equals(HS2_TRANSPORT_MODE_HTTP)) {
- port = "10001";
- urlExtra = ";transportMode=http;httpPath=cliservice";
- }
-
- String url = "jdbc:hive2://localhost:" + port + "/default" + urlExtra;
- Class.forName("org.apache.hive.jdbc.HiveDriver");
-
- if (properTrustedDomain) {
- testProperTrustedDomainAuthentication(url);
- } else {
- testImproperTrustedDomainAuthentication(url);
- }
- }
-
- private void testProperTrustedDomainAuthentication(String url) throws
SQLException {
- // When the connection is from a trusted domain any connection is
authentic irrespective of
- // user and password
- Connection connection = DriverManager.getConnection(url, correctUser,
correctPassword);
- connection.close();
-
- connection = DriverManager.getConnection(url, wrongUser, correctPassword);
- connection.close();
-
- connection = DriverManager.getConnection(url, wrongUser, wrongPassword);
- connection.close();
-
- connection = DriverManager.getConnection(url, correctUser, wrongPassword);
- connection.close();
- }
-
- private void testImproperTrustedDomainAuthentication(String url) throws
Exception {
- // When trusted domain doesn't match requests domain, only the connection
with correct user
- // and password goes through.
- Connection connection = DriverManager.getConnection(url, correctUser,
correctPassword);
- connection.close();
-
- String partErrorMessage = "Peer indicated failure: Error validating the
login";
- if (hs2TransportMode.equals(HS2_TRANSPORT_MODE_HTTP)) {
- partErrorMessage = "HTTP Response code: 401";
- }
-
- try (Connection conn = DriverManager.getConnection(url, wrongUser,
correctPassword)) {
- Assert.fail("Expected Exception");
- } catch (SQLException e) {
- Assert.assertNotNull(e.getMessage());
- Assert.assertTrue(e.getMessage(),
e.getMessage().contains(partErrorMessage));
- }
-
- try (Connection conn = DriverManager.getConnection(url, wrongUser,
wrongPassword)) {
- Assert.fail("Expected Exception");
- } catch (SQLException e) {
- Assert.assertNotNull(e.getMessage());
- Assert.assertTrue(e.getMessage(),
e.getMessage().contains(partErrorMessage));
- }
-
- try (Connection conn = DriverManager.getConnection(url, correctUser,
wrongPassword)) {
- Assert.fail("Expected Exception");
- } catch (SQLException e) {
- Assert.assertNotNull(e.getMessage());
- Assert.assertTrue(e.getMessage(),
e.getMessage().contains(partErrorMessage));
- }
- }
-
- public static class SimpleAuthenticationProviderImpl implements
PasswdAuthenticationProvider {
-
- private Map<String, String> userMap = new HashMap<String, String>();
-
- public SimpleAuthenticationProviderImpl() {
- init();
- }
-
- private void init(){
- userMap.put(correctUser, correctPassword);
- }
-
- @Override
- public void Authenticate(String user, String password) throws
AuthenticationException {
-
- if(!userMap.containsKey(user)){
- throw new AuthenticationException("Invalid user : "+user);
- }
- if(!userMap.get(user).equals(password)){
- throw new AuthenticationException("Invalid passwd : "+password);
- }
- }
- }
-}
diff --git a/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java
b/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java
index e07cd7e..f5f6d49 100644
--- a/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java
+++ b/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java
@@ -161,11 +161,6 @@ public class HiveAuthFactory {
} else {
throw new LoginException("Unsupported authentication type " +
authTypeStr);
}
-
- String trustedDomain = HiveConf.getVar(conf,
ConfVars.HIVE_SERVER2_TRUSTED_DOMAIN).trim();
- if (!trustedDomain.isEmpty()) {
- transportFactory =
PlainSaslHelper.getDualPlainTransportFactory(transportFactory, trustedDomain);
- }
return transportFactory;
}
diff --git a/service/src/java/org/apache/hive/service/auth/PlainSaslHelper.java
b/service/src/java/org/apache/hive/service/auth/PlainSaslHelper.java
index 0742311..13a1a38 100644
--- a/service/src/java/org/apache/hive/service/auth/PlainSaslHelper.java
+++ b/service/src/java/org/apache/hive/service/auth/PlainSaslHelper.java
@@ -18,7 +18,6 @@
package org.apache.hive.service.auth;
import java.io.IOException;
-import java.net.InetAddress;
import java.security.Security;
import java.util.HashMap;
@@ -40,14 +39,10 @@ import org.apache.thrift.TProcessor;
import org.apache.thrift.TProcessorFactory;
import org.apache.thrift.transport.TSaslClientTransport;
import org.apache.thrift.transport.TSaslServerTransport;
-import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public final class PlainSaslHelper {
- private static final Logger LOG =
LoggerFactory.getLogger(PlainSaslHelper.class);
public static TProcessorFactory getPlainProcessorFactory(ThriftCLIService
service) {
return new SQLPlainProcessorFactory(service);
@@ -70,65 +65,16 @@ public final class PlainSaslHelper {
return saslFactory;
}
- static TTransportFactory getDualPlainTransportFactory(TTransportFactory
otherTrans,
- String trustedDomain)
- throws LoginException {
- LOG.info("Created additional transport factory for skipping authentication
when client " +
- "connection is from the same domain.");
- return new DualSaslTransportFactory(otherTrans, trustedDomain);
- }
-
public static TTransport getPlainTransport(String username, String password,
TTransport underlyingTransport) throws SaslException {
return new TSaslClientTransport("PLAIN", null, null, null, new
HashMap<String, String>(),
new PlainCallbackHandler(username, password), underlyingTransport);
}
- // Return true if the remote host is from the trusted domain, i.e. host URL
has the same
- // suffix as the trusted domain.
- static public boolean isHostFromTrustedDomain(String remoteHost, String
trustedDomain) {
- return remoteHost.endsWith(trustedDomain);
- }
-
private PlainSaslHelper() {
throw new UnsupportedOperationException("Can't initialize class");
}
- static final class DualSaslTransportFactory extends TTransportFactory {
- TTransportFactory otherFactory;
- TTransportFactory noAuthFactory;
- String trustedDomain;
-
- DualSaslTransportFactory(TTransportFactory otherFactory, String
trustedDomain)
- throws LoginException {
- this.noAuthFactory =
getPlainTransportFactory(AuthMethods.NONE.toString());
- this.otherFactory = otherFactory;
- this.trustedDomain = trustedDomain;
- }
-
- @Override
- public TTransport getTransport(final TTransport trans) {
- TSocket tSocket = null;
- // Attempt to avoid authentication if only we can fetch the client IP
address and it
- // happens to be from the same domain as the server.
- if (trans instanceof TSocket) {
- tSocket = (TSocket) trans;
- } else if (trans instanceof TSaslServerTransport) {
- TSaslServerTransport saslTrans = (TSaslServerTransport) trans;
- tSocket = (TSocket)(saslTrans.getUnderlyingTransport());
- }
- String remoteHost = tSocket != null ?
- tSocket.getSocket().getInetAddress().getCanonicalHostName() :
null;
- if (remoteHost != null && isHostFromTrustedDomain(remoteHost,
trustedDomain)) {
- LOG.info("No authentication performed because the connecting host " +
remoteHost + " is " +
- "from the trusted domain " + trustedDomain);
- return noAuthFactory.getTransport(trans);
- }
-
- return otherFactory.getTransport(trans);
- }
- }
-
public static final class PlainServerCallbackHandler implements
CallbackHandler {
private final AuthMethods authMethod;
diff --git
a/service/src/java/org/apache/hive/service/cli/thrift/ThriftHttpServlet.java
b/service/src/java/org/apache/hive/service/cli/thrift/ThriftHttpServlet.java
index 292723e..ff8f268 100644
--- a/service/src/java/org/apache/hive/service/cli/thrift/ThriftHttpServlet.java
+++ b/service/src/java/org/apache/hive/service/cli/thrift/ThriftHttpServlet.java
@@ -52,7 +52,6 @@ import org.apache.hive.service.auth.HiveAuthFactory;
import org.apache.hive.service.auth.HttpAuthUtils;
import org.apache.hive.service.auth.HttpAuthenticationException;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;
-import org.apache.hive.service.auth.PlainSaslHelper;
import org.apache.hive.service.auth.ldap.HttpEmptyAuthenticationException;
import org.apache.hive.service.cli.HiveSQLException;
import org.apache.hive.service.cli.session.SessionManager;
@@ -138,9 +137,6 @@ public class ThriftHttpServlet extends TServlet {
return;
}
}
-
- clientIpAddress = request.getRemoteAddr();
- LOG.debug("Client IP Address: " + clientIpAddress);
// If the cookie based authentication is already enabled, parse the
// request and validate the request cookies.
if (isCookieAuthEnabled) {
@@ -150,42 +146,25 @@ public class ThriftHttpServlet extends TServlet {
LOG.info("Could not validate cookie sent, will try to generate a new
cookie");
}
}
- // If the cookie based authentication is not enabled or the request does
not have a valid
- // cookie, use authentication depending on the server setup.
+ // If the cookie based authentication is not enabled or the request does
+ // not have a valid cookie, use the kerberos or password based
authentication
+ // depending on the server setup.
if (clientUserName == null) {
- String trustedDomain = HiveConf.getVar(hiveConf,
ConfVars.HIVE_SERVER2_TRUSTED_DOMAIN).trim();
-
- // Skip authentication if the connection is from the trusted domain,
if specified.
- // getRemoteHost may or may not return the FQDN of the remote host
depending upon the
- // HTTP server configuration. So, force a reverse DNS lookup.
- String remoteHostName =
-
InetAddress.getByName(request.getRemoteHost()).getCanonicalHostName();
- if (!trustedDomain.isEmpty() &&
- PlainSaslHelper.isHostFromTrustedDomain(remoteHostName,
trustedDomain)) {
- LOG.info("No authentication performed because the connecting host "
+ remoteHostName +
- " is from the trusted domain " + trustedDomain);
- // In order to skip authentication, we use auth type NOSASL to be
consistent with the
- // HiveAuthFactory defaults. In HTTP mode, it will also get us the
user name from the
- // HTTP request header.
- clientUserName = doPasswdAuth(request,
HiveAuthConstants.AuthTypes.NOSASL.getAuthName());
- } else {
- // For a kerberos setup
- if (isKerberosAuthMode(authType)) {
- String delegationToken =
request.getHeader(HIVE_DELEGATION_TOKEN_HEADER);
- // Each http request must have an Authorization header
- if ((delegationToken != null) && (!delegationToken.isEmpty())) {
- clientUserName = doTokenAuth(request, response);
- } else {
- clientUserName = doKerberosAuth(request);
- }
- }
- // For password based authentication
- else {
- clientUserName = doPasswdAuth(request, authType);
+ // For a kerberos setup
+ if (isKerberosAuthMode(authType)) {
+ String delegationToken =
request.getHeader(HIVE_DELEGATION_TOKEN_HEADER);
+ // Each http request must have an Authorization header
+ if ((delegationToken != null) && (!delegationToken.isEmpty())) {
+ clientUserName = doTokenAuth(request, response);
+ } else {
+ clientUserName = doKerberosAuth(request);
}
}
+ // For password based authentication
+ else {
+ clientUserName = doPasswdAuth(request, authType);
+ }
}
- assert (clientUserName != null);
LOG.debug("Client username: " + clientUserName);
// Set the thread local username to be used for doAs if true
@@ -197,6 +176,8 @@ public class ThriftHttpServlet extends TServlet {
SessionManager.setProxyUserName(doAsQueryParam);
}
+ clientIpAddress = request.getRemoteAddr();
+ LOG.debug("Client IP Address: " + clientIpAddress);
// Set the thread local ip address
SessionManager.setIpAddress(clientIpAddress);