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 )	zTry 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}zt| 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rt| |d krz|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&    

+


*