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 rºd| _| 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 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	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    