Exemplo n.º 1
0
def create_transport(host, port, service, transport_type="buffered"):
    """
  Create a new Thrift Transport based on the requested type.
  Supported transport types:
  - buffered, returns simple buffered transport
  - plain_sasl, return a SASL transport with the PLAIN mechanism
  - kerberos, return a SASL transport with the GSSAPI mechanism
  """
    sock = TSocket(host, int(port))
    if transport_type.lower() == "buffered":
        return TBufferedTransport(sock)

    # Initializes a sasl client
    from shell.thrift_sasl import TSaslClientTransport

    def sasl_factory():
        try:
            import saslwrapper as sasl
        except ImportError:
            print 'saslwrapper not found, trying to import sasl'
            import sasl
        sasl_client = sasl.Client()
        sasl_client.setAttr("host", host)
        sasl_client.setAttr("service", service)
        if transport_type.lower() == "plain_sasl":
            sasl_client.setAttr("username", getpass.getuser())
            sasl_client.setAttr("password", getpass.getuser())
        sasl_client.init()
        return sasl_client

    if transport_type.lower() == "plain_sasl":
        return TSaslClientTransport(sasl_factory, "PLAIN", sock)
    else:
        # GSSASPI is the underlying mechanism used by kerberos to authenticate.
        return TSaslClientTransport(sasl_factory, "GSSAPI", sock)
Exemplo n.º 2
0
def create_transport(host,
                     port,
                     service,
                     transport_type="buffered",
                     user=None,
                     password=None,
                     use_ssl=False,
                     ssl_cert=None):
    """
  Create a new Thrift Transport based on the requested type.
  Supported transport types:
  - buffered, returns simple buffered transport
  - plain_sasl, return a SASL transport with the PLAIN mechanism
  - kerberos, return a SASL transport with the GSSAPI mechanism

  If use_ssl is True, the connection will use SSL, optionally using the file at ssl_cert
  as the CA cert.
  """
    port = int(port)
    if use_ssl:
        from thrift.transport import TSSLSocket
        if ssl_cert is None:
            sock = TSSLSocket.TSSLSocket(host, port, validate=False)
        else:
            sock = TSSLSocket.TSSLSocket(host,
                                         port,
                                         validate=True,
                                         ca_certs=ssl_cert)
        # Set allowed SSL / TLS protocols to a permissive set to connect to any Impala server.
        import ssl
        sock.SSL_VERSION = ssl.PROTOCOL_SSLv23
    else:
        sock = TSocket(host, port)
    if transport_type.lower() == "buffered":
        return TBufferedTransport(sock)

    # Set defaults for LDAP connections
    if transport_type.lower() == "plain_sasl":
        if user is None: user = getpass.getuser()
        if password is None: password = ""

    # Initializes a sasl client
    from shell.thrift_sasl import TSaslClientTransport

    def sasl_factory():
        sasl_client = sasl.Client()
        sasl_client.setAttr("host", host)
        sasl_client.setAttr("service", service)
        if transport_type.lower() == "plain_sasl":
            sasl_client.setAttr("username", user)
            sasl_client.setAttr("password", password)
        sasl_client.init()
        return sasl_client

    if transport_type.lower() == "plain_sasl":
        return TSaslClientTransport(sasl_factory, "PLAIN", sock)
    else:
        # GSSASPI is the underlying mechanism used by kerberos to authenticate.
        return TSaslClientTransport(sasl_factory, "GSSAPI", sock)
Exemplo n.º 3
0
def create_transport(use_kerberos, host, port, service):
    """
  Create a new Transport based on the connection type.

  If not using kerberos, just return a simple buffered transport. For
  the kerberos, a sasl transport is created.
  """
    sock = TSocket(host, int(port))
    if not use_kerberos:
        return TBufferedTransport(sock)

    # Initializes a sasl client
    from shell.thrift_sasl import TSaslClientTransport

    def sasl_factory():
        try:
            import saslwrapper as sasl
        except ImportError:
            print 'saslwrapper not found, trying to import sasl'
            import sasl
        sasl_client = sasl.Client()
        sasl_client.setAttr("host", host)
        sasl_client.setAttr("service", service)
        sasl_client.init()
        return sasl_client

    # GSSASPI is the underlying mechanism used by kerberos to authenticate.
    return TSaslClientTransport(sasl_factory, "GSSAPI", sock)