
    =OOfB             
       j   d 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	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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&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d	d
l2m3Z3m4Z4m5Z5 ddl6m7Z7 d	dl8m9Z9 d	dl:m;Z; ddl<m=Z=m>Z> ddl?m@Z@mAZA ddlBmCZCmDZD ddlEmFZFmGZG ddlHmIZImJZJ ddlKmLZLmMZM ddlNmOZOmPZP ddlQmRZRmSZS ddlTmUZUmVZV ddlWmXZXmYZY ddlZm[Z[ ddl\m]Z] ddl^m_Z_ ddl`maZa ddlbmcZc ddldmeZe ddlfmgZg ddlhmiZi dd ljmkZk dd!llmmZm dd"lnmoZo dd#lpmqZq dd$lrmsZs dd%ltmuZu dd&lvmwZw d	d'lxmyZy d	d(lzm{Z{ d	d)l|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZ dd*lmZmZmZmZmZ dd+lmZmZmZmZmZmZmZ dd,lmZ dd-lmZ e+e,e-e.gZee"e#eeeee(e)eg
Zd. Zd/ Z G d0 d1e      Zy)2
    )deepcopycopy)linesep)RLock)reduceN   )'	ANONYMOUSSIMPLESASL
MODIFY_ADDMODIFY_DELETEMODIFY_REPLACEget_config_parameterDEREF_ALWAYSSUBTREEASYNCSYNCNO_ATTRIBUTESALL_ATTRIBUTESALL_OPERATIONAL_ATTRIBUTESMODIFY_INCREMENTLDIFASYNC_STREAMRESTARTABLEROUND_ROBINREUSABLEAUTO_BIND_DEFAULTAUTO_BIND_NONEAUTO_BIND_TLS_BEFORE_BIND	SAFE_SYNCSAFE_RESTARTABLEAUTO_BIND_TLS_AFTER_BINDAUTO_BIND_NO_TLSSTRING_TYPESSEQUENCE_TYPES	MOCK_SYNC
MOCK_ASYNCNTLMEXTERNAL
DIGEST_MD5GSSAPIPLAINDSASCHEMAALL   )RESULT_SUCCESSRESULT_COMPARE_TRUERESULT_COMPARE_FALSE)ExtendedOperationsRoot)
ServerPool)Server)abandon_operationabandon_request_to_dict)add_operationadd_request_to_dict)bind_operationbind_request_to_dict)compare_operationcompare_request_to_dict)delete_operationdelete_request_to_dict)extended_operationextended_request_to_dict)modify_operationmodify_request_to_dict)modify_dn_operationmodify_dn_request_to_dict)search_operationsearch_request_to_dict)operation_to_ldifadd_ldif_header)sasl_digest_md5)sasl_external)
sasl_plain)SyncStrategy)SafeSyncStrategy)SafeRestartableStrategy)MockAsyncStrategy)AsyncStrategy)ReusableStrategy)RestartableStrategy)LdifProducerStrategy)MockSyncStrategy)AsyncStreamStrategy)unbind_operation)paged_search_control)ConnectionUsage)Tls)LDAPUnknownStrategyErrorLDAPBindError$LDAPUnknownAuthenticationMethodError"LDAPSASLMechanismNotSupportedErrorLDAPObjectClassErrorLDAPConnectionIsReadOnlyErrorLDAPChangeErrorLDAPExceptionErrorLDAPObjectErrorLDAPSocketReceiveErrorLDAPAttributeErrorLDAPInvalidValueErrorLDAPInvalidPortErrorLDAPStartTLSError)escape_bytesprepare_for_streamcheck_json_dictformat_json
to_unicode)loglog_enabledERRORBASICPROTOCOLEXTENDED#get_library_log_hide_sensitive_data)safe_dn)check_port_and_port_listc                     | r.t        |       dk(  r t        | d         dz   t        | d         z   S | r1t        |       dk(  r#dt        | d         z   dz   t        | d         z   S 	 t        |       S # t        $ r Y yw xY w)	Nr	   r   :r1      [z]:?)lenstr	Exception)endpoints    V/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/core/connection.py_format_socket_endpointr   _   s    CMQ&8A;#%HQK(888	c(mq(S!%%,s8A;/???8} s   %
A0 0	A<;A<c                     | rB	 | j                         }	 | j                         }dt        |      z   dz   t        |      z   dz   S y# t        $ r d}Y ?w xY w# t        $ r d}Y ?w xY w)N)NNNNz<local: z - remote: >z<no socket>)getsocknamer   getpeernamer   )socklocalremotes      r   _format_socket_endpointsr   k   s    	-$$&E	.%%'F 3E::]JMdekMllorrr  	-,E	-  	.-F	.s"   A A AAA%$A%c                      e Zd ZdZddeddedddddddddddddddddddddddfdZd'dZd Zd	 Z	d
 Z
d Zed        Zej                  d        Zed        Zd Zd Z	 	 d(dZ	 	 	 	 	 	 	 d)dZ	 d*dZeeddddddddddf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 Z d Z!d  Z"	 	 	 	 	 d.d!Z#	 	 	 	 	 	 	 d/d"Z$	 	 	 d0d#Z%d*d$Z&ed%        Z'd& Z(y)1
Connectiona  Main ldap connection class.

    Controls, if used, must be a list of tuples. Each tuple must have 3
    elements, the control OID, a boolean meaning if the control is
    critical, a value.

    If the boolean is set to True the server must honor the control or
    refuse the operation

    Mixing controls must be defined in controls specification (as per
    RFC 4511)

    :param server: the Server object to connect to
    :type server: Server, str
    :param user: the user name for simple authentication
    :type user: str
    :param password: the password for simple authentication
    :type password: str
    :param auto_bind: specify if the bind will be performed automatically when defining the Connection object
    :type auto_bind: int, can be one of AUTO_BIND_DEFAULT, AUTO_BIND_NONE, AUTO_BIND_NO_TLS, AUTO_BIND_TLS_BEFORE_BIND, AUTO_BIND_TLS_AFTER_BIND as specified in ldap3
    :param version: LDAP version, default to 3
    :type version: int
    :param authentication: type of authentication
    :type authentication: int, can be one of ANONYMOUS, SIMPLE or SASL, as specified in ldap3
    :param client_strategy: communication strategy used in the Connection
    :type client_strategy: can be one of SYNC, ASYNC, LDIF, RESTARTABLE, REUSABLE as specified in ldap3
    :param auto_referrals: specify if the connection object must automatically follow referrals
    :type auto_referrals: bool
    :param sasl_mechanism: mechanism for SASL authentication, can be one of 'EXTERNAL', 'DIGEST-MD5', 'GSSAPI', 'PLAIN'
    :type sasl_mechanism: str
    :param sasl_credentials: credentials for SASL mechanism
    :type sasl_credentials: tuple
    :param check_names: if True the library will check names of attributes and object classes against the schema. Also values found in entries will be formatted as indicated by the schema
    :type check_names: bool
    :param collect_usage: collect usage metrics in the usage attribute
    :type collect_usage: bool
    :param read_only: disable operations that modify data in the LDAP server
    :type read_only: bool
    :param lazy: open and bind the connection only when an actual operation is performed
    :type lazy: bool
    :param raise_exceptions: raise exceptions when operations are not successful, if False operations return False if not successful but not raise exceptions
    :type raise_exceptions: bool
    :param pool_name: pool name for pooled strategies
    :type pool_name: str
    :param pool_size: pool size for pooled strategies
    :type pool_size: int
    :param pool_lifetime: pool lifetime for pooled strategies
    :type pool_lifetime: int
    :param cred_store: credential store for gssapi
    :type cred_store: dict
    :param use_referral_cache: keep referral connections open and reuse them
    :type use_referral_cache: bool
    :param auto_escape: automatic escaping of filter values
    :type auto_escape: bool
    :param auto_encode: automatic encoding of attribute values
    :type auto_encode: bool
    :param source_address: the ip address or hostname to use as the source when opening the connection to the server
    :type source_address: str
    :param source_port: the source port to use when opening the connection to the server. Cannot be specified with source_port_list
    :type source_port: int
    :param source_port_list: a list of source ports to choose from when opening the connection to the server. Cannot be specified with source_port
    :type source_port_list: list
    N   TFc                    t        d      }t               | _        | j                  5  |t        vrGd| _        t        t              rt        t        d| j                  |        t        | j                        || _	        || _
        || _        |s| j                  rt        | _        nu|st        | _        ng|t        t        t        t         fv r|| _        nGd| _        t        t              rt        t        d| j                  |        t#        | j                        || _        |rdnd| _        d | _        d | _        d | _        d| _        d| _        d| _        d | _        |du rt4        | _        n|du rt8        | _        n|| _        |
| _        || _        |r
t?               nd | _         d | _!        d| _"        d| _#        || _$        g | _%        d| _&        d| _'        d| _(        d | _)        d| _*        || _+        |r|n|| _,        || _-        || _.        || _/        || _0        d| _1        || _2        || _3        |	rdnd| _4        tk        |       | _6        g | _7        || _8        || _9        || _:        || _;        || _<        || _=        d | _>        d | _?        d| _@        t        ||      } | r*t        t              rt        t        |        t        |       ||nd| _C        dg| _D        |	|g| _D        n|
|d d  | _D        t        |t              rt        |      }t        |t              rt        |t        dd	      }t        |t              rC|| _K        | j                  j                  |        | j                  j                  |       | _N        nd | _K        || _N        | j                  t        k(  rt        |       | _Q        n| j                  t        k(  rt        |       | _Q        nq| j                  t        k(  rt        |       | _Q        nL| j                  t        k(  rt        |       | _Q        n'| j                  t        k(  rt        |       | _Q        n| j                  t        k(  rt        |       | _Q        n| j                  t        k(  rt        |       | _Q        d| _+        n| j                  t        k(  rt        |       | _Q        n| j                  t        k(  rt        |       | _Q        nk| j                  t        k(  rt        |       | _Q        nGd
| _        t        t              rt        t        d| j                  |        t        | j                        | j                  j                  | _d        | j                  j                  | _e        | j                  j                  | _f        | j                  j                  | _g        | j                  j                  | _h        | j                  j                  s| j                          t        t              r;t               r t        t        d| j                                nt        t        d|        d d d        y # 1 sw Y   y xY w)NDEFAULT_THREADED_POOL_NAMEz"unknown client connection strategy%s for <%s>unknown authentication methodTFr    )activeexhaustzunknown strategyzinstantiated Connection: <%s>zinstantiated Connection: <%r>)nr   r   connection_lockCLIENT_STRATEGIES
last_errorrq   rr   rp   r]   strategy_typeuserpasswordr   authenticationr
   r   r)   r_   versionauto_referralsrequestresponseresultbound	listeningclosedr   	auto_bindr$   sasl_mechanismsasl_credentialsr[   _usagesockettls_startedsasl_in_progress	read_only_context_state_deferred_open_deferred_bind_deferred_start_tls_bind_controls_executing_deferredlazy	pool_name	pool_size
cred_storepool_lifetimepool_keepalivestarting_tlscheck_namesraise_exceptions
auto_ranger5   extend_entriesfast_decoderreceive_timeoutempty_attributesuse_referral_cacheauto_escapeauto_encode_digest_md5_kic_digest_md5_kis_digest_md5_sec_numrx   ri   source_addresssource_port_list
isinstancer%   r7   r&   r6   r   server_pool
initializeget_current_serverserverr   rO   strategyr!   rP   r"   rQ   r   rS   r   rV   r   rU   r   rT   r'   rW   r(   rR   r   rX   sendopenget_responsepost_send_single_responsepost_send_searchno_real_dsa_do_auto_bindrs   rv   !repr_with_sensitive_data_stripped)!selfr   r   r   r   r   r   client_strategyr   r   r   r   r   collect_usager   r   r   r   r   r   r   r   r   return_empty_attributesr   r   r   r   r   source_portr   conf_default_pool_nameport_errs!                                    r   __init__zConnection.__init__   sG   @ "66R!S$w!! W	F&77"Fu%}dootD.t??!0DDI$DM!dii&,##&/#FItT#BB&4#"Au%}dootD:4??KK"DL*8$eDDL DMDKDJ"DNDK"DOE!!2d"!1!*"0D$4D!/</+$DKDK$D$)D!&DN"$D"'D"'D',D$"&D',D$DI*3Y9ODN&DN(DO!.D"0D %D*D$4D!&0deDO06DKDM ,D#2D $;D!&8D#*D*D#'D #'D '(D$/=MNHu%x(*844 5C4N.TVD &'CD!&)4%!-(8(;%&,/&.1#FKdS&*-#)   ++D1"..AA$G#' $ !!T) ,T 2##y0 0 6##'77 7 =##u, -d 3##t+ 4T :##{2 3D 9##x/ 0 6!	##y0 0 6##z1 1$ 7##|3 3D 9"4u%}dootD.t?? **DI**DI $ : :D-1]]-T-TD*$(MM$B$BD!==,,""$ 5!68>@f@f@hi>EoW	F W	F W	Fs   XYYc                     | j                   j                  rU| j                  }d | _        | j                  }d | _        |t	        | j
                        |rt	        |      nd t        |      fS |S N)r   thread_safer   r   r   r   r   )r   statusr   temp_responsetemp_requests        r   _prepare_return_valuez Connection._prepare_return_valueu  s]    ==$$ MMM DM<<LDL8DKK0X(=2I[_aefrasss    c                 <   | j                   r| j                   t        t        fvrt        t              rt        t        d|        | j                  r| j                  d       | j                   t        k(  r| j                  d       n'| j                   t        k(  r| j                  d      r| j                  d       nd| j                  rd| j                  z   ndz   }t        t              rt        t        d||        | j                          t        |      | j                   t         k(  r| j                  d       | j                  d      s\d	| j                  rd| j                  z   ndz   }t        t              rt        t        d||        | j                          t        |      | j"                  s\d
| j                  rd| j                  z   ndz   }t        t              rt        t        d||        | j                          t%        |      y y y )Nz"performing automatic bind for <%s>Fread_server_infoTz/automatic start_tls befored bind not successful - r   r   z-automatic start_tls after bind not successfulzautomatic bind not successful)r   r   r   rq   rs   rp   r   r   r$   bindr    	start_tlsr   rr   unbindrj   r#   r   r^   )r   errors     r   r   zConnection._do_auto_bind~  s   >>dnn^EV4WW5!E?F{{		5	1~~!11		4	0#<<>>5>9IItI4Mlpl{l{QVY]YhYhQh  BD  EE"5)E=%>KKM+E22#;;		5	1~~t~<KjnjyjyuW[WfWfOf  @B  CE"5)E=%>KKM+E22::7VZVeVe54??;Rkmnu%}eT:#E** 1 X>r   c                 $   | j                   rt        | j                         nddt        | j                        z   | j                  rdnd| j                  sdn| j
                  rdnd| j                  rdn| j                  rd	nd
t        | j                        | j                  sdn| j                  rdnd| j                  rdndt        | d      r | j                  j                  j                   nd| j"                  rdndg
}dj%                  |      S )NNonezuser: r   znot lazyunboundzdeferred bindr   r   zdeferred openr   ztls not startedzdeferred start_tlsztls startedr   znot listeningr   zNo strategyzinternal decoderzpyasn1 decoderr   )r   r   r   r   r   r   r   r   r   r   r   r   r   hasattrr   	__class____name__r   join)r   ss     r   __str__zConnection.__str__  s     $Cs499~%iiFZ!ZZIATAToZaHT=P=P/V\$T[[1%)%5%5SWSkSk;Oq~>>K07j0IDMM##,,}"&"3"39I
 zz!}r   c                    t        d      }| j                  rdj                  |       }ndj                  |       }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j
                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dnd	j                  |       z  }|| j                  dnd
j                  |       z  }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dnd| j                  rdndz   z  }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                   dndj                  |       z  }|| j"                  | j"                  |k(  rdndj                  |       z  }|| j$                  dndj                  |       z  }|| j&                  dndj                  |       z  }|| j(                  dndj                  |       z  }|| j*                  dndt-        | j*                        z   z  }|| j.                  dnd| j.                  rdndz   z  }|| j0                  dnd| j0                  rdndz   z  }|| j2                  dndj                  |       z  }|| j4                  dnd| j4                  rdndz   z  }|| j6                  dnd| j6                  rdndz   z  }|| j8                  dnd| j8                  rdndz   z  }|| j:                  dnd | j:                  rdndz   z  }|d!z  }|S )"Nr   #Connection(server={0.server_pool!r}Connection(server={0.server!r}r   , user={0.user!r}z, password={0.password!r}, auto_bind={0.auto_bind!r}, version={0.version!r}%, authentication={0.authentication!r}%, client_strategy={0.strategy_type!r}%, auto_referrals={0.auto_referrals!r}%, sasl_mechanism={0.sasl_mechanism!r}), sasl_credentials={0.sasl_credentials!r}, check_names={0.check_names!r}z, collect_usage=TrueFalse, read_only={0.read_only!r}, lazy={0.lazy!r}), raise_exceptions={0.raise_exceptions!r}, pool_name={0.pool_name!r}, pool_size={0.pool_size!r}#, pool_lifetime={0.pool_lifetime!r}%, pool_keepalive={0.pool_keepalive!r}, cred_store=z, fast_decoder=, auto_range=', receive_timeout={0.receive_timeout!r}z, return_empty_attributes=, auto_encode=, auto_escape=, use_referral_cache=))r   r   formatr   r   r   r   r   r   r   r   r   r   usager   r   r   r   r   r   r   r   reprr   r   r   r   r   r   r   r   r   rs      r   __repr__zConnection.__repr__  s&   !56R!S5<<TBA077=A	499$R*=*D*DT*JJ	4==(R.I.P.PQU.VV	4>>)R/L/S/STX/YY	4<<'R-F-M-Md-SS	4&&.R4[4b4bcg4hh	4%%-R3Z3a3abf3gg	4&&.R4[4b4bcg4hh	4&&.R4[4b4bcg4hh	4((0R6a6h6him6nn	4##+R1R1Y1YZ^1__	4::%R,>DJJ&\c,de	4>>)R/L/S/STX/YY	499$R*=*D*DT*JJ	4((0R6a6h6him6nn	DNN*dnn@V.VR]z  ^B  ^B  CG  ^H  	H	4>>)R/L/S/STX/YY	4%%-R3X3_3_`d3ee	4&&.R4[4b4bcg4hh	4??*R4CX1XY	4$$,R3DRVRcRcip3qr	4??*RdooFcj1kl	4''/R5^5e5efj5kk	4((0R7SaeavavW]  }D  8E  	F	4##+R2BPTP`P`ffm2no	4##+R2BPTP`P`ffm2no	4**2R9P^b^u^uTZ  |C  :D  	E	Sr   c           
         t        d      }| j                  rdj                  |       }ndj                  |       }|| j                  dndj                  |       z  }|| j                  dn&dj                  dt        | j                        z        z  }|| j                  dndj                  |       z  }|| j                  dnd	j                  |       z  }|| j                  dnd
j                  |       z  }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }| j                  t        k(  rf|| j                  dnSdj                  | j                  d   | j                  d   dt        | j                  d         z  | j                  d         z  }n"|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dn| j                  rdndz  }|| j                   dndj                  |       z  }|| j"                  dndj                  |       z  }|| j$                  dndj                  |       z  }|| j&                  | j&                  |k(  rdndj                  |       z  }|| j(                  dndj                  |       z  }|| j*                  dndj                  |       z  }|| j,                  dndj                  |       z  }|| j.                  dndt1        | j.                        z   z  }|| j2                  dn| j2                  rd ndz  }|| j4                  dnd!| j4                  rd"ndz   z  }|| j6                  dnd#j                  |       z  }|| j8                  dn| j8                  rd$ndz  }|| j:                  dnd%| j:                  rd"ndz   z  }|| j<                  dnd&| j<                  rd"ndz   z  }|| j>                  dnd'| j>                  rd"ndz   z  }|d(z  }|S ))Nr   r   r   r   r   z, password='{0}'z*<stripped %d characters of sensitive data>r   r   r   r   r  r  z/, sasl_credentials=({0!r}, {1!r}, '{2}', {3!r})r   r1   *r	   r   r  r  z, collect_usage=Truer  r  r  r	  r
  r  r  r  r  z, fast_decoder=Truer  r  r  z, return_empty_attributes=Truer  r  r  r  ) r   r   r  r   r   r~   r   r   r   r   r   r   r+   r   r   r  r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r  s      r   r   z,Connection.repr_with_sensitive_data_stripped  s   !56R!S5<<TBA077=A	499$R*=*D*DT*JJ	4==(R.@.G.GHtwz{  |I  |I  xJ  IJ  /K  	K	4>>)R/L/S/STX/YY	4<<'R-F-M-Md-SS	4&&.R4[4b4bcg4hh	4%%-R3Z3a3abf3gg	4&&.R4[4b4bcg4hh	4&&.R4[4b4bcg4hh*,t,,4:k:r:rsw  tI  tI  JK  tL  NR  Nc  Nc  de  Nf  hk  nq  rv  rG  rG  HI  rJ  nK  hK  MQ  Mb  Mb  cd  Me  ;f  fAt,,4:e:l:lmq:rrA	4##+R1R1Y1YZ^1__	4::%R4::,G[bc	4>>)R/L/S/STX/YY	499$R*=*D*DT*JJ	4((0R6a6h6him6nn	DNN*dnn@V.VR]z  ^B  ^B  CG  ^H  	H	4>>)R/L/S/STX/YY	4%%-R3X3_3_`d3ee	4&&.R4[4b4bcg4hh	4??*R4CX1XY	4$$,RQUQbQb3Mhop	4??*RdooFcj1kl	4''/R5^5e5efj5kk	4((0R`d`u`u7\  |C  	D	4##+R2BPTP`P`ffm2no	4##+R2BPTP`P`ffm2no	4**2R9P^b^u^uTZ  |C  :D  	E	Sr   c                 f    | j                   j                  r| j                   j                         S dS )zUsed by the LDIFProducer strategy to accumulate the ldif-change operations with a single LDIF header
        :return: reference to the response stream if defined in the strategy.
        N)r   
can_stream
get_streamr   s    r   streamzConnection.stream  s(    
 .2]]-E-Et}}'')O4Or   c                     | j                   5  | j                  j                  r| j                  j                  |       d d d        y # 1 sw Y   y xY wr   )r   r   r  
set_stream)r   values     r   r!  zConnection.stream  s?    !! 	0}}''((/	0 	0 	0s   2AAc                    | j                   sy| j                  j                  r| j                   j                          | j                  j                  j
                  D ]+  }| xj                   |j                  j                  z  c_         - | xj                   | j                  j                  j                  z  c_         | j                   S )zKUsage statistics for the connection.
        :return: Usage object
        N)	r   r   pooledresetpoolworkers
connectionr  terminated_usage)r   workers     r   r  zConnection.usage  s    
 {{==KK--,,44 7v006667KK4==-->>>K{{r   c                    | j                   5  | j                  j                  | j                  | j                  f       | j
                  t        k7  ra| j
                  t        k(  rt        | _        | j                  r| j                          | j                  s| j                         st        d      | cd d d        S # 1 sw Y   y xY w)Nzunable to bind)r   r   appendr   r   r   r   r   r$   r   r   r^   r   s    r   	__enter__zConnection.__enter__  s    !! 	&&

DKK'@A~~/>>%66%5DN;;IIKzz99;+,<==	 	 	s   B'B>>Cc                    | j                   5  | j                  j                         \  }}|s| j                  s| j                  r	 | j                          |s| j                  r| j                          |+t        t              rt        t        d||        	 d d d        y	 d d d        y # t        $ r Y `w xY w# 1 sw Y   y xY w)Nr   F)r   r   popr   r!  r   rd   r   r   rq   rr   rp   )r   exc_typeexc_valexc_tbcontext_boundcontext_closeds         r   __exit__zConnection.__exit__!  s    !! 	,0,?,?,C,C,E)M>!djjT[[KKM "dkk		#u%}h=	 	 $	 	
 * 	 	s0   8B:B+AB:+	B74B:6B77B::Cc                    t        t              rt        t        d|        d| _        | j                  5  | j
                  ru| j                  si| j                  j                  r| j                  j                  |       d| _
        || _        d| _        t        t              rt        t        d|        nd| _
        d| _        | j                  r| j                  d       | j                  t         k(  rt        t"              rt        t"        d|        | j                  j                  st%        | j&                  | j                  | j(                  d| j*                  	      }t        t"              rt        t"        d
t-        |      |        | j/                  | j1                  d||            }n)| j                  j                  |      }n| j                  t2        k(  rt        t"              rt        t"        d|        | j                  j                  st%        | j&                  | j                  | j(                  | j4                  | j*                  	      }t        t"              rt        t"        dt-        |      |        | j/                  | j1                  d||            }n3| j                  j                  |      }n| j                  t6        k(  r| j8                  t:        v rft        t"              rt        t"        d|        | j                  j                  s| j=                  |      }n| j                  j                  |      }nd| _        t        t>              rt        t>        d| j                  |        tA        | j                        | j                  tB        k(  r| j(                  r| j4                  rtE        | j(                  jG                  d            dk(  rdt        t"              rt        t"        d|        | j                  j                  s| jI                  |      }n| j                  j                  |      }nd| _        t        t>              rt        t>        d| j                  |        tK        | j                        d| _        t        t>              rt        t>        d| j                  |        tK        | j                        | j                  jL                  sd| j                  j                  sN| j                  t6        tB        fvr6| jO                  |      \  }}t        t"              rt        t"        d||        n| j                  jL                  r.| jP                  }t        t"              rt        t"        d||        nx| j                  j                  s| j                  t6        tB        fv r|}nGd| _        t        t>              rt        t>        d| j                  |        tK        | j                        |d| _        nV|du rd| _        nJ|du rd| _        n>|d   tR        k(  rdnd| _        | j                  s|r|d   r| j                  s
|d   | _        |r| j                  r| jU                          g | _+        t        t              rt        t        d| j                         | jY                  | j                  | jP                        cddd       S # 1 sw Y   yxY w)a%  Bind to ldap Server with the authentication method and the user defined in the connection

        :param read_server_info: reads info from server
        :param controls: LDAP controls to send along with the bind operation
        :type controls: list of tuple
        :return: bool

        zstart BIND operation via <%s>NTzdeferring bind for <%s>Fr   z"performing anonymous BIND for <%s>r   )r   z)anonymous BIND request <%s> sent via <%s>bindRequestzperforming simple BIND for <%s>z&simple BIND request <%s> sent via <%s>zperforming SASL BIND for <%s>z&requested SASL mechanism not supportedr   \r	   zperforming NTLM BIND for <%s>z)NTLM needs domain\username and a passwordr   z-async BIND response id <%s> received via <%s>z$BIND response <%s> received via <%s>r   descriptionz done BIND operation, result <%s>)-rq   rs   rp   r   r   r   r   r   r&  validate_bindr   r   r   r   r   r   r
   rt   r<   r   r   r   r=   r   r   r   r   r   r   SASL_AVAILABLE_MECHANISMSdo_sasl_bindrr   r`   r)   r~   splitdo_ntlm_bindr_   syncr   r   r2   refresh_server_infor   r   )r   r   controlsr   r   _r   s          r   r   zConnection.bind2  s-    u6=!! e	Gyy!9!9==''MM//9&*#&.#!
u%8$?&+#&*#;;IIuI5&&)3"8,H&JDQ==//"0t?R?RTXT]T]_aosoo  #A&x0*UWklsWtvz{#'#A#A$))M[bdlBm#n#'==#>#>x#H((F2"8,H&GN==//"0t?R?RTXT]T]_c_l_lz~  {K  {K  #L&x0*RThipTqswx#'#A#A$))M[bdlBm#n#'==#>#>x#H((D0**.GG&x0*I4P#}}33'+'8'8'BH'+}}'B'B8'LH*R&u-}dootL@QQ((D0yyT]]s499??4;P7QUV7V&x0*I4P#}}33'+'8'8'BH'+}}'B'B8'LH*V&u-}dootLB4??SS&EDO"5)E=$//4H>tOO}}))$--2F2F4K^K^gkmqfrKr $ 1 1( ;IAv"8,H&UW]_cd]]''![[F"8,H&LfVZ[]]))T-@-@T4L-P%F&EDO"5)E=$//4H>tOO>!&DJt^!%DJu_!&DJ)/)9^)KQVDJ::&VM5JSWSbSb*0*?#

,,.DM5!E=tzzJ--djj$++FKe	G e	G e	Gs   Z0[..[7c                 X   t        t              rt        t        d|        d | _        | j                  5  |r|| _        ||| _        |s|rt        | _        |t        t        t        t        fv r|| _        nI|Gd| _        t        t              rt        t        d| j                  |        t        | j                        |r|| _        |r|| _        | j                   j"                  s	 | j%                  ||      cd d d        S | j                   j*                  j-                          | j/                  d| j0                        cd d d        S # t&        $ rH d| _        t        t              rt        t        d| j                  |        t)        | j                        w xY w# 1 sw Y   y xY w)Nz!start (RE)BIND operation via <%s>r   r   z[Unable to rebind as a different user, furthermore the server abruptly closed the connectionT)rq   rs   rp   r   r   r   r   r   r   r
   r   r)   rr   r_   r   r   r   r&  r   rf   r^   r(  rebind_poolr   r   )r   r   r   r   r   r   r   rC  s           r   rebindzConnection.rebind  sr    u:DA!! "	E 	# (!d&,#&)T4!@@&4#+"Au%}dootD:4??KK&4#(8% ==''999%5x@5"	E "	EB ""..011$DE"	E "	E6 . 9 'DDO"5)E=$//4H'88	97"	E "	Es%   B3F (E?F AFF  F)c                    t        t              rt        t        d|        | j                  r| j                  j                          d| _        | j                  5  | j                  rT| j                  sH| j                  s| j                  r0| j                  j                          d| _        d| _
        d| _        nc| j                  sWt               }t        t               rt        t         d|        | j#                  d||       | j                  j                          t        t              rt        t        dd       | j%                  d      cddd       S # 1 sw Y   yxY w)zUnbind the connected user. Unbind implies closing session as per RFC4511 (4.3)

        :param controls: LDAP controls to send along with the bind operation

        zstart UNBIND operation via <%s>NFzUNBIND request sent via <%s>unbindRequestz"done UNBIND operation, result <%s>T)rq   rs   rp   r   r   unbind_referral_cacher   r   r   r   r   r   closer   r   rY   rt   r   r   )r   rC  r   s      r   r   zConnection.unbind  s    u8$?""MM//1!! 	4yy!9!9t?R?RVZViVi##%&+#&+#+0([[*,x("@$G		/7H=##%5!E?F--d3!	4 	4 	4s   C4EE!r   c                    t        d      D cg c]  }|j                          }}t        t              rt	        t        d|        | j
                  r.|r,t        |      }t        t              rt	        t        d||        | j                  5  | j                          |st        g}n|t        k(  rt        g}t        |t              r|g}|	r&t        |t              r|j                  t                n|	rt        |t"              r
|t         fz  }t        |t$              rWt        t&              rt	        t&        d|t)        |      |        |
g }
nt        |
      }
|
j                  t+        |||             | j,                  r| j,                  j.                  r| j
                  r|D ]  }d|v r|j1                  d      d   }n|}| j,                  j.                  s5|j                         |vsH|| j,                  j.                  j2                  vskd|z   | _        t        t6              rt	        t6        d	| j4                  |        t9        | j4                         t;        |||||||||| j<                  n|| j>                  | j,                  r| j,                  j.                  nd| j,                  j@                  | j
                  
      }t        t&              rt	        t&        dtC        |      |        | jE                  | jG                  d||
            }g | _$        t        |t$              r$|}t        t&              rt	        t&        d||        n| jJ                  d   dk(  rtM        |      dkD  rdnd}|s6| jJ                  d   tN        fvr | j4                  s| jJ                  d   | _        t        t&              r=|D ]8  }|d   dk(  rt	        t&        d||        |d   dk(  s't	        t&        d||        : t        t              rt	        t        d|       | jQ                  |d      cddd       S c c}w # 1 sw Y   yxY w)a)  
        Perform an ldap search:

        - If attributes is empty noRFC2696 with the specified size
        - If paged is 0 and cookie is present the search is abandoned on
          server attribute is returned
        - If attributes is ALL_ATTRIBUTES all attributes are returned
        - If paged_size is an int greater than 0 a simple paged search
          is tried as described in
        - Cookie is an opaque string received in the last paged search
          and must be used on the next paged search response
        - If lazy == True open and bind will be deferred until another
          LDAP operation is performed
        - If mssing_attributes == True then an attribute not returned by the server is set to None
        - If auto_escape is set it overrides the Connection auto_escape
        ATTRIBUTES_EXCLUDED_FROM_CHECKzstart SEARCH operation via <%s>z;search base sanitized to <%s> for SEARCH operation via <%s>z>performing paged search for %d items with cookie <%s> for <%s>N;r   invalid attribute type r   	validatorr   z!SEARCH request <%s> sent via <%s>searchRequestz/async SEARCH response id <%s> received via <%s>typesearchResDoneTFr   r;  searchResEntryz,SEARCH response entry <%s> received via <%s>searchResRefz0SEARCH response reference <%s> received via <%s>z"done SEARCH operation, result <%s>r   ))r   lowerrq   rs   rp   r   rw   ru   r   _fire_deferredr   r   r   r%   listr.  r   tupleintrt   rk   rZ   r   schemar?  attribute_typesr   rr   rg   rH   r   r   custom_validatorrI   r   r   r   r   r~   r2   r   )r   search_basesearch_filtersearch_scopedereference_aliases
attributes
size_limit
time_limit
types_onlyget_operational_attributesrC  
paged_sizepaged_criticalitypaged_cookier   v#conf_attributes_excluded_from_checkattribute_nameattribute_name_to_checkr   r   return_valueentrys                          r   searchzConnection.search  s   > CWWwBx.yQqwwy.y+.yu8$?!+.K8$H[]hjno!! K	K!+_
~-,-
*l3(\
)jT.J!!"<=+
:u0M9<<
*c*x("bdnp|  ~J  qK  MQ  R#!H  $H~H 45F
T` ab{{t{{11d6F6F&0 	BNn,2@2F2Fs2KA2N/2@/{{)).E.K.K.MUx.x  ~U  ]a  ]h  ]h  ]o  ]o  ]  ]  ~*CF]*]&u-}dootL0AA	B '{'4'3':'1'1'1'1;F;Nt'7'7T_'+'7'7=A[[t{{'9'9d151M1M373C3CEG 8$HACYZaCbdhi,,TYYQY-Z[HDM(C('x("SUacgh'+{{6':o'MRUV^R_bcRctin#H(=nEU(U^b^m^m&*kk-&@DOx(!) k =,<<*XZ_aef"6]n<*\^ceij	k 5!E?N--lT-JWK	K K	K /zK	K K	Ks,   P7EP<P<."P<GP<'AP<<Qc           
      N   t        d      D cg c]  }|j                          }}t        t              rt	        t        d|        d| _        | j                  r,t        |      }t        t              rt	        t        d||        | j                  r| j                  j                  r| j                  rd|v r|j                  d      d   }n|}| j                  j                  j                  r~|j                         |vrl|| j                  j                  j                  vrJd|z   | _        t        t              rt	        t        d| j
                  |        t        | j
                        t        |t               rGd	| _        t        t              rt	        t        d| j
                  |        t#        | j
                        | j$                  5  | j'                          t)        |||| j*                  | j                  r| j                  j                  nd| j                  r| j                  j,                  nd| j                  
      }t        t.              rt	        t.        dt1        |      |        | j3                  | j5                  d||            }	g | _        t        |	t8              r$|	}
t        t.              rt	        t.        d|
|        n| j:                  d   dk(  r| j:                  d   t<        k(  rdnd}
|
s;| j:                  d   t<        t>        fvr | j
                  s| j:                  d   | _        t        t.              rt	        t.        d|	|        t        t              rt	        t        d|
       | jA                  |
      cddd       S c c}w # 1 sw Y   yxY w)z-
        Perform a compare operation
        rM  z start COMPARE operation via <%s>Nz3dn sanitized to <%s> for COMPARE operation via <%s>rN  r   rO  r   zvalue cannot be a sequencerP  z"COMPARE request <%s> sent via <%s>compareRequestz0async COMPARE response id <%s> received via <%s>rS  compareResponser   TFr;  z'COMPARE response <%s> received via <%s>z#done COMPARE operation, result <%s>)!r   rX  rq   rs   rp   r   r   rw   ru   r   r]  r?  r^  rr   rg   r   r&   rh   r   rY  r>   r   r_  rt   r?   r   r   r   r\  r   r3   r4   r   )r   dn	attributer$  rC  rl  rm  ro  r   r   rp  s              r   comparezConnection.comparem  s`    CWWwBx.yQqwwy.y+.yu94@B8$HSUWY]^;;4;;--$2B2Bi*3//#*>q*A'*3'{{!!116M6S6S6U  ^A  7A  F]  ei  ep  ep  ew  ew  eG  eG  FG";>U"Uu%}dootD(99e^,:DO5!E=$//4@'88!! 	<!'Iud>N>NfjfqfqPTP[P[PbPbw{  hl  hs  hs  HL  HS  HS  Hd  Hd  y}  KO  K[  K[  \G8$HBD[\cDdfjk55dii@PRY[c6deHDM(C('x("TVbdhi'+{{6':>O'OTXT_T_`hTi  nA  UAt  GL#H(=FY[oEp(py}  zI  zI&*kk-&@DOx("KXW[\5!E@,O--l;-	< 	<9 /z8	< 	<s   NF<NN$c           	      	   t        d      D cg c]  }|j                          }}t        d      D cg c]  }|j                          }}t        t              rt	        t        d|        d| _        t        |      }| j                  r,t        |      }t        t              rt	        t        d||        | j                  5  | j                          g }	|g }
nt        |t              rt        |      n|g}
d}|rF|D ]@  }|j                         dk(  s|}t        ||   t              rt        ||         n||   g}	 n n
t               }|sd}|	D cg c]  }t!        |       }	}t#        d	 |
|	z   g       ||<   ||   sGd
| _        t        t$              rt	        t$        d| j
                  |        t'        | j
                        | j(                  rW| j(                  j*                  r@| j                  r3||   D ]  }|j                         |vs|| j(                  j*                  j,                  vs9dt/        |      z   | _        t        t$              rt	        t$        d| j
                  |        t'        | j
                         |D ]  }d|v r|j1                  d      d   }n|}|j                         |vs1|| j(                  j*                  j2                  vsTd|z   | _        t        t$              rt	        t$        d| j
                  |        t5        | j
                         t7        ||| j8                  | j(                  r| j(                  j*                  nd| j(                  r| j(                  j:                  nd| j                        }t        t<              rt	        t<        dt?        |      |        | jA                  | jC                  d||            }g | _"        t        |tF        tH        fz         r$|}t        t<              rt	        t<        d||        nt        t<              rt	        t<        d||        | jJ                  d   dk(  r| jJ                  d   tL        k(  rdnd}|s6| jJ                  d   tL        fvr | j
                  s| jJ                  d   | _        t        t              rt	        t        d|       | jO                  |      cddd       S c c}w c c}w c c}w # 1 sw Y   yxY w)z
        Add dn to the DIT, object_class is None, a class name or a list
        of class names.

        Attributes is a dictionary in the form 'attr': 'val' or 'attr':
        ['val1', 'val2', ...] for multivalued attributes
        rM  CLASSES_EXCLUDED_FROM_CHECKzstart ADD operation via <%s>Nz/dn sanitized to <%s> for ADD operation via <%s>r   objectclassobjectClassc                     || vr| |gz   S | S r    )xys     r   <lambda>z Connection.add.<locals>.<lambda>  s    QRZ[Q[a1#g ab r   z"objectClass attribute is mandatoryr   zinvalid object class rN  r   rO  rP  zADD request <%s> sent via <%s>
addRequestz,async ADD response id <%s> received via <%s>z#ADD response <%s> received via <%s>rS  addResponser   TFr;  zdone ADD operation, result <%s>)(r   rX  rq   rs   rp   r   r   r   rw   ru   r   rY  r   r&   rZ  dictro   r   rr   ra   r   r]  object_classesr   r?  r^  rg   r:   r   r_  rt   r;   r   r   r   r%   r\  r   r2   r   )r   rv  object_classrd  rC  rl  rm   conf_classes_excluded_from_check_attributesattr_object_classparm_object_classobject_class_attr_nameattrobject_class_namern  ro  r   r   rp  s                      r   addzConnection.add  s    CWWwBx.yQqwwy.y+.y?STq?r+s!AGGI+s(+su5t<z*B8$HOQSUYZ!! F	<! "#$&!:D\Sa:bD$6iuhv!%'"' Dzz|}415.Ycdo  qG  eH  JX  ZYD=S1T,U  `k  lB  `C  _D)	 #f))6&N_ `lL!9 ` `289bdu  yJ  eJ  LN  3OK./56"Fu%}dootD*4??;;{{t{{11d6F6F)45K)L D%(..08XX]nvz  wB  wB  wI  wI  wX  wX  ^X*ACHYDZ*Z&u-}dootL24??CCD '2 
BNn,2@2F2Fs2KA2N/2@/.446>aaf}  FJ  FQ  FQ  FX  FX  Fh  Fh  gh*CF]*]&u-}dootL0AA
B $BT5E5E]a]h]ht{{GYGYnr  _c  _j  _j  C  J  J  [  [  pt  BF  BR  BR  SG8$H>@ST[@\^bc55diigW_6`aHDM(LC7$:;'x("PR^`dex("GSWX'+{{6':m'KPTP[P[\dPeiwPwt  ~C#H(=nEU(U^b^m^m&*kk-&@DO5!E<lK--l;MF	< F	< /z+s> !a+F	< F	<sJ   S$S)AS3?S3S.'B-S3"S38BS3?"S3"G8S3.S33S<c                 j   t        t              rt        t        d|        d| _        | j                  r,t        |      }t        t              rt        t        d||        | j                  5  | j                          | j                  rGd| _        t        t              rt        t        d| j                  |        t        | j                        t        |      }t        t              rt        t        dt        |      |        | j                  | j!                  d||            }g | _        t%        |t&        t(        fz         r$|}t        t              rt        t        d||        nt        t              rt        t        d	||        | j*                  d
   dk(  r| j*                  d   t,        k(  rdnd}|s6| j*                  d   t,        fvr | j                  s| j*                  d   | _        t        t              rt        t        d|       | j/                  |      cddd       S # 1 sw Y   yxY w)zE
        Delete the entry identified by the DN from the DIB.
        zstart DELETE operation via <%s>Nz2dn sanitized to <%s> for DELETE operation via <%s>connection is read-onlyr   z!DELETE request <%s> sent via <%s>
delRequestz/async DELETE response id <%s> received via <%s>z&DELETE response <%s> received via <%s>rS  delResponser   TFr;  z"done DELETE operation, result <%s>)rq   rs   rp   r   r   rw   ru   r   rY  r   rr   rb   r@   rt   rA   r   r   r   r   r%   r\  r   r2   r   )r   rv  rC  r   r   rp  s         r   deletezConnection.delete  s    u8$?B8$HRTVX\]!! 	<!~~";u%}dootD3DOODD&r*G8$HACYZaCbdhi55diigW_6`aHDM(LC7$:;'x("SUacghx("JHVZ['+{{6':m'KPTP[P[\dPeiwPwt  ~C#H(=nEU(U^b^m^m&*kk-&@DO5!E?N--l;9	< 	< 	<s   ,F3H))H2c                 
   t        d      D cg c]  }|j                          }}t        t              rt	        t        d|        d| _        | j                  r,t        |      }t        t              rt	        t        d||        | j                  5  | j                          | j                  rGd| _        t        t              rt	        t        d| j
                  |        t        | j
                        t        |t              sGd| _        t        t              rt	        t        d| j
                  |        t!        | j
                        |sGd| _        t        t              rt	        t        d| j
                  |        t!        | j
                        t               }|D ]  }| j"                  r| j"                  j$                  r| j                  rd	|v r|j'                  d	      d
   }n|}| j"                  j$                  j(                  r~|j                         |vrl|| j"                  j$                  j(                  vrJd|z   | _        t        t              rt	        t        d| j
                  |        t+        | j
                        ||   }	t        |	t,              r||	d
   t.        t0        t2        t4        d
dddfv r]t7        |	      dk7  rGd| _        t        t              rt	        t        d| j
                  |        t!        | j
                        |	g||<   ||	D ]v  }
t7        |
      dk7  s |
d
   t.        t0        t2        t4        d
dddfvs1d| _        t        t              rt	        t        d| j
                  |        t!        | j
                         |	||<    t9        ||| j:                  | j"                  r| j"                  j$                  nd| j"                  r| j"                  j<                  nd| j                        }t        t>              rt	        t>        dtA        |      |        | jC                  | jE                  d||            }g | _#        t        |tH        tJ        fz         r$|}t        t>              rt	        t>        d||        nt        t>              rt	        t>        d||        | jL                  d   dk(  r| jL                  d   tN        k(  rdnd}|s6| jL                  d   tN        fvr | j
                  s| jL                  d   | _        t        t              rt	        t        d|       | jQ                  |      cddd       S c c}w # 1 sw Y   yxY w)a7  
        Modify attributes of entry

        - changes is a dictionary in the form {'attribute1': change), 'attribute2': [change, change, ...], ...}
        - change is (operation, [value1, value2, ...])
        - operation is 0 (MODIFY_ADD), 1 (MODIFY_DELETE), 2 (MODIFY_REPLACE), 3 (MODIFY_INCREMENT)
        rM  zstart MODIFY operation via <%s>Nz2dn sanitized to <%s> for MODIFY operation via <%s>r  r   zchanges must be a dictionaryzno changes in modify requestrN  r   rO  r1   r	   r   zmalformed changezinvalid change listrP  z!MODIFY request <%s> sent via <%s>modifyRequestz/async MODIFY response id <%s> received via <%s>z&MODIFY response <%s> received via <%s>rS  modifyResponser   TFr;  z"done MODIFY operation, result <%s>))r   rX  rq   rs   rp   r   r   rw   ru   r   rY  r   rr   rb   r   r  rc   r   r]  r?  r^  rg   r&   r   r   r   r   r~   rD   r   r_  rt   rE   r   r   r   r%   r\  r   r2   r   )r   rv  changesrC  rl  rm  
changelistrn  ro  changechange_operationr   r   rp  s                 r   modifyzConnection.modify4  s    CWWwBx.yQqwwy.y+.yu8$?B8$HRTVX\]!! F	<!~~";u%}dootD3DOODDgt,"@u%}dootD%doo66"@u%}dootD%doo66J") 8;;4;;#5#5$:J:Jn,2@2F2Fs2KA2N/2@/{{))99>U>[>[>]  fI  ?I  Ne  mq  mx  mx  m  m  mO  mO  NO*CF]*]&u-}dootL0AA 0fn5&)
Tacq  tD  FG  IJ  LM  OP  HQ  ;Q6{a'*<&u-}dootL-doo>>28J~.,2 C(/0A59I!9LU_anp~  AQ  ST  VW  YZ  \]  U^  :^.CDO*51 #E=$//4 P"1$//"BBC 28J~.98: 'r:t7G7G_c_j_jI[I[pt  ae  al  al  AE  AL  AL  A]  A]  rv  DH  DT  DT  UG8$HACYZaCbdhi55diiQXZb6cdHDM(LC7$:;'x("SUacghx("JHVZ['+{{6':>N'NSWS^S^_gShlzSzt  AF#H(=nEU(U^b^m^m&*kk-&@DO5!E?N--l;MF	< F	< /zF	< F	<s   UJ>UG=UU&c                    t        t              rt        t        d|        d| _        | j                  rXt        |      }t        t              rt        t        d||        t        |      }t        t              rt        t        d||        | j                  5  | j                          | j                  rGd| _        t        t              rt        t        d| j                  |        t        | j                        t        ||||      }t        t              rt        t        dt        |      |        | j                  | j!                  d||            }g | _        t%        |t&        t(        fz         r$|}t        t              rt        t        d	||        nt        t              rt        t        d
||        | j*                  d   dk(  r| j*                  d   t,        k(  rdnd}|s6| j*                  d   t,        fvr | j                  s| j*                  d   | _        t        t              rt        t        d|       | j/                  |      cddd       S # 1 sw Y   yxY w)z\
        Modify DN of the entry or performs a move of the entry in the
        DIT.
        z"start MODIFY DN operation via <%s>Nz5dn sanitized to <%s> for MODIFY DN operation via <%s>z>relative dn sanitized to <%s> for MODIFY DN operation via <%s>r  r   z$MODIFY DN request <%s> sent via <%s>modDNRequestz2async MODIFY DN response id <%s> received via <%s>z)MODIFY DN response <%s> received via <%s>rS  modDNResponser   TFr;  z%done MODIFY DN operation, result <%s>)rq   rs   rp   r   r   rw   ru   r   rY  r   rr   rb   rF   rt   rG   r   r   r   r   r%   r\  r   r2   r   )	r   rv  relative_dndelete_old_dnnew_superiorrC  r   r   rp  s	            r   	modify_dnzConnection.modify_dn  s    u;TBB8$HUWY[_`!+.K8$H^`kmqr!! "	<!~~";u%}dootD3DOODD *"k=,WG8$HDF_`gFhjno55diiPWYa6bcHDM(LC7$:;'x("VXdfjkx("MxY]^'+{{6':o'MRVR]R]^fRgkyRyt  @E#H(=nEU(U^b^m^m&*kk-&@DO5!EBLQ--l;E"	< "	< "	<s   F6II!c                    t        t              rt        t        d|        d| _        | j                  5  | j                          d}| j                  j                  s|dk(  r| j                  j                  r6|| j                  j                  v r| j                  j                  |   d   dvs|dk(  r`t        |      }t        t              rt        t        dt        |      |        | j                  d||       d| _        d| _        g | _        d	}n*t        t              rt        t        d
t!        |      |        t        t              rt        t        d|       | j#                  |      cddd       S # 1 sw Y   yxY w)z?
        Abandon the operation indicated by message_id
        z start ABANDON operation via <%s>NFr   rS  )abandonRequestr9  rI  z#ABANDON request: <%s> sent via <%s>r  Tz\cannot abandon a Bind, an Unbind or an Abandon operation or message ID %s not found via <%s>z#done ABANDON operation, result <%s>)rq   rs   rp   r   r   rY  r   _outstandingr8   rt   r9   r   r   r   r   rr   r   r   )r   
message_idrC  rp  r   s        r   abandonzConnection.abandon  s|    u94@!! 	<! L}}))Z1_ MM..:A[A[3[`d`m`m`z`z  |F  aG  HN  aO  WI  aI  NX  \]  N]/
;G"8,H&KMdelMmostII.B"&DK$(DM$&DM#'L"5)E  $B  DG  HR  DS  UY  Z5!E@,O--l;-	< 	< 	<s   D9E77F c                 N   t        t              rt        t        d|        d| _        | j                  5  | j                          t        |||      }t        t              rt        t        dt        |      |        | j                  | j                  d||            }g | _        t        |t              r$|}t        t              rt        t        d||        nt        t              rt        t        d||        | j                  d   d	k(  r| j                  d
   t        k(  rdnd}|s6| j                  d
   t        fvr | j                  s| j                  d   | _        t        t              rt        t        d|       | j!                  |d      cddd       S # 1 sw Y   yxY w)z0
        Performs an extended operation
        z!start EXTENDED operation via <%s>N)	no_encodez#EXTENDED request <%s> sent via <%s>extendedReqz1async EXTENDED response id <%s> received via <%s>z(EXTENDED response <%s> received via <%s>rS  extendedRespr   TFr;  z$done EXTENDED operation, result <%s>rW  )rq   rs   rp   r   r   rY  rB   rt   rC   r   r   r   r   r\  r   r2   r   )r   request_namerequest_valuerC  r  r   r   rp  s           r   extendedzConnection.extended  si    u:DA!! 	K!(}PYZG8$HCE]^eEfhlm55diiwX`6abHDM(C('x("UWceijx("LhX\]'+{{6':n'LQUQ\Q\]eQfjxQxt  D#H(=nEU(U^b^m^m&*kk-&@DO5!EA<P--lT-J+	K 	K 	Ks   EFF$c                     t        t              rt        t        d|        | j                  5  d}d | _        | j
                  j                  st               | j
                  _        | j                  r=| j                  s1d| _
        d| _        d}t        t              rt        t        d|        nd| _
        | j                  r| j                          | j
                  j                  j                  |       r+| j                  j                   r|r| j#                          d}n| j                  j                   sd}t        t              rt        t        d|       | j%                  |      cd d d        S # 1 sw Y   y xY w)Nz"start START TLS operation via <%s>FTzdeferring START TLS for <%s>z%done START TLS operation, result <%s>)rq   rs   rp   r   r   r   tlsr\   r   r   r   r   r   r   r   r   rA  rB  r   )r   r   rp  s      r   r   zConnection.start_tls  s   u;TB!! 	< LDK;;??"%%yy!9!9+/(#' #u%=tD+0(;;IIK;;??,,T2t}}7I7I'002#'L++#'L5!EBLQ--l;7	< 	< 	<s   D=E44E=c                 &   t        t              rt        t        d|        d | _        | j                  5  d }| j
                  sd| _        	 | j                  t        k(  rt        | |      }n^| j                  t        k(  rt        | |      }n>| j                  t        k(  rddlm}  || |      }n| j                  dk(  rt        | |      }d| _        t        t              rt        t        d|       |cd d d        S # d| _        w xY w# 1 sw Y   y xY w)Nz"start SASL BIND operation via <%s>Tr	   )sasl_gssapir-   Fz%done SASL BIND operation, result <%s>)rq   rs   rp   r   r   r   r   r*   rM   r+   rL   r,   protocol.sasl.kerberosr  rN   )r   rC  r   r  s       r   r>  zConnection.do_sasl_bind.  s    u;TB!! 	F(((,%2**h6!.tX!>,,
:!0x!@,,6H!,T8!<,,7!+D(!;,1D)5!EBFK+	 	  -2D)!	 	s$   DA>C;	(D;	DDDc                    t        t              rt        t        d|        d | _        | j                  5  | j
                  sd| _        	 ddlm} | j                  j                  dd      \  }} |||| j                        }t        | j                  d|      }t        t              rt        t        d	|        | j                  | j                  d
||            }| j                   j"                  s| j%                  |      \  }}	n|d   }	d|	v r|	d   j'                  d      j                  d      }
d|
v rmt        | j                  d|      }t        t              rt        t        d|        | j                  | j                  d
||            }| j                   j"                  s| j%                  |      \  }}	n)t        t              rt        t        d|d   |        |d   }	|	d   t(        k(  rt        | j                  d||	d         }t        t              rt        t        d|        | j                  | j                  d
||            }| j                   j"                  s| j%                  |      \  }}	n,t        t              rt        t        d|d   |        |d   }	nd }	d| _        t        t              rt        t        d|	       |	cd d d        S 	 d d d        y # d| _        w xY w# 1 sw Y   y xY w)Nz"start NTLM BIND operation via <%s>Tr	   )
NtlmClientr:  r1   )	user_namedomainr   SICILY_PACKAGE_DISCOVERYz3NTLM SICILY PACKAGE DISCOVERY request sent via <%s>r9  r   server_credsasciirN  r)   SICILY_NEGOTIATE_NTLMz+NTLM SICILY NEGOTIATE request sent via <%s>z5NTLM SICILY NEGOTIATE response <%s> received via <%s>r   SICILY_RESPONSE_NTLMz/NTLM SICILY RESPONSE NTLM request sent via <%s>z)NTLM BIND response <%s> received via <%s>Fz%done SASL NTLM operation, result <%s>)rq   rs   rp   r   r   r   
utils.ntlmr  r   r?  r   r<   r   rt   r   r   r   rA  r   decoder2   )r   rC  r  domain_namer  ntlm_clientr   r   rD  r   sicily_packagess              r   r@  zConnection.do_ntlm_bindJ  s   u;TB!! 6	(((,%.27-1YY__T1-E*K",y_c_l_l"mK -T\\;UWbcG"8,H&[]ab#==diiW^`h>ijH==--$($5$5h$?	6!)!%/*0*@*G*G*P*V*VWZ*[!_4&4T\\CZ\g&hG*84 #H.[]a b'+'E'EdiiP]_fhpFq'rH#'==#5#5,0,=,=h,G	6#.x#8$'2ikstukv(,%.)1!%h/>A*8G]_j9?9O+Q#.x#8$'2cei$j+/+I+I$))TacjltJu+v'+}}'9'9040A0A(0KIAv'28'<(+H6acklmcnpt(u-5a[F!%,1D)u%FOm6	 6	(6	 6	b -2D)c6	 6	s$   K/
IK#'(K/#	K,,K//K8c                    | j                   j                  s| j                  5  | j                  stt	        t
              rt        t
        d|        | j                  }| j                  }| j                  }| j                  j                  |        || _        || _        || _	        d d d        y t	        t
              rt        t
        d|        | j                   j                  j                          y # 1 sw Y   y xY w)Nzrefreshing server info for <%s>z)refreshing server info from pool for <%s>)r   r&  r   r   rq   rs   rp   r   r   r   r   get_info_from_serverr(  )r   previous_responseprevious_resultprevious_entriess       r   rB  zConnection.refresh_server_info  s     }}##%% 
5{{"5)E#DdK(,%&*kkO'+}}$KK44T:$5DM"1DK$4DM
5 
5 5!EFMMM335
5 
5s   BC22C;c                    | j                   5  || j                  }t        |t              rt	        d|||      }t        |      }|xs t        }|j                  |      }|rb|j                         dk(  r/t        dg      d   }|j                  t        ||z   |z                |j                  t        ||z   |z                t        t              rt        t        d||        |cd d d        S 	 d d d        y # 1 sw Y   y xY w)NsearchResponse)
sort_orderr   -z"building LDIF output <%s> for <%s>)r   r   r   r&   rJ   rK   r   r   tellwriterl   rq   rs   rp   )	r   search_result
all_base64line_separatorr  r!  
ldif_linesldif_outputheaders	            r   response_to_ldifzConnection.response_to_ldif  s     !! 	$ $-8./?PZgqr
,Z8
!/!:7,11*={{})!0#!7!:%78OR`8`%abLL!3K.4PSa4a!bcu%C[RVW"!	 	$ %	 	 	s   CC;1C;;Dc           
         | j                   5  || j                  }t        |t              rt	               }g |d<   |D ]  d   dk(  st	               }	d   |	d<   |r.|st	        fdd   D              |	d<   nt	        d         |	d<   |r.|st	        fdd   D              |	d<   nt	        d         |	d	<   |d   j                  |	        t        t        u rt        |       t        j                  |d
||d
t        d      }
t        t              rt        t        d|
|        |r|j                  |
       |
cd d d        S 	 d d d        y # 1 sw Y   y xY w)NentriesrS  rU  rv  c              3   D   K   | ]  }d    |   s|d    |   f  yw)rd  Nr~  .0keyr   s     r   	<genexpr>z.Connection.response_to_json.<locals>.<genexpr>  sK       ;`be  DL  MY  DZ  [^  D_C,AWX[A\;]  ;`     rd  c              3   D   K   | ]  }d    |   s|d   |   f  yw)zraw:attributesraw_attributesNr~  r  s     r   r  z.Connection.response_to_json.<locals>.<genexpr>  sL       ?pjm  PX  Yi  Pj  kn  PoXN^E_`cEd?e  ?pr  r  rawT),z: )ensure_ascii	sort_keysindentcheck_circulardefault
separatorsz"building JSON output <%s> for <%s>)r   r   r   r&   r  r.  r   bytesrm   jsondumpsrn   rq   rs   rp   r  )r   r  r  r  sortr!  checked_attributesinclude_empty	json_dictrq  json_outputr   s              @r   response_to_jsonzConnection.response_to_json  s    !! %	#$ $-8 F	')	)$ - ;H'+;; $&.tnd-#06:  ;`iqr~i  ;`  7`l 36:8L;Q6Rl 3#0:>  ?pqy  {K  rL  ?p  ;p&6 7/3H=M4N/Oe!),33E:#;& %<#I."jjQU^duy  DO  \g  hu%C[RVWLL-"K%	# %	# 9	%	# %	# %	#s   <EC4EEc                 <   | j                   5  | j                  rot        |t              rt	        |d      }t        t              rt        t        d|        |j                  | j                  |||             |j                          d d d        y # 1 sw Y   y xY w)Nzw+z!writing response to file for <%s>)r  r  r  )r   r   r   r%   r   rq   rs   rp   
writelinesr  rK  )r   targetr  r  r  s        r   response_to_filezConnection.response_to_file  s~    
 !! 		}}fl3!&$/Fu%BDI!!$"7"7CUY"7"Z[		 		 		s   A<BBc           	      "   | j                   5  | j                  r| j                  sd| _        t        t              r2t        t        d| j                  | j                  | j                  |        	 | j                  r| j                  d       | j                  rn| j                  d      s\d| j                  rd| j                  z   ndz   }t        t              rt        t        d||        | j                          t        |      | j                  r| j                  d| j                   	       |8| j"                  j$                  s"| j"                  j&                  t(        t*        fv s:| j"                  j,                  s"| j"                  j&                  t.        t*        fv s|r| j1                          d| _        d d d        y # t2        $ r'}t        t              rt        t        d||         d }~ww xY w# d| _        w xY w# 1 sw Y   y xY w)
NTz?executing deferred (open: %s, start_tls: %s, bind: %s) for <%s>Fr   z!deferred start_tls not successfulr   r   r   )r   rC  )r   r   r   rq   rs   rp   r   r   r   r   r   r   rr   r   rj   r   r   r   infoget_infor.   r0   r]  r/   rB  rd   )r   	read_infor   es       r   rY  zConnection._fire_deferred  s   !! 	5yy!9!9+/(u%`bfbubuw{  xP  xP  RV  Re  Re  gk  l5**		5	9//#~~u~E$Gfjfufu5SWSbSbKb{}$~E*51 #E=% F KKM"3E"::**		54CVCV	W!)4;;3C3CH\H\adfi`jHjtxtt  uG  uG  LP  LW  LW  L`  L`  ek  mp  dq  Lq  w@002 05D,3	5 	5( * "5)E=!T:
 05D,3	5 	5s=   A#H1EG6H	G6"G11G66G99	HHHc                     | j                   r7| j                  s+| j                  | j                   | j                        | _        | j                  S r   )r   r   _get_entriesr   r   s    r   r  zConnection.entries  s6    ==== $ 1 1$-- N}}r   c                    | j                   5  ddlm}m} g }|D ]=  }|d   dk(  st	        |d   j                               }||vs-|j                  |       ? |j                  d        g }|D ]!  }	|D ]	  }
|
|	k\  s	  |j                  |	       # g }|D ]u  }	 || j                  j                        }|t        |	      z  }|j                  |	|| j                  j                  r || ||d	   |d
   |	      n || |dd|	      f       w g }|D ]  }|d   dk(  st	        |d   j                               }|D ]1  }||d   k  s|d   j                  |      }|j                  |        ] dt        |      z   | _        t!        t"              rt%        t"        | j                  |        t'        | j                         	 d d d        |S # 1 sw Y   S xY w)Nr	   )	ObjectDefReaderrS  rU  rd  c                     t        |        S r   )r~   )r  s    r   r  z)Connection._get_entries.<locals>.<lambda>%  s    #a& r   )r  )r]  basefilter)rd  r   r   zattribute set not found for )r   r   r  r  setkeysr.  r  r   r]  rZ  r   rA  _create_entryr   r   rq   rr   rp   re   )r   search_responsesearch_requestr  r  	attr_setsr   resp_attr_setunique_attr_setsattr_set
unique_setobject_defs
object_defr  rq  s                  r   r  zConnection._get_entries  sN   !! (	?, I+ 8F#'77$'(>(C(C(E$FM$I5!((7	8
 NN0N1!% 6"2 6J!X-6 %++H56 K, %&dkk.@.@A
d8n,
""H$. HL  HU  HU  HZ  HZF4^F=SUcdlUm  {C  %D  `f  gk  mw  y{  }  LT  `U$V %% G+ ?F#'77$'(>(C(C(E$FM&1 	?
(JqM9$.qM$?$?$IE#NN51!		? +I3}K]*]&u-t=-doo>>?9(	?T U(	?T s*   G G7G?B!G!)GA;GG)F)TN)NNNNNTNr   )NNN)TNN)T)NFNNN)FNr{   TNTT)Fr{   T))r   
__module____qualname____doc__r   r   r   r   r   r   r  r   propertyr!  setterr  r/  r7  r   rG  r   r   r   rr  rx  r  r  r  r  r  r  r   r>  r@  rB  r  r  r  rY  r  r  r~  r   r   r   r   z   s   >B , $!% $  $"&!$ "'# "!%)-$)!! $ $!"&=yFv+@"H%N P P ]]0 0
  $ #sGl "" $ $/Ed 4F $#/*/!& sKr 	:<| 	]<B *<^ [<@ !%#7<v <F  $	 KD<B8;z6, (,$)(,$( $6 #'+ !" $,0'+.#d # !"	 5:  +r   r   )r  r   r   osr   	threadingr   	functoolsr   r  r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   resultsr2   r3   r4   r   r5   poolingr6   r   r7   operation.abandonr8   r9   operation.addr:   r;   operation.bindr<   r=   operation.comparer>   r?   operation.deleter@   rA   operation.extendedrB   rC   operation.modifyrD   rE   operation.modifyDnrF   rG   operation.searchrH   rI   protocol.rfc2849rJ   rK   protocol.sasl.digestMd5rL   protocol.sasl.externalrM   protocol.sasl.plainrN   strategy.syncrO   strategy.safeSyncrP   strategy.safeRestartablerQ   strategy.mockAsyncrR   strategy.asynchronousrS   strategy.reusablerT   strategy.restartablerU   strategy.ldifProducerrV   strategy.mockSyncrW   strategy.asyncStreamrX   operation.unbindrY   protocol.rfc2696rZ   r  r[   r  r\   
exceptionsr]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   
utils.convrk   rl   rm   rn   ro   	utils.logrp   rq   rr   rs   rt   ru   rv   utils.dnrw   utils.port_validatorsrx   r=  r   r   r   objectr   r~  r   r   <module>r5     s;  0      0 0 0 0 0 0 0 0 0 0 0 O N +   J > A J G M G O G A 5 2 , ( 0 > 2 1 0 6 8 0 6 / 3 " @ @ @ @ d c o o o  < &'#"$ 
 % !	# 	K Kr   