
    =OOf&                         d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
mZ ddlmZmZ ddlmZmZmZmZ ddlm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#d Z$d Z%d Z&ddZ'd Z(d Z)y)
    )PyAsn1Error   )SEQUENCE_TYPESSTRING_TYPESget_config_parameter)LDAPControlErrorLDAPAttributeErrorLDAPObjectClassErrorLDAPInvalidValueError)ControlsControl)to_raw
to_unicodeescape_filter_charsis_filter_escaped)find_attribute_validatorc                 L    	 t        |       S #  | j                  dd      cY S xY w)z Attempt to convert value to a string. If that would error, convert it to normalized unicode.
    Python 3 string conversion handles unicode -> str without issue, but python 2 doesn't.
    asciibackslashreplace)strencode)vals    W/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/protocol/convert.pyto_str_or_normalized_unicoder   "   s)    73x7zz'#566s   
 #c                     	 t        | d         | d   D cg c]  }t        |       c}dS c c}w # t        $ r4 t        | d         | d   D cg c]  }t        |       nc c}w c}dcY S w xY w)Ntypevals)r   valuesr   r   bytes)	attributer   s     r   attribute_to_dictr#   ,   st    eIf-.yY_O`:a3s8:abb:a eIf-.QZ[aQb:c#5::c:cdde'   2 -2 2 A/A"!A/.A/c                 T    t               }| D ]  }t        |      }|d   ||d   <    |S )Nr   r   )dictr#   )
attributesattributes_dictr"   attribute_dicts       r   attributes_to_dictr*   3   s@    fO K	*952@2Jv./K     c                     t        | t              r | r| D cg c]  }|st        |       c}S d S | ,| j                         r| D cg c]  }|st        |       c}S d S c c}w c c}w N)
isinstancelistr   hasValue)	referralsreferrals     r   referrals_to_listr3   ;   s    )T"ajy]8T\,X6]tpttajav  |E  |N  |N  |Py]8T\,X6]  	Z  VZ  	Z ^]s   A!A!A&A&c                 L    | r| D cg c]  }|st        |       c}S d S c c}w r-   r   search_refs
search_refs     r   search_refs_to_listr9   B   s'    ep{aV`(4azvzza   !!c                 L    | r| D cg c]  }|st        |       c}S d S c c}w r-   )r   r6   s     r   search_refs_to_list_fastr<   F   s%    S^[OzJJz"OhdhhOr:   c                 t    t        | d         | d   #| d   j                         rt        | d         dS d dS )N	mechanismcredentials)r>   r?   )r   r0   r!   )sasls    r   sasl_to_dictrA   J   sp    T+./_cdq_r_~  DH  IV  DW  D`  D`  DbtMGZA[  m  m  hl  m  mr+   c                     | j                         dk(  rt        | d         nd | j                         dk(  rt        | d         dS d dS )Nsimpler@   )rC   r@   )getNamer   rA   )authentication_choices    r   authentication_choice_to_dictrF   N   s    >S>[>[>]ai>ic/9:os  mB  mJ  mJ  mL  PV  mV  ~J  K`  ag  Kh  ~i  a  a  \`  a  ar+   c                     	 t        | d         | d   D cg c]  }t        |       c}dS c c}w # t        $ r4 t        | d         | d   D cg c]  }t        |       nc c}w c}dcY S w xY w)Nr   r   )r   valuer    )modificationrH   s     r   partial_attribute_to_dictrJ   R   su    nL01UabhUi<jESZ<jkk<j nL01WcdjWk<leU5\<l<lmmnr$   c                 <    t        | d         t        | d         dS )N	operationrI   )rL   r"   )intrJ   )changes    r   change_to_dictrO   Y   s$    VK01@YZ`aoZp@qrrr+   c                 >    | D cg c]  }t        |       c}S c c}w r-   )rO   )changesrN   s     r   changes_to_listrR   ]   s    189vN6"999   c                 >    | D cg c]  }t        |       c}S c c}w r-   r5   )r'   r"   s     r   attributes_to_listrU   a   s    EOP	(3PPPrS   c                    	 t        | d         t        t        | d               dS # t        $ rX 	 t        | d         t        t        | d               dcY S # t        $ r" t        | d         t        | d         dcY cY S w xY ww xY w)NattributeDescassertionValue)r"   rH   )r   r   	Exceptionr!   )avas    r   ava_to_dictr[   e   s    c _!56ATUXY\]mYnUoApqq c	c!$S%9!:EXY^_bcs_tYuEvww 	c!$S%9!:U3O_K`Eabb	ccs,   %( 	B	%AB	&B B	BB	c                 t    | d   r| d   nd| d   r| d   D cg c]  }| c}nd| d   r| d   dS ddS c c}w )Ninitial anyfinal)r]   r_   r`    )	substringmiddles     r   substring_to_dictrd   o   s    /8/Cy+  @I  JO  @PjstyjzT{`fU[T{  VX  yB  CJ  yK  cl  mt  cu  T  T  QS  T  TT{s   	5c                     t               }| D ]2  }|d   d   }||vrg ||<   ||   j                  |d   |d   d   f       4 |S )Nr"   r   rL   rH   )r&   append)rQ   preparedrN   attribute_names       r   prepare_changes_for_requestri   s   sj    vH ],V4)')H^$ '')<f[>QRY>Z([\	]
 Or+   c                    | syt        | t              st        d      t               }t	        |       D ]  \  }}t        |t
              r|j                  ||       )t        |      dk(  rMt        |d   t              r:t               }|d   |d<   |d   |d<   |d   |d   |d	<   |j                  ||       t        d
       |S )zcontrols is a sequence of Control() or sequences
    each sequence must have 3 elements: the control OID, the criticality, the value
    criticality must be a boolean
    Nzcontrols must be a sequence      r   controlTypecriticalityr   controlValueztcontrol must be a sequence of 3 elements: controlType, criticality (boolean) and controlValue (None if not provided))	r.   r   r	   r   	enumerater   setComponentByPositionlenbool)controlsbuilt_controlsidxcontrolbuilt_controls        r   build_controls_listry   }   s     h/<==ZN!(+ [Wgw'11#w?\Q:gaj$#?#IM+21:M-(+21:M-(qz%07
n-11#}E"  $Z  [  [[ r+   c                 v    t        |      }|rd|v rt        |      st        |      }t        | |||||      }|S )N\)	validatorcheck_names)r   r   r   validate_attribute_value)schemanamerH   auto_escapeauto_encoder|   r}   s          r   validate_assertion_valuer      sC    uE5=!25!9'.E$VT5+QZhstELr+   Nc                 :   t        d      D cg c]  }|j                          }}t        d      D cg c]  }|j                          }}t        d      }	t        d      D cg c]  }|j                          }
}| rc| j                  rVd|v r|j                  d      d   }|rh| j                  r\|j                         dk(  rIt        |      j                         |vrt        |      | j                  vrt        dt        |      z         |r.|| j                  vr |j                         |vrt        d	|z         t        | ||      } ||      }|d
u r'	 |dd dk(  r|d   dk(  rt        |dd       } ||      }|d
u rt        d|d|d      |dur|}|rF|| j                  v r| j                  |   j                  |	v s|j                         |
v rt        |      }t        |      S c c}w c c}w c c}w # t        $ r t        d|d|d      w xY w)NCLASSES_EXCLUDED_FROM_CHECKATTRIBUTES_EXCLUDED_FROM_CHECKUTF8_ENCODED_SYNTAXESUTF8_ENCODED_TYPES;r   objectclassz(invalid class in objectClass attribute: zinvalid attribute Fr   zb''zvalue 'z' non valid for attribute 'T)r   lowerattribute_typessplitobject_classesr   r   r   r
   r   r   rY   r   syntax)r   r   rH   r   r|   r}   v conf_classes_excluded_from_check#conf_attributes_excluded_from_checkconf_utf8_syntaxesconf_utf8_types	validateds               r   r~   r~      sC   ;OPm;n'oa	'o$'o>RSs>t*u1779*u'*u-.EF*>?S*TUQqwwyUOU&(($;::c?1%D600TZZ\]5R% &&(0PPU_`eUfnt  oD  oD  VD*+UX[\aXb+bccT)?)??DJJLX{D{$%9D%@AA0yII!%(IE!oQqzT)eRjC.? &uQr{ 3$-e$4	 E!+]bdh,ijj$&!TV%;%;;@V@VW[@\@c@cgy@y  C  I  I  K  O^  ^u%E%=; (p*uU" ! o/afhl0mnnos   G/G4%G9&G> >Hc                    d}g }t        |       } |t        |       k  r| |   dk(  s| |   dk(  r<|t        |       dz
  k  r+	 |j                  t        | |dz   |dz    d             |dz  }n>t
        t        ur|j                  | |          n|j                  t        | |                |dz  }|t        |       k  rt
        t        urt        |      S dj                  d	 |D              S # t        $ r |j                  d       Y _w xY w)
Nr   \   r{   r   rl   rk      r^   c              3   2   K   | ]  }t        |        y wr-   )chr).0xs     r   	<genexpr>z-prepare_filter_for_sending.<locals>.<genexpr>   s     ,!s1v,s   )	r   rr   rf   rM   
ValueErrorr   r!   ordjoin)
raw_stringiintss      r   prepare_filter_for_sendingr      s   	AD
#J
c*o
qMR:a=D#8a#j/TUBU>U C
1q5!a% 8"=>Q %JqM*C
1./	Q c*o
 %T{ww,t,,,   B s    )C+ +DDc                 <    t        | t              rt        |       S | S r-   )r.   r   r   )r   s    r   prepare_for_sendingr      s    !+J!E6*U:Ur+   )NF)*__doc__pyasn1.errorr   r^   r   r   r   core.exceptionsr	   r
   r   r   protocol.rfc4511r   r   
utils.convr   r   r   r   protocol.formatters.standardr   r   r#   r*   r3   r9   r<   rA   rF   rJ   rO   rR   rU   r[   rd   ri   ry   r   r~   r   r   ra   r+   r   <module>r      s   0 % A A o o 0 S S C7eZ{imans:QcT:B-0Vr+   