a
    ¡ÖaòÁ  ã                   @   s¸   d dl mZ d dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
mZ d dlZd dlZd dlmZ d dlmZ dd	„ Zd
d„ ZG dd„ de
ƒZG dd„ deƒZG dd„ deƒZdS )é    )Úprint_functionN)ÚSCOPE_DEFAULTÚ
SCOPE_BASE)ÚLdbÚsubstitute_var)ÚTestCaseInTempDirÚenv_loadparm)Úsystem_session)Ú
attrgetterc                 C   sP   ddg}|D ]*}t j t j t¡|¡}t j |¡r q8qtt j || ¡dƒ ¡ S )Nz../../../../../testdata/samba3z../../../../testdata/samba3Úr)ÚosÚpathÚjoinÚdirnameÚ__file__ÚexistsÚopenÚread)ÚfilenameÚpathsÚpZdatadir© r   ú7/usr/lib/python3/dist-packages/samba/tests/samba3sam.pyÚread_datafile#   s    ÿr   c                 C   s   t |ƒ d S ©N)Úprint)ÚlÚtextr   r   r   Ú	ldb_debug-   s    r   c                       s<   e Zd ZdZdd„ Z‡ fdd„Z‡ fdd„Zdd	„ Z‡  ZS )
ÚMapBaseTestCasez!Base test case for mapping tests.c                 C   sV   |  d|jd|j dœ¡ |  dddœ¡ |  dd|j d|j gd	d
gddœ¡ d S )Nz@MAP=samba3samúsambaDomainName=TESTS,)Údnz@FROMz@TOz@MODULESz£rootdse,dsdb_paged_results,server_sort,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,samba3sid,show_deleted_ignore,dsdb_flags_ignore,partition)r!   z@LISTz
@PARTITIONz%sz@ATTRIBUTESz
@INDEXLISTz*:)r!   Ú	partitionZreplicateEntriesÚmodules)ÚaddÚbasednÚbasedn_casefold)ÚselfÚldbZs3Zs4r   r   r   Úsetup_modules4   s    þÿÿüzMapBaseTestCase.setup_modulesc                    s°   t ƒ | _| j dd¡ | j dd¡ tt| ƒ ¡  dd„ }dd„ }tj | j	d¡| _
d	| j
 | _| j	‰ G ‡ fd
d„dƒ}|d|| jƒ| _|d|| jƒ| _| j ¡  | j ¡  d S )NZ	workgroupÚTESTSznetbios namec                 S   s   d|| f S )Nz%s,sambaDomainName=TESTS,%sr   ©r%   Úrdnr   r   r   Úmake_dnH   s    z&MapBaseTestCase.setUp.<locals>.make_dnc                 S   s   d|| f S )Nz%s,%sr   r+   r   r   r   Ú	make_s4dnK   s    z(MapBaseTestCase.setUp.<locals>.make_s4dnzsam.ldbútdb://c                       sL   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )z%MapBaseTestCase.setUp.<locals>.TargetzQSimple helper class that contains data for a specific SAM
            connection.c                    sp   t |tƒ d| _| j dd¡ || _t | j|¡ ¡ | _d| ji| _	t
j ˆ d| j ¡| _d| j | _|| _d S )N©ÚlpZsession_infoÚskip_allocate_sidsÚtrueZBASEDNz%s.ldbr/   )r   r	   ÚdbÚ
set_opaquer%   r(   ZDnZget_casefoldr&   Ú	substvarsr   r   r   ÚfileÚurlÚ_dn)r'   r%   r!   r1   ©Útempdirr   r   Ú__init__W   s    z.MapBaseTestCase.setUp.<locals>.Target.__init__c                 S   s   |   | j|¡S r   )r9   r%   )r'   r,   r   r   r   r!   a   s    z(MapBaseTestCase.setUp.<locals>.Target.dnc                 S   s   | j  | j¡S r   )r4   Úconnectr8   ©r'   r   r   r   r=   d   s    z-MapBaseTestCase.setUp.<locals>.Target.connectc                 S   s   |   t|ƒ¡ d S r   )Úadd_ldifr   )r'   r   r   r   r   Ú
setup_datag   s    z0MapBaseTestCase.setUp.<locals>.Target.setup_datac                 S   s   t || jƒS r   )r   r6   )r'   r   r   r   r   Úsubstj   s    z+MapBaseTestCase.setUp.<locals>.Target.substc                 S   s   | j  |  |¡¡ d S r   )r4   r?   rA   ©r'   Úldifr   r   r   r?   m   s    z.MapBaseTestCase.setUp.<locals>.Target.add_ldifc                 S   s   | j  |  |¡¡ d S r   )r4   Úmodify_ldifrA   rB   r   r   r   rD   p   s    z1MapBaseTestCase.setUp.<locals>.Target.modify_ldifN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   r!   r=   r@   rA   r?   rD   r   r:   r   r   ÚTargetS   s   
rI   zdc=vernstok,dc=nlzcn=Samba3Sam)r   r1   ÚsetÚsuperr   ÚsetUpr   r   r   r;   ÚldbfileÚldburlÚsamba4Úsamba3r=   )r'   r-   r.   rI   ©Ú	__class__r:   r   rL   B   s     
zMapBaseTestCase.setUpc                    sr   t  | j¡ t  | jj¡ t  | jj¡ d| j }t j |d¡}t j |¡r`t  |¡ t  	|¡ t
t| ƒ ¡  d S )Nz%s.dzmetadata.tdb)r   ÚunlinkrM   rP   r7   rO   r   r   r   ÚrmdirrK   r   ÚtearDown)r'   ZpdirZmdatarQ   r   r   rU   y   s    


zMapBaseTestCase.tearDownc                 C   s6   t j t jjj|d ¡}t jj |¡}|  ||¡ d S )Nr   )ÚsambaZndrZ
ndr_unpackZdcerpcZsecurityZdom_sidÚassertEqual)r'   r   Zndr_sidZsid_obj1Zsid_obj2r   r   r   ÚassertSidEquals„   s
    ÿzMapBaseTestCase.assertSidEquals)	rE   rF   rG   rH   r)   rL   rU   rX   Ú__classcell__r   r   rQ   r   r   1   s
   7r   c                       sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚSamba3SamTestCasec                    s   t t| ƒ ¡  t| j| jtƒ d}| dd¡ | j 	d¡ t
dƒ}| | j |¡¡ |  || j| j¡ ~t| j| jtƒ d| _| j dd¡ d S )Nr0   r2   r3   zsamba3.ldifúprovision_samba3sam.ldif)rK   rZ   rL   r   rN   r1   r	   r5   rP   r@   r   r?   rO   rA   r)   r(   ©r'   r(   rC   rQ   r   r   rL      s    zSamba3SamTestCase.setUpc                 C   s:   | j jdd}|  t|ƒd¡ |  t|d d ƒd¡ dS )z"Looking up by non-mapped attributez(cn=Administrator)©Ú
expressioné   r   ÚcnZAdministratorN©r(   ÚsearchrW   ÚlenÚstr©r'   Úmsgr   r   r   Útest_search_non_mapped™   s    z(Samba3SamTestCase.test_search_non_mappedc                 C   s:   | j jdd}|  t|ƒd¡ |  t|d d ƒd¡ dS )zLooking up by mapped attributez(name=Backup Operators)r]   r_   r   ÚnamezBackup OperatorsNra   re   r   r   r   Útest_search_mappedŸ   s    z$Samba3SamTestCase.test_search_mappedc                 C   s"   | j jdd}|  t|ƒd¡ dS )z+Looking up by old name of renamed attributez(displayName=Backup Operators)r]   r   N)r(   rb   rW   rc   re   r   r   r   Útest_old_name_of_renamed¥   s    z*Samba3SamTestCase.test_old_name_of_renamedc                 C   s€   | j jdd}|  t|ƒd¡ |  t|d jƒd¡ |  d|d v ¡ |  d|d d ¡ t|d d ƒ}|  |td	gƒ¡ d
S )z&Looking up mapped entry containing SIDz(cn=Replicator)r]   r_   r   z)cn=Replicator,ou=Groups,dc=vernstok,dc=nlÚ	objectSidú.S-1-5-21-4231626423-2410014848-2360679739-1052ÚobjectClasss   groupN)	r(   rb   rW   rc   rd   r!   Ú
assertTruerX   rJ   )r'   rf   Zocr   r   r   Útest_mapped_containing_sidª   s    ÿ
ÿz,Samba3SamTestCase.test_mapped_containing_sidc                 C   s4   | j jdd}|  tdd„ |D ƒƒtddgƒ¡ dS )zLooking up by objectClassz'(|(objectClass=user)(cn=Administrator))r]   c                 S   s   g | ]}t |jƒ‘qS r   )rd   r!   )Ú.0Úmr   r   r   Ú
<listcomp>¹   ó    z=Samba3SamTestCase.test_search_by_objclass.<locals>.<listcomp>z1unixName=Administrator,ou=Users,dc=vernstok,dc=nlz*unixName=nobody,ou=Users,dc=vernstok,dc=nlN)r(   rb   rW   rJ   re   r   r   r   Útest_search_by_objclass¶   s    ÿÿz)Samba3SamTestCase.test_search_by_objclassc                 C   sl  | j  ddddddœ¡ | j jddtg d¢d	}|  t|ƒd
¡ |  t|d d ƒd¡ |  t|d d ƒd¡ |  t|d d ƒd¡ | j  ddddddœ¡ | j jdg d¢d}|  t|ƒd
¡ |  t|d d ƒd¡ |  t|d d ƒd¡ | j jdg d¢d}|  t|ƒd
¡ |  t|d d ƒd¡ |  t|d d ƒd¡ |  t|d d ƒd¡ | j jdg d¢d}|  t|ƒd
¡ |  t|d d ƒd¡ |  t|d d ƒd¡ |  t|d d ƒd¡ | jjjdd}|  	t|ƒd
k¡ |  t|d d ƒd ¡ |  t|d d! ƒd¡ | j  
d"¡ | j jdd}|  	t|ƒd
k¡ |  t|d d ƒd¡ |  t|d d# ƒd$¡ | j  
d%¡ | j jdd}|  	t|ƒd
k¡ |  t|d d# ƒd¡ | j  
d&¡ | j jdd}|  	t|ƒd
k¡ |  	d#|d v¡ | j  dd'¡ | j jd(d}|  t|ƒd
¡ |  t|d jƒd'¡ | j  d'¡ | j jd(d}|  t|ƒd¡ d S ))Nzcn=FooÚbarZBlieZFooZTRUE)r!   ÚfooÚblahr`   ÚshowInAdvancedViewOnlyz(cn=Foo))rv   rw   r`   rx   ©r^   ÚbaseÚscopeÚattrsr_   r   rx   rv   rw   z%cn=Niemand,cn=Users,dc=vernstok,dc=nlÚuserÚbinZgeheimZNiemand)r!   rm   ÚunixNameÚsambaUnicodePwdr`   z(unixName=bin))r   r`   r!   r€   ©r^   r|   r`   r€   z)(&(unixName=bin)(sambaUnicodePwd=geheim))r   z)(|(unixName=bin)(sambaUnicodePwd=geheim))z(cn=Niemand)r]   ÚsambaSIDz.S-1-5-21-4231626423-2410014848-2360679739-2001ZdisplayNameza
dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl
changetype: modify
add: description
description: Blah
ÚdescriptionZBlahze
dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl
changetype: modify
replace: description
description: Blie
zR
dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl
changetype: modify
delete: description
z&cn=Niemand2,cn=Users,dc=vernstok,dc=nlz(cn=Niemand2))r(   r$   rb   r   rW   rc   rd   rP   r4   rn   rD   Úrenamer!   Údeletere   r   r   r   Útest_s3sam_modify½   sŽ    û
þüÿÿÿÿÿÿz#Samba3SamTestCase.test_s3sam_modify)rE   rF   rG   rL   rg   ri   rj   ro   rt   r†   rY   r   r   rQ   r   rZ   ‹   s   rZ   c                       sD   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z‡  Z	S )ÚMapTestCasec                    s„   t t| ƒ ¡  t| j| jtƒ d}| dd¡ tdƒ}| 	| j
 |¡¡ |  || j| j
¡ ~t| j| jtƒ d| _| j dd¡ d S )Nr0   r2   r3   r[   )rK   r‡   rL   r   rN   r1   r	   r5   r   r?   rO   rA   r)   rP   r(   r\   rQ   r   r   rL   6  s    zMapTestCase.setUpc                    sü  ˆ j j dˆ j j ddgddddœ¡ ˆ j dˆ j d	¡ d
 ¡ ˆ j dˆ j d¡ d ¡ ˆ j ˆ j d¡dddddddddœ	¡ ˆ j ˆ j d¡dddddddddœ	¡ ˆ j j ˆ j  d¡dddddddddœ	¡ ˆ j j ˆ j  d¡dddddddœ¡ ˆ j j ˆ j  d¡dddddddœ¡ ˆ j d¡}ˆ jj|t	d d!gd"}ˆ  
t|ƒd#¡ ˆ  
t|d$ jƒ|¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ j  d¡}ˆ j jj|t	g d%¢d"}ˆ  
t|ƒd#¡ ˆ  
t|d$ jƒ|¡ ˆ  d |d$ v¡ ˆ  d!|d$ v¡ ˆ  
t|d$ d& ƒd¡ ˆ j d¡}ˆ jj|t	d d!gd"}ˆ  
t|ƒd#¡ ˆ  
t|d$ jƒ|¡ ˆ  
t|d$ d  ƒd¡ ˆ  
t|d$ d! ƒd¡ ˆ j  d¡}ˆ j jj|t	g d%¢d"}ˆ  
t|ƒd#¡ ˆ  
t|d$ jƒ|¡ ˆ  d |d$ v¡ ˆ  d!|d$ v¡ ˆ  
t|d$ d& ƒd¡ ˆ jjd'td d!gd(}ˆ  
t|ƒd)¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  
t|d$ d  ƒd¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ jjd,td d!gd(}ˆ  
t|ƒd)¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ jjd-td d!gd(}ˆ  
t|ƒd)¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ jjd.d/tg d0¢d1}ˆ  
t|ƒd2¡ t|td*ƒd+}ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ  d|d# d3 ¡ ˆ  d3|d# v ¡ ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  d|d$ d3 ¡ ˆ  d3|d$ v ¡ ˆ jjd4g d5¢d6}ˆ  
t|ƒd#¡ ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d$ d7 ƒd8¡ ˆ jjd9d d!gd6}ˆ  
t|ƒd$¡ g d:¢}ˆ jjd;|d6}ˆ  
t|ƒd)¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d$ d< d$ ƒd=¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d# d< d$ ƒd=¡ ˆ jjd>|d6}ˆ  
t|ƒd?¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d$ d< d$ ƒd=¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d# d< ƒtd@gƒ¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  
t|d) d  ƒd¡ ˆ  
t|d) d! ƒd¡ ˆ  
t|d) d< d$ ƒd=¡ ˆ jjdAd d!gd6}ˆ  
t|ƒd)¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  
t|d$ d  ƒd¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ jjdBd d!gd6}ˆ  
t|ƒd)¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ jjdCd d!gd6}ˆ  
t|ƒd)¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  
t|d$ d  ƒd¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ d d!g}ˆ jjdD|d6}ˆ  
t|ƒd$¡ ˆ jjdE|d6}ˆ  
t|ƒd$¡ ˆ jjdFd d!gd6}ˆ  
t|ƒd)¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  
t|d$ d  ƒd¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ jjdGd d!gd6}ˆ  
t|ƒd?¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v ¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v ¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  
t|d) d  ƒd¡ ˆ  
t|d) d! ƒd¡ ˆ jjdHd d!gd6}ˆ  
t|ƒd?¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v ¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  
t|d) d  ƒd¡ ˆ  
t|d) d! ƒd¡ ˆ jjdId d!gd6}ˆ  
t|ƒd$¡ ˆ jjdJd d!gd6}ˆ  
t|ƒdK¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  d |d) v¡ ˆ  
t|d) d! ƒd¡ ˆ  
t|d? jƒˆ j d¡¡ ˆ  
t|d? d  ƒd¡ ˆ  
t|d? d! ƒd¡ ˆ jjdLd d!gd6}ˆ  
t|ƒd2¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ jjdMd d!gd6}ˆ  
t|ƒdK¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  d |d) v¡ ˆ  
t|d) d! ƒd¡ ˆ  
t|d? jƒˆ j d¡¡ ˆ  
t|d? d  ƒd¡ ˆ  
t|d? d! ƒd¡ ˆ jjdNd d!gd6}ˆ  
t|ƒdK¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  
t|d) d  ƒd¡ ˆ  
t|d) d! ƒd¡ ˆ  
t|d? jƒˆ j d¡¡ ˆ  
t|d? d  ƒd¡ ˆ  
t|d? d! ƒd¡ ˆ jjdOd d!gd6}ˆ  
t|ƒdK¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  d |d) v¡ ˆ  
t|d) d! ƒd¡ ˆ  
t|d? jƒˆ j d¡¡ ˆ  
t|d? d  ƒd¡ ˆ  
t|d? d! ƒd¡ ˆ jjdPd d!gd6}t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  d |d) v¡ ˆ  
t|d) d! ƒd¡ ˆ  
t|d? jƒˆ j d¡¡ ˆ  
t|d? d  ƒd¡ ˆ  
t|d? d! ƒd¡ ˆ jjdQd d!gd6}ˆ  
t|ƒdR¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  
t|d# d  ƒd¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  
t|d) d  ƒd¡ ˆ  
t|d) d! ƒd¡ ˆ jjdSd d!gd6}ˆ  
t|ƒdR¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  
t|d) d  ƒd¡ ˆ  
t|d) d! ƒd¡ ˆ jjdTd d!gd6}ˆ  
t|ƒdU¡ t|td*ƒd+}ˆ  
t|d$ jƒˆ j d¡¡ ˆ  d |d$ v¡ ˆ  
t|d$ d! ƒd¡ ˆ  
t|d# jƒˆ j d¡¡ ˆ  d |d# v¡ ˆ  
t|d# d! ƒd¡ ˆ  
t|d) jƒˆ j d¡¡ ˆ  d |d) v¡ ˆ  
t|d) d! ƒd¡ ˆ  
t|d? jƒˆ j d¡¡ ˆ  
t|d? d  ƒd¡ ˆ  
t|d? d! ƒd¡ ˆ  
t|d2 jƒˆ j d¡¡ ˆ  
t|d2 d  ƒd¡ ˆ  
t|d2 d! ƒd¡ ‡ fdVdW„dXD ƒ}|D ]}ˆ j |¡ qäd/S )Yz$Running search tests on mapped data.r    ZsambaDomainÚtopz)S-1-5-21-4231626423-2410014848-2360679739Z2000r*   )r!   Zobjectclassr‚   ÚsambaNextRidZsambaDomainNameú
dn: zcn=Domain Usersz^
objectClass: group
cn: Domain Users
objectSid: S-1-5-21-4231626423-2410014848-2360679739-513
zcn=Xz¡
objectClass: user
cn: X
codePage: x
revision: x
dnsHostName: x
nextRid: y
lastLogon: x
description: x
objectSid: S-1-5-21-4231626423-2410014848-2360679739-1052
zcn=YÚYÚxÚy)	r!   rm   r`   ZcodePageÚrevisionÚdnsHostNameÚnextRidÚ	lastLogonrƒ   zcn=ZÚZÚzzcn=AZposixAccountÚArl   z-S-1-5-21-4231626423-2410014848-2360679739-512)	r!   rm   r`   r‰   ÚsambaBadPasswordCountÚsambaLogonTimerƒ   r‚   ZsambaPrimaryGroupSIDzcn=BÚB)r!   rm   r`   r‰   r•   r–   rƒ   zcn=CÚCr   r‘   ©r{   r|   r_   r   )r   r‘   r–   r–   z(revision=x)©r^   r{   r|   é   r!   )Úkeyz(description=y)z(badPwdCount=x)z(objectSid=*)N)r   r‘   rk   ry   é   rk   z(primaryGroupID=512))r   r‘   ÚprimaryGroupIDr   rž   Z512z(sambaBadPasswordCount=*))r   r‘   rm   z(objectClass=user)rm   r}   z$(|(objectClass=user)(badPwdCount=x))é   s   topz(&(codePage=x)(revision=x))z(&(lastLogon=x)(description=x))z(&(codePage=x)(description=x))z(&(codePage=x)(nextRid=x))z(&(revision=x)(lastLogon=z))z(|(revision=x)(dnsHostName=x))z(|(badPwdCount=x)(lastLogon=x))z(|(revision=x)(lastLogon=y))z(|(codePage=y)(nextRid=z))z(!(revision=x))é   z(!(description=x))z(!(&(codePage=x)(revision=x)))z"(!(&(lastLogon=x)(description=x)))z!(!(&(codePage=x)(description=x)))z!(!(|(revision=x)(dnsHostName=x)))z"(!(|(badPwdCount=x)(lastLogon=x)))é   z(!(|(revision=x)(lastLogon=y)))zP(|(&(revision=x)(dnsHostName=x))(!(&(description=x)(nextRid=y)))(badPwdCount=y))é   c                    s   g | ]}ˆ j  d | ¡‘qS )zcn=%s)rO   r!   )rp   Únr>   r   r   rr   *  rs   z/MapTestCase.test_map_search.<locals>.<listcomp>)r”   r—   r˜   ÚXr‹   r’   )rP   r4   r$   r%   r(   r?   rO   r!   rb   r   rW   rc   rd   rn   r   Úsortedr
   rX   rJ   ZassertFalser…   )r'   r!   Úresr|   Zdnsr   r>   r   Útest_map_searchA  sL   
û	
ÿÿ
ÿÿ
÷
÷
÷
ù	
ù
ÿÿ
ÿÿ
ÿÿ
ÿ
ÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzMapTestCase.test_map_searchc                 C   sF  d}| j  |dddddœ¡ g d¢}| j j|t|d}|  t|ƒd¡ |  t|d	 jƒ|¡ |  t|d	 d
 ƒd¡ |  t|d	 d ƒd¡ |  t|d	 d ƒd¡ | jj	jdt
|d}|  t|ƒd	¡ | jj	jdt
|d}|  t|ƒd	¡ d| d }| j  |¡ | j j|t|d}|  t|ƒd¡ |  t|d	 jƒ|¡ |  t|d	 d
 ƒd¡ |  t|d	 d ƒd¡ |  t|d	 d ƒd
¡ d}| j  ||¡ | j j|t|d}|  t|ƒd¡ |  t|d	 jƒ|¡ |  t|d	 d
 ƒd¡ |  t|d	 d ƒd¡ |  t|d	 d ƒd
¡ | j  |¡ | j j|td}|  t|ƒd	¡ dS )zModification of local records.zcn=test,dc=idealx,dc=orgÚtestru   Ú1)r!   r`   rv   rŽ   rƒ   )rv   rŽ   rƒ   r™   r_   r   rv   rŽ   rƒ   z	(cn=test)rš   rŠ   z=
replace: foo
foo: baz
replace: description
description: foo
Zbazzcn=toast,dc=idealx,dc=org©r{   N)r(   r$   rb   r   rW   rc   rd   r!   rO   r4   r   rP   rD   r„   r…   )r'   r!   r|   r¦   rC   Údn2r   r   r   Útest_map_modify_local.  sZ    ü
ÿ
ÿÿÿz!MapTestCase.test_map_modify_localc                 C   s  | j  d¡}| j d¡}| jj |dddddœ¡ | jjj|tg d¢d}|  t|ƒd	¡ |  t	|d
 jƒ|¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ g d¢}| j
j|t|dd}|  t|ƒd	¡ |  t	|d
 jƒ|¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ | j jj|t|d}|  t|ƒd
¡ d| d }| j
 |¡ | j
j|tg d¢d}|  t|ƒd	¡ |  t	|d
 jƒ|¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ | jjj|tg d¢d}|  t|ƒd	¡ |  t	|d
 jƒ|¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ | j  d¡}| j
 ||¡ |}| j
j|tg d¢d}|  t|ƒd	¡ |  t	|d
 jƒ|¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ | j d¡}| jjj|tg d¢d}|  t|ƒd	¡ |  t	|d
 jƒ|¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ |  t	|d
 d ƒd¡ | j
 |¡ | j
j|td}|  t|ƒd
¡ | jjj|td}|  t|ƒd
¡ dS )z-Modification of remote data of remote recordsúcn=testr¨   rv   Ú3Ú1001©r!   r`   rƒ   r•   r‰   )rƒ   r•   r‰   r™   r_   r   rƒ   r•   r‰   )rƒ   ÚbadPwdCountr   Ú )r{   r|   r^   r±   r   rŠ   zL
replace: description
description: test
replace: badPwdCount
badPwdCount: 4
Ú4úcn=toastrª   N)rO   r!   rP   r4   r$   rb   r   rW   rc   rd   r(   rD   r„   r…   )r'   r!   r«   r¦   r|   rC   r   r   r   Útest_map_modify_remote_remotej  s    
üÿÿÿ
ÿÿ
ÿÿz)MapTestCase.test_map_modify_remote_remotec                 C   s’  | j  d¡}| j d¡}| jj |dddddœ¡ d| d }| j |¡ d	d
g}| jj|t|d}|  	t
|ƒd¡ |  	t|d jƒ|¡ |  	t|d d
 ƒd¡ |  	t|d d	 ƒd¡ | jjj|t|d}|  	t
|ƒd¡ |  	t|d jƒ|¡ |  	t|d d
 ƒd¡ |  d	|d v¡ | j jj|t|d}|  	t
|ƒd¡ |  	t|d jƒ|¡ |  d
|d v¡ |  	t|d d	 ƒd¡ | j |¡ dS )z,Modification of local data of remote recordsr­   r¨   rv   r®   r¯   r°   rŠ   zC
add: revision
revision: 1
replace: description
description: test

rŽ   rƒ   r™   r_   r   r©   N)rO   r!   rP   r4   r$   r(   rD   rb   r   rW   rc   rd   rn   r…   )r'   r!   r«   rC   r|   r¦   r   r   r   Útest_map_modify_remote_localÁ  s>    
üÿÿz(MapTestCase.test_map_modify_remote_localc              	   C   s0  | j  d¡}| j d¡}| j |ddddddœ¡ g d¢}| jj|t|d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ | j j
j|t|d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  d|d v¡ |  d|d v¡ |  d|d v¡ |  t	|d d ƒd¡ g d¢}| jj
j|t|d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  d|d v¡ d| d }| j |¡ g d¢}| jj|t|d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ | j j
j|t|d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  d|d v¡ |  d|d v¡ |  d|d v¡ |  t	|d d ƒd¡ g d¢}| jj
j|t|d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  d|d v¡ | j  d¡}| j ||¡ |}g d¢}| jj|t|d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ | j j
j|t|d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  d|d v¡ |  d|d v¡ |  d|d v¡ |  t	|d d ƒd¡ | j d¡}| jj
j|tg d¢d	}|  t|ƒd
¡ |  t	|d jƒ|¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  t	|d d ƒd¡ |  d|d v¡ | j |¡ | jj|td}|  t|ƒd¡ | j j
j|td}|  t|ƒd¡ | jj
j|td}|  t|ƒd¡ dS )z%Testing modification of split recordsr­   r¨   rv   r®   r¯   r©   )r!   r`   rƒ   r±   r   rŽ   )rƒ   r±   r   rŽ   r™   r_   r   rƒ   r±   r   rŽ   )rƒ   r•   r‰   rŽ   r•   r‰   rŠ   zj
replace: description
description: test
replace: badPwdCount
badPwdCount: 4
replace: revision
revision: 2
r³   Ú2r´   rª   N)rO   r!   rP   r(   r$   rb   r   rW   rc   rd   r4   rn   rD   r„   r…   )r'   r!   r«   r|   r¦   rC   r   r   r   Útest_map_modify_splití  sÂ    úÿÿ	ÿz!MapTestCase.test_map_modify_split)
rE   rF   rG   rL   r§   r¬   rµ   r¶   r¸   rY   r   r   rQ   r   r‡   4  s      p<W,r‡   )Z
__future__r   r   r(   r   r   rV   r   r   Zsamba.testsr   r   Zsamba.dcerpc.securityZ	samba.ndrZ
samba.authr	   Úoperatorr
   r   r   r   rZ   r‡   r   r   r   r   Ú<module>   s   
Z *