o
    ßý°j]¶  ã                   @   s  d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@mAZAmBZB ddlCmDZD ddlEmFZFmGZG ddlHmIZI ddlJmKZKmLZLmMZMmNZN ddlOmPZP ddl&mQZQ ddlRmSZS ddlTmUZUmVZVmWZW ddlXmYZY dgZZdZ[dd „ Z\G d!d"„ d"e]ƒZ^G d#d$„ d$e]ƒZ_dS )%Ú
é    N)ÚSystemRandom)ÚOctetStringé   )ÚSEQUENCE_TYPESÚALL_ATTRIBUTES)Úbind_request_to_dict)Údelete_request_to_dict)Úadd_request_to_dict)Úcompare_request_to_dict)Úmodify_dn_request_to_dict)Úmodify_request_to_dict)Úextended_request_to_dict)Úsearch_request_to_dictÚparse_filterÚROOTÚANDÚORÚNOTÚMATCH_APPROXÚMATCH_GREATER_OR_EQUALÚMATCH_LESS_OR_EQUALÚMATCH_EXTENSIBLEÚMATCH_PRESENTÚMATCH_SUBSTRINGÚMATCH_EQUAL)Ú	json_hookÚ
to_unicodeÚto_raw)ÚLDAPDefinitionErrorÚLDAPPasswordIsMandatoryErrorÚLDAPInvalidValueErrorÚLDAPSocketOpenError)ÚRESULT_SUCCESSÚRESULT_OPERATIONS_ERRORÚ%RESULT_UNAVAILABLE_CRITICAL_EXTENSIONÚRESULT_INVALID_CREDENTIALSÚRESULT_NO_SUCH_OBJECTÚRESULT_ENTRY_ALREADY_EXISTSÚRESULT_COMPARE_TRUEÚRESULT_COMPARE_FALSEÚRESULT_NO_SUCH_ATTRIBUTEÚRESULT_UNWILLING_TO_PERFORMÚRESULT_PROTOCOL_ERRORÚRESULT_CONSTRAINT_VIOLATIONÚRESULT_NOT_ALLOWED_ON_RDN)ÚCaseInsensitiveDict)Úto_dnÚsafe_dnÚsafe_rdn)Úvalidate_simple_password)Úfind_attribute_validatorÚformat_attribute_values)Úpaged_search_control)ÚlogÚlog_enabledÚERRORÚBASIC)Úencode)Úldap_escape_to_bytes)ÚBaseStrategy)ÚLDAPMessageÚ
ProtocolOpÚ	MessageID)Úbuild_controls_listú1.2.840.113556.1.4.319úutf-8c                   C   s   t tƒ  ¡ ƒdd … S )Niúÿÿÿ)r   r   Úrandom© rF   rF   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/ldap3/strategy/mockBase.pyÚrandom_cookiez   s   rH   c                   @   s   e Zd Zdd„ Zddd„ZdS )ÚPagedSearchSetc                 C   s"   || _ || _d | _d| _d| _d S )Nr   F)ÚsizeÚresponseÚcookieÚsentÚdone)ÚselfrK   rJ   ÚcriticalityrF   rF   rG   Ú__init__   s
   
zPagedSearchSet.__init__Nc                 C   s–   |r|| _ d}| j| j| j| j  … }|  j| j 7  _| jt| jƒkr*d| _d| _ntƒ | _tdt| jƒ| jƒ}tdt	|t
ƒd t |¡gdœ}||fS )NÚ TF)Ú
resultCodeÚ	matchedDNÚdiagnosticMessageÚreferralÚcontrols)rJ   rK   rM   ÚlenrN   rL   rH   r7   r#   r   ÚSERVER_ENCODINGr>   Údecode_control)rO   rJ   ÚmessagerK   Úresponse_controlÚresultrF   rF   rG   Únext†   s"   
üzPagedSearchSet.next©N)Ú__name__Ú
__module__Ú__qualname__rQ   r^   rF   rF   rF   rG   rI   ~   s    rI   c                   @   sÂ   e Zd ZdZdd„ Zdd„ Zdd„ Zd.d	d
„Zdd„ Zd.dd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zed)d*„ ƒZd/d,d-„Zd+S )0ÚMockBaseStrategyz,
    Base class for connection strategy
    c                 C   sx   t | jjdƒstƒ | jj_| jjj| _d| _d | _d | _dg| _	| j
dg dd� g | _ttƒr:ttd| jj| ƒ d S d S )NÚditTÚentryDNú	cn=schemaF©Úvalidatezinstantiated <%s>: <%s>)ÚhasattrÚ
connectionÚserverr0   rd   ÚentriesÚno_real_dsaÚboundÚcustom_validatorsÚoperational_attributesÚ	add_entryÚ_paged_setsr9   r;   r8   Ú	__class__r`   ©rO   rF   rF   rG   rQ   ¢   s   ÿzMockBaseStrategy.__init__c                 C   ó2   d| j _d| j _| j jr| j j jd7  _d S d S )NTFé   )rj   Ú	listeningÚclosedÚusageÚ_usageÚopen_socketsrt   rF   rF   rG   Ú_start_listen¯   ó
   ÿzMockBaseStrategy._start_listenc                 C   ru   )NFTrv   )rj   rw   rx   ry   rz   Úclosed_socketsrt   rF   rF   rG   Ú_stop_listenµ   r}   zMockBaseStrategy._stop_listenTc                 C   sl   |r t | jjj|| jƒ}||ƒ}|du rtd| ƒ‚|dur |}t|ƒ}t|tƒs4td|t	|ƒ|f ƒ‚|S )z—
        Prepare a value for being stored in the mock DIT
        :param value: object to store
        :return: raw value to store in the DIT
        Fz"value non valid for attribute '%s'TzvThe value "%s" of type %s for "%s" must be bytes or an offline schema needs to be provided when Mock strategy is used.)
r5   rj   rk   Úschemaro   r!   r   Ú
isinstanceÚbytesÚtype)rO   Úattribute_typeÚvaluerh   Ú	validatorÚ	validatedÚ	raw_valuerF   rF   rG   Ú_prepare_value»   s   
ýzMockBaseStrategy._prepare_valuec                 C   s   d S r_   rF   )rO   Údnr„   r…   rF   rF   rG   Ú_update_attributeÑ   s   z"MockBaseStrategy._update_attributec                    sT  ˆj jj�� t|ƒ}|ˆj jjv�rtƒ }|D ]´‰ ˆ ˆjv r qt|ˆ  tƒs.|ˆ  g|ˆ < ˆj jj	rMˆj jj	j
ˆ  jrMt|ˆ  ƒdkrM W d   ƒ dS ˆ  ¡ dkr½ˆj jj	r½tƒ }|ˆ  D ]\}ˆj jj	jry|ˆj jj	jvry  W d   ƒ dS | |¡ d}|t|ƒkr²tƒ }	t|ƒ}|D ]}
ˆj jj	j|
 jr¦|	 ˆj jj	j|
 j¡ q�| |	¡ |t|ƒks†dd„ |D ƒ|d< q_q‡ ‡‡fdd„|ˆ  D ƒ|ˆ < qt|d	d
�D ]+}|d |vrçt|d ƒg||d < qÓt|d ƒ}|||d  vrþ||d   |¡ qÓt|ƒg|d< |ˆj jj|< 	 W d   ƒ d	S 	 W d   ƒ dS 1 �s#w   Y  d S )Nrv   FÚobjectclassr   c                 S   ó   g | ]}t |ƒ‘qS rF   ©r   ©Ú.0r…   rF   rF   rG   Ú
<listcomp>ï   ó    z.MockBaseStrategy.add_entry.<locals>.<listcomp>ÚobjectClassc                    s   g | ]	}ˆ  ˆ |ˆ¡‘qS rF   )r‰   r�   ©Ú	attributerO   rh   rF   rG   r‘   ñ   ó    T©Ú	decomposere   )rj   rk   Údit_lockr2   rd   r0   rp   r�   r   r€   Úattribute_typesÚsingle_valuerX   ÚlowerÚsetÚobject_classesÚaddÚsuperiorÚupdater3   r   Úappend)rO   rŠ   Ú
attributesrh   Ú
escaped_dnÚ	new_entryÚ	class_setÚobject_classÚclass_set_sizeÚnew_classesÚ
class_nameÚrdnÚraw_rdnrF   r”   rG   rq   Ô   sZ   
,öñ
€
úó €Ú'&ÙzMockBaseStrategy.add_entryc                 C   sf   | j jj�$ t|ƒ}|| j jjv r | j jj|= 	 W d   ƒ dS 	 W d   ƒ dS 1 s,w   Y  d S ©NTF)rj   rk   r™   r2   rd   )rO   rŠ   r¤   rF   rF   rG   Úremove_entryþ   s   ü$ûzMockBaseStrategy.remove_entryc                 C   s  t |dƒ}tj|td�}d|vr(d| j_ttƒr"ttd| jj| jƒ t	| jjƒ‚| jj
js3tƒ | jj
_|d D ]F}d|vrUd| j_ttƒrOttd| jj| jƒ t	| jjƒ‚d|vrqd	| j_ttƒrkttd| jj| jƒ t	| jjƒ‚| j|d |d d
d� q7| ¡  d S )NÚr)Úobject_hookrl   z2invalid JSON definition, missing "entries" sectionú<%s> for <%s>Úrawz.invalid JSON definition, missing "raw" sectionrŠ   z-invalid JSON definition, missing "dn" sectionFrg   )ÚopenÚjsonÚloadr   rj   Ú
last_errorr9   r:   r8   r   rk   rd   r0   rq   Úclose)rO   Újson_entry_fileÚtargetÚ
definitionÚentryrF   rF   rG   Úentries_from_json  s,   

z"MockBaseStrategy.entries_from_jsonc                 C   s  t |ƒ}|d }d|d v r&z
t|d d ƒ}W n% ty%   d}d}Y nw d| j_ttƒr8ttd| jj| jƒ t| jjƒ‚|| jj	j
v rgd| jj	j
| v rb|  |d|¡r]t}d}|| _nt}d	}nt}d
}n|dkrst}d}|| _nt}d}|dt|tƒd d dœS )NÚnameÚsimpleÚauthenticationrR   z<anonymous>z)only Simple Bind allowed in Mock strategyr±   ÚuserPasswordzinvalid credentialszmissing userPassword attributezmissing object)rS   rT   rU   rV   ÚserverSaslCreds)r   r4   r    rj   r¶   r9   r:   r8   r   rk   rd   Úequalr#   rn   r&   r   rY   )rO   Úrequest_messagerW   ÚrequestÚidentityÚpasswordÚresult_coder[   rF   rF   rG   Ú	mock_bind  sF   þüzMockBaseStrategy.mock_bindc                 C   sT   t |ƒ}t|d ƒ}|| jjjv r| jjj|= t}d}nt}d}|dt|tƒd dœS )Nr»   rR   úobject not found©rS   rT   rU   rV   )	r	   r2   rj   rk   rd   r#   r'   r   rY   )rO   rÃ   rW   rÄ   rŠ   rÇ   r[   rF   rF   rG   Úmock_deleteT  s   ýzMockBaseStrategy.mock_deletec                 C   sf   t |ƒ}t|d ƒ}|d }|| jjjvr%|  ||¡r t}d}n	t}d}nt}d}|dt	|t
ƒd dœS )Nr»   r£   rR   zerror adding entryzentry already existrÊ   )r
   r2   rj   rk   rd   rq   r#   r$   r(   r   rY   )rO   rÃ   rW   rÄ   rŠ   r£   rÇ   r[   rF   rF   rG   Úmock_addk  s    	ýzMockBaseStrategy.mock_addc           	      C   s�   t |ƒ}t|d ƒ}|d }t|d ƒ}|| jjjv r:|| jjj| v r5|  |||¡r0t}d}nt}d}n	t	}d}nt
}d}|dt|tƒd dœS )Nr»   r•   r…   rR   zattribute not foundrÉ   rÊ   )r   r2   r   rj   rk   rd   rÂ   r)   r*   r+   r'   r   rY   )	rO   rÃ   rW   rÄ   rŠ   r•   r…   rÇ   r[   rF   rF   rG   Úmock_compareŠ  s(   	ýzMockBaseStrategy.mock_comparec                 C   s€  t |ƒ}t|d ƒ}|d }|d }|d rt|d ƒnd}t|ƒ}|| jjjv r²|r`|r`t|d d | ƒ}	| jjj|  ¡ | jjj|	< | jjj|	 }
|rT| jjj|= t}d}t|	ƒg|
d	< nV|r­|s­t|d t|d
d … ƒ ƒ}	| jjj|  ¡ | jjj|	< | jjj|	 }| jjj|= t|	ƒg|d	< t	|	dd�D ]}t|d
 ƒg||d < qšt}d}n	t
}d}nt}d}|dt|tƒd dœS )Nr»   ÚnewRdnÚdeleteOldRdnÚnewSuperiorrR   r   ú,zentry movedre   rv   Tr—   zentry rdn renamedznewRdn or newSuperior missingrÉ   rÊ   )r   r2   r1   rj   rk   rd   Úcopyr#   r   r3   r,   r'   r   rY   )rO   rÃ   rW   rÄ   rŠ   Únew_rdnÚdelete_old_rdnÚnew_superiorÚdn_componentsÚnew_dnÚmoved_entryrÇ   r[   Úrenamed_entryr«   rF   rF   rG   Úmock_modify_dn¬  sF   ýzMockBaseStrategy.mock_modify_dnc                    s  t |ƒ}t|d ƒ}|d }d}d}dd„ t|dd�D ƒ}|| jjjv �r{| jjj| }	|	 ¡ }
|D �]<}|d	 }|d
 d }|d
 d ‰ |dkrž||	vrxˆ rx| jjjrn| jjjjrn| jjjj| j	rnt
ˆ ƒdkrnt}d}q2dd„ ˆ D ƒ|	|< q2| jjjr‘| jjjjr‘| jjjj| j	r‘t}d}q2|	|  dd„ ˆ D ƒ¡ q2|dkrÞ||	vr«t}d}q2||v r´t}d}q2ˆ sº|	|= q2ˆ D ]}t|ƒ}|  |||¡rÑ|	|  |¡ q¼d}d}q¼|	| sÝ|	|= q2|dk�r;||	v�rˆ �r| jjj�r| jjjj�r| jjjj| j	�rt
ˆ ƒdk�rt}d}q2dd„ ˆ D ƒ|	|< q2ˆ �s%||v �r%t}d}q2ˆ �s1||	v �r0|	|= q2dd„ ˆ D ƒ|	|< q2|dk�ro||	v�rJt}d}q2t
ˆ ƒdk�rVt}d}q2z‡ fdd„|	| D ƒ|	|< W q2   t}d}Y q2q2|�rz|
| jjj|< nt}d}|dt|tƒd dœS )Nr»   Úchangesr   rR   c                 S   s   g | ]}|d  ‘qS )r   rF   )r�   r«   rF   rF   rG   r‘   ÷  r’   z0MockBaseStrategy.mock_modify.<locals>.<listcomp>Tr—   Ú	operationr•   rƒ   r…   rv   zattribute is single-valuedc                 S   r�   rF   rŽ   ©r�   ÚelementrF   rF   rG   r‘     r’   c                 S   r�   rF   rŽ   rÝ   rF   rF   rG   r‘     r’   z-attribute must exists for deleting its valueszcannot delete an rdnzvalue to delete not foundr   c                 S   r�   rF   rŽ   rÝ   rF   rF   rG   r‘   &  r’   zcannot replace an rdnc                 S   r�   rF   rŽ   rÝ   rF   rF   rG   r‘   .  r’   é   z1attribute must exists for incrementing its valuesz#only one increment value is allowedc                    s,   g | ]}t tt|ƒtˆ d  ƒ ƒdd�‘qS )r   rD   )Úencoding)r‚   ÚstrÚintr�   ©ÚelementsrF   rG   r‘   9  s   , zunable to increment valuerÉ   rÊ   )r   r2   r3   rj   rk   rd   rÒ   r€   rš   r›   rX   r.   Úextendr+   r/   r   rÂ   Úremover-   r,   r'   r   rY   )rO   rÃ   rW   rÄ   rŠ   rÛ   rÇ   r[   Úrdnsr»   Úoriginal_entryÚmodificationrÜ   r•   rÞ   Úraw_elementrF   rã   rG   Úmock_modifyà  sœ   
4(€
<
€

ó€ýzMockBaseStrategy.mock_modifyc           
         sŠ  t |ƒ}|rÀ‡ fdd„|D ƒ}|D ]¬}|d d r9|d tvr9dt|d ƒ d }tdt|tƒd d	œ}g |f  S |d d
kr½|d d d sƒˆ  |¡\}}|d tkr}t|t	|d d d ƒ|d d ƒ}	|	 
¡ \}}|	jrq~	nˆ j |	¡ ||f  S g |f  S ˆ jD ]$}	|	j|d d d krª|	 
¡ \}}|	jr¢ˆ j |	¡ ||f    S q†d}tdt|tƒd d	œ}g |f  S qd S ˆ  |¡S )Nc                    s   g | ]	}|rˆ   |¡‘qS rF   )rZ   )r�   Úcontrolrt   rF   rG   r‘   l  r–   z0MockBaseStrategy.mock_search.<locals>.<listcomp>rv   rP   r   zCritical requested control z not availablerR   rÊ   rC   r…   rL   rS   rJ   z%Invalid cookie in simple paged search)r   ÚSEARCH_CONTROLSrá   r%   r   rY   Ú_execute_searchr#   rI   râ   r^   rN   rr   r¢   rL   ræ   r$   )
rO   rÃ   rW   rÄ   Údecoded_controlsÚdecoded_controlr[   r]   rK   Ú	paged_setrF   rt   rG   Úmock_searchJ  sP    ý$
üýå÷
'zMockBaseStrategy.mock_searchc                    sb  g }t ˆd ƒ}ˆd }ˆd ‰ dˆ v rˆ  ˆj¡ ˆ  d¡ dd„ ˆd D ƒ‰ tˆd ˆjjjdd	ˆjjjˆjj	d
�}g }|dkrU|ˆjjj
v sO| ¡ dkrT| |¡ nB|dkr}ˆjjj
D ]}| ¡  | ¡ ¡r{d|d t|ƒ d … vr{| |¡ q^n|dkr—ˆjjj
D ]}| ¡  | ¡ ¡r–| |¡ q†|sžt}d}	ntˆ ||¡}
ˆjjr½dˆd   k r¶t|
ƒk r½n nd}d}	nU|
D ]N‰| ˆ‡ ‡‡‡fdd„ˆjjj
ˆ D ƒdœ¡ dˆ v�rˆjD ],}| ¡ ˆ v réqàt|t|ƒd  d ƒD ]\}}|d |k�r|t|ƒd  d |= qõqàq¿d}d}	|dt|	tƒd dœ}ˆd dk�r-|d ˆd … |fS ||fS )NÚbaseÚscoper£   ú+c                 S   s   g | ]}|  ¡ ‘qS rF   )rœ   )r�   ÚattrrF   rF   rG   r‘   Ÿ  r’   z4MockBaseStrategy._execute_search.<locals>.<listcomp>ÚfilterTF)Úauto_escapeÚauto_encoder†   Úcheck_namesr   rf   rv   rÑ   r   zincorrect base objectÚ	sizeLimité   zsize limit exceededc                    sD   g | ]}|  ¡ ˆ v stˆ v r|ˆd  rg nˆjjjˆ | dœ‘qS )Ú	typesOnly)rƒ   Úvals)rœ   r   rj   rk   rd   )r�   r•   ©r£   ÚmatchrÄ   rO   rF   rG   r‘   »  s    ýÿ)Úobjectr£   rƒ   rR   rÊ   )r2   rå   rp   ræ   r   rj   rk   r€   Úcustom_validatorrú   rd   rœ   r¢   ÚendswithrX   r'   Úevaluate_filter_nodeÚraise_exceptionsÚ	enumerater   rY   )rO   rÄ   Ú	responsesró   rô   Úfilter_rootÚ
candidatesr»   rÇ   r[   ÚmatchedÚop_attrÚirö   r]   rF   rÿ   rG   rî   –  sr   
(
€,
€þ
€(þþ

 €þ€ý*z MockBaseStrategy._execute_searchc           	      C   s®   t |ƒ}t}d}d }d }| jjjrK| jjjjD ]3}|d |d krJ|d dkr5d}d}tdƒ}t| jƒ}n|d dkrHd}d}tdƒ}t| jƒ} nq|dt|t	ƒd ||dœS )	Nznot implementedr½   r   z2.16.840.1.113719.1.27.100.31rR   z2.16.840.1.113719.1.27.100.32z1.3.6.1.4.1.4203.1.11.3)rS   rT   rU   rV   ÚresponseNameÚresponseValue)
r   r,   rj   rk   ÚinfoÚsupported_extensionsr   rn   r   rY   )	rO   rÃ   rW   rÄ   rÇ   r[   Úresponse_nameÚresponse_valueÚ	extensionrF   rF   rG   Úmock_extendedÓ  s6   

õûzMockBaseStrategy.mock_extendedc                 C   sN  t ƒ |_t ƒ |_|jr|jD ]}|  ||¡ q|jtkr"|jd jS |jtkrT|jd }|j |j¡ |j |j¡ |jdd… D ]}|j 	|j¡ |j 	|j¡ qAdS |jt
kro|jD ]}|j |j¡ |j |j¡ q\dS |jtkr„|jd j|_|jd j|_dS |jtkrè|jd }|jd }|D ]P}|| jjj| v rå| jjj| | D ];}| ¡ rÉ| ¡ rÉt|ƒt|ƒkrÂ|j |¡ q©|j |¡ q©t|tƒ ¡ t|tƒ ¡ krÞ|j |¡ q©|j |¡ q©q•dS |jtk�rV|jd }|jd }|D ]Y}|| jjj| v �rS| jjj| | D ]C}| ¡ �r4| ¡ �r4t|ƒt|ƒk�r,|j |¡ �q|j |¡ �qt|tƒ ¡ t|tƒ ¡ k�rK|j |¡ �q|j |¡ �qqúdS |jtk�rud| j_ttƒ�rottd| jj| jƒ t| jjƒ‚|jtk�r |jd }|D ]}|| jjj| v �r–|j |¡ �q‚|j |¡ �q‚dS |jtk�rg|jd }d|jv �rÅ|jd du�rÅt  !t|jd tƒ¡}	nd	}	d
|jv �rê|jd
 du�rê|jd
 D ]}
|	dt  !t|
tƒ¡ 7 }	�qÚd|jv �r|jd du�r|	dt  !t|jd tƒ¡ 7 }	|	�r|j "d
d¡�s|j "dd¡�s|	d7 }	t j#|	t j$t j%B d�}|D ]9}|| jjj| v �r]| jjj| | D ]}| &t|tƒ¡�rS|j |¡ �q@|j |¡ �q@�q+|j |¡ �q+dS |jt'k�ss|jt(k�r£|jd }|jd }|D ]%}|| jjj| v �r›|  )|||¡�r›|j |¡ �q|j |¡ �qdS dS )a  After evaluation each 2 sets are added to each MATCH node, one for the matched object and one for unmatched object.
        The unmatched object set is needed if a superior node is a NOT that reverts the evaluation. The BOOLEAN nodes mix the sets
        returned by the MATCH nodesr   rv   Nrö   r…   z-Extensible match not allowed in Mock strategyr±   ÚinitialrR   Úanyz.*Úfinal)Úflags)*r�   r
  Ú	unmatchedrä   r  Útagr   r   r¡   Úintersection_updater   r   r   Ú	assertionrj   rk   rd   Úisdigitrâ   rŸ   r   rY   rœ   r   r   r¶   r9   r:   r8   r   r   r   ÚreÚescapeÚgetÚcompileÚUNICODEÚ
IGNORECASEr   r   r   rÂ   )rO   Únoder	  rÞ   Úfirst_elementÚ	attr_nameÚ
attr_valueÚ	candidater…   Úsubstring_filterÚmiddleÚregex_filterrF   rF   rG   r  ý  sÀ   



þ

þ



€ô

€ô

ü
&üø	

$ùz%MockBaseStrategy.evaluate_filter_nodec                 C   sd   | j jj| | }t|tƒs|g}t|ƒ}|D ]}|  ||¡r" dS |  |  ||¡|¡r/ dS qdS r­   )rj   rk   rd   r�   r   r=   Ú_check_equalityr‰   )rO   rŠ   r„   Úvalue_to_checkÚattribute_valuesÚescaped_value_to_checkÚattribute_valuerF   rF   rG   rÂ   j  s   
ÿzMockBaseStrategy.equalc                 C   sv   | |krdS t | ƒ ¡ rt |ƒ ¡ rt| ƒt|ƒkrdS zt| tƒ ¡ t|tƒ ¡ kr.W dS W dS  ty:   Y dS w r­   )rá   r  râ   r   rY   rœ   ÚUnicodeError)Úvalue1Úvalue2rF   rF   rG   r,  w  s   ÿýýz MockBaseStrategy._check_equalityNc                 C   sÌ   |   |||¡| j_| jjrN| jj ¡ }| jjrHtƒ }t|ƒ|d< t	ƒ  
||¡|d< t|ƒ}|d ur5||d< t  |||¡}| jj |tt|ƒƒ¡ ||||fS d| j_ttƒr`ttd| jj| jƒ t| jjƒ‚)NÚ	messageIDÚ
protocolOprW   z.unable to send message, connection is not openr±   )Údecode_requestrj   rÄ   rw   rk   Únext_message_idry   r?   rA   r@   ÚsetComponentByNamerB   r>   rz   Úupdate_transmitted_messagerX   r<   r¶   r9   r:   r8   r"   )rO   Úmessage_typerÄ   rW   Ú
message_idÚldap_messageÚmessage_controlsÚasn1_requestrF   rF   rG   Úsend†  s"   zMockBaseStrategy.send)Tr_   )r`   ra   rb   Ú__doc__rQ   r|   r   r‰   r‹   rq   r®   r¼   rÈ   rË   rÌ   rÍ   rÚ   rë   rò   rî   r  r  rÂ   Ústaticmethodr,  r?  rF   rF   rF   rG   rc   �   s0    

*6"4jL=*m
rc   )`r@  r´   r  rE   r   Úpyasn1.type.univr   rR   r   r   Úoperation.bindr   Úoperation.deleter	   Úoperation.addr
   Úoperation.comparer   Úoperation.modifyDnr   Úoperation.modifyr   Úoperation.extendedr   Úoperation.searchr   r   r   r   r   r   r   r   r   r   r   r   r   Ú
utils.convr   r   r   Úcore.exceptionsr   r    r!   r"   Úcore.resultsr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   Úutils.ciDictr0   Úutils.dnr1   r2   r3   Úprotocol.sasl.saslr4   Úprotocol.formatters.standardr5   r6   Úprotocol.rfc2696r7   Ú	utils.logr8   r9   r:   r;   Ú
utils.asn1r<   r=   Ústrategy.baser>   Úprotocol.rfc4511r?   r@   rA   Úprotocol.convertrB   rí   rY   rH   r  rI   rc   rF   rF   rF   rG   Ú<module>   sB    <<: