
    ?De                         d Z ddlZddlmZmZ ddlmZ ddlmZ ddgZ	 G d dee          Z
e
ej        j        e
j        <    G d	 d          ZdS )
zx
ldap.controls.openldap - classes for OpenLDAP-specific controls

See https://www.python-ldap.org/ for project details.
    N)ValueLessRequestControlResponseControl)univ)decoderSearchNoOpControlSearchNoOpMixInc                   J    e Zd ZdZdZd	dZ G d dej                  Zd Z	dS )
r   z
  No-op control attached to search operations implementing sort of a
  count operation

  see https://www.openldap.org/its/index.cgi?findid=6598
  z1.3.6.1.4.1.4203.666.5.18Fc                     || _         d S )Ncriticality)selfr   s     /./ldap/controls/openldap.py__init__zSearchNoOpControl.__init__   s    "D    c                       e Zd ZdS )(SearchNoOpControl.SearchNoOpControlValueN)__name__
__module____qualname__ r   r   SearchNoOpControlValuer       s        Dr   r   c                     t          j        ||                                           \  }}t          |d                   | _        t          |d                   | _        t          |d                   | _        d S )N)asn1Specr         )r   decoder   int
resultCodenumSearchResultsnumSearchContinuations)r   encodedControlValuedecodedValue_s       r   decodeControlValuez$SearchNoOpControl.decodeControlValue#   sh    ^$7A\A\A^A^___NL,q/**DOQ00D"%l1o"6"6Dr   N)F)
r   r   r   __doc__controlTyper   r   Sequencer   r$   r   r   r   r   r      st          ,+# # # #	 	 	 	 	t} 	 	 	7 7 7 7 7r   c                   *    e Zd ZdZej        ddfdZdS )r   z
  Mix-in class to be used with class LDAPObject and friends.

  It adds a convenience method noop_search_st() to LDAPObject
  for easily using the no-op search control.
  z(objectClass=*)c           
         	 |                      |||dg|t          d          g          }|                     |d|          \  }}}}d |D             }|r|d         j        |d         j        fS d	S # t
          j        t
          j        t
          j        t
          j	        f$ r}	| 
                    |           |	d }	~	ww xY w)
Nz1.1Tr   )	filterstrattrlisttimeoutserverctrlsr   )allr-   c                 <    g | ]}|j         t          j         k    |S r   )r&   r   ).0cs     r   
<listcomp>z2SearchNoOpMixIn.noop_search_st.<locals>.<listcomp>I   s3       =+777 	
777r   r   )NN)
search_extr   result3r   r    ldapTIMEOUTTIMELIMIT_EXCEEDEDSIZELIMIT_EXCEEDEDADMINLIMIT_EXCEEDEDabandon)
r   basescoper+   r-   msg_idr#   search_response_ctrlsnoop_srch_ctrles
             r   noop_search_stzSearchNoOpMixIn.noop_search_st5   s    &48889   f %)LLAgL$N$N!a!! &  n
 
 a 1.2C2ZZZ{! l


	    ll6gs   AA4 41C%B<<CN)r   r   r   r%   r6   SCOPE_SUBTREErB   r   r   r   r   r   -   s@          &*%7BS\^      r   )r%   ldap.controlsr6   r   r   pyasn1.typer   pyasn1.codec.berr   __all__r   controlsKNOWN_RESPONSE_CONTROLSr&   r   r   r   r   <module>rJ      s         A A A A A A A A       $ $ $ $ $ $ 7 7 7 7 7/ 7 7 7, HY %&7&C D$ $ $ $ $ $ $ $ $ $r   