a
    œcl_¬  ã                   @   sØ   d dl Z d dlZd dl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ZdZdZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Z G d$d%„ d%eƒZ!G d&d'„ d'eƒZ"dS )(é    N)ÚTestCaseó   Jó   kó   `ó   aó   €ó   £ó   có   dó    ó   ó   1ó   "ó   ó   ó   ó   
ó   0c                 C   s(   |du r| t dƒ S | t t|ƒƒ | S )z Encode an ASN.1 BER element. Nr   )Úencode_lengthÚlen)Úber_typeÚdata© r   ú6/usr/lib/python3/dist-packages/samba/tests/ldap_raw.pyÚencode_elementE   s    r   c                 C   sl   | dkrd|   dd¡ S | dkr0d|   dd¡ S | dkrHd	|   d
d¡ S | dkr`d|   dd¡ S |   dd¡S )z- Encode the length of an ASN.1 BER element.  iÿÿÿ ó   „é   Úbigéÿÿ  ó   ƒé   éÿ   ó   ‚é   é   ó   é   )Úto_bytes)Úlengthr   r   r   r   L   s    r   c                 C   s
   t t| ƒS )z Encode an octet string )r   ÚOCTET_STRING)Ústringr   r   r   Úencode_stringZ   s    r+   c                 C   s   | rt tdƒS t tdƒS )z Encode a boolean value ó   ÿr   )r   ÚBOOLEAN)Zbooleanr   r   r   Úencode_boolean_   s    
r.   c                 C   s&   |   ¡ }|d d }tt|  |d¡ƒS )z Encode an integer value é   r&   r   )Ú
bit_lengthr   ÚINTEGERr'   )ZintegerZbit_lenZbyte_lenr   r   r   Úencode_integerf   s    r2   c                 C   s   t t|  dd¡ƒS )z Encode an enumerated value r&   r   )r   Ú
ENUMERATEDr'   )Úenumr   r   r   Úencode_enumeratedm   s    r5   c                 C   s
   t t| ƒS )z Encode a sequence )r   ÚSEQUENCE)Zsequencer   r   r   Úencode_sequencer   s    r7   c                 C   sº   | du rdS t | ƒdk rdS | dd… }tj| dd… dd}|d@ rŠd|d@  }tj| d|… dd}| ||| … }| || d… }n$|}| dd| … }| d| d… }||||fS )	z!
    decode an ASN.1 element
    Nr#   r   r&   r   ©Ú	byteorderé€   iÿÿÿ)r   ÚintÚ
from_bytes)r   r   ÚencZl_endr(   ÚelementÚrestr   r   r   Údecode_elementw   s    r@   c                       s¦   e Zd ZdZ‡ fdd„Z‡ fdd„Zdd„ Zdd	„ Zd
d„ Zd&dd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Z‡  ZS )'ÚRawLdapTestzÈ
    A raw Ldap Test case.
    The ldap connections are made over https on port 636

    Uses the following environment variables:
        SERVER
        USERNAME
        PASSWORD
        DNSNAME
    c                    s^   t t| ƒ ¡  tj d¡| _d| _d | _tj d¡| _	tj d¡| _
tj d¡| _|  ¡  d S )NÚSERVERi|  ZUSERNAMEZPASSWORDZDNSNAME)ÚsuperrA   ÚsetUpÚsambaÚtestsÚenv_get_var_valueÚhostÚportÚsocketÚuserÚpasswordÚdns_nameÚconnect©Úself©Ú	__class__r   r   rD   œ   s    zRawLdapTest.setUpc                    s   |   ¡  tt| ƒ ¡  d S ©N)Ú
disconnectrC   rA   ÚtearDownrO   rQ   r   r   rU   §   s    zRawLdapTest.tearDownc                 C   s"   | j du rdS | j  ¡  d| _ dS ©z; Disconnect from and clean up the connection to the server N©rJ   ÚcloserO   r   r   r   rT   «   s    

zRawLdapTest.disconnectc                 C   s”   t  ¡ }d|_t j|_d}zBt tjtj¡}| d¡ | 	| j
| jf¡ |j|| j
d| _W n2 tjyŽ   | ¡  | jdurˆ| j ¡  ‚ Y n0 dS )z2 Establish an ldaps connection to the test server FNé
   )Zserver_hostname)ÚsslZcreate_default_contextZcheck_hostnameZ	CERT_NONEZverify_moderJ   ÚAF_INETZSOCK_STREAMÚ
settimeoutrN   rH   rI   Zwrap_socketÚerrorrX   )rP   ÚcontextZsockr   r   r   rN   ²   s    


zRawLdapTest.connectc                 C   s4   z| j  |¡ W n t jy.   |  ¡  ‚ Y n0 dS ©z  Send the request to the server N©rJ   Zsendallr]   rT   ©rP   Zreqr   r   r   ÚsendÆ   s
    zRawLdapTest.sendr   Nc                 C   s’   d}zL|dur| j  |¡ | j  |d¡}| j  d¡ t|ƒdkrN|  ¡  W dS W n< t jyp   | j  d¡ Y n t jyŒ   |  ¡  ‚ Y n0 |S ©z+ receive an array of bytes from the server Nr   rY   ©rJ   r\   Úrecvr   rT   Útimeoutr]   ©rP   Znum_recvrf   r   r   r   r   re   Î   s    
zRawLdapTest.recvc                 C   s¨  | j  d¡}| j dd¡ d¡}d| d | }| j d¡}tdƒ}|t|ƒ7 }|tt|ƒ7 }tt	|ƒ}tdƒ}t
|| ƒ}|  |¡ |  ¡ }	|  |	¡ t|	ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  |dk¡ |  dt|ƒ¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ tj|d	d
}|  d|¡ |  t|ƒd¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  dt|ƒ¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  t ¡ | ¡ ¡ |  t|ƒd¡ dS )z+
            Perform a simple bind
        ZUTF8Ú.z,dc=s   cn=s   ,cn=users,dc=r    r&   r   r   r8   N)rK   ÚencoderM   ÚreplacerL   r2   r+   r   ÚSIMPLE_AUTHÚBINDr7   rb   re   ÚassertIsNotNoner@   ÚassertEqualr6   ÚhexÚ
assertTruer   r1   r;   r<   ÚassertGreaterÚBIND_RESr3   ÚSUCCESS)rP   rK   ZouÚdnrL   ÚbindÚbind_opÚmsg_noÚpacketr   r   r(   r>   r?   r   r   r   ru   ã   s:    


zRawLdapTest.bindc                 C   s€  d}t |ƒ\}}}}|  t ¡ | ¡ ¡ |  d|¡ |  d ¡ | ¡ ¡ |  dt|ƒ¡ d}t |ƒ\}}}}|  t ¡ | ¡ ¡ |  d|¡ |  d ¡ | ¡ ¡ |  dt|ƒ¡ d}t |ƒ\}}}}|  t ¡ | ¡ ¡ |  d|¡ |  d ¡ | ¡ ¡ |  d ¡ | ¡ ¡ d	}t |ƒ\}}}}|  t ¡ | ¡ ¡ |  d
|¡ |  d ¡ | ¡ ¡ |  d ¡ | ¡ ¡ d}t |ƒ\}}}}|  t ¡ | ¡ ¡ |  d
|¡ |  d ¡ | ¡ ¡ |  d ¡ | ¡ ¡ d}t |ƒ\}}}}|  t ¡ | ¡ ¡ |  d
|¡ |  d ¡ | ¡ ¡ |  d ¡ | ¡ ¡ d}t |ƒ\}}}}|  t ¡ | ¡ ¡ |  d
|¡ |  d ¡ | ¡ ¡ |  d ¡ | ¡ ¡ dS )z% Tests for the decode_element method s   ÿr&   r,   r   s    r   s   ÿ s    s   Êþ r#   s   Êþs   Êþ s   ‚ Êþ s   …    Êþ N)r@   rn   r-   ro   r   r)   )rP   r   r   r(   r>   r?   r   r   r   Útest_decode_element  sT    zRawLdapTest.test_decode_elementc                 C   sÄ  |   ¡  tdƒ}|tdƒ7 }|tdƒ7 }|tdƒ7 }|tdƒ7 }|tdƒ7 }tdd ƒ}tdd ƒ}tt|| ƒ}tdƒ}tt|| | ƒ}tdƒ}t|| ƒ}|  	d	t
|ƒ¡ |  |¡ |  ¡ }	|  |	¡ t|	ƒ\}
}}}|  	t ¡ |
 ¡ ¡ |  |dk¡ |  	dt
|ƒ¡ t|ƒ\}
}}}|  	t ¡ |
 ¡ ¡ tj|d
d}|  	d|¡ |  t
|ƒd¡ t|ƒ\}
}}}|  	t ¡ |
 ¡ ¡ |  	dt
|ƒ¡ t|ƒ\}
}}}|  	t ¡ |
 ¡ ¡ |  	dt
|ƒ¡ |  t
|ƒd¡ t|ƒ\}
}}}|  	t ¡ |
 ¡ ¡ |  	dt
|ƒ¡ t|ƒ\}
}}}|  	t ¡ |
 ¡ ¡ |  t
|ƒd¡ t|ƒ\}
}}}|  	t ¡ |
 ¡ ¡ |  t
|ƒd¡ |  	d|¡ t|ƒ\}
}}}|  	t ¡ |
 ¡ ¡ |  t
|ƒd¡ |  	dt
|ƒ¡ dS )zÊ
        Check that an LDAP search request equal to the maximum size is accepted
        This test is done on a authenticated connection so that the maximum
        non search request is 16MiB.
        Nr   Fó   xiæó ó   yéëó r#   é è r   r8   ó   configurationNamingContext)ru   r+   r5   r2   r.   r   ÚEQUALSr7   ÚSEARCHrn   r   rb   re   rm   r@   r6   ro   rp   r1   r;   r<   rq   Ú
SEARCH_RESr)   ÚSET©rP   ÚheaderÚxÚyÚequalsÚtrailerÚsearchrw   rx   r   r   r(   r>   r?   r   r   r   Ú)test_search_equals_maximum_permitted_sizeT  s`    

z5RawLdapTest.test_search_equals_maximum_permitted_sizec           
      C   sÐ   |   ¡  tdƒ}|tdƒ7 }|tdƒ7 }|tdƒ7 }|tdƒ7 }|tdƒ7 }tdd ƒ}tdd ƒ}tt|| ƒ}tdƒ}tt|| | ƒ}tdƒ}t|| ƒ}|  	d	t
|ƒ¡ |  |¡ |  ¡ }	|  |	¡ dS )
z×
        Test that a search query longer than the maximum permitted
        size is rejected.
        This test is done on a authenticated connection so that the maximum
        non search request is 16MiB.
        Nr   Frz   r|   r{   içó r#   éè )ru   r+   r5   r2   r.   r   r   r7   r€   rn   r   rb   re   ÚassertIsNone©
rP   r„   r…   r†   r‡   rˆ   r‰   rw   rx   r   r   r   r   Ú*test_search_exceeds_maximum_permitted_size®  s$    
z6RawLdapTest.test_search_exceeds_maximum_permitted_sizec           
      C   sl  t dƒ}|tdƒ7 }|ttdƒ7 }tt|ƒ}t dƒ}t|| ƒ}|  |¡ |  ¡ }|  |¡ t	|ƒ\}}}}	|  
t ¡ | ¡ ¡ |  |dk¡ |  
dt|	ƒ¡ t	|ƒ\}}}}	|  
t ¡ | ¡ ¡ tj|dd}|  
d|¡ |  t|	ƒd¡ t	|	ƒ\}}}}	|  
t ¡ | ¡ ¡ |  
dt|	ƒ¡ t	|ƒ\}}}}	|  
t ¡ | ¡ ¡ |  
t ¡ | ¡ ¡ |  t|	ƒd¡ dS )z2
            Test a simple anonymous bind
        r    ó    r&   r   r   r8   N)r2   r+   r   rk   rl   r7   rb   re   rm   r@   rn   r6   ro   rp   r   r1   r;   r<   rq   rr   r3   rs   ©
rP   ru   rv   rw   rx   r   r   r(   r>   r?   r   r   r   Útest_simple_anonymous_bindØ  s2    


z&RawLdapTest.test_simple_anonymous_bindc           
      C   s€  t dƒ}|tdd ƒ7 }|ttdƒ7 }tt|ƒ}t dƒ}t|| ƒ}|  dt|ƒ¡ |  |¡ |  	¡ }|  
|¡ t|ƒ\}}}}	|  t ¡ | ¡ ¡ |  |dk¡ |  dt|	ƒ¡ t|ƒ\}}}}	|  t ¡ | ¡ ¡ tj|dd	}|  d|¡ |  t|	ƒd¡ t|	ƒ\}}}}	|  t ¡ | ¡ ¡ |  dt|	ƒ¡ t|ƒ\}}}}	|  t ¡ | ¡ ¡ |  t ¡ | ¡ ¡ |  t|	ƒd¡ d
S )zç
            Test a simple bind, with a large invalid
            user name. As the resulting packet is equal
            to the maximum unauthenticated packet size we should see
            an INVALID_CREDENTIALS response
        r    ó    iéç r   r&   r}   r   r   r8   N)r2   r+   r   rk   rl   r7   rn   r   rb   re   rm   r@   r6   ro   rp   r1   r;   r<   rq   rr   r3   ÚINVALID_CREDENTIALSr   r   r   r   Útest_simple_bind_at_limit  s4    	


z%RawLdapTest.test_simple_bind_at_limitc                 C   st   t dƒ}|tdd ƒ7 }|ttdƒ7 }tt|ƒ}t dƒ}t|| ƒ}|  dt|ƒ¡ |  |¡ |  	¡ }|  
|¡ dS )zå
            Test a simple bind, with a large invalid
            user name. As the resulting packet is one greater than
            the maximum unauthenticated packet size we should see
            the connection reset.
        r    r’   iêç r   r&   r‹   N)r2   r+   r   rk   rl   r7   rn   r   rb   re   rŒ   )rP   ru   rv   rw   rx   r   r   r   r   Útest_simple_bind_gt_limit;  s    	

z%RawLdapTest.test_simple_bind_gt_limitc           
      C   sb  dd }t t|ƒ}tdƒ}t|| ƒ}|  dt|ƒ¡ |  |¡ |  ¡ }|  |¡ t	|ƒ\}}}}	|  t
 ¡ | ¡ ¡ |  |dk¡ |  dt|	ƒ¡ t	|ƒ\}}}}	|  t ¡ | ¡ ¡ tj|dd}|  d|¡ |  t|	ƒd¡ t	|	ƒ\}}}}	|  t ¡ | ¡ ¡ |  dt|	ƒ¡ t	|ƒ\}}}}	|  t ¡ | ¡ ¡ |  t ¡ | ¡ ¡ |  t|	ƒd¡ dS )	zÌ
            Test a delete, with a large invalid DN
            As the resulting packet is equal to the maximum unauthenticated
            packet size we should see an INVALID_DN_SYNTAX response
        r’   ióç r&   r}   r   r   r8   N)r   ÚDELETEr2   r7   rn   r   rb   re   rm   r@   r6   ro   rp   r1   r;   r<   rq   Ú
DELETE_RESr3   ÚINVALID_DN_SYNTAX©
rP   rt   Údel_oprw   rx   r   r   r(   r>   r?   r   r   r   Ú$test_unauthenticated_delete_at_limitU  s0    


z0RawLdapTest.test_unauthenticated_delete_at_limitc                 C   sV   dd }t t|ƒ}tdƒ}t|| ƒ}|  dt|ƒ¡ |  |¡ |  ¡ }|  |¡ dS )zÅ
            Test a delete, with a large invalid DN
            As the resulting packet is greater than the maximum unauthenticated
            packet size we should see a connection reset
        r’   iôç r&   r‹   N)	r   r–   r2   r7   rn   r   rb   re   rŒ   ©rP   rt   rš   rw   rx   r   r   r   r   Ú$test_unauthenticated_delete_gt_limit†  s    

z0RawLdapTest.test_unauthenticated_delete_gt_limitc           
      C   sj  dd }t t|ƒ}|  ¡  tdƒ}t|| ƒ}|  dt|ƒ¡ |  |¡ |  ¡ }|  	|¡ t
|ƒ\}}}}	|  t ¡ | ¡ ¡ |  |dk¡ |  dt|	ƒ¡ t
|ƒ\}}}}	|  t ¡ | ¡ ¡ tj|dd}|  d|¡ |  t|	ƒd¡ t
|	ƒ\}}}}	|  t ¡ | ¡ ¡ |  dt|	ƒ¡ t
|ƒ\}}}}	|  t ¡ | ¡ ¡ |  t ¡ | ¡ ¡ |  t|	ƒd¡ dS )	zÊ
            Test a delete, with a large invalid DN
            As the resulting packet is equal to the maximum authenticated
            packet size we should see an INVALID_DN_SYNTAX response
        r’   ióÿÿ r#   i   r   r   r8   N)r   r–   ru   r2   r7   rn   r   rb   re   rm   r@   r6   ro   rp   r1   r;   r<   rq   r—   r3   r˜   r™   r   r   r   Ú"test_authenticated_delete_at_limitœ  s2    


z.RawLdapTest.test_authenticated_delete_at_limitc                 C   s^   dd }t t|ƒ}|  ¡  tdƒ}t|| ƒ}|  dt|ƒ¡ |  |¡ |  ¡ }|  	|¡ dS )zÇ
            Test a delete, with a large invalid DN
            As the resulting packet is one greater than the maximum
            authenticated packet size we should see a connection reset
        r’   iôÿÿ r#   i  N)
r   r–   ru   r2   r7   rn   r   rb   re   rŒ   rœ   r   r   r   Ú"test_authenticated_delete_gt_limitÏ  s    

z.RawLdapTest.test_authenticated_delete_gt_limit)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   rU   rT   rN   rb   re   ru   ry   rŠ   rŽ   r‘   r”   r•   r›   r   rž   rŸ   Ú__classcell__r   r   rQ   r   rA      s$   
4=Z*.513rA   c                       s^   e Zd ZdZ‡ fdd„Z‡ fdd„Zdd„ Zdd	„ Zd
d„ Zddd„Z	dd„ Z
dd„ Z‡  ZS )ÚRawCldapTestz’
    A raw cldap Test case.
    The ldap connections are made over UDP port 389

    Uses the following environment variables:
        SERVER
    c                    s4   t t| ƒ ¡  tj d¡| _d| _d | _|  	¡  d S )NrB   i…  )
rC   r¥   rD   rE   rF   rG   rH   rI   rJ   rN   rO   rQ   r   r   rD   ñ  s
    zRawCldapTest.setUpc                    s   |   ¡  tt| ƒ ¡  d S rS   )rT   rC   r¥   rU   rO   rQ   r   r   rU   ù  s    zRawCldapTest.tearDownc                 C   s"   | j du rdS | j  ¡  d| _ dS rV   rW   rO   r   r   r   rT   ý  s    

zRawCldapTest.disconnectc                 C   sf   z6t   t jt j¡| _ | j  d¡ | j  | j| jf¡ W n* t jy`   | j durZ| j  ¡  ‚ Y n0 dS )z0 Establish an UDP connection to the test server rY   N)	rJ   r[   Z
SOCK_DGRAMr\   rN   rH   rI   r]   rX   rO   r   r   r   rN     s    

zRawCldapTest.connectc                 C   s4   z| j  |¡ W n t jy.   |  ¡  ‚ Y n0 dS r_   r`   ra   r   r   r   rb     s
    zRawCldapTest.sendr   Nc                 C   s’   d}zL|dur| j  |¡ | j  |d¡}| j  d¡ t|ƒdkrN|  ¡  W dS W n< t jyp   | j  d¡ Y n t jyŒ   |  ¡  ‚ Y n0 |S rc   rd   rg   r   r   r   re     s    
zRawCldapTest.recvc                 C   s´  t dƒ}|tdƒ7 }|tdƒ7 }|tdƒ7 }|tdƒ7 }|tdƒ7 }t dƒ}t dƒ}tt|| ƒ}tdƒ}tt|| | ƒ}tdƒ}t|| ƒ}|  dt	|ƒ¡ |  
|¡ |  ¡ }	|  |	¡ t|	ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  |dk¡ |  t	|ƒd¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ tj|dd	}|  d|¡ |  t	|ƒd¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  dt	|ƒ¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  dt	|ƒ¡ |  t	|ƒd¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  dt	|ƒ¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  t	|ƒd¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  t	|ƒd¡ |  d
|¡ t|ƒ\}
}}}|  t ¡ |
 ¡ ¡ |  t	|ƒd¡ |  dt	|ƒ¡ dS )zb
        Check that an CLDAP search request equal to the maximum size is
        accepted
        Nr   Fóë  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsë  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr#   i   r   r8   r~   )r+   r5   r2   r.   r   r   r7   r€   rn   r   rb   re   rm   r@   r6   ro   rp   rq   r1   r;   r<   r   r)   r‚   rƒ   r   r   r   rŠ   -  s^    

z6RawCldapTest.test_search_equals_maximum_permitted_sizec           
      C   sÀ   t dƒ}|tdƒ7 }|tdƒ7 }|tdƒ7 }|tdƒ7 }|tdƒ7 }t dƒ}t dƒ}tt|| ƒ}tdƒ}tt|| | ƒ}tdƒ}t|| ƒ}|  dt	|ƒ¡ |  
|¡ |  ¡ }	|  |	¡ dS )zg
        Test that a cldap request longer than the maximum permitted
        size is rejected.
        Nr   Fr¦   sì  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr#   i  )r+   r5   r2   r.   r   r   r7   r€   rn   r   rb   re   rŒ   r   r   r   r   rŽ   ‡  s"    
z7RawCldapTest.test_search_exceeds_maximum_permitted_size)r   N)r    r¡   r¢   r£   rD   rU   rT   rN   rb   re   rŠ   rŽ   r¤   r   r   rQ   r   r¥   è  s   
Zr¥   )#rJ   rZ   Zsamba.testsrE   r   r–   r—   rl   rr   rk   Z	SASL_AUTHr€   r   r   rs   ZOPERATIONS_ERRORr“   r˜   r-   r1   r)   ZNULLr3   r6   r‚   r   r   r+   r.   r2   r5   r7   r@   rA   r¥   r   r   r   r   Ú<module>   sJ       \