Exemple #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)
Exemple #2
0
def respond_search_done(message_id):
    res = SearchResultDone()
    res['resultCode'] = ResultCode('success')
    res['matchedDN'] = ''
    res['diagnosticMessage'] = ''

    msg = LDAPMessage()
    msg['messageID'] = MessageID(message_id)
    msg['protocolOp'] = ProtocolOp().setComponentByName('searchResDone', res)
    return msg
Exemple #3
0
def respond_bind(message_id):
    res = BindResponse()
    res['resultCode'] = ResultCode('success')
    res['matchedDN'] = ''
    res['diagnosticMessage'] = ''

    msg = LDAPMessage()
    msg['messageID'] = MessageID(message_id)
    msg['protocolOp'] = ProtocolOp().setComponentByName('bindResponse', res)
    return msg
Exemple #4
0
    def encapsulate_ldap_message(message_id, obj_name, obj, controls=None):
        ldap_message = LDAPMessage()
        ldap_message['messageID'] = MessageID(message_id)
        ldap_message['protocolOp'] = ProtocolOp().setComponentByName(obj_name, obj)

        msg_controls = build_controls_list(controls)
        if msg_controls:
            ldap_message['controls'] = msg_controls

        return ldap_message
Exemple #5
0
def bind(message_id, name, password):
    req = BindRequest()
    req['version'] = Version(3)
    req['name'] = name
    req['authentication'] = \
        AuthenticationChoice().setComponentByName('simple', Simple(password))

    msg = LDAPMessage()
    msg['messageID'] = MessageID(message_id)
    msg['protocolOp'] = ProtocolOp().setComponentByName('bindRequest', req)
    return msg
Exemple #6
0
def respond_search_entry(message_id, name, attributes):
    res = SearchResultEntry()
    res['object'] = LDAPDN(name)
    res['attributes'] = PartialAttributeList()

    for i, (k, v) in enumerate(attributes.items()):
        res['attributes'][i] = PartialAttribute()
        res['attributes'][i]['type'] = AttributeDescription(k)
        res['attributes'][i]['vals'] = Vals()
        res['attributes'][i]['vals'][0] = AttributeValue(v)

    msg = LDAPMessage()
    msg['messageID'] = MessageID(message_id)
    msg['protocolOp'] = ProtocolOp().setComponentByName('searchResEntry', res)
    return msg
Exemple #7
0
def build_ldap_message(message_id, response_type, response, controls=None):
    # LDAPMessage ::= SEQUENCE {
    # messageID       MessageID,
    #     protocolOp      CHOICE {
    #         bindRequest           BindRequest,
    #         bindResponse          BindResponse,
    #         unbindRequest         UnbindRequest,
    #         searchRequest         SearchRequest,
    #         searchResEntry        SearchResultEntry,
    #         searchResDone         SearchResultDone,
    #         searchResRef          SearchResultReference,
    #         modifyRequest         ModifyRequest,
    #         modifyResponse        ModifyResponse,
    #         addRequest            AddRequest,
    #         addResponse           AddResponse,
    #         delRequest            DelRequest,
    #         delResponse           DelResponse,
    #         modDNRequest          ModifyDNRequest,
    #         modDNResponse         ModifyDNResponse,
    #         compareRequest        CompareRequest,
    #         compareResponse       CompareResponse,
    #         abandonRequest        AbandonRequest,
    #         extendedReq           ExtendedRequest,
    #         extendedResp          ExtendedResponse,
    #         ...,
    #         intermediateResponse  IntermediateResponse },
    #     controls       [0] Controls OPTIONAL }

    ldap_message = LDAPMessage()
    ldap_message['messageID'] = MessageID(message_id)
    ldap_message['protocolOp'] = ProtocolOp().setComponentByName(
        response_type, response)
    message_controls = build_controls_list(controls)
    if message_controls is not None:
        ldap_message['controls'] = message_controls

    return ldap_message
Exemple #8
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):