o
    j                     @   sR   d dl mZ d dlmZmZmZmZ d dlmZ d dl	Z	d dl
Z
G dd dZdS )    )calcualte_length)LDAPMessageAuthenticationChoice
protocolOpBindResponse)loggerNc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )LDAPRelayServerConnectionc                 C   s2   || _ |j| _| jjd | _|| _d | _d| _d S )Nz2NTLMSSP - Microsoft NTLM Security Support Providerr   )settingsgssapiauthentication_contextsntlm
connection%_LDAPRelayServerConnection__auth_type%_LDAPRelayServerConnection__auth_iter)selfr	   r    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/msldap/relay/serverconnection.py__init__   s   
z"LDAPRelayServerConnection.__init__c                    sL   | j jd urd| j| jf }| j j|||fI d H  d S t|| d S )NzLDAPCON-%s:%s)r	   log_q	client_ipclient_portputr   log)r   levelmsgsrcr   r   r   	log_async   s
   z#LDAPRelayServerConnection.log_asyncc                    s   | j   d S N)handle_in_taskcancelr   r   r   r   	terminate   s   z#LDAPRelayServerConnection.terminatec                    s   | j  2 zC3 d H W }zt|}|d jdkr"| |I d H  ntd|j W q tyI } z| dt	|I d H  W Y d }~ d S d }~ww 6 d S )Nr   r   zUnknown LDAP message! %s   )
r   readr   load_choice#_LDAPRelayServerConnection__bindreq	Exceptionnativer   str)r   msg_datar   er   r   r   __handle_ldap_in   s   
z*LDAPRelayServerConnection.__handle_ldap_inc              
      s  z:|j d }|j d d }t|tdu rd| _| jdkrLdd dd}d	t|i}|t|d
}t|}| j	
| I d H  |  jd7  _W d S | j|I d H \}}	}
|
d ur^|
|d u rdddd}d	t|i}|t|d
}t|}| j	
| I d H  |  I d H  W d S d|dd}d	t|i}|t|d
}t|}| j	
| I d H  |  jd7  _W d S t|tdu r7d| _| j|d I d H \}}	}
|
d ur|
|d u r
dddd}d	t|i}|t|d
}t|}| j	
| I d H  |  I d H  W d S ddd|d}d	t|i}|t|d
}t|}| j	
| I d H  |  jd7  _W d S td|  tyT } zt  W Y d }~d S d }~ww )N	messageIDr   authenticationTNTLMr       )
resultCode	matchedDNdiagnosticMessagebindResponse)r-   r   r"   1   sX   8009030C: LdapErr: DSID-0C090569, comment: AcceptSecurityContext error, data 52e, v4563 GSSAPIcredentials   )r1   r2   r3   serverSaslCredszUnknown auth method %s)r(   
isinstancebytesr   r   encoder   r   r   r   writedumpr   authenticate_relay_serverr!   dictr
   r'   	traceback	print_exc)r   r   msg_idauthdata_rawtpobrespresdatato_conitnueerrr+   r   r   r   	__bindreq'   s   


z#LDAPRelayServerConnection.__bindreqc                    s"   t |  | _| jI d H  d S r   )asynciocreate_task*_LDAPRelayServerConnection__handle_ldap_inr   r    r   r   r   run   s   zLDAPRelayServerConnection.runN)	__name__
__module____qualname__r   r   r!   rO   r&   rP   r   r   r   r   r      s    kr   )msldap.protocol.utilsr   msldap.protocol.messagesr   r   r   r   msldapr   rA   rM   r   r   r   r   r   <module>   s    