o
    ßý°j&  ã                   @   sÂ   d Z ddlmZmZ ddlZddlZddlmZmZm	Z	m
Z
 ddlmZ ddlmZ d"d	d
„Zd#dd„Zd$dd„Zd$dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd%dd„Zdd„ Zd d!„ ZdS )&Ú
é    )Ú	b64encodeÚ	b64decodeNé   )ÚSEQUENCE_TYPESÚSTRING_TYPESÚNUMERIC_TYPESÚget_config_parameter)ÚCaseInsensitiveDict)ÚLDAPDefinitionErrorFc                 C   s.  t dƒ}t dƒ}t dƒ}t dƒ}t| tƒrt| ƒ} t| ttfƒr†|rT|du r(|}z|  |¡W S  tyS   |D ]}z
|  |¡W    Y S  tyL   Y q7w td|  ƒ‚w |du rZ|}z|  |¡W S  ty…   |D ]}z
|  |¡W    Y S  ty~   Y qiw td|  ƒ‚w t| t	ƒr�| S td| j
j| f ƒ‚)	zƒTry to convert bytes (and str in python2) to unicode.
     Return object unmodified if python3 string, else raise an exception
    ÚDEFAULT_CLIENT_ENCODINGÚDEFAULT_SERVER_ENCODINGÚADDITIONAL_SERVER_ENCODINGSÚADDITIONAL_CLIENT_ENCODINGSNz,Unable to convert server data to unicode: %rz,Unable to convert client data to unicode: %rz(Unable to convert type %s to unicode: %r)r	   Ú
isinstancer   ÚstrÚbytesÚ	bytearrayÚdecodeÚUnicodeDecodeErrorÚUnicodeErrorr   Ú	__class__Ú__name__)ÚobjÚencodingÚfrom_serverÚconf_default_client_encodingÚconf_default_server_encodingÚ conf_additional_server_encodingsÚ conf_additional_client_encodings© r    úƒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/ldap3/utils/conv.pyÚ
to_unicode#   sJ   
ÿúÿú
r"   úutf-8c                 C   sL   t | tƒr	t| ƒ} t | tƒs$t | tƒrdd„ | D ƒS t | tƒr$|  |¡S | S )z*Tries to convert to raw bytes from unicodec                 S   s   g | ]}t |ƒ‘qS r    )Úto_raw)Ú.0Úelementr    r    r!   Ú
<listcomp>U   s    zto_raw.<locals>.<listcomp>)r   r   r   r   r   r   Úencode)r   r   r    r    r!   r$   N   s   




r$   c                 C   s~   |du rt dƒ}z&t| |ƒ} |  dd¡}| dd¡}| dd¡}| d	d
¡}| dd¡}W |S  ty>   tt| ƒƒ}Y |S w )z$ Escape chars mentioned in RFC4515. NÚDEFAULT_ENCODINGú\z\5cÚ*z\2aú(z\28ú)z\29ú z\00)r	   r"   ÚreplaceÚ	ExceptionÚescape_bytes)Útextr   Úescapedr    r    r!   Úescape_filter_chars[   s   
üür4   c                 C   sr   |du rt dƒ}t| |ƒ}| dd¡}| dd¡}| dd¡}| dd¡}| d	d
¡}| dd¡}| dd¡}|S )z& unescape chars mentioned in RFC4515. Nr)   s   \5có   \s   \5Cs   \2aó   *s   \2As   \28ó   (s   \29ó   )s   \00ó    )r	   r$   r/   )r2   r   Ú	unescapedr    r    r!   Úunescape_filter_charsn   s   
r;   c                 C   sv   | r1t turt| t ƒrt| dd�} d dd„ | D ƒ¡}nt| tƒr&|  d¡} d dd„ | D ƒ¡}nd}|r9d| S dS )zY Convert a byte sequence to a properly escaped for LDAP (format BACKSLASH HEX HEX) stringr#   )r   r*   c                 S   ó   g | ]}d t |ƒ ‘qS ©z%02x)Úint©r%   Úbr    r    r!   r'   „   ó    z escape_bytes.<locals>.<listcomp>c                 S   r<   r=   )Úordr?   r    r    r!   r'   ˆ   rA   Ú )r   r   r   r   ÚjoinÚunicoder(   )Úbytes_valuer3   r    r    r!   r1   ~   s   


r1   c                 C   s   t tur| S |  ¡ S ©N)r   r   r   )Úvaluer    r    r!   Úprepare_for_stream�   s   rI   c              
   C   sH   z	t dt| ƒd�W S  ty# } ztdt| ƒ d t|ƒ ƒ‚d }~ww )NÚbase64)r   Úencodedzunable to encode z - )Údictr   r0   r   r   )r   Úer    r    r!   Újson_encode_b64–   s   €ÿrN   c                 C   s    |   ¡ D ]I\}}t|tƒrt|ƒ qt|tƒrt|jƒ qt|tƒrGt|ƒD ]\}}t|tƒr4t|ƒ q&t|tƒr?t|jƒ q&t|ƒ||< q&qt|ƒ| |< qd S rG   )	Úitemsr   rL   Úcheck_json_dictr
   Ú_storer   Ú	enumerateÚformat_json)Ú	json_dictÚkÚvÚirM   r    r    r!   rP   ž   s   






úòrP   c                 C   sF   t | dƒr!tt|  ¡ ƒƒdkr!d|  ¡ v r!d|  ¡ v r!t| d ƒS | S )NÚkeysr   r   rK   )ÚhasattrÚlenÚlistrX   r   )r   r    r    r!   Ú	json_hook²   s   6r\   c              	   C   sþ   t | tƒr| jS t | tjƒrt| ƒS t | tƒr| S t | tjƒr)|r%|  ¡ S t| ƒS ttu r4t | t	ƒr4| S z&tturNt | tƒrFt| ddd�W S t
dt| ƒ ƒ‚t | tƒrV| W S t| ƒW S  ttfye   Y nw ztt| ƒƒW S  tyv   Y nw t
dt| ƒ ƒ‚)Nr#   Ústrict)Úerrorszunable to serialize )r   r
   rQ   Údatetimer   r>   Ú	timedeltaÚ	isoformatr   Úlongr   rE   Ú	TypeErrorr   rN   r0   )r   Ú
iso_formatr    r    r!   rS   º   s<   





ÿÿrS   c                    sD   t ˆ ƒttur	tp
tkstdƒ‚t‡ fdd„dD ƒƒo!t dˆ ¡ S )Nzunicode input expectedc                 3   s   � | ]}|ˆ vV  qd S rG   r    )r%   Úc©r2   r    r!   Ú	<genexpr>è   s   € z$is_filter_escaped.<locals>.<genexpr>z()* z \\([^0-9a-fA-F]|(.[^0-9a-fA-F])))Útyper   r   rE   Ú
ValueErrorÚallÚreÚsearchrf   r    rf   r!   Úis_filter_escapedä   s   $rm   c                 C   s¢  t ƒ }d}zÀt| tƒr`|t| ƒk r_| | dkrEt| ƒ|d kr?z| t| |d |d … dƒ¡ |d7 }W q ty>   Y nw | d¡ nt| | ƒ}|D ]}| |¡ qM|d7 }|t| ƒk sn\t| tt fƒr·|t| ƒk rÁ| | dkr¡t| ƒ|d kr›z| t| |d |d … dƒ¡ |d7 }W qg tyš   Y nw | d¡ n| | | ¡ |d7 }|t| ƒk smW t|ƒS W t|ƒS W t|ƒS W t|ƒS  t	yÐ   t
dƒ‚w )	Nr   r*   r   é   é   é   é\   z*badly formatted LDAP byte escaped sequence)r   r   r   rZ   Úappendr>   ri   r$   r   r0   r   )r2   ÚbytesequencerW   Úrawre   r    r    r!   Úldap_escape_to_bytesë   s\   
 ÿò€ ÿôï€ ðýÿru   )NF)r#   rG   )F)Ú__doc__rJ   r   r   r_   rk   rC   r   r   r   r	   Úutils.ciDictr
   Úcore.exceptionsr   r"   r$   r4   r;   r1   rI   rN   rP   r\   rS   rm   ru   r    r    r    r!   Ú<module>   s&    

+


*