a
    ¡Öa¿§  ã                   @   s¸   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlZddlZddlZG dd„ deƒZG dd„ deƒZdS )zTests for samba.dsdb.é    )ÚCredentials)ÚSamDB)Úsystem_session)ÚTestCase)Údelete_force)Ú
ndr_unpackÚndr_pack)ÚdrsblobsÚsecurityÚmisc)Údsdb)ÚwerrorNc                       sF  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	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d'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ ZdNd:d;„Zd<d=„ Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dDdE„ Z$dFdG„ Z%dHdI„ Z&dJdK„ Z'dLdM„ Z(‡  Z)S )OÚ	DsdbTestsc                    sR  t t| ƒ ¡  tj ¡ | _tƒ | _| j 	| j¡ t
ƒ | _t| j| j| jd| _dtt ¡ jdd… ƒ }t dd¡}d}| j ¡ }d| d | | _| jj|||d	 |  t| j| j¡ | jjt | j| j ¡ ¡tjd
gd}t | j|d d
 d  d¡¡| _| jj| jtjdgd}|d }|  d|¡ |d d  d¡}t | j|¡| _ d S )N)Úsession_infoÚcredentialsÚlpz
dsdb-user-r   é   é    zTest user for dsdb testzCN=z
,CN=Users,)ZusernameZpasswordÚdescriptionZserverReference©ÚbaseÚscopeÚattrszutf-8ÚrIDSetReferences)!Úsuperr   ÚsetUpÚsambaÚtestsÚenv_loadparmr   r   ÚcredsÚguessr   Úsessionr   ÚsamdbÚstrÚuuidZuuid4ÚhexZgenerate_random_passwordÚ	domain_dnÚ
account_dnZnewuserÚ
addCleanupr   ÚsearchÚldbÚDnZget_serverNameÚ
SCOPE_BASEÚdecodeÚserver_ref_dnÚassertInÚ
rid_set_dn)ÚselfZ	user_nameZ	user_passZuser_descriptionZbase_dnÚresZrid_set_refsZrid_set_str©Ú	__class__© ú2/usr/lib/python3/dist-packages/samba/tests/dsdb.pyr   $   sH    þ
þÿýÿ
þzDsdbTests.setUpc                 C   s    | j j|tjg d¢d}|d S )N)ÚrIDAllocationPoolÚrIDPreviousAllocationPoolÚrIDUsedPoolÚ
rIDNextRIDr   r   )r"   r)   r*   r,   )r1   r0   r2   r5   r5   r6   Úget_rid_setN   s
    þzDsdbTests.get_rid_setc                 C   s¾   | j  ¡  z¢|  | j¡}|  d|¡ |  d|¡ |  d|¡ |  d|¡ t|d d ƒ}| j  ¡ }|  |d |¡ | j  ¡ }|  ||¡ |  | j¡}|  ||¡ W | j  ¡  n| j  ¡  0 d S )Nr7   r8   r9   r:   r   é   )	r"   Útransaction_startr;   r0   r/   ÚintÚnext_free_ridÚassertEqualÚtransaction_cancel)r1   Zorig_rid_setZnext_ridr?   Znext_free_rid2Zrid_set2r5   r5   r6   Útest_ridalloc_next_free_ridW   s    


z%DsdbTests.test_ridalloc_next_free_ridc                 C   s   | j  ¡  zd}d}d}d}t ¡ }| j|_t g tjd¡|d< t t|d> |B ƒtj	d¡|d< t t|d> |B ƒtj	d¡|d< | j  
|¡ | j  ¡ }|  |d	 |¡ | j  ¡ }|  ||¡ | j  ¡ }|  |d	 |¡ | j  ¡ \}	}
|  |d	 |	¡ |  ||
¡ W | j  ¡  n| j  ¡  0 d S )
Niè  iÏ  i¸  iŸ  r:   r   r8   r7   r<   )r"   r=   r*   ÚMessager0   ÚdnÚMessageElementÚFLAG_MOD_DELETEr#   ÚFLAG_MOD_REPLACEÚmodifyr?   r@   Úallocate_ridÚfree_rid_boundsrA   )r1   Zprev_loZprev_hiZnext_loZnext_hiÚmsgZnext_free_rid3ÚridZnext_free_rid4Úfree_loÚfree_hir5   r5   r6   Útest_ridalloc_no_ridnextrids   sB    
þþÿþÿ


z%DsdbTests.test_ridalloc_no_ridnextridc                 C   sú   | j  ¡  zÞd}d}t ¡ }| j|_t t|d> |B ƒtjd¡|d< t t|d> |B ƒtjd¡|d< t t|ƒtjd¡|d< | j  	|¡ |  
tj¡}| j  ¡  W d   ƒ n1 s´0    Y  |  d|jjd ¡ | j  ¡  W | j  ¡  n| j  ¡  0 d S )	NéÐ  é·  r   r8   r7   r:   úRID pools out of RIDsr<   )r"   r=   r*   rC   r0   rD   rE   r#   rG   rH   ÚassertRaisesÚLdbErrorr?   r@   Ú	exceptionÚargsrI   rA   )r1   Úpool_loÚpool_hirK   Úerrr5   r5   r6   Útest_ridalloc_no_free_ridsŸ   s6    
þÿþÿ
þÿ(z$DsdbTests.test_ridalloc_no_free_ridsc                 C   sN  | j  ¡  z0t ¡ }| j|_t dtjd¡|d< t dtjd¡|d< t dtjd¡|d< | j  |¡ |  	tj
¡}| j  ¡  W d   ƒ n1 s’0    Y  |  d|jjd ¡ d}d}t ¡ }| j|_t t|d	> |B ƒtjd¡|d< | j  |¡ | j  ¡ }|  ||¡ | j  ¡ \}}|  ||¡ |  ||¡ W | j  ¡  n| j  ¡  0 d S )
NÚ0r8   r7   r:   rR   r<   rP   rQ   r   )r"   r=   r*   rC   r0   rD   rE   rG   rH   rS   rT   r?   r@   rU   rV   r#   rJ   rA   )r1   rK   rY   rW   rX   Znext_free_rid5rM   rN   r5   r5   r6   Útest_ridalloc_new_ridsetÀ   sN    
þÿþÿþÿ(þÿ
z"DsdbTests.test_ridalloc_new_ridsetc                 C   sX  | j  ¡  z:d}d}d}d}t ¡ }| j|_t t|d> |B ƒtjd¡|d< t t|d> |B ƒtjd¡|d< t t|d ƒtjd	¡|d	< | j  	|¡ | j  
¡ }|  ||¡ | j  ¡ \}}|  ||¡ |  ||¡ | j  ¡ }	|  ||	¡ | j  
¡ }
|  ||
¡ | j  ¡ \}}|  ||¡ |  ||¡ | j  ¡ }|  |
|¡ W | j  ¡  n| j  ¡  0 d S )
NrP   rQ   i”  i÷  r   r8   r7   r<   r:   )r"   r=   r*   rC   r0   rD   rE   r#   rG   rH   r?   r@   rJ   rI   rA   )r1   rW   rX   Znew_pool_loZnew_pool_hirK   Znext_free_rid6rM   rN   Zrid2Znext_free_rid7Zfree_lo2Zfree_hi2Zrid3r5   r5   r6   Útest_ridalloc_move_to_new_pooló   sN    
þÿþÿþÿ



z(DsdbTests.test_ridalloc_move_to_new_poolc                 C   s&  | j  ¡  zt ¡ }| j|_t g tjd¡|d< | j  |¡ |  	tj
¡}| j  ¡  W d   ƒ n1 sj0    Y  |jj\}}|  tj|¡ |  d| j |¡ |  	tj
¡}| j  ¡  W d   ƒ n1 sÌ0    Y  |jj\}}|  tj|¡ |  d| j| jf |¡ W | j  ¡  n| j  ¡  0 d S )Nr   zVNo RID Set DN - Cannot find attribute rIDSetReferences of %s to calculate reference dnzBNo RID Set DN - Failed to add RID Set %s - Entry %s already exists)r"   r=   r*   rC   r.   rD   rE   rF   rH   rS   rT   r?   rU   rV   r@   ZERR_NO_SUCH_ATTRIBUTEr/   rI   ZERR_ENTRY_ALREADY_EXISTSr0   rA   )r1   rK   rY   ÚenumÚestrr5   r5   r6   Ú!test_ridalloc_no_ridsetreferences'  s:    
þÿ(þý(
ýüz+DsdbTests.test_ridalloc_no_ridsetreferencesc                 C   s"  | j  ¡  z| j}t ¡ }| j|_t |tjd¡|d< | j  	|¡ |  
tj¡}| j  ¡  W d   ƒ n1 sp0    Y  |jj\}}|  tj|¡ |  d| |¡ |  
tj¡}| j  ¡  W d   ƒ n1 sÐ0    Y  |jj\}}|  tj|¡ |  d| |¡ W | j  ¡  n| j  ¡  0 d S )Nr   zBad RID Set )r"   r=   r'   r*   rC   r.   rD   rE   rG   rH   rS   rT   r?   rU   rV   r@   ZERR_OPERATIONS_ERRORr/   rI   rA   )r1   Zfake_rid_set_strrK   rY   r^   r_   r5   r5   r6   Útest_ridalloc_no_rid_setL  s,    
þÿ((z"DsdbTests.test_ridalloc_no_rid_setc                 C   s   | j  d¡}|  |d¡ d S )Niþ	 z1.2.840.113556.1.4.1790)r"   Zget_oid_from_attidr@   )r1   Zoidr5   r5   r6   Útest_get_oid_from_attridk  s    z"DsdbTests.test_get_oid_from_attridc                 C   sª   | j jtj| jdgd}ttj|d d d ƒ}|j}|j	D ] }|j
dkr<|j}|jd |_q<t|ƒ}t ¡ }|d j|_t |tjd¡|d< |  tj| j j|dg¡ d S )NÚreplPropertyMetaData©r   r   r   r   é   r<   ú#local_oid:1.3.6.1.4.1.7165.4.3.14:0)r"   r)   r*   ÚSCOPE_SUBTREEr'   r   r	   ÚreplPropertyMetaDataBlobÚctrÚarrayÚattidÚversionr   rC   rD   rE   rG   rS   rT   rH   ©r1   r2   Úreplri   ÚoZold_versionÚreplBlobrK   r5   r5   r6   Útest_error_replpropertymetadatao  s"    
þÿ

z)DsdbTests.test_error_replpropertymetadatac                 C   s|   | j jtj| jdgd}ttj|d d d ƒ}t|ƒ}t 	¡ }|d j
|_
t |tjd¡|d< |  tj| j j|dg¡ d S )Nrc   rd   r   rf   )r"   r)   r*   rg   r'   r   r	   rh   r   rC   rD   rE   rG   rS   rT   rH   ©r1   r2   rn   rp   rK   r5   r5   r6   Ú(test_error_replpropertymetadata_nochange  s    
þÿz2DsdbTests.test_error_replpropertymetadata_nochangec                 C   sv   | j jtj| jdgd}ttj|d d d ƒ}t|ƒ}t 	¡ }|d j
|_
t |tjd¡|d< | j  |ddg¡ d S )Nrc   rd   r   rf   z#local_oid:1.3.6.1.4.1.7165.4.3.25:0)r"   r)   r*   rg   r'   r   r	   rh   r   rC   rD   rE   rG   rH   rr   r5   r5   r6   Ú*test_error_replpropertymetadata_allow_sort  s    
þÿz4DsdbTests.test_error_replpropertymetadata_allow_sortc                 C   sÚ   | j jtj| jddgd}ttj|d d d ƒ}|j}|j	D ]:}|j
dkr>|j}|jd |_tt|d d ƒƒd |_q>t|ƒ}t ¡ }|d j|_t |tjd¡|d< t dtjd¡|d< |  tj| j j|d	g¡ d S )
Nrc   Ú
uSNChangedrd   r   re   r<   znew valr   rf   )r"   r)   r*   rg   r'   r   r	   rh   ri   rj   rk   rl   r>   r#   Ú	local_usnr   rC   rD   rE   rG   rS   rT   rH   rm   r5   r5   r6   Ú test_twoatt_replpropertymetadata™  s&    
þÿ

z*DsdbTests.test_twoatt_replpropertymetadatac                 C   sØ   | j jtj| jddgd}ttj|d d d ƒ}|j}|j	D ]T}|j
dkr>|j}|jd |_tt|d d ƒƒd |_tt|d d ƒƒd |_q>t|ƒ}t ¡ }|d j|_t |tjd¡|d< | j  |dg¡ d S )Nrc   ru   rd   r   re   r<   rf   )r"   r)   r*   rg   r'   r   r	   rh   ri   rj   rk   rl   r>   r#   rv   Zoriginating_usnr   rC   rD   rE   rG   rH   rm   r5   r5   r6   Útest_set_replpropertymetadata­  s&    
þÿ

z'DsdbTests.test_set_replpropertymetadatac                 C   s   |   | j d¡d¡ d S )Nre   r   ©r@   r"   Zget_attribute_from_attid©r1   r5   r5   r6   Ú test_ok_get_attribute_from_attidÁ  s    z*DsdbTests.test_ok_get_attribute_from_attidc                 C   s   |   | j d¡d ¡ d S )NiË.  ry   rz   r5   r5   r6   Ú test_ko_get_attribute_from_attidÄ  s    z*DsdbTests.test_ko_get_attribute_from_attidc                 C   sP   | j jtj| jdgd}|  t|ƒd¡ t|d jƒ}|  | j  	|d¡d¡ d S )NrD   rd   r<   r   Z
unicodePwdé   )
r"   r)   r*   rg   r'   r@   Úlenr#   rD   Ú"get_attribute_replmetadata_version)r1   r2   rD   r5   r5   r6   Ú'test_get_attribute_replmetadata_versionÇ  s    
þz1DsdbTests.test_get_attribute_replmetadata_versionc                 C   sv   | j jtj| jdgd}|  t|ƒd¡ t|d jƒ}| j  	|d¡}| j  
|d|d ¡ |  | j  	|d¡|d ¡ d S )NrD   rd   r<   r   r   r}   )r"   r)   r*   rg   r'   r@   r~   r#   rD   r   Z"set_attribute_replmetadata_version)r1   r2   rD   rl   r5   r5   r6   Ú'test_set_attribute_replmetadata_versionÏ  s    
þz1DsdbTests.test_set_attribute_replmetadata_versionc              
   C   s\   z&| j jtj| jdgdtj gd}W n0 tjyV } z|  d¡ W Y d }~n
d }~0 0 d S )Nrc   zlocal_oid:%s:0©r   r   r   Úcontrolsú#Should have not raised an exception)	r"   r)   r*   rg   r'   r   Ú$DSDB_CONTROL_INVALID_NOT_IMPLEMENTEDrT   Úfail)r1   r2   Úer5   r5   r6   Ú test_no_error_on_invalid_controlÙ  s    
ÿý
z*DsdbTests.test_no_error_on_invalid_controlc              
   C   sx   z&| j jtj| jdgdtj gd}W nL tjyr } z2|j\}}|tj	kr^|  
d|d  ¡ W Y d }~n
d }~0 0 d S )Nrc   zlocal_oid:%s:1r‚   z9Got %s should have got ERR_UNSUPPORTED_CRITICAL_EXTENSIONr<   )r"   r)   r*   rg   r'   r   r…   rT   rV   Z"ERR_UNSUPPORTED_CRITICAL_EXTENSIONr†   )r1   r2   r‡   Úerrnor_   r5   r5   r6   Ú&test_error_on_invalid_critical_controlã  s    
ÿý


ÿz0DsdbTests.test_error_on_invalid_critical_controlc                 C   sD   | j  ¡  z| j  ¡ }W n   | j  ¡  ‚ Y n0 | j  ¡  t|ƒS ©N)r"   r=   rI   rA   Ztransaction_commitr#   )r1   rL   r5   r5   r6   rI   ò  s    


zDsdbTests.allocate_ridc              
   C   sú  | j  ¡ }t|ƒ d¡rd}nd}t|ƒd d… | d }tt |¡ƒ}| j  ¡ }d||f }z | j  |ddœ¡ |  	d¡ W n^ t
jyÜ } zD|j\}}	|  |t
jt|ƒ¡ d	tj }
|  |
|	v |	¡ W Y d }~n
d }~0 0 z"| j  |d|d
œ¡ |  	d¡ W n` t
jy` } zD|j\}}	|  |t
jt|ƒ¡ d	tj }
|  |
|	v |	¡ W Y d }~n
d }~0 0 dg}| j j|ddœ|d | j  |¡ z| j j|ddœ|d W nD t
jyè } z(|j\}}	|  	d||	f ¡ W Y d }~n
d }~0 0 | j  |¡ d S )Nr[   Ú9éÿÿÿÿz-1000z%CN=%s,CN=ForeignSecurityPrincipals,%sZforeignSecurityPrincipal©rD   ÚobjectClassz2No exception should get ERR_OBJECT_CLASS_VIOLATIONú%08X)rD   r   Ú	objectSidz0No exception should get ERR_UNWILLING_TO_PERFORMzprovision:0)rƒ   z!Got unexpected exception %d - %s )r"   Úget_domain_sidr#   Úendswithr   r
   Údom_sidÚget_default_basednÚaddr†   r*   rT   rV   r@   ZERR_OBJECT_CLASS_VIOLATIONr   ZWERR_DS_MISSING_REQUIRED_ATTÚ
assertTrueÚERR_UNWILLING_TO_PERFORMZWERR_DS_ILLEGAL_MOD_OPERATIONÚdelete)r1   r”   ÚcÚsid_strÚsidÚbasednrD   r‡   ÚcoderK   Úwerrrƒ   r5   r5   r6   Ú@test_duplicate_objectSIDs_allowed_on_foreign_security_principalsÿ  sh    

þ

&ý

&þýþý

ÿzJDsdbTests.test_duplicate_objectSIDs_allowed_on_foreign_security_principalsc              
   C   s
  | j  ¡ }t|ƒd }d}d}| j  ¡ }d}d||f }	t | j |	¡}
| j jtj|d| g d}|  t	|ƒd¡ | j jtj|d| g d}|  t	|ƒd¡ | j jtj|d| g d}|  t	|ƒd¡ |  
t| j |	¡ | j  |	|d	œ¡ t ¡ }|
|_t d
| tj|¡||< z| j  |¡ |  d¡ W n` tjy† } zD|j\}}|  |tjt|ƒ¡ dtj }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }|
|_t d
| tj|¡||< z| j  |¡ |  d¡ W n` tjy( } zD|j\}}|  |tjt|ƒ¡ dtj }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }|
|_t d
| tj|¡||< z| j  |¡ W n2 tjy’ } z|  d¡ W Y d }~n
d }~0 0 | j jtj|d| g d}|  t	|ƒd¡ | j  |d j¡ | j  |
¡ | j jtj|d| g d}|  t	|ƒd¡ d S )Nú-4294967294úS-1-5-32-4294967294úS-1-5-4294967294Zdsdb_test_fpoúcn=%s,cn=Users,%sú(objectSid=%s)©r   r   Z
expressionr   r   rŽ   ú<SID=%s>z4No exception should get LDB_ERR_UNWILLING_TO_PERFORMr   z.No exception should get LDB_ERR_NO_SUCH_OBJECTr„   r<   )r"   r’   r#   r•   r*   r+   r)   rg   r@   r~   r(   r   r–   rC   rD   rE   ÚFLAG_MOD_ADDrH   r†   rT   rV   r˜   r   ZWERR_DS_INVALID_GROUP_TYPEr—   ZERR_NO_SUCH_OBJECTZWERR_NO_SUCH_MEMBERr™   )r1   Ú	obj_classÚfpo_attrr”   Úlsid_strÚbsid_strÚfsid_strr   ÚcnZdn_strrD   r2   rK   r‡   rž   rŸ   r5   r5   r6   Ú_test_foreignSecurityPrincipalE  s¦    


ý
ý
ýþ
þ

&
þ

&
þ 
ý
ýz(DsdbTests._test_foreignSecurityPrincipalc                 C   s   |   dd¡S )NÚgroupÚmember©r¯   rz   r5   r5   r6   Ú$test_foreignSecurityPrincipal_member™  s    ÿz.DsdbTests.test_foreignSecurityPrincipal_memberc                 C   s   |   dd¡S )NzmsDS-AzRolezmsDS-MembersForAzRoler²   rz   r5   r5   r6   Ú.test_foreignSecurityPrincipal_MembersForAzRole  s    ÿz8DsdbTests.test_foreignSecurityPrincipal_MembersForAzRolec                 C   s   |   dd¡S )NÚcomputerzmsDS-NeverRevealGroupr²   rz   r5   r5   r6   Ú.test_foreignSecurityPrincipal_NeverRevealGroup¡  s    ÿz8DsdbTests.test_foreignSecurityPrincipal_NeverRevealGroupc                 C   s   |   dd¡S )Nrµ   zmsDS-RevealOnDemandGroupr²   rz   r5   r5   r6   Ú1test_foreignSecurityPrincipal_RevealOnDemandGroup¥  s    ÿz;DsdbTests.test_foreignSecurityPrincipal_RevealOnDemandGroupTc              
   C   sä  | j  ¡ }t|ƒd }d}	d}
| j  ¡ }d}d||f }t | j |¡}d}d||f }t | j |¡}| j jtj|d| g d}|  t	|ƒd	¡ | j jtj|d|	 g d}|  t	|ƒd	¡ | j jtj|d|
 g d}|  t	|ƒd	¡ |  
t| j |¡ |  
t| j |¡ | j  ||d
œ¡ | j  ||d
œ¡ t ¡ }||_t d| tj|¡||< z| j  |¡ |  d| ¡ W n\ tjyÆ } z@|j\}}|  ||t|ƒ¡ d| }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }||_t d|	 tj|¡||< z| j  |¡ |  d| ¡ W n\ tjyh } z@|j\}}|  ||t|ƒ¡ d| }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }||_t d|
 tj|¡||< z| j  |¡ |  d| ¡ W n\ tjy
 } z@|j\}}|  ||t|ƒ¡ d| }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }||_t d| tj|¡||< z$| j  |¡ |sT|  d| ¡ W np tjyÆ } zT|r~|  d| ¡ |j\}}|  ||t|ƒ¡ d| }|  ||v |¡ W Y d }~n
d }~0 0 | j  |¡ | j  |¡ d S )Nr¡   r¢   r£   Zdsdb_test_fpo1r¤   Zdsdb_test_fpo2r¥   r¦   r   rŽ   r§   zNo exception should get %sr   z%sz'Should have not raised an exception: %s)r"   r’   r#   r•   r*   r+   r)   rg   r@   r~   r(   r   r–   rC   rD   rE   r¨   rH   r†   rT   rV   r—   r™   )r1   r©   rª   Zmsg_expZlerr_expZwerr_expÚallow_referencer”   r«   r¬   r­   r   Zcn1Zdn1_strZdn1Zcn2Zdn2_strZdn2r2   rK   r‡   rž   rŸ   r5   r5   r6   Ú#_test_fail_foreignSecurityPrincipal©  sÈ    


ý
ý
ýþþ
þ
&
þ
&
þ
&
þ
&z-DsdbTests._test_fail_foreignSecurityPrincipalc                 C   s   | j dddtjtjddS )Nr°   zmsDS-NonMembersz/LDB_ERR_UNWILLING_TO_PERFORM/WERR_NOT_SUPPORTEDF)r¸   )r¹   r*   r˜   r   ZWERR_NOT_SUPPORTEDrz   r5   r5   r6   Ú(test_foreignSecurityPrincipal_NonMembers  s    üz2DsdbTests.test_foreignSecurityPrincipal_NonMembersc                 C   s   |   dddtjtj¡S )Nrµ   zmsDS-HostServiceAccountú;LDB_ERR_CONSTRAINT_VIOLATION/WERR_DS_NAME_REFERENCE_INVALID©r¹   r*   ÚERR_CONSTRAINT_VIOLATIONr   ÚWERR_DS_NAME_REFERENCE_INVALIDrz   r5   r5   r6   Ú0test_foreignSecurityPrincipal_HostServiceAccount  s    üz:DsdbTests.test_foreignSecurityPrincipal_HostServiceAccountc                 C   s   |   dddtjtj¡S )NÚuserÚmanagerr»   r¼   rz   r5   r5   r6   Ú%test_foreignSecurityPrincipal_manager   s    üz/DsdbTests.test_foreignSecurityPrincipal_managerc              
   C   sÞ   | j  ¡ }|  ¡ }t|ƒd | }tt |¡ƒ}| j  ¡ }d}d||f }| j  |d|dœ¡ | j  	|¡ z"| j  |d|dœ¡ |  
d¡ W nL tjyØ } z2|j\}	}
|	tjkrÄ|  
d|	|
f ¡ W Y d }~n
d }~0 0 d S )Nú-Zdsdb_test_01r¤   rÀ   )rD   r   Ú	objectSIDú4No exception should get LDB_ERR_CONSTRAINT_VIOLATIONz8Got %d - %s should have got LDB_ERR_CONSTRAINT_VIOLATION)r"   r’   rI   r#   r   r
   r”   r•   r–   r™   r†   r*   rT   rV   r½   )r1   r”   rL   r›   rœ   r   r®   rD   r‡   rž   rK   r5   r5   r6   Ú6test_duplicate_objectSIDs_not_allowed_on_local_objects,  s4    

ýý

þz@DsdbTests.test_duplicate_objectSIDs_not_allowed_on_local_objectsc              
   C   s@  | j  ¡ }d| }d| }| j  ¡ }t|ƒd }d}|  t| j |¡ |  t| j |¡ | j  |ddœ¡ | j jtj	|ddgd	}|  
t|ƒd
¡ ttj|d d d ƒ}ttj|d d d ƒ}	|d j}
| j  |ddœ¡ | j jtj	|ddgd	}|  
t|ƒd
¡ ttj|d d d ƒ}ttj|d d d ƒ}| j  |¡ t ¡ }|
|_t d| tjd¡|d< z| j  |¡ |  d¡ W n` tjyÞ } zD|j\}}|  
|tjt|ƒ¡ dtj }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }|
|_t d| tjd¡|d< z| j  |¡ |  d¡ W n` tjy€ } zD|j\}}|  
|tjt|ƒ¡ dtj }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }|
|_t d| tjd¡|d< | j  |¡ t ¡ }|
|_t d| tjd¡|d< | j  |¡ t ¡ }|
|_t d| tjd¡|d< | j  |¡ t ¡ }|
|_t d| tjd¡|d< | j  |¡ t ¡ }|
|_t d| tjd¡|d< z| j  |¡ |  d¡ W n` tjyê } zD|j\}}|  
|tjt|ƒ¡ dtj }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }|
|_t d| tjd¡|d< z| j  |¡ |  d¡ W n` tjyŒ } zD|j\}}|  
|tjt|ƒ¡ dtj }|  ||v |¡ W Y d }~n
d }~0 0 t ¡ }|
|_t d| tjd¡|d< z| j  |¡ |  d¡ W n` tjy. } zD|j\}}|  
|tjt|ƒ¡ dtj }|  ||v |¡ W Y d }~n
d }~0 0 | j  |
¡ d S )Nzcn=reference_kept,cn=Users,%sz cn=reference_removed,cn=Users,%sr¡   z$afafafaf-fafa-afaf-fafa-afafafafafafrÀ   rŽ   Z
objectGUIDrÄ   rd   r<   r   r‘   r§   rÁ   rÅ   r   z	<GUID=%s>Z	assistantzCN=NoneNone,%s)r"   r•   r’   r#   r(   r   r–   r)   r*   rg   r@   r~   r   r   ZGUIDr
   r”   rD   r™   rC   rE   r¨   rH   r†   rT   rV   r½   r   r¾   r—   rF   )r1   r   Zkept_dn_strZremoved_dn_strr”   Znone_sid_strZnone_guid_strr2   Z	kept_guidZkept_sidZkept_dnZremoved_guidZremoved_sidrK   r‡   rž   rŸ   r5   r5   r6   Ú#test_linked_vs_non_linked_referenceI  s   

þ
þ
þ
þ
þ

&
þ

&
þ
þ
þ
þ
þ

&
þ

&
þ

&z-DsdbTests.test_linked_vs_non_linked_referencec                 C   sF   | j  ¡ }t | j d¡}|}| |¡ t|ƒ}|  || j  |¡¡ d S ©NúCN=Users)r"   r&   r*   r+   Úadd_baser#   r@   Únormalize_dn_in_domain)r1   r&   Úpart_dnÚfull_dnZfull_strr5   r5   r6   Ú test_normalize_dn_in_domain_fullÙ  s    


ÿz*DsdbTests.test_normalize_dn_in_domain_fullc                 C   s>   | j  ¡ }d}t | j |¡}| |¡ |  || j  |¡¡ d S rÈ   ©r"   r&   r*   r+   rÊ   r@   rË   )r1   r&   Zpart_strrÍ   r5   r5   r6   Ú test_normalize_dn_in_domain_partç  s    


ÿz*DsdbTests.test_normalize_dn_in_domain_partc                 C   s>   | j  ¡ }t | j d¡}|}| |¡ |  || j  |¡¡ d S rÈ   rÏ   )r1   r&   rÌ   rÍ   r5   r5   r6   Ú#test_normalize_dn_in_domain_full_dnó  s    


ÿz-DsdbTests.test_normalize_dn_in_domain_full_dnc                 C   sJ   | j  ¡ }t | j d¡}|  t | j t|ƒd t|ƒ ¡| j  |¡¡ d S )NrÉ   ú,)r"   r&   r*   r+   r@   r#   rË   )r1   r&   rÌ   r5   r5   r6   Ú#test_normalize_dn_in_domain_part_dnÿ  s    
ÿ
þz-DsdbTests.test_normalize_dn_in_domain_part_dn)T)*Ú__name__Ú
__module__Ú__qualname__r   r;   rB   rO   rZ   r\   r]   r`   ra   rb   rq   rs   rt   rw   rx   r{   r|   r€   r   rˆ   rŠ   rI   r    r¯   r³   r´   r¶   r·   r¹   rº   r¿   rÂ   rÆ   rÇ   rÎ   rÐ   rÑ   rÓ   Ú__classcell__r5   r5   r3   r6   r   "   sP   *	,!34%

FT þ
i r   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚDsdbFullScanTestsc                    s<   t t| ƒ ¡  tj ¡ | _tƒ | _| j 	| j¡ t
ƒ | _d S r‹   )r   rØ   r   r   r   r   r   r   r   r    r   r!   rz   r3   r5   r6   r     s
    zDsdbFullScanTests.setUpc              
   C   s^   zt | j| j| jdgd| _W n: tjyX } z |jd }|  d¡ W Y d }~n
d }~0 0 d S )Nz$disable_full_db_scan_for_self_test:1)r   r   r   Zoptionsr<   z(sam.ldb required a full scan to start up)	r   r!   r   r   r"   r*   rT   rV   r†   )r1   rY   r_   r5   r5   r6   Útest_sam_ldb_open_no_full_scan  s    ý
z0DsdbFullScanTests.test_sam_ldb_open_no_full_scan)rÔ   rÕ   rÖ   r   rÙ   r×   r5   r5   r3   r6   rØ   
  s   rØ   )Ú__doc__Zsamba.credentialsr   Zsamba.samdbr   Z
samba.authr   Zsamba.testsr   r   Z	samba.ndrr   r   Zsamba.dcerpcr	   r
   r   r   r   r   r*   r$   r   rØ   r5   r5   r5   r6   Ú<module>   s*          o