예제 #1
0
    def recv(self):
        REQUEST_SIZE = 8192
        data = ''
        done = False
        while not done:
            recvData = self._socket.recv(REQUEST_SIZE)
            if len(recvData) < REQUEST_SIZE:
                done = True
            data += recvData

        answers = []

        while len(data) > 0:
            try:
                ldapMessage, remaining = decoder.decode(data,
                                                        asn1Spec=LDAPMessage())
            except SubstrateUnderrunError:
                # We need more data
                remaining = data + self._socket.recv(REQUEST_SIZE)
            else:
                answers.append(ldapMessage)
            data = remaining

        self._messageId += 1
        return answers
예제 #2
0
    def recv(self):
        REQUEST_SIZE = 8192
        data = b''
        done = False
        while not done:
            recvData = self._socket.recv(REQUEST_SIZE)
            if len(recvData) < REQUEST_SIZE:
                done = True
            data += recvData

        response = []
        while len(data) > 0:
            try:
                message, remaining = decoder.decode(data, asn1Spec=LDAPMessage())
            except SubstrateUnderrunError:
                # We need more data
                remaining = data + self._socket.recv(REQUEST_SIZE)
            else:
                if message['messageID'] == 0:  # unsolicited notification
                    name = message['protocolOp']['extendedResp']['responseName'] or message['responseName']
                    notification = KNOWN_NOTIFICATIONS.get(name, "Unsolicited Notification '%s'" % name)
                    if name == NOTIFICATION_DISCONNECT:  # Server has disconnected
                        self.close()
                    raise LDAPSessionError(
                        error=int(message['protocolOp']['extendedResp']['resultCode']),
                        errorString='%s -> %s: %s' % (notification,
                                                      message['protocolOp']['extendedResp']['resultCode'].prettyPrint(),
                                                      message['protocolOp']['extendedResp']['diagnosticMessage'])
                    )
                response.append(message)
            data = remaining

        return response
예제 #3
0
파일: ldap.py 프로젝트: steven1664/impacket
    def send(self, message):
        ldapMessage = LDAPMessage()
        ldapMessage['messageID'] = IntegerPositive(self._messageId)
        ldapMessage['protocolOp'] = message

        data = encoder.encode(ldapMessage)

        return self._socket.sendall(data)
예제 #4
0
    def send(self, protocolOp, message):
        ldapMessage = LDAPMessage()
        ldapMessage['messageID'] = IntegerPositive(self._messageId)
        ldapMessage['protocolOp'] = ProtocolOp().setComponentByName(
            protocolOp, message)

        data = encoder.encode(ldapMessage)

        return self._socket.sendall(data)
예제 #5
0
    def send(self, request, controls=None):
        message = LDAPMessage()
        message['messageID'] = random.randrange(1, 2147483647)
        message['protocolOp'].setComponentByType(request.getTagSet(), request)
        if controls is not None:
            message['controls'].setComponents(*controls)

        data = encoder.encode(message)

        return self._socket.sendall(data)
예제 #6
0
    def send(self, protocolOp, request, controls=None):
        message = LDAPMessage()
        message['messageID'] = IntegerPositive(self._messageId)
        message['protocolOp'] = ProtocolOp().setComponentByName(
            protocolOp, request)
        if controls is not None:
            message['controls'] = Controls().setComponents(*controls)

        data = encoder.encode(message)

        return self._socket.sendall(data)