Repository: hive Updated Branches: refs/heads/master b7b5cb472 -> 489b37a54
HIVE-14898: HS2 shouldn't log callstack for an empty auth header error Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/489b37a5 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/489b37a5 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/489b37a5 Branch: refs/heads/master Commit: 489b37a545b383e883aa37f80ed10cfd8d213dee Parents: b7b5cb4 Author: Daniel Dai <dai...@gmail.com> Authored: Wed Aug 15 15:36:44 2018 -0700 Committer: Daniel Dai <dai...@gmail.com> Committed: Wed Aug 15 15:36:44 2018 -0700 ---------------------------------------------------------------------- .../ldap/HttpEmptyAuthenticationException.java | 23 ++++++++++++++++++++ .../service/cli/thrift/ThriftHttpServlet.java | 12 ++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/489b37a5/service/src/java/org/apache/hive/service/auth/ldap/HttpEmptyAuthenticationException.java ---------------------------------------------------------------------- diff --git a/service/src/java/org/apache/hive/service/auth/ldap/HttpEmptyAuthenticationException.java b/service/src/java/org/apache/hive/service/auth/ldap/HttpEmptyAuthenticationException.java new file mode 100644 index 0000000..b6b71bc --- /dev/null +++ b/service/src/java/org/apache/hive/service/auth/ldap/HttpEmptyAuthenticationException.java @@ -0,0 +1,23 @@ +/* + * Licensed 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. See accompanying LICENSE file. + */ +package org.apache.hive.service.auth.ldap; + +import org.apache.hive.service.auth.HttpAuthenticationException; + +public class HttpEmptyAuthenticationException extends HttpAuthenticationException { + + public HttpEmptyAuthenticationException(String msg) { + super(msg); + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/489b37a5/service/src/java/org/apache/hive/service/cli/thrift/ThriftHttpServlet.java ---------------------------------------------------------------------- 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 70ffa3c..ffc5ef4 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 @@ -53,6 +53,7 @@ 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.ldap.HttpEmptyAuthenticationException; import org.apache.hive.service.cli.HiveSQLException; import org.apache.hive.service.cli.session.SessionManager; import org.apache.thrift.TProcessor; @@ -207,7 +208,11 @@ public class ThriftHttpServlet extends TServlet { super.doPost(request, response); } catch (HttpAuthenticationException e) { - LOG.error("Error: ", e); + // Ignore HttpEmptyAuthenticationException, it is normal for knox + // to send a request with empty header + if (!(e instanceof HttpEmptyAuthenticationException)) { + LOG.error("Error: ", e); + } // Send a 401 to the client response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); if(isKerberosAuthMode(authType)) { @@ -404,6 +409,9 @@ public class ThriftHttpServlet extends TServlet { try { return serviceUGI.doAs(new HttpKerberosServerAction(request, serviceUGI)); } catch (Exception e) { + if (e.getCause() instanceof HttpEmptyAuthenticationException) { + throw (HttpEmptyAuthenticationException)e.getCause(); + } LOG.error("Failed to authenticate with hive/_HOST kerberos principal"); throw new HttpAuthenticationException(e); } @@ -546,7 +554,7 @@ public class ThriftHttpServlet extends TServlet { String authHeader = request.getHeader(HttpAuthUtils.AUTHORIZATION); // Each http request must have an Authorization header if (authHeader == null || authHeader.isEmpty()) { - throw new HttpAuthenticationException("Authorization header received " + + throw new HttpEmptyAuthenticationException("Authorization header received " + "from the client is empty."); }