o
    Žõ±je  ã                   @   st   d dl mZ d dlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZ dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ ZdS )é   )ÚFilter)ÚLDAPBaseé    )ÚObjectIdentifier)r   ÚFiltersÚAttributeDescriptionÚSubstringFilterÚMatchingRuleAssertionÚ
SubstringsÚ	Substringc                 C   sJ  | d dkr$| d d…   d¡\}}tdt| ¡ | ¡ t|ƒddœƒiƒS |dkr2tdt|  ¡ ƒiƒS | d¡rV| d¡rVtdt|  ¡ t	t
d	t|d
d… ƒiƒgƒdœƒiƒS | d¡du rwtdt|  ¡ t	t
dt|d
d … ƒiƒgƒdœƒiƒS | d¡du r˜tdt|  ¡ t	t
dt|d d… ƒiƒgƒdœƒiƒS td|  ¡ t|ƒdœiƒS )Néÿÿÿÿú:ÚextensibleMatchF)ÚmatchingRuleÚtypeÚ
matchValueÚdnAttributesÚ*ÚpresentÚ
substringsÚanyr   )r   r   TÚfinalÚinitialÚequalityMatch©ÚattributeDescÚassertionValue)Úsplitr   r	   ÚencodeÚrfc4515_encoder   Ú
startswithÚendswithr   r
   r   )ÚattrÚvalueÚnameÚoid_raw© r&   úˆ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/msldap/protocol/query.pyÚequality	   sj   üÿ	ÿÿÿþÿÿÿþÿÿÿþÿþÿr(   c                 C   sî   | j dkr7| jdkrt| j| jƒS | jdkrd}n| jdkr!d}n| jdkr(d}t|| j ¡ t| jƒd	œiƒS | j d
krs| jdksF| jdkrc| jdkrNd}n| jdkrUd}t|tdd„ | j	D ƒƒiƒS | jdkrutdt
| j	d ƒiƒS d S d S )NÚfilterú=z<=ÚlessOrEqualz>=ÚgreaterOrEqualz~=ÚapproxMatchr   Úgroupú&ú|ÚandÚorc                 S   s   g | ]}t |ƒ‘qS r&   )Úquery_syntax_converter_inner)Ú.0Úfr&   r&   r'   Ú
<listcomp>c   s    z0query_syntax_converter_inner.<locals>.<listcomp>ú!Únotr   )r   Úcompr(   r"   Úvalr   r   r   r   Úfiltersr3   )ÚftrÚkeyr&   r&   r'   r3   G   s<   




þÿ


ÿ
þôr3   c                 C   s   t  | ¡}t|ƒS )z€
	Converts and LDAP query string into a ASN1 Filter object.
	warning: the parser has a name collision with the asn1 strucutre!
	)ÚLFÚparser3   )Úldap_query_stringÚfltr&   r&   r'   Úquery_syntax_converterk   s   
rB   c                 C   s
   t  | ¡S )N)r   Úescape)Útextr&   r&   r'   Úescape_filter_charst   s   
rE   c                 C   s¢   d}d}|t | ƒk rO| | dkr=|t | ƒd k r=z|t| |d |d … dƒ ¡ 7 }|d7 }W n ty<   |d7 }Y n	w || |  ¡ 7 }|d7 }|t | ƒk s
|S )	Nr   ó    ú\é   r   é   é   ó   \)ÚlenÚintÚto_bytesÚ
ValueErrorr   )r#   ÚiÚbyte_strr&   r&   r'   r   w   s   "ÿ÷
r   N)Úldap_filterr   r>   Úldap_filter.filterr   Úasn1crypto.corer   Úmsldap.protocol.messagesr   r   r   r	   r
   r   r(   r3   rB   rE   r   r&   r&   r&   r'   Ú<module>   s    $>$	