0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 package org.apache.hive.service.auth;
0020
0021 import java.security.AccessControlContext;
0022 import java.security.AccessController;
0023 import java.security.PrivilegedActionException;
0024 import java.security.PrivilegedExceptionAction;
0025 import javax.security.auth.Subject;
0026
0027 import org.apache.hadoop.hive.thrift.TFilterTransport;
0028 import org.apache.thrift.transport.TTransport;
0029 import org.apache.thrift.transport.TTransportException;
0030
0031
0032
0033
0034
0035 public class TSubjectAssumingTransport extends TFilterTransport {
0036
0037 public TSubjectAssumingTransport(TTransport wrapped) {
0038 super(wrapped);
0039 }
0040
0041 @Override
0042 public void open() throws TTransportException {
0043 try {
0044 AccessControlContext context = AccessController.getContext();
0045 Subject subject = Subject.getSubject(context);
0046 Subject.doAs(subject, new PrivilegedExceptionAction<Void>() {
0047 public Void run() {
0048 try {
0049 wrapped.open();
0050 } catch (TTransportException tte) {
0051
0052
0053
0054 throw new RuntimeException(tte);
0055 }
0056 return null;
0057 }
0058 });
0059 } catch (PrivilegedActionException ioe) {
0060 throw new RuntimeException("Received an ioe we never threw!", ioe);
0061 } catch (RuntimeException rte) {
0062 if (rte.getCause() instanceof TTransportException) {
0063 throw (TTransportException) rte.getCause();
0064 } else {
0065 throw rte;
0066 }
0067 }
0068 }
0069
0070 }