[ 
https://issues.apache.org/jira/browse/HIVE-6857?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vaibhav Gumashta updated HIVE-6857:
-----------------------------------

    Description: 
Excerpt from HIVE-6837 and related issues:
1. SessionManager#openSession:
{code}
public SessionHandle openSession(TProtocolVersion protocol, String username, 
String password,
      Map<String, String> sessionConf, boolean withImpersonation, String 
delegationToken)
          throws HiveSQLException {
    HiveSession session;
    if (withImpersonation) {
      HiveSessionImplwithUGI hiveSessionUgi = new 
HiveSessionImplwithUGI(protocol, username, password,
        hiveConf, sessionConf, TSetIpAddressProcessor.getUserIpAddress(), 
delegationToken);
      session = HiveSessionProxy.getProxy(hiveSessionUgi, 
hiveSessionUgi.getSessionUgi());
      hiveSessionUgi.setProxySession(session);
    } else {
      session = new HiveSessionImpl(protocol, username, password, hiveConf, 
sessionConf,
          TSetIpAddressProcessor.getUserIpAddress());
    }
    session.setSessionManager(this);
    session.setOperationManager(operationManager);
    session.open();
    handleToSession.put(session.getSessionHandle(), session);

    try {
      executeSessionHooks(session);
    } catch (Exception e) {
      throw new HiveSQLException("Failed to execute session hooks", e);
    }
    return session.getSessionHandle();
  }
{code}
Notice that if withImpersonation is set to true, we're using 
TSetIpAddressProcessor.getUserIpAddress() to get the IP address which is wrong 
for a kerberized setup (should use HiveAuthFactory#getIpAddress).

2. Also, in case of a kerberized setup, we're wrapping the transport in a doAs 
(with UGI of the HiveServer2 process) which doesn't make sense to me: 
https://github.com/apache/hive/blob/trunk/shims/common-secure/src/main/java/org/apache/hadoop/hive/thrift/HadoopThriftAuthBridge20S.java#L335.

3. The name TSetIpAddressProcessor should be replaced with something more 
meaningful like TPlainSASLProcessor.

4. Consolidate thread locals used for username, ipaddress

5. Do not directly use TSetIpAddressProcessor; get it via factory like here:
https://github.com/apache/hive/blob/trunk/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java#L161

  was:
Excerpt HIVE-6837. Issues:
1. SessionManager#openSession:
{code}
public SessionHandle openSession(TProtocolVersion protocol, String username, 
String password,
      Map<String, String> sessionConf, boolean withImpersonation, String 
delegationToken)
          throws HiveSQLException {
    HiveSession session;
    if (withImpersonation) {
      HiveSessionImplwithUGI hiveSessionUgi = new 
HiveSessionImplwithUGI(protocol, username, password,
        hiveConf, sessionConf, TSetIpAddressProcessor.getUserIpAddress(), 
delegationToken);
      session = HiveSessionProxy.getProxy(hiveSessionUgi, 
hiveSessionUgi.getSessionUgi());
      hiveSessionUgi.setProxySession(session);
    } else {
      session = new HiveSessionImpl(protocol, username, password, hiveConf, 
sessionConf,
          TSetIpAddressProcessor.getUserIpAddress());
    }
    session.setSessionManager(this);
    session.setOperationManager(operationManager);
    session.open();
    handleToSession.put(session.getSessionHandle(), session);

    try {
      executeSessionHooks(session);
    } catch (Exception e) {
      throw new HiveSQLException("Failed to execute session hooks", e);
    }
    return session.getSessionHandle();
  }
{code}
Notice that if withImpersonation is set to true, we're using 
TSetIpAddressProcessor.getUserIpAddress() to get the IP address which is wrong 
for a kerberized setup (should use HiveAuthFactory#getIpAddress).

2. Also, in case of a kerberized setup, we're wrapping the transport in a doAs 
(with UGI of the HiveServer2 process) which doesn't make sense to me: 
https://github.com/apache/hive/blob/trunk/shims/common-secure/src/main/java/org/apache/hadoop/hive/thrift/HadoopThriftAuthBridge20S.java#L335.

3. The name TSetIpAddressProcessor should be replaced with something more 
meaningful like TPlainSASLProcessor.

4. Consolidate thread locals used for username, ipaddress

5. Do not directly use TSetIpAddressProcessor; get it via factory like here:
https://github.com/apache/hive/blob/trunk/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java#L161


> Refactor HiveServer2 TSetIpAddressProcessor
> -------------------------------------------
>
>                 Key: HIVE-6857
>                 URL: https://issues.apache.org/jira/browse/HIVE-6857
>             Project: Hive
>          Issue Type: Bug
>          Components: HiveServer2
>            Reporter: Vaibhav Gumashta
>            Assignee: Vaibhav Gumashta
>
> Excerpt from HIVE-6837 and related issues:
> 1. SessionManager#openSession:
> {code}
> public SessionHandle openSession(TProtocolVersion protocol, String username, 
> String password,
>       Map<String, String> sessionConf, boolean withImpersonation, String 
> delegationToken)
>           throws HiveSQLException {
>     HiveSession session;
>     if (withImpersonation) {
>       HiveSessionImplwithUGI hiveSessionUgi = new 
> HiveSessionImplwithUGI(protocol, username, password,
>         hiveConf, sessionConf, TSetIpAddressProcessor.getUserIpAddress(), 
> delegationToken);
>       session = HiveSessionProxy.getProxy(hiveSessionUgi, 
> hiveSessionUgi.getSessionUgi());
>       hiveSessionUgi.setProxySession(session);
>     } else {
>       session = new HiveSessionImpl(protocol, username, password, hiveConf, 
> sessionConf,
>           TSetIpAddressProcessor.getUserIpAddress());
>     }
>     session.setSessionManager(this);
>     session.setOperationManager(operationManager);
>     session.open();
>     handleToSession.put(session.getSessionHandle(), session);
>     try {
>       executeSessionHooks(session);
>     } catch (Exception e) {
>       throw new HiveSQLException("Failed to execute session hooks", e);
>     }
>     return session.getSessionHandle();
>   }
> {code}
> Notice that if withImpersonation is set to true, we're using 
> TSetIpAddressProcessor.getUserIpAddress() to get the IP address which is 
> wrong for a kerberized setup (should use HiveAuthFactory#getIpAddress).
> 2. Also, in case of a kerberized setup, we're wrapping the transport in a 
> doAs (with UGI of the HiveServer2 process) which doesn't make sense to me: 
> https://github.com/apache/hive/blob/trunk/shims/common-secure/src/main/java/org/apache/hadoop/hive/thrift/HadoopThriftAuthBridge20S.java#L335.
> 3. The name TSetIpAddressProcessor should be replaced with something more 
> meaningful like TPlainSASLProcessor.
> 4. Consolidate thread locals used for username, ipaddress
> 5. Do not directly use TSetIpAddressProcessor; get it via factory like here:
> https://github.com/apache/hive/blob/trunk/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java#L161



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to