
    >OOf                        d Z ddlZ	 ddlmZ d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 d	dlmZ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$m%Z% d	dl&m'Z' d	dl(m)Z)m*Z*m+Z+m,Z, d	dl-m.Z.m/Z/ d	dl0m1Z1m2Z2 d	dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d	dl<m=Z=m>Z>m?Z?m@Z@mAZA d	dlBmCZCmDZD d	dlEmFZFmGZGmHZHmIZImJZJ d	dlKmLZL d	dlMmNZNmOZO d	dlPmQZQmRZR d	dlSmTZTmUZU d	dlVmWZW d	dlXmYZY d	dlZm[Z[ d	dl\m]Z] d	dl^m_Z_ d	dl`maZambZbmcZcmdZdmeZemfZfmgZgmhZh d	dlimjZjmkZkmlZlmmZm d	d lnmoZo d	d!lpmqZqmrZr d"Zsd#Ztd$Zu G d% d&ev      Zwy# e$ r dZY .w xY w)'
    N)AF_UNIXTF)pack)system)choice   )SYNC	ANONYMOUSget_config_parameterBASEALL_ATTRIBUTESALL_OPERATIONAL_ATTRIBUTESNO_ATTRIBUTES
DIGEST_MD5)DO_NOT_RAISE_EXCEPTIONSRESULT_REFERRAL)LDAPOperationResultLDAPSASLBindInProgressErrorLDAPSocketOpenError"LDAPSessionTerminatedByServerErrorLDAPUnknownResponseErrorLDAPUnknownRequestErrorLDAPReferralErrorcommunication_exception_factoryLDAPStartTLSErrorLDAPSocketSendErrorLDAPExceptionErrorLDAPControlErrorLDAPResponseTimeoutErrorLDAPTransactionError)	parse_uri)LDAPMessage
ProtocolOp	MessageIDSearchResultEntry)add_response_to_dictadd_request_to_dict)modify_request_to_dictmodify_response_to_dict)(search_result_reference_response_to_dict#search_result_done_response_to_dict$search_result_entry_response_to_dictsearch_request_to_dict)search_result_entry_response_to_dict_fast-search_result_reference_response_to_dict_fastattributes_to_dictattributes_to_dict_fast)bind_response_to_dictbind_request_to_dictsicily_bind_response_to_dictbind_response_to_dict_fast!sicily_bind_response_to_dict_fast)compare_response_to_dictcompare_request_to_dict)extended_request_to_dictextended_response_to_dictintermediate_response_to_dictextended_response_to_dict_fast"intermediate_response_to_dict_fast)Server)modify_dn_request_to_dictmodify_dn_response_to_dict)delete_response_to_dictdelete_request_to_dict)prepare_changes_for_requestbuild_controls_list)abandon_request_to_dict)Tls)Oids)RealSearchControlValue)DirSyncControlResponseValue)loglog_enabledERRORBASICPROTOCOLNETWORKEXTENDEDformat_ldap_message)encodedecoderldap_result_to_dict_fastdecode_sequence)
to_unicode)md5_hmd5_hmacTERMINATED_BY_SERVERTRANSACTION_ERRORRESPONSE_FROM_SERVER_COMPLETEc                       e Zd ZdZd Zd Zd dZd Zd!dZd Z	d Z
d"d
Zd#dZed        Zd Zd Zed        Zed$d       Ze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 d Z!y	)%BaseStrategyz,
    Base class for connection strategy
    c                     || _         d | _        g | _        d | _        d | _        d | _        d | _        i | _        d| _        t        t              r't        t        d| j                  j                  |        y y )NFzinstantiated <%s>: <%s>)
connection_outstanding
_referralssyncno_real_dsapooled
can_streamreferral_cachethread_saferK   rM   rJ   	__class____name__)selfldap_connections     T/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/strategy/base.py__init__zBaseStrategy.__init__N   sk    ) 	  u0$..2I2I4P     c                     | j                   rt        | j                         nd| j                  rdnd| j                  rdnd| j                  rdnd| j
                  rdnd	g}d
j                  |      S )NNonerb   asynczno real DSAzreal DSArd   z
not pooledzcan stream outputzcannot stream output - )r_   strrb   rc   rd   re   join)rj   ss     rl   __str__zBaseStrategy.__str__[   s]    $(OOC iiFW!--M:H#'??8N
 zz!}rn   c           	      d	   t        t              rt        t        d| j                         | j                  j                  rd| j                  j
                  sNd| j                  _        d| j                  _        t        t              rt        t        d| j                         yy| j                  j                  s&| j                  j
                  s| j                          t               | _
        | j                  j                  rF|s | j                  j                  j                  s$| j                  j                  j                          | j                  j                  r| j                  j                  j!                  | j                        }| j                  j"                  |k7  rP|| j                  _        | j                  j                  r)| j                  j                  xj$                  dz  c_        g }| j&                  s| j                  j"                  j)                         D ]  }	 t        t*              rt        t*        d|dd        | j-                  || j                  j"                  j.                  | j                  j"                  j0                  	       || j                  j"                  _        | j                  j"                  j5                  |d        n | j                  j"                  j2                  s|rt?        |      dk(  rWt        t@              r@t        t@        dt=        |d   d         dz   t=        |d   d         z   | j                         |d   d   t        t@              rt        t@        d| j                         tC        d|      | j                  j"                  j2                  s5t        t@              rt        t@        d| j                         tC        d      d| j                  _        | jE                          t        t              rt        t        d| j                         yy# t6        $ r_}| j                  j"                  j5                  |d       |j9                   t;        |      t=        |            |d
   f       Y d}~}d}~ww xY w)z^
        Open a socket to a server. Choose a server from the server pool if available
        zopening connection for <%s>TFz"deferring open connection for <%s>   z try to open candidate address %sN)unix_socket   <%s> for <%s>r    zunable to open socket for <%s>zunable to open socketzinvalid server address for <%s>zinvalid server addresszconnection open for <%s>)#rK   rO   rJ   r_   lazy_executing_deferred_deferred_openclosedclosedictr`   usage_usageinitial_connection_start_timestartserver_pool
get_serverserverservers_from_poolrc   candidate_addressesrM   _open_socketsslipccurrent_addressupdate_availability	Exceptionappendtypers   lenrL   r   _start_listen)rj   reset_usageread_server_info
new_serverexception_historycandidate_addresses          rl   openzBaseStrategy.opene   s    w6H??(K(K-1DOO*%*DOO"7#GA4??S $ ??))$//2U2U

 $D$$doo&<&<&Z&ZOO**002**!__88CCDOOT
??))Z7-7DOO*,,..@@AE@ "##)-)?)?)S)S)U Z%
Z&u-'IK\]`^`Kab))*;T__=S=S=W=Weietete{e{ee)  AAR..>..BBCTVZ[Z --==BS,-2&u-<Ma<PQR<S8TWZ8Z]`bstubvwxby]{8{  ~B  ~M  ~M  N/2155&u-'GY12IK\]]//??"5)E#DdooV-.FGG-2DOO* 7#G7I $) % Z..BBCTV[\)00'$q'#a&/CTUVCW1XYYZs   1B4Q	R/AR**R/c                 
   t        t              rt        t        d| j                         | j                  j                  r| j                  j
                  sy| j                  j                  s| j                  j                  rMd| j                  _        d| j                  _	        t        t              rt        t        d| j                         nl| j                  j                  s,| j                          | j                  s| j                          t        t              rt        t        d| j                         d| j                  _        d| j                  _        d| j                  _        d| j                  _        d| _        g | _        | j                  j&                  j                  sd| j                  j(                  _        | j                  j,                  r%| j                  j.                  j1                          yy)z"
        Close connection
        zclosing connection for <%s>FTz#deferred connection closed for <%s>zconnection closed for <%s>N)rK   rO   rJ   r_   r~   r   _deferred_bindr   	listeningr   _stop_listenrc   _close_socketboundrequestresponsetls_startedr`   ra   strategyr   r   r   r   stoprj   s    rl   r   zBaseStrategy.close   sh    w6H??(K(KQUQ`Q`QoQosw  tC  tC  tR  tR(-DOO%%)DOO"7#GBDOOT??))!!#((&&(7#G94??K %"&#' &+# ''3359DOO""2??  OO""'') !rn   c           
         	 t        j                   |dd  | j                  _         d}t        r/| j                  j                   j                  t         j                  k7  rd}| j                  j                  D ]A  }	 | j                  j                   j                  | j                  j                   |f       d} n |sdt        |      z   | j                  _        t        t              rFt        t        d	| j                  j                   | j                  j                  | j                  |        t        t         t        |      t        |                  |      	 | j                  j$                  j&                  rC| j                  j                   j)                  | j                  j$                  j&                         | j                  j                   j+                  |d
          | j                  j.                  	 | j                  j                   j)                  | j                  j.                         t1               j3                         dk(  rd| j                  j                   j5                  t         j6                  t         j8                  t;        d| j                  j.                  z               nb| j                  j                   j5                  t         j6                  t         j8                  t=        d| j                  j.                  d             |r{	 | j                  j$                  j>                  jA                  | j                  d       | j                  jB                  r)| j                  jD                  xjF                  dz  c_#        | j                  jB                  r)| j                  jD                  xjH                  dz  c_$        d| j                  _%        y# t        $ r}dt        |      z   | j                  _        t        t              r0t        t        d| j                  j                  | j                          t        t         t        |      t        |                  | j                  j                        d}~ww xY w# t        $ rC}|}t        t"              r't        t"        d| j                  j                   ||       Y d}~hd}~ww xY w# t         j,                  $ r}dt        |      z   | j                  _        t        t              r0t        t        d| j                  j                  | j                          t        t         t        |      t        |                  | j                  j                        d}~ww xY w# t         j,                  $ r}dt        |      z   | j                  _        t        t              r0t        t        d| j                  j                  | j                          t        t         t        |      t        |                  | j                  j                        d}~ww xY w# t        $ r}dt        |      z   | j                  _        t        t              r0t        t        d| j                  j                  | j                          t        t         t        |      t        |                  | j                  j                        d}~ww xY w)z
        Tries to open and connect a socket to a Server
        raise LDAPExceptionError if unable to open or connect socket
        N   zsocket creation error: r|   FTzFUnable to bind to local address <%s> with source port <%s> due to <%s>z/socket connection error while locally binding: zmUnable to locally bind to local address <%s> with any of the source ports <%s> for connection <%s due to <%s>r{   z'socket connection error while opening: windowsi  LLr   z5unable to set receive timeout for socket connection: )do_handshakerx   zsocket ssl wrapping error: )&socketr_   r   rs   
last_errorrK   rL   rJ   r   r   r   unix_socket_availablefamilyr   source_port_listbindsource_addressrO   r   connect_timeout
settimeoutconnecterrorreceive_timeoutr   lower
setsockopt
SOL_SOCKETSO_RCVTIMEOintr   tlswrap_socketr   r   wrapped_socketsopen_socketsr   )	rj   addressuse_sslrz   r   last_bind_excsocket_bind_succeededsource_portbind_exs	            rl   r   zBaseStrategy._open_socket   se   
	t%+]]GBQK%@DOO"   T__%;%;%B%Bfnn%T$)!#?? R
ROO**//1O1OQ\0]^,0)	R )-^aderas-s*u%   O668X8XZ^ZiZikxzs56IK^4P]K^_bcp_qKrs  uB  C  C		t%%55&&11$//2H2H2X2XYOO""**71:6 ??**6x&&11$//2Q2QR8>>#y0OO**55f6G6GI[I[]`aehlhwhw  iH  iH  bH  ^I  JOO**55f6G6GI[I[]abfhlhwhw  iH  iH  JK  ^L  M x&&**66tUY6Z??((OO**::a?: ??  OO""//14/!&i  	t)BSV)KDOO&5!E?DOO,F,FXW12EwtAwsSTvWX\XgXgXrXrss	t. ! R$+M #7+G%m OO::KRR$ || 	t)RUXYZU[)[DOO&5!E?DOO,F,FXW12EwtAwsSTvWX\XgXgXrXrss	t& << 	x-dgjklgm-m* u%0J0JDOO\[56I74PQ7SVWXSY?[\`\k\k\v\vww	x   x-JSQRV-S*u%0J0JDOO\[56I74PQ7SVWXSY?[\`\k\k\v\vww	xs~   $O* <=RBS( DV! A:Y *	R3BRR	S%"8S  S%(V;BVV!Y4BYY	\#B\\c                    	 | j                   j                  j                  t        j                         	 | j                   j                  j                          d| j                   _        d| j                   _        | j                   j                  r*| j                   j                  xj                  dz  c_	        yy# t        $ r Y w xY w# t        $ r Y }w xY w)z
        Try to close a socket
        don't raise exception if unable to close socket, assume socket is already closed
        NTrx   )
r_   r   shutdown	SHUT_RDWRr   r   r   r   r   closed_socketsr   s    rl   r   zBaseStrategy._close_socket  s    	OO""++F,<,<=	OO""((* "&!%??  OO""11Q61 !  		
  		s"   3B= $C =	C	C		CCc                 &    d| j                   _        y NF)r_   r   r   s    rl   r   zBaseStrategy._stop_listen3  s    $)!rn   Nc                    d| j                   _        | j                   j                  rP| j                   j                  rs|dvrod| j                   _        t        t              r0t        t        d| j                   j                  | j                          t        | j                   j                        | j                   j                  j                         }t               }t        |      |d<   t               j                  ||      |d<   t        |      }|||d<   t         j#                  |||      | j                   _        | j                   j                  | j$                  |<   | j'                  |       |S d| j                   _        t        t              r0t        t        d| j                   j                  | j                          t)        | j                   j                        )	zE
        Send an LDAP message
        Returns the message_id
        N)bindRequestz=cannot send operation requests while SASL bind is in progressr|   	messageID
protocolOpcontrolsz*unable to send message, socket is not open)r_   r   r   sasl_in_progressr   rK   rL   rJ   r   r   next_message_idr"   r$   r#   setComponentByNamerD   r]   decode_requestr`   sendingr   )rj   message_typer   r   
message_idldap_messagemessage_controlss          rl   sendzBaseStrategy.send6  sl   
 #'??$$//L4W-l*u%0J0JDOO\1$//2L2LMM//??AJ&=L(1*(=L%)3)H)HW^)_L&28<++;Z(&2&A&A,PWYa&bDOO#,0OO,C,CDj)LL&  *VDOO&5!E?DOO,F,FX%doo&@&@AArn   c                 
   |t        d      }d}d}| j                  r|| j                  v r| j                  ||      }|s5t        t              rt        t        d| j                         t        d      |t        k(  r	 | j                          d| j                  _        t        t              r0t        t        d| j                  j                  | j                         t        | j                  j                        |t        k(  rod| j                  _        t        t              r0t        t        d| j                  j                  | j                         t!        | j                  j                        |d   d	   t"        k(  r| j                  j$                  r)| j                  j&                  xj(                  d
z  c_        | j                  j*                  rW| j-                  | j                  |   |d   d         \  }}|||gz   }|j/                  t0               n
||t0        g}g | _        |r,|d   }|dd }d| j                  _        d| j                  _        | j                  j8                  r|r|d	   t:        vrt        t<              rt        t<        d|| j                         | j                  j?                  |       |jA                         | j                  _        tC        |d	   |d   |d   |d   |d         | j                  jD                  rtG        | d      stI        d |D              r|jA                         | _%        |dd }	| jM                  | j                  |   |      rH|	D ]5  }
|
d   dk(  s|
d   D cg c]	  }d|v s| }}|D ]  }|
d   |= |
d   |=  7 |	}| jJ                  }| `%| j                  jN                  r|D ]  }|d   dk(  s| j                  |   d   D ]`  }||d   vs|tP        tR        tT        fvstW               |d   |<   tW               |d   |<   t        t<              sOt        t<        d||        b | j                  jD                  rg }|d   D ];  }d|jY                         v s|j[                  d      \  }}}|j/                  |       = |D ]/  }t        t<              rt        t<        d||        |d   |= |d   |= 1  | j                  j?                  |      }n5t        t              rt        t        d| j                         t        d      |r|||fS ||fS # t        j                  t        f$ r Y w xY wc c}w )a  
        Get response LDAP messages
        Responses are returned by the underlying connection strategy
        Check if message_id LDAP message is still outstanding and wait for timeout to see if it appears in _get_response
        Result is stored in connection.result
        Responses without result is stored in connection.response
        A tuple (responses, result) is returned
        NRESPONSE_WAITING_TIMEOUTz0socket timeout, no response from server for <%s>zno response from serverzsession terminated by serverr|   ztransaction errorry   resultrx   	referralszoperation result <%s> for <%s>descriptiondnmessager   )r   r   r   r   response_type_auto_range_searchingc              3   H   K   | ]  }d |v s|d    D ]  }d|v sd   yw)raw_attributes;range=TN ).0respnames      rl   	<genexpr>z,BaseStrategy.get_response.<locals>.<genexpr>  sq       bQko  @P  TX  @X  ei  jz  e{  bQ  ]a  H  LP  Pbf  bQbf  bQs   	""	"searchResEntryr   r   
attributesz>attribute set to empty list for missing attribute <%s> in <%s>z;range;ziattribute type <%s> removed in response because of same attribute returned as range by the server in <%s>z,message id not in outstanding queue for <%s>z#message id not in outstanding queue).r   r`   _get_responserK   rL   rJ   r_   r   SESSION_TERMINATED_BY_SERVERr   r   r   r   r   r   rZ   r    r   r   r   referrals_receivedauto_referralsdo_operation_on_referralr   RESPONSE_COMPLETEra   r   r   raise_exceptionsr   rN   popcopyr   
auto_rangehasattranyr   do_search_on_auto_rangeempty_attributesr   r   r   listr   	partition)rj   r   timeoutget_requestr   r   	responsesref_response
ref_resulttemp_responser   keykeysentryattribute_typeattrs_to_remove	orig_attr_r   s                      rl   get_responsezBaseStrategy.get_responseT  s    ?*+EFGt/@/@!@**:w?Iu%QSWSbSbc./HII88JJL .L*u%0J0JDOO\89S9STT//-@*u%0J0JDOO\*4??+E+EFF }X&/9??((OO**==B=??11/3/L/LTM^M^_iMjluvxly  {F  mG  0H,L*#/$0J<$?	!(():;#/%/1B$C	&(DO"2$Sb>)-&+/(//Fvh?OWn?nx("BFDOO\!!%%j1)/&)1AvVcOdioptiu  @F  GP  @Q  ag  hn  ao  p  p ))'$@W2X]`  bQs{  bQ  ^R-3[[]* (//0A0A*0MxX - <<+;;378H3I#^CYZ]M]C#^D#^'+ <$()9$:3$?$($6s$;<<  -H!77F.//% HEV}(88.2.?.?
.KL.Y JN-U;K5LLQ_hv  yS  Ub  hc  RcJN&&6 7 GFJfl 3N C#.x#8$'2r  uC  EI  %JJ  $99.0O272E F#+~/C/C/E#E6D6N6Ns6SOIq!$3$:$:9$EF 3B H#.x#8$'  3^  `n  pt  %u$)*:$;N$K$),$7$G	HH* ''++J7G5!EI4??[*+PQRVW,,V##o &89 ` $_s   U	 
	U)U)	U&%U&c                    t        | t              rt        |       } d}t        |       dkD  rT| d   dk  r
| d   dz   }|S | d   dz
  }t        |       |dz   k\  r)d}|}| dd|z    D ]  }|dz  }||d|z  z  z  } |dz   |z   }|S )z
        Compute LDAP Message size according to BER definite length rules
        Returns -1 if too few data to compute message length
        r   rx         r      )
isinstancers   	bytearrayr   )data	ret_valuebytes_lengthvalue_lengthcontbytes         rl   compute_ldap_message_sizez&BaseStrategy.compute_ldap_message_size  s     dC T?D	t9q=Aw#~ GaK	   $Aw}t9q 00#$L'D $Qq<'7 8 =	$t(<<= !-q 0< ?Irn   c                    |j                  d      j                         }|d   j                         }|d   j                         r|d   nd}|dk(  r7t	        |d         j                  d      st        |      }n@t        |      }n3|dk(  r_t        || j                  j                  j                  | j                  j                  j                  | j                  j                        }n|dk(  rt        |      }n|d	k(  rt        |      }n|d
k(  rt!        |      }n|dk(  rt#        |      }n|dk(  rt%        |      }nz|dk(  rt'        |      }ni|dk(  rt)        |      }nX|dk(  rt+        |      }nG|dk(  rt-        |      }n6t/        t0              rt3        t0        d|| j                         t5        d      ||d<   |r3t7               |d<   |D ]!  }| j9                  |      }|d   |d   |d   <   # |S )z8
        Convert received LDAPMessage to a dict
        r   r   NbindResponse	matchedDN   NTLMr   searchResDonesearchResRefmodifyResponseaddResponsedelResponsemodDNResponsecompareResponseextendedRespintermediateResponseunknown response <%s> for <%s>unknown responser   rx   r   )getComponentByNamegetNamegetComponenthasValuebytes
startswithr2   r4   r,   r_   r   schemacustom_formattercheck_namesr+   r*   r)   r&   rA   r@   r7   r:   r;   rK   rL   rJ   r   r   decode_control)rj   r   r   	componentr   r   controldecoded_controls           rl   decode_responsezBaseStrategy.decode_response  s    $66|DLLN .;;=	/;J/G/P/P/R<
+X\>);/0;;GD.y95i@--9)T__E[E[EbEbdhdsdsdzdz  eL  eL  NR  N]  N]  Ni  Ni  jF_,8CF^+=iHF--,Y7F]*))4F]*,Y7F_,/	:F..-i8F^+.y9F3329=F5!E;\4??[*+=>>%v!%F:# L"&"5"5g">9H9Kz"?1#56L rn   c                 Z   |d   dk(  r>|d   d   d   j                  d      st        |d         }nt        |d         }d|d<   n|d   dk(  rht        |d   | j                  j
                  j                  | j                  j
                  j                  | j                  j                        }d	|d<   n6|d   d
k(  rt        |d         }d|d<   n|d   dk(  rt        |d         }d|d<   n|d   dk(  rt        |d         }d|d<   n|d   dk(  rt        |d         }d|d<   n|d   dk(  rt        |d         }d|d<   n|d   dk(  rt        |d         }d|d<   n|d   dk(  rt        |d         }d|d<   nq|d   dk(  rt        |d         }d|d<   nU|d   dk(  rt        |d         }d|d<   n9t        t              rt        t        d|d   | j                         t!        d      |d   r9t#               |d<   |d   D ]$  }| j%                  |d         }|d   |d   |d   <   & |S ) zN
        Convert received LDAPMessage from fast ber decoder to a dict
        r   rx   payloadr   r"  r   r   r{   r      r#     r$     r%  	   r&     r'     r(     r)     r*     r+  r,  r-  r   r   )r3  r5   r6   r.   r_   r   r4  r5  r6  rT   r/   r<   r=   rK   rL   rJ   r   r   decode_control_fast)rj   r   r   r9  r:  s        rl   decode_response_fastz!BaseStrategy.decode_response_fast  s    %*	*1-a0;;GD3L4KL:<	;RS+F6N,'1,>|I?VX\XgXgXnXnXuXuw{  xG  xG  xN  xN  x_  x_  ae  ap  ap  a|  a|  }F-F6N,'1,-l9.EFF,F6N,'2-B<PYCZ[F+F6N,'1,-l9.EFF-F6N,'1,-l9.EFF*F6N,'2--l9.EFF*F6N,'2--l9.EFF,F6N,'2--l9.EFF.F6N,'2-3L4KLF+F6N,'2-7Y8OPF3F6N5!E;\,=WY]YhYhi*+=>>
#!%F:'
3 L"&":":71:"F9H9Kz"?1#56L rn   c                    t        | d         }t        | d         }t        | d         }d}|dk(  rOt        j                  |t                     \  }}t               }t        |d         |d<   t        |d         |d<   n|d	k(  rOt        j                  |t                     \  }}t               }t        |d
         |d<   t        |d         |d<   nG|dk(  s|dk(  r=t        j                  |t                     \  }}t               }t        |d         |d<   |r*t        t              rt        t        d       t        d      |t        j                   |d      ||dfS )
        decode control, return a 2-element tuple where the first element is the control oid
        and the second element is a dictionary with description (from Oids), criticality and decoded control value
        controlTypecriticalitycontrolValueN1.2.840.113556.1.4.319)asn1Specsizecookie1.2.840.113556.1.4.841MoreResultsmore_resultsCookieServer1.3.6.1.1.13.11.3.6.1.1.13.2r   r   z)unprocessed control response in substrate r   rL  value)rs   boolr2  rS   decoderH   r   r   rI   r%   r0   rK   rL   rJ   r   rG   get)r9  control_typerL  control_valueunprocessedcontrol_resps         rl   r7  zBaseStrategy.decode_control>  s^    7=127=12gn5633(/}OeOg(h%L+ FM$'V(<$=M&!&+L,B&CM(#55(/}OjOl(m%L+ FM,0m1L,MM.)&+L,H&IM(#--AQ1Q(/}O`Ob(c%L+ FM&8l9S&TM(#5!EFG"#NOOTXXlB-GXcn{|||rn   c                    t        t        | d   d   |            }d}d}| dd D ]  }|d   dk(  r|d   }|d   dk(  rdnd	} |d
k(  rUt        |dt        |            }t	               }t        |d   d   d   d         |d<   t        |d   d   d   d         |d<   n|dk(  rGt        |dt        |            }t	               }|d   d   d   d   rd	nd|d<   |d   d   d   d   |d<   nD|dk(  s|dk(  r:t        |dt        |            }t	               }t        |d   d   d   d         |d<   |t        j                  |d      ||dfS )rJ  r   r   )from_serverFNrx   r   r{   TrN  rP  rQ  rR  rT  rV  rW  r   rX  rY  )
rs   rV   rU   r   r   r   r2  r1   rG   r]  )r9  rc  r^  rL  r_  rra  s          rl   rG  z BaseStrategy.decode_control_fast\  s    :gajmMN 	;Atqy !!'(tqyed		;
 33*=!S=OPL FM$'Q(:1(=a(@$AM&!&+LOA,>q,A!,D&EM(#55*=!S=OPL FM4@OA4Fq4I!4LDRWM.)&21oa&8&;A&>M(#--AQ1Q*=!S=OPL FM&=l1oa>PQR>STU>V&WM(#TXXlB-GXcn{|||rn   c                    | dk(  rt        |      }n| dk(  rt               }n| dk(  rt        |      }n| dk(  rt        |      }n| dk(  rt	        |      }n| dk(  rt        |      }no| dk(  rt        |      }n^| dk(  rt        |      }nM| d	k(  rt        |      }n<| d
k(  rt        |      }n+t        t              rt        t        d|        t        d      | |d<   ||d<   |S )Nr   unbindRequest
addRequestcompareRequest
delRequestextendedReqmodifyRequestmodDNRequestsearchRequestabandonRequestzunknown request <%s>zunknown requestr   r   )r3   r   r'   r8   rB   r9   r(   r?   r-   rE   rK   rL   rJ   r   )r   r8  r   r   s       rl   r   zBaseStrategy.decode_requestz  s     =())4F_,VF\)(3F--,Y7F\)+I6F]*-i8F_,+I6F^+.y9F_,+I6F--,Y7F5!E1<@)*;<<%v%zrn   c                     g }|D ]v  }t        |      }|s| j                  j                  j                  D ]C  }|d   |d   k(  s	|d   dk(  s|d   | j                  vs)|d    |d<   |j                  |        v x |S )Nr   host*rx   anonymousBindOnly)r!   r_   r   allowed_referral_hostsra   r   )rj   r   referral_listreferralcandidate_referralref_hosts         rl   valid_referral_listz BaseStrategy.valid_referral_list  s    ! 	"H!*8!4! $ 6 6 M M "H{&8&@@HQKSVDV-f5T__LJRST+o./BC)001CD!"	" rn   c                    d}|}|s|j                  d      \  }}}|j                  d      \  }}}	|d   |xx   |d   |   z  cc<   |d   |xx   |d   |   z  cc<   |	dk7  rt        t              r1t        t        dt	        t        |	      dz         | j                         |dz   t	        t        |	      dz         z   d	z   }
| j                  j                  |d
   dt        |d   |dz   t	        t        |	      dz         z   d	z   g      }| j                  j                  j                  r|\  }}}}n.|}| j                  j                  }| j                  j                  }| j                  j                  j                  r|r|d   }nd}n| j                  |      \  }}|d   }|sS|
|d   v r t        |d   |
         dk(  r|d   |
= |d   |
= t!        t#        d |d   j%                                     d   }d}|sy y )NFr   -r   r   rq  z2performing next search on auto-range <%s> via <%s>rx   z-*r   z(objectclass=*)dereferenceAlias)search_basesearch_filtersearch_scopedereference_aliasesr   r   Tc                 
    d| v S )Nr   r   )as    rl   <lambda>z3BaseStrategy.do_next_range_search.<locals>.<lambda>  s
    i1n rn   )r  rK   rN   rJ   rs   r   r_   searchr   r   rg   r   r   rb   r  r   r  filterr
  )rj   r   r   	attr_namedonecurrent_response	attr_typer  returned_range
high_rangerequested_ranger   status	_responses                 rl   do_next_range_searchz!BaseStrategy.do_next_range_search  s`   #+4+>+>y+I(Iq.-77<Aq*%&y15EFV5WXa5bb1\"9-1A,1OPY1ZZ-S x("VX[\_`j\kno\oXprv  sB  sB  C"+i"7#c*oPQ>Q:R"RUY"Y//HTN>O=ADKL^D_<E	<QTWX[\fXgjkXkTl<los<s;t	 0 v
 ??++77390FFIq#F!__33F $ 8 8I??++00+4Q<(#*.*;*;F*C'$a'7':$&*:;K*LLQTUefvUw  yH  VI  RJ  NO  RO,-=>O,\:?K $V,DFVWgFhFmFmFo%p qrs tIDI rn   c                 p   |D cg c]  }|d   dk(  s| c}D ]  }t        |d   j                               D ]t  }d|v s|j                  d      \  }}}|dv r  y||d   vs|d   |   t               |d   |<   ||d   vs|d   |   t               |d   |<   | j                  |||       v  yc c}w )	Nr   r   r   r   )z1-1z0-0Fr   T)r  r
  r  r  )	rj   r   r   rd  r   r  r  r  range_valuess	            rl   r   z$BaseStrategy.do_search_on_auto_range  s     (J1AfI9I,IQJ 
	HD!$'7"8"="="?@ 	H		)1:1D1DY1O.Iq,#~5$ -=(>>$GWBXYbBcBk<@F-.y9 \(::d<>PQZ>[>c8<\*95--gtYG	H
	H  Ks
   B3B3c                 	   d }d }d }| j                  |      }|r|D cg c]*  }|d   | j                  j                  j                  k(  r|, }}|rt	        |      n
t	        |      }|d   |d   xs  | j                  j                  j
                  |d   f}| j                  j                  r|| j                  v r| j                  |   }nt        |d   |d   xs  | j                  j                  j
                  |d   | j                  j                  j                  | j                  j                  j                  | j                  j                  j                  | j                  j                  j                  | j                  j                  j                  |d   rt        | j                  j                  j                  j                   | j                  j                  j                  j"                  | j                  j                  j                  j$                  | j                  j                  j                  j&                  | j                  j                  j                  j(                        nd 	      }ddlm}	  |	||d   s| j                  j.                  nd |d   s| j                  j0                  nd | j                  j&                  |d   s| j                  j2                  nt4        t6        d	| j                  j8                  | j                  j:                  | j                  j<                  | j                  j>                  | j                  j@                  | j                  jB                  | j                  jD                  
      }| j                  jF                  r)| j                  jH                  xjJ                  dz  c_%        |jM                          | jN                  |jP                  _'        | j                  jR                  rx|j                  sl|jU                         s\d|jV                  rd|jV                  z   ndz   }
tY        tZ              rt]        tZ        d|
|        | j_                          ta        |
      | j                  jb                  r|je                          | j                  jF                  r)| j                  jH                  xjf                  dz  c_3        |||fS c c}w )Nr   rp  port)local_private_key_filelocal_certificate_filevalidateversionca_certs_file)	rp  r  r   get_info	formatterr   moders  r   r   )
Connectionrr  T)r   userpasswordr  authenticationclient_strategyr   	read_onlyr6  r   fast_decoderr   sasl_mechanismsasl_credentialsrx   z$start_tls in referral not successfulrr   rX  z%s for <%s>)4rx  r_   r   r   r   r  use_referral_cacherf   r>   r  r5  r   r  rs  rF   r   private_key_filecertificate_filer  r  r  core.connectionr  r  r  r  r
   r	   r  r6  r   r  r   r  r  r   r   referrals_connectionsr   ra   r   r   	start_tlsr   rK   rL   rJ   unbindr   r   r   referrals_followed)rj   r   referral_connectionselected_referralcachekeyrx  ru  preferred_referral_listreferral_serverr  r   s              rl   create_referral_connectionz'BaseStrategy.create_referral_connection  s   " "66yA@S 'VH'/$//:P:P:T:T'T (0 'V# 'VCZ'> ?`f#a% *&13DV3L3kPTP_P_PfPfPkPkm~  @E  nF  GH11h$BUBU6U&*&9&9(&C#"(.?.G.?.G.f4??KaKaKfKf1B51I26//2H2H2Q2Q37??3I3I3Z3Z9=9O9O9_9_.2oo.D.D.I.I@D@V@V@m@m *;5)A .1H^H^HbHbHsHsHLH^H^HbHbHsHs:>//:P:P:T:T:]:]9=9O9O9S9S9[9[?C?U?U?Y?Y?g?g	.i
 HL#M 9&0RcdwRxdoo6J6J  CZkl  [A$//:R:R  GK9=9P9Pfw  yL  gM@^@^  S\AE@D;???;T;T=A__=X=XBF//BbBb>Boo>Z>ZAEA`A`@D@^@^BF//BbBb'd# ??((OO**@@AE@#((*:>//#,,7??..7J7J.88: F  uH  uS  uS%ReRpRpJp  Y[  !\&u-}eTB/66??((',,.$$&&99Q>9 "5x??y'Vs   /S6c                    t        t              rt        t        d| j                         | j	                  |      \  }}}|r<|d   dk(  rS|j                  |d   xs |d   |d   xs |d   |d   xs |d   |d   |d   xs |d   |d	   |d
   |d   |d   	       n|d   dk(  r'|j                  |d   xs |d   d |d   |d          n]|d   dk(  r*|j                  |d   xs |d   |d   |d   |d          n+|d   dk(  r"|j                  |d   xs |d   |d          n|d   dk(  r|j                  |d   |d   |d   d       n|d   dk(  r.|j                  |d   xs |d   t        |d         |d          n|d   dk(  r-|j                  |d   xs |d   |d   |d   |d   |d          nod| j                  _        t        t              r0t        t        d| j                  j                  | j                         t        | j                  j                        |j                   }|j"                  }| j                  j$                  r|| j&                  |<   ||fS |j)                          ||fS d }d }||fS ) Nzfollowing referral for <%s>r   rm  baser  scoper{  r   	sizeLimit	timeLimit	typesOnlyr   )r   rg  r  rh  	attributerZ  ri  rj  r   T)r   	no_encoderk  changesrl  newRdndeleteOldRdnnewSuperiorz referral operation not permittedr|   )rK   rN   rJ   r_   r  r  addcomparedeleteextendedmodifyrC   	modify_dnr   rL   r   r   r   r  rf   r  )rj   r   r   r  r  r  r   r   s           rl   r   z%BaseStrategy.do_operation_on_referral$  s/   x 7I;?;Z;Z[d;e8.v/1#**+<V+D+WPV+<X+F+['RZJ[+<W+E+YQXIY+23E+F+<\+J+cgVbNc+2;+?+2;+?+2;+?4;J4G + I L0#''(9&(A(UWWEU(,(/(=181D ( F $44#++,=f,E,YQXIY,3K,@,3G,<5<Z5H , J L0#**+<V+D+XPWHX4;J4G + IM1#,,WV_-4W-=6=j6I7; - /
 O3#**+<V+D+XPWHX+FwyGY+Z4;J4G + I N2#--.?.G.[7SZK[.5h.?.5n.E.5m.D7>z7J	 . L .P*u%0J0JDOO\'(B(BCC*33H(//F110C##H-  $**,
  HFrn   c           
      4   t        t              rt        t        d| j                         	 t	        |      }| j                  j
                  t        k(  r!| j                  j                  r
| j                  j                  s| j                  j                  }| j                  j                  }t        j                  t        |t        |      j                  dd      |z         dd       }t        t        |      dz   dz   dz         j                  dd      |z   |z   t        d      j                  dd      z   t        |      j                  dd      z   }| j                  xj                  dz  c_	        | j                  j                   j#                  |       t        t$              r&t        t$        d	| j                  t'        |d
             t        t              r%t        t        dt        |      | j                         | j                  j6                  rD| j                  j8                  j;                  | j                  j<                  t        |             y y # t         j(                  $ r}dt+        |      z   | j                  _        d }t        t.              r0t        t.        d| j                  j,                  | j                          t1        t2         t5        |      t+        |                  | j                  j,                        d }~ww xY w)Nzsending 1 ldap message for <%s>r{   bigr      r   
   rx   zldap message sent via <%s>:%sz>>zsent %d bytes via <%s>zsocket sending errorr|   )rK   rO   rJ   r_   rR   r  r   _digest_md5_kicr   _digest_md5_sec_numr2  fromhexrX   r   to_bytesr   r   sendallrP   rQ   r   rs   r   rL   r   r   r   r   r   update_transmitted_messager   )rj   r   encoded_messagesec_numkic	signaturer   s          rl   r   zBaseStrategy.sendingb  s   w:DOOL	t$\2O--;@_@_hlhwhw  iI  iI//==oo55 "MM(3G8M8MaQV8WZi8i*jklmo*pq	"%c/&:Q&>&BR&G"H"Q"QRSUZ"[^m"mpy"y|  AB  }C  }L  }L  MN  PU  }V  #V  Y\  ]d  Ye  Yn  Yn  op  rw  Yx  #x33q83OO""**?;8$H=tPcdprvPwx7#G5s?7KT__] ??  OO""==doo>U>UWZ[jWkl ! || 	t)?#a&)HDOO&"O5!E?DOO,F,FXW12EwtAwsSTvWX\XgXgXrXrss	ts   GI L2B LLc                     t         NNotImplementedErrorr   s    rl   r   zBaseStrategy._start_listen      !!rn   c                     t         r  r  )rj   r   r  s      rl   r   zBaseStrategy._get_response  r  rn   c                     t         r  r  r   s    rl   	receivingzBaseStrategy.receiving  r  rn   c                     t         r  r  rj   r   s     rl   post_send_single_responsez&BaseStrategy.post_send_single_response  r  rn   c                     t         r  r  r  s     rl   post_send_searchzBaseStrategy.post_send_search  r  rn   c                     t         r  r  r   s    rl   
get_streamzBaseStrategy.get_stream      !!rn   c                     t         r  r  )rj   rZ  s     rl   
set_streamzBaseStrategy.set_stream  r  rn   c                     t        | j                        dkD  rG| j                  j                         \  }}|j                          t        | j                        dkD  rFy y )Nr   )r   rf   popitemr  )rj   r  r  s      rl   unbind_referral_cachez"BaseStrategy.unbind_referral_cache  sP    $%%&*,0,?,?,G,G,I)H)&&( $%%&*rn   )TT)FFr  r   )T)"ri   
__module____qualname____doc__rm   rv   r   r   r   r   r   r   r  staticmethodr  r;  rH  r7  rG  r   rx  r  r   r  r   r   r   r   r  r  r  r  r  r  r   rn   rl   r]   r]   I   s    Q:Jx*>['z7,*<p$d  0*X1f } }: } }:  @'RB@H< |m<""""""")rn   r]   )xr  r   r   r   ImportErrorstructr   platformr   randomr   rX  r	   r
   r   r   r   r   r   r   core.resultsr   r   core.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r    	utils.urir!   protocol.rfc4511r"   r#   r$   r%   operation.addr&   r'   operation.modifyr(   r)   operation.searchr*   r+   r,   r-   r.   r/   r0   r1   operation.bindr2   r3   r4   r5   r6   operation.comparer7   r8   operation.extendedr9   r:   r;   r<   r=   core.serverr>   operation.modifyDnr?   r@   operation.deleterA   rB   protocol.convertrC   rD   operation.abandonrE   core.tlsrF   protocol.oidrG   protocol.rfc2696rH   protocol.microsoftrI   	utils.logrJ   rK   rL   rM   rN   rO   rP   rQ   
utils.asn1rR   rS   rT   rU   
utils.convrV   protocol.sasl.digestMd5rW   rX   r   rZ   r   objectr]   r   rn   rl   <module>r     s   2 "     B  B  B Cn n n n " T T E N_ _ _& & Q x  x   V N O 7   5 < h h h S S # 55 ' 3 T)6 T)U  "!"s   D4 4D?>D?