Esempio n. 1
0
def sasl_bind(client, host):
    sasl_client = SASLClient(host, service='ldap', mechanism='GSSAPI')
    
    sasl_credentials = SaslCredentials()
    sasl_credentials.setComponentByName("mechanism", LDAPString("gssapi"))
    sasl_credentials.setComponentByName("credentials", sasl_client.process(None))

    authentication_choice = AuthenticationChoice()
    authentication_choice.setComponentByName('sasl', sasl_credentials)
    
    bind_request = BindRequest()
    bind_request.setComponentByName('version', Version(3))
    bind_request.setComponentByName('name', LDAPDN(''))
    bind_request.setComponentByName('authentication', authentication_choice)
    
    protocol_op = ProtocolOp()
    protocol_op.setComponentByName("bindRequest", bind_request)
    
    ber_encode(authentication_choice)
    ber_encode(sasl_credentials)
    print(bind_request.prettyPrint())
    ber_encode(bind_request)
    ber_encode(protocol_op)
    response = yield from client.request(protocol_op)
    
    print(response)
Esempio n. 2
0
from pyasn1.codec.ber.encoder import encode as ber_encode
from pyasn1.codec.ber.decoder import decode as ber_decode
import pyasn1.type.univ

from ldap3.protocol.rfc4511 import ExtendedRequest, LDAPMessage, MessageID, ProtocolOp,\
    ResultCode
from pyasn1.error import SubstrateUnderrunError
from pyasn1.type.univ import Integer

LDAP_URL_RE = re.compile(r'^(?P<scheme>ldap|ldaps)://(?P<host>[a-z0-9\-.]{1,253})(?::(?P<port>[0-9]+))?(?:/|$)')
DEFAULT_LDAP_PORT = 389

START_TLS_REQUEST = ExtendedRequest()
START_TLS_REQUEST.setComponentByName("requestName", "1.3.6.1.4.1.1466.20037")
START_TLS_PROTOCOL_OP = ProtocolOp()
START_TLS_PROTOCOL_OP.setComponentByName('extendedReq', START_TLS_REQUEST)

class LDAPClient(asyncio.Protocol):
    def __init__(self, loop):
        self._loop = loop
        self._next_message_id = 0
        self._pending_messages = {}
        self._buffer = b''
        self._connection_made = asyncio.Future(loop=loop)

    def connection_made(self, transport):
        self._transport = transport
        self._connection_made.set_result(None)
        
    def data_received(self, data):
        self._buffer += data