
    >OOf]                        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 Z\ G d  d!e]      Z^ G d" d#e]      Z_y)$
    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                  J    t        t               j                               dd  S )Ni)r   r   random     X/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/strategy/mockBase.pyrandom_cookierK   z   s    ,.'')*23//rI   c                       e Zd Zd ZddZy)PagedSearchSetc                 J    || _         || _        d | _        d| _        d| _        y )Nr   F)sizeresponsecookiesentdone)selfrP   rO   criticalitys       rJ   __init__zPagedSearchSet.__init__   s%    	 		rI   Nc                    |r|| _         d}| j                  | j                  | j                  | j                   z    }| xj                  | j                   z  c_        | j                  t        | j                        kD  rd| _        d| _        nt               | _        t        dt        | j                        | j
                        }t        dt        |t              d t        j                  |      gd}||fS )N TF)
resultCode	matchedDNdiagnosticMessagereferralcontrols)rO   rP   rR   lenrS   rQ   rK   r8   r$   r   SERVER_ENCODINGr?   decode_control)rT   rO   messagerP   response_controlresults         rJ   nextzPagedSearchSet.next   s    DI==DII		,AB		TYY	99s4==))DIDK'/DK/s4==7I4;;W .!'1'?'K"+::;KLM	 rI   N)__name__
__module____qualname__rV   rd   rH   rI   rJ   rM   rM   ~   s     rI   rM   c                       e Zd ZdZd Zd Zd ZddZd ZddZ	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed        ZddZy)MockBaseStrategyz,
    Base class for connection strategy
    c                    t        | j                  j                  d      s#t               | j                  j                  _        | j                  j                  j                  | _        d| _        d | _        d | _        dg| _	        | j                  dg d       g | _        t        t              r't        t        d| j                  j                   |        y y )NditTentryDN	cn=schemaFvalidatezinstantiated <%s>: <%s>)hasattr
connectionserverr1   rl   entriesno_real_dsaboundcustom_validatorsoperational_attributes	add_entry_paged_setsr:   r<   r9   	__class__rf   rT   s    rJ   rV   zMockBaseStrategy.__init__   s    t--u5)<)>DOO""&--11
!%'0k#{B7u0$..2I2I4P rI   c                     d| j                   _        d| j                   _        | j                   j                  r*| j                   j                  xj
                  dz  c_        y y )NTF   )rr   	listeningclosedusage_usageopen_socketsr|   s    rJ   _start_listenzMockBaseStrategy._start_listen   sG    $(!!&??  OO""//14/ !rI   c                     d| j                   _        d| j                   _        | j                   j                  r*| j                   j                  xj
                  dz  c_        y y )NFTr~   )rr   r   r   r   r   closed_socketsr|   s    rJ   _stop_listenzMockBaseStrategy._stop_listen   sG    $)!!%??  OO""11Q61 !rI   c           	      &   |rUt        | j                  j                  j                  || j                        } ||      }|du rt        d|z        |dur|}t        |      }t        |t              st        d|dt        |      d|d      |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'TzThe value "z
" of type z for "zU" must be bytes or an offline schema needs to be provided when Mock strategy is used.)
r6   rr   rs   schemarw   r"   r   
isinstancebytestype)rT   attribute_typevaluerp   	validator	validated	raw_values          rJ   _prepare_valuezMockBaseStrategy._prepare_value   s     01G1G1N1NP^`d`v`vwI!%(IE!+,RUc,cdd$&!5M	)U+'U)  
 rI   c                      y re   rH   )rT   dnr   r   s       rJ   _update_attributez"MockBaseStrategy._update_attribute   s    rI   c           
         | j                   j                  j                  5  t        |      }|| j                   j                  j                  vrt               }|D ]l  }|| j                  v rt        ||   t              s	||   g||<   | j                   j                  j                  rR| j                   j                  j                  j                  |   j                  rt        ||         dkD  r
 d d d        y|j                         dk(  r| j                   j                  j                  rpt               }||   D ][  }| j                   j                  j                  j                  r7|| j                   j                  j                  j                  vr  d d d        y|j!                  |       d}	|	t        |      k7  rt               }
t        |      }	|D ]  }| j                   j                  j                  j                  |   j"                  s;|
j%                  | j                   j                  j                  j                  |   j"                          |j%                  |
       |	t        |      k7  r|D cg c]  }t'        |       c}|d<   ^ F||   D cg c]  }| j)                  |||       c}||<   o t+        |d      D ]O  }|d   |vrt'        |d         g||d   <    t'        |d         }|||d      vs9||d      j-                  |       Q t'        |      g|d<   || j                   j                  j                  |<   	 d d d        y	 d d d        yc c}w c c}w # 1 sw Y   y xY w)	Nr~   Fobjectclassr   objectClassT	decomposerm   )rr   rs   dit_lockr3   rl   r1   rx   r   r   r   attribute_typessingle_valuer^   lowersetobject_classesaddsuperiorupdater   r   r4   append)rT   r   
attributesrp   
escaped_dn	new_entry	attribute	class_setobject_classclass_set_sizenew_classes
class_namer   rdnraw_rdns                  rJ   ry   zMockBaseStrategy.add_entry   sz   __##,, '	 J!7!7!;!;;/1	!+ DI D$?$?? %j&;^L1;I1F0G
9---449O9O9V9V9f9fgp9q9~9~  DG  HR  S\  H]  D^  ab  Db$'	 '	 !(M9doo>T>T>[>[$'E	,6y,A ^L#55<<KKP\dhdsdsdzdz  eB  eB  eQ  eQ  QQ','	 '	" &MM,7-.N"0C	N"B.1e14Y2; !~J'+'='='D'D'S'ST^'_'h'h(3(:(:4??;Q;Q;X;X;g;ghr;s;|;|(}!~ !* 0 0 = #1C	N"B T]7]%u7]Im4^ nx  yB  nC  0Ddi0C0CIuV^0_  0D	),1D2 $J$? >C1vY.-3CF^,<	#a&)"(Q.")CF*;;%c!f-44W=> )/z(:';	)$9B&&**:6M'	 '	N O'	 '	4 8^ 0D9'	 '	sS   CM;=B M;&A2M;A'M;M;M1
M;)M6AM;AM;'M;1
M;;Nc                     | j                   j                  j                  5  t        |      }|| j                   j                  j                  v r+| j                   j                  j                  |= 	 d d d        y	 d d d        y# 1 sw Y   y xY wNTF)rr   rs   r   r3   rl   )rT   r   r   s      rJ   remove_entryzMockBaseStrategy.remove_entry   su    __##,, 	 JT__33777OO**..z:		 	
 	 	 	s   AB:BBc                    t        |d      }t        j                  |t              }d|vrod| j                  _        t        t              r0t        t        d| j                  j
                  | j                         t        | j                  j
                        | j                  j                  j                  s#t               | j                  j                  _        |d   D ]  }d|vrod| j                  _        t        t              r0t        t        d| j                  j
                  | j                         t        | j                  j
                        d|vrod	| j                  _        t        t              r0t        t        d| j                  j
                  | j                         t        | j                  j
                        | j                  |d   |d   d
        |j                          y )Nr)object_hookrt   z2invalid JSON definition, missing "entries" section<%s> for <%s>rawz.invalid JSON definition, missing "raw" sectionr   z-invalid JSON definition, missing "dn" sectionFro   )openjsonloadr   rr   
last_errorr:   r;   r9   r    rs   rl   r1   ry   close)rT   json_entry_filetarget
definitionentrys        rJ   entries_from_jsonz"MockBaseStrategy.entries_from_json  sh   os+YYv9=
J&)]DOO&5!E?DOO,F,FX%doo&@&@AA%%)))<)>DOO""&	* 	FEE!-]*u%0J0JDOO\)$//*D*DEE5 -\*u%0J0JDOO\)$//*D*DEENN5;euNE	F 	rI   c                    t        |      }|d   }d|d   v r	 t        |d   d         }nod| j                  _        t        t              r0t        t        d| j                  j                  | j                         t        | j                  j                        || j                  j                  j                  v rZd| j                  j                  j                  |   v r,| j                  |d|      rt        }d}|| _        n/t        }d	}n&t        }d
}n|dk(  rt        }d}|| _        nt        }d}|dt        |t               d d dS # t        $ r d}d}Y w xY w)NnamesimpleauthenticationrX   z<anonymous>z)only Simple Bind allowed in Mock strategyr   userPasswordzinvalid credentialszmissing userPassword attributezmissing object)rY   rZ   r[   r\   serverSaslCreds)r	   r5   r!   rr   r   r:   r;   r9   r    rs   rl   equalr$   rv   r'   r   r_   )rT   request_messager]   requestidentitypasswordresult_codera   s           rJ   	mock_bindzMockBaseStrategy.mock_bind  sO    '76?w/00)3G<L4Mh4WX
 *UDOO&5!E?DOO,F,FX%doo&@&@AAt--111!7!7!;!;H!EE::hA"0K G!)DJ"<K3G8:&(KG!DJ4K&G)%/%I #'	 	= 0 )()s   E	 	EEc                    t        |      }t        |d         }|| j                  j                  j                  v r*| j                  j                  j                  |= t
        }d}nt        }d}|dt        |t              d dS )Nr   rX   object not foundrY   rZ   r[   r\   )	r
   r3   rr   rs   rl   r$   r(   r   r_   )rT   r   r]   r   r   r   ra   s          rJ   mock_deletezMockBaseStrategy.mock_deleteT  s~     )9WW%&''+++&&**2.(KG/K(G)%/%I  	rI   c                    t        |      }t        |d         }|d   }|| j                  j                  j                  vr$| j                  ||      r	t        }d}nt        }d}nt        }d}|dt        |t              d dS )Nr   r   rX   zerror adding entryzentry already existr   )r   r3   rr   rs   rl   ry   r$   r%   r)   r   r_   )rT   r   r]   r   r   r   r   ra   s           rJ   mock_addzMockBaseStrategy.mock_addk  s     &o6WW%&\*
 T__++///~~b*-,5.5K+G)%/%I  	rI   c                 ~   t        |      }t        |d         }|d   }t        |d         }|| j                  j                  j
                  v rS|| j                  j                  j
                  |   v r%| j                  |||      r	t        }d}nt        }d}nt        }d}nt        }d}|dt        |t              d dS )Nr   r   r   rX   zattribute not foundr   r   )r   r3   r   rr   rs   rl   r   r*   r+   r,   r(   r   r_   )	rT   r   r]   r   r   r   r   r   ra   s	            rJ   mock_comparezMockBaseStrategy.mock_compare  s     */:WW%&K(	ww'(''+++DOO2266r::::b)U3"5K G"6K G6//K(G)%/%I  	rI   c                    t        |      }t        |d         }|d   }|d   }|d   rt        |d         nd}t        |      }|| j                  j                  j
                  v r|r|rt        |d   dz   |z         }	| j                  j                  j
                  |   j                         | j                  j                  j
                  |	<   | j                  j                  j
                  |	   }
|r!| j                  j                  j
                  |= t        }d}t        |	      g|
d	<   n|r|st        |dz   t        |d
d        z         }	| j                  j                  j
                  |   j                         | j                  j                  j
                  |	<   | j                  j                  j
                  |	   }| j                  j                  j
                  |= t        |	      g|d	<   t        |	d      D ]  }t        |d
         g||d   <    t        }d}nt        }d}nt        }d}|dt        |t              d dS )Nr   newRdndeleteOldRdnnewSuperiorrX   r   ,zentry movedrm   r~   Tr   zentry rdn renamedznewRdn or newSuperior missingr   r   )r   r3   r2   rr   rs   rl   copyr$   r   r4   r-   r(   r   r_   )rT   r   r]   r   r   new_rdndelete_old_rdnnew_superiordn_componentsnew_dnmoved_entryr   ra   renamed_entryr   s                  rJ   mock_modify_dnzMockBaseStrategy.mock_modify_dn  s    ,O<WW%&(# 0:A-:Pww}56VXb	''+++ q!1C!7,!FG59__5K5K5O5OPR5S5X5X5Z&&**62"oo4488@!..2226,'*0.)9I& 3qr9J1K!KL59__5K5K5O5OPR5S5X5X5Z&&**62 $ 6 6 : :6 BOO**..r2,26N+;i(#Fd; =C-3CF^,<M#a&)= --99/K(G)%/%I  	rI   c                    t        |      }t        |d         }|d   }d}d}t        |d      D cg c]  }|d   	 }	}|| j                  j                  j
                  v r| j                  j                  j
                  |   }
|
j                         }|D ]p  }|d   }|d   d	   }|d   d
   }|dk(  rs||
vr|r| j                  j                  j                  rx| j                  j                  j                  j                  rN| j                  j                  j                  j                  |   j                  rt        |      dkD  r	t        }d}|D cg c]  }t        |       c}|
|<   | j                  j                  j                  rk| j                  j                  j                  j                  rA| j                  j                  j                  j                  |   j                  r
t        }d}e|
|   j                  |D cg c]  }t        |       c}       |dk(  rm||
vr
t        }d}||	v r
t        }d}|s|
|= |D ]9  }t        |      }| j!                  |||      r|
|   j#                  |       6d}d}; |
|   r|
|= |dk(  r||
vr|r| j                  j                  j                  ry| j                  j                  j                  j                  rO| j                  j                  j                  j                  |   j                  rt        |      dkD  r
t        }d}|D cg c]  }t        |       c}|
|<   |s||	v r
t        }d}|s||
v s|
|= |D cg c]  }t        |       c}|
|<   |dk(  s||
vr
t        }d}t        |      dk7  r
t$        }d}.	 |
|   D cg c]0  }t'        t)        t+        |      t+        |d         z         d      2 c}|
|<   s |r,|| j                  j                  j
                  |<   nt.        }d}|dt1        |t2              d dS c c}w c c}w c c}w c c}w c c}w c c}w #  t,        }d}Y xY w)Nr   changesr   rX   Tr   	operationr   r   r   r~   zattribute is single-valuedz-attribute must exists for deleting its valueszcannot delete an rdnzvalue to delete not foundr   zcannot replace an rdn   z1attribute must exists for incrementing its valuesz#only one increment value is allowedrE   )encodingzunable to increment valuer   r   )r   r3   r4   rr   rs   rl   r   r   r   r   r^   r/   r   extendr,   r0   r   remover.   r   strintr-   r(   r   r_   )rT   r   r]   r   r   r   r   ra   r   rdnsr   original_entrymodificationr   r   elementselementraw_elementr   s                      rJ   mock_modifyzMockBaseStrategy.mock_modify  s   $ )9WW%&)$"*2">?3A??''+++OO**..r2E"ZZ\N ' AF(5	(5f=	'4W=> -(??1188T__=S=S=Z=Z=j=joso~o~  pF  pF  pM  pM  p]  p]  ^g  ph  pu  pu  z}  ~F  zG  JK  zK*EK&BGOW/XGw/XE),??1188T__=S=S=Z=Z=j=joso~o~  pF  pF  pM  pM  p]  p]  ^g  ph  pu  pu*EK&BG!),33T\4]VG_4]^!^ -&>"Q"d*&?"8' %i 0+3 J.4Wo#'::b)[#I$))$4$;$;K$H23K.IGJ $)#3$))$4!^ -(??1188T__=S=S=Z=Z=j=joso~o~  pF  pF  pM  pM  p]  p]  ^g  ph  pu  pu  z}  ~F  zG  JK  zK*EK&BGOW/XGw/XE),%)t*;&?"9%$- %i 0KS+TF7O+Ti(!^ -&>"Ux=A-*?K&KGF ~C  DM  ~N  4OtyE#c%j3xXY{K[>[:\gn4o  4Oi 0}AFF 1?&&**2./K(G)%/%I  	[ @ 0Y 5^6 0Y ,U 4OF.I*Es;   QQQ
Q?Q#Q-5Q(Q-(Q--
Q:c                    t        |      }|r|D cg c]  }|s| j                  |       }}|D ]t  }|d   d   r>|d   t        vr3dt        |d         z   dz   }t        dt        |t              d d}g |fc S |d   dk(  sS|d   d	   d
   s| j                  |      \  }	}|d   t        k(  rgt        |	t        |d   d	   d         |d   d         }
|
j                         \  }	}|
j                  r~
n| j                  j                  |
       |	|fc S g |fc S | j                  D ]\  }
|
j                  |d   d	   d
   k(  s|
j                         \  }	}|
j                  r| j                  j!                  |
       |	|fc c S  d}t"        dt        |t              d d}g |fc S  y | j                  |      S c c}w )Nr~   rU   r   zCritical requested control z not availablerX   r   rD   r   rQ   rY   rO   z%Invalid cookie in simple paged search)r   r`   SEARCH_CONTROLSr   r&   r   r_   _execute_searchr$   rM   r   rd   rS   rz   r   rQ   r   r%   )rT   r   r]   r   controldecoded_controlsdecoded_controlra   rc   rP   	paged_sets              rJ   mock_searchzMockBaseStrategy.mock_searchJ  s   @ )9LT`X_ 3 3G <``#3 $*"1%m49KSb9b;c/RSBT>UUXhhG,Q+-3=g3W*. F
 v:%$Q'+CC*1-g6x@,0,@,@,I(&!,/>A(6x_UVEWX_E`agEhAikz{|k}  L  lM  )NI/8~~/?,Hf(~~$- $ 0 0 7 7	 B#+V#33#%v:-)-)9)9 8I(//?13Eg3Nx3XX3<>>3C 0&#,>>$($4$4$;$;I$F'/'7 78 #J0G/17A'?7[.2"$
  "6z)I$*N ''00Q  as
   F<F<c           
          g }t        |d         }|d   }|d   }d|v r,|j                  | j                         |j                  d       |d   D cg c]  }|j	                          }}t        |d   | j                  j                  j                  dd| j                  j                  j                  | j                  j                        }g }|d	k(  rG|| j                  j                  j                  v s|j	                         d
k(  r|j                  |       n|dk(  rz| j                  j                  j                  D ]V  }	|	j	                         j                  |j	                               s1d|	d t        |       dz
   vsF|j                  |	       X ni|dk(  rd| j                  j                  j                  D ]A  }	|	j	                         j                  |j	                               s1|j                  |	       C |s
t        }
d}nJ| j!                  ||      }| j                  j"                  r d	|d   cxk  rt        |      k  r	n nd}
d}n|D ]  }|j                  || j                  j                  j                  |   D cg c]L  }|j	                         |v st$        |v r0||d   rg n%| j                  j                  j                  |   |   dN c}d       d|vs| j                  D ]X  }|j	                         |v rt'        |t        |      dz
     d         D ]#  \  }}|d   |k(  s|t        |      dz
     d   |= % Z  d	}
d}|
dt)        |t*              d d}|d   d	kD  r
|d |d    |fS ||fS c c}w c c}w )Nbasescoper   +filterTF)auto_escapeauto_encoder   check_namesr   rn   r~   r   r   zincorrect base object	sizeLimit   zsize limit exceeded	typesOnly)r   vals)objectr   r   rX   r   )r3   r   rx   r   r   r   rr   rs   r   custom_validatorr  rl   r   endswithr^   r(   evaluate_filter_noderaise_exceptionsr   	enumerater   r_   )rT   r   	responsesr   r   r   attrfilter_root
candidatesr   r   ra   matchedmatchr   op_attrirc   s                     rJ   r   z MockBaseStrategy._execute_search  s   	wv' \*
*d99:c"/6|/DEtdjjlE
E"78#4doo6L6L6S6Saesx  EI  ET  ET  E[  E[  El  El  z~  zI  zI  zU  zU  V
A:t--111TZZ\[5P!!$'aZ//33 -;;=))$**,7Cu_sSWyj[\nG]<]%%e,- aZ//33 -;;=))$**,7%%e,- /K-G//ZHG//A8L4[sSZ|4[/$ UE$$"' 9=8N8N8R8RSX8Y'k+4*3//*;z*I^_iMi 1:6=k6JPTP_P_PfPfPjPjkpPqr{P|(~ 'k&  *,'+'B'B UG&}}*< (+4Ys9~a?O5PQ]5^+_ U4#'<7#:(1#i.2B(CL(QRS(TU	UU    +!'1'?'K" 4;;3G!3Ky.'+./\bbbQZ\bbbe F8'ks   NANc                    t        |      }t        }d}d }d }| j                  j                  j                  r| j                  j                  j                  j
                  D ]h  }|d   |d   k(  s|d   dk(  r%d}d}t        d      }t        | j                        }n,|d   dk(  r$d}d}t        d      }t        | j                        } n |dt        |t              d ||dS )	Nznot implementedr   r   z2.16.840.1.113719.1.27.100.31rX   z2.16.840.1.113719.1.27.100.32z1.3.6.1.4.1.4203.1.11.3)rY   rZ   r[   r\   responseNameresponseValue)
r   r-   rr   rs   infosupported_extensionsr   rv   r   r_   )	rT   r   r]   r   r   ra   response_nameresponse_value	extensions	            rJ   mock_extendedzMockBaseStrategy.mock_extended  s     +?;1#??!!&&!__3388MM 	6?il2 |'FF&'"$(34S(T)4TZZ)@"1)BB&'"$(34M(N)4TZZ)@ *%/%I  -!/ 	rI   c           	         t               |_        t               |_        |j                  r#|j                  D ]  }| j	                  ||        |j
                  t        k(  r|j                  d   j                  S |j
                  t        k(  r|j                  d   }|j                  j                  |j                         |j                  j                  |j                         |j                  dd D ]L  }|j                  j                  |j                         |j                  j                  |j                         N y|j
                  t        k(  r\|j                  D ]L  }|j                  j                  |j                         |j                  j                  |j                         N y|j
                  t        k(  r=|j                  d   j                  |_        |j                  d   j                  |_        y|j
                  t        k(  r\|j                  d   }|j                  d   }|D ]7  }|| j                  j                  j                   |   v s*| j                  j                  j                   |   |   D ]  }|j#                         r_|j#                         rOt%        |      t%        |      k\  r|j                  j'                  |       V|j                  j'                  |       rt)        |t*              j-                         t)        |t*              j-                         k\  r|j                  j'                  |       |j                  j'                  |        : y|j
                  t.        k(  r\|j                  d   }|j                  d   }|D ]7  }|| j                  j                  j                   |   v s*| j                  j                  j                   |   |   D ]  }|j#                         r_|j#                         rOt%        |      t%        |      k  r|j                  j'                  |       V|j                  j'                  |       rt)        |t*              j-                         t)        |t*              j-                         k  r|j                  j'                  |       |j                  j'                  |        : y|j
                  t0        k(  rod| j                  _        t5        t6              r0t9        t6        d| j                  j2                  | j                         t;        | j                  j2                        |j
                  t<        k(  rs|j                  d   }|D ]^  }|| j                  j                  j                   |   v r|j                  j'                  |       D|j                  j'                  |       ` y|j
                  t>        k(  rK|j                  d   }d|j                  v r@|j                  d   1tA        jB                  t)        |j                  d   t*                    }	nd	}	d
|j                  v rL|j                  d
   =|j                  d
   D ]+  }
|	dtA        jB                  t)        |
t*                    z   z  }	- d|j                  v rE|j                  d   6|	dtA        jB                  t)        |j                  d   t*                    z   z  }	|	r=|j                  jE                  d
d      s!|j                  jE                  dd      s|	dz  }	tA        jF                  |	t@        jH                  t@        jJ                  z        }|D ]  }|| j                  j                  j                   |   v r| j                  j                  j                   |   |   D ]X  }|jM                  t)        |t*                    r|j                  j'                  |       >|j                  j'                  |       Z |j                  j'                  |        y|j
                  tN        k(  s|j
                  tP        k(  r|j                  d   }|j                  d   }|D ]q  }|| j                  j                  j                   |   v r/| jS                  |||      r|j                  j'                  |       W|j                  j'                  |       s yy)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   r~   Nr  r   z-Extensible match not allowed in Mock strategyr   initialrX   anyz.*final)flags)*r   r  	unmatchedr   r  tagr   r   r   intersection_updater   r   r   	assertionrr   rs   rl   isdigitr   r   r   r_   r   r   r   r   r:   r;   r9   r    r   r   reescapegetcompileUNICODE
IGNORECASEr  r   r   r   )rT   noder  r   first_element	attr_name
attr_value	candidater   substring_filtermiddleregex_filters               rJ   r  z%MockBaseStrategy.evaluate_filter_node  s    u==== ?))':>? 88t==#+++XX_ MM!,MLL 5 56NN!!-"9"9:==, F00A2273D3DEF XX^== 9##GOO4%%g&7&789 XX_==+55DL!]]1-55DNXX//v.I0J' >	 6 6 : :9 EE!%!7!7!;!;I!Fy!Q 
> ==?z/A/A/C"5zS_< $ 0 0 ; $ 2 29 =)%AGGIZXbdsMtMzMzM|| $ 0 0 ; $ 2 29 =
>> XX,,v.I0J' >	 6 6 : :9 EE!%!7!7!;!;I!Fy!Q 
> ==?z/A/A/C"5zS_< $ 0 0 ; $ 2 29 =)%AGGIZXbdsMtMzMzM|| $ 0 0 ; $ 2 29 =
>> XX)))XDOO&5!E?DOO,F,FX%doo&@&@AAXX&v.I' 2	 6 6 : :9 EELL$$Y/NN&&y1	2
 XX(v.IDNN*t~~i/H/T#%99Zy8QSb-c#d #% &4>>%+@+L"nnU3 ^F$ryyFO9\/](]]$^ $..(T^^G-D-P D299Zw@WYh5i+j$jj (:(:5$(GPTP^P^PbPbcjlpPq D( ::&6bjj2==>XYL' 2	 6 6 : :9 EE!%!7!7!;!;I!Fy!Q :'--j.PQ LL,,Y7 NN..y9	: NN&&y12 XX$L(@v.I0J' 2	 6 6 : :9 EE$**U^`ikuJvLL$$Y/NN&&y1	2 )ArI   c                 
   | j                   j                  j                  |   |   }t        |t              s|g}t        |      }|D ]:  }| j                  ||      r y| j                  | j                  ||      |      s: y yr   )rr   rs   rl   r   r   r>   _check_equalityr   )rT   r   r   value_to_checkattribute_valuesescaped_value_to_checkattribute_values          rJ   r   zMockBaseStrategy.equalj  s    ??1155b9.I*N; 01!5n!E/ 	O##$:OL##D$7$7$WYhi		
 rI   c                 B   | |k(  ryt        |       j                         r1t        |      j                         rt        |       t        |      k(  ry	 t        | t              j                         t        |t              j                         k(  ry	 y# t        $ r Y yw xY wr   )r   r)  r   r   r_   r   UnicodeError)value1value2s     rJ   r9  z MockBaseStrategy._check_equalityw  s    Vv; S[%8%8%:6{c&k)	&/288:jQ`>a>g>g>ii j
   		s   =B 	BBNc                    | j                  |||      | j                  _        | j                  j                  r| j                  j                  j                         }| j                  j                  rt               }t        |      |d<   t               j                  ||      |d<   t        |      }|||d<   t        j                   |||      }| j                  j                  j                  |t        t!        |                   ||||fS d| j                  _        t%        t&              r0t)        t&        d| j                  j"                  | j                         t+        | j                  j"                        )N	messageID
protocolOpr]   z.unable to send message, connection is not openr   )decode_requestrr   r   r   rs   next_message_idr   r@   rB   rA   setComponentByNamerC   r?   r   update_transmitted_messager^   r=   r   r:   r;   r9   r#   )rT   message_typer   r]   
message_idldap_messagemessage_controlsasn1_requests           rJ   sendzMockBaseStrategy.send  s*   "&"5"5lGX"V??$$//??AJ$$*},5j,A[)-7\-L-L\[b-c\*#6x#@ #//?L,+::<RZ[&&AA,PSTZ[gThPij|Wh>>)YDOO&5!E?DOO,F,FX%doo&@&@AArI   )Tre   )rf   rg   rh   __doc__rV   r   r   r   r   ry   r   r   r   r   r   r   r   r   r   r   r  r  r   staticmethodr9  rN  rH   rI   rJ   rj   rj      s    Q57,(T04l.> D2hhTJ1X;cz(Tk2Z  BrI   rj   )`rO  r   r*  rG   r   pyasn1.type.univr   rX   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/   r0   utils.ciDictr1   utils.dnr2   r3   r4   protocol.sasl.saslr5   protocol.formatters.standardr6   r7   protocol.rfc2696r8   	utils.logr9   r:   r;   r<   
utils.asn1r=   r>   strategy.baser?   protocol.rfc4511r@   rA   rB   protocol.convertrC   r   r_   rK   r	  rM   rj   rH   rI   rJ   <module>rg     s   2  	  ( - 1 5 / 7 : 5 9! ! ! ! 7 6 { {_ _ _ _ / / / 9 \ 3 6 6  - ( A A 2t , 0 V  >{Bv {BrI   