a
    ¡Öa4%  ã                   @   s€   d dl Z d dlZd dlZd dlZd dlmZ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 G dd	„ d	eƒZdS )
é    N)ÚBlackboxTestCaseÚBlackboxProcessError)ÚCommandError)ÚLoadParm)Újoin_DC)ÚCredentials)Úget_samba_loggerc                   @   s¸   e 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
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zg fdd „Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+S ),ÚDomainBackupOfflineCmpc                 C   s   |   d¡ d S ©NZtdb©Únested_testcase©Úself© r   úC/usr/lib/python3/dist-packages/samba/tests/domain_backup_offline.pyÚ%test_domain_backup_offline_nested_tdb&   s    z<DomainBackupOfflineCmp.test_domain_backup_offline_nested_tdbc                 C   s   |   d¡ d S ©NZmdbr   r   r   r   r   Ú%test_domain_backup_offline_nested_mdb)   s    z<DomainBackupOfflineCmp.test_domain_backup_offline_nested_mdbc           	      C   s®   |   |¡| _d | _tj | jd¡}tj | jdd¡}t ||¡ tj | jdd¡}t|d}| 	d|¡ | 
d|¡ |  | j¡}t |¡}| ¡ }|  t|ƒtt	|ƒƒ¡ d S )NÚprivateÚstateÚetczsmb.conf)Zfilename_for_non_global_lpzprivate dirF)Ú	provisionÚprov_dirÚextract_dirÚosÚpathÚjoinÚshutilZmover   ÚsetÚdumpÚbackupÚtarfileÚopenZgetnamesZassertEqualÚlen)	r   ÚbackendÚsrcZdstZsmbconfZlpÚbackup_fileÚtfÚnamesr   r   r   r   ,   s    

z&DomainBackupOfflineCmp.nested_testcasec                 C   s   |   d¡ d S r
   ©Újoin_restore_testcaser   r   r   r   Ú+test_domain_backup_offline_join_restore_tdbD   s    zBDomainBackupOfflineCmp.test_domain_backup_offline_join_restore_tdbc                 C   s   |   d¡ d S r   r)   r   r   r   r   Ú+test_domain_backup_offline_join_restore_mdbG   s    zBDomainBackupOfflineCmp.test_domain_backup_offline_join_restore_mdbc              
   C   sb   |   |¡| _d | _z|  | j¡}W n. tyP } z|  |¡ W Y d }~n
d }~0 0 |  |¡| _d S ©N)r   r   r   r    r   ZfailÚrestore)r   r$   r&   Úer   r   r   r*   J   s     z,DomainBackupOfflineCmp.join_restore_testcasec                 C   s   |   d¡ d S r
   ©Úhard_link_testcaser   r   r   r   Ú(test_domain_backup_offline_hard_link_tdbU   s    z?DomainBackupOfflineCmp.test_domain_backup_offline_hard_link_tdbc                 C   s   |   d¡ d S r   r0   r   r   r   r   Ú(test_domain_backup_offline_hard_link_mdbX   s    z?DomainBackupOfflineCmp.test_domain_backup_offline_hard_link_mdbc              	   C   s°   |   |¡| _d | _t tj | jdd¡tj | jdd¡¡ |  | j¡}tj	| j
d| _t |¡}| | j¡ |  tj tj | jdd¡¡¡ |  tj tj | jdd¡¡¡ d S )Nr   z	krb5.confr   ©ÚdirZstatedir)r   r   r   r   Úlinkr   r   r    ÚtempfileÚmkdtempÚtempdirr!   r"   Ú
extractallZ
assertTrueÚexistsZassertFalse©r   r$   r&   r'   r   r   r   r1   [   s    ÿ
ÿÿz)DomainBackupOfflineCmp.hard_link_testcasec                 C   s   |   d¡ d S r
   ©Úuntar_testcaser   r   r   r   Ú$test_domain_backup_offline_untar_tdbq   s    z;DomainBackupOfflineCmp.test_domain_backup_offline_untar_tdbc                 C   s   |   d¡ d S r   r=   r   r   r   r   Ú$test_domain_backup_offline_untar_mbdt   s    z;DomainBackupOfflineCmp.test_domain_backup_offline_untar_mbdc                 C   s   |   d¡ d S r
   ©Úrestore_testcaser   r   r   r   Ú&test_domain_backup_offline_restore_tdbw   s    z=DomainBackupOfflineCmp.test_domain_backup_offline_restore_tdbc                 C   s   |   d¡ d S r   rA   r   r   r   r   Ú&test_domain_backup_offline_restore_mbdz   s    z=DomainBackupOfflineCmp.test_domain_backup_offline_restore_mbdc                 C   s^   |   |¡| _d | _|  | j¡}|  |¡| _g d¢}dd |¡ }d|g}|  | j| j|¡ d S )N)ZservicePrincipalNameZlastLogonTimestampZrIDAllocationPoolZrIDAvailablePoolZrIDUsedPoolZlocalPolicyFlagsZoperatingSystemZdisplayNameZ	dnsRecordZdNSTombstonedzmsDS-NC-Replica-LocationszmsDS-HasInstantiatedNCsZinterSiteTopologyGeneratorz	--filter=ú,z--two)r   r   r   r    r.   r   Úldapcmp)r   r$   r&   Zignore_attrsZ
filter_argÚargsr   r   r   rB   }   s    z'DomainBackupOfflineCmp.restore_testcasec                 C   sX   |   |¡| _d | _|  | j¡}tj| jd| _t |¡}| 	| j¡ |  
| j| j¡ d S )Nr4   )r   r   r   r    r7   r8   r9   r!   r"   r:   rF   r<   r   r   r   r>      s    
z%DomainBackupOfflineCmp.untar_testcasec           	      C   sr   t j dd¡}dt j t j |¡|¡ }dt j t j |¡|¡ }dD ]&}dd |||g| ¡ }|  |¡ qFd S )Nr   zsam.ldbztdb://)ÚdomainZconfigurationZschemaZ	dnsdomainZ	dnsforestzsamba-tool ldapcmp ú )r   r   r   ÚrealpathÚcheck_output)	r   r   Zex_dirrG   Zsam_fnZurl1Zurl2Ú	partitionÚcmdr   r   r   rF   š   s    zDomainBackupOfflineCmp.ldapcmpc                 C   s.   t j| jd}d}|j||d}|  |¡ |S )Nr4   z°samba-tool domain provision --domain FOO --realm foo.example.com --targetdir {target} --backend-store {backend} --host-name OLDSERVER --option="vfs objects=fake_acls xattr_tdb")Útargetr$   ©r7   r8   r9   ÚformatrK   )r   r$   rN   Zprov_cmdr   r   r   r   ¦   s
    
z DomainBackupOfflineCmp.provisionc              	   C   sV   t j| jd}d}|jtjd tjd tjd tjd tjd ||d}|  |¡ |S )	Nr4   zÔsamba-tool domain join {domain} DC --server {server} --realm {realm} --username {username}%{password} --targetdir {target} --backend-store {backend} --option="vfs objects=dfs_samba4 acl_xattr fake_acls xattr_tdb"Z	DC_SERVERZDOMAINZREALMZUSERNAMEZPASSWORD)ZserverrH   ZrealmZusernameZpasswordrN   r$   )r7   r8   r9   rP   r   ÚenvironrK   )r   r$   rN   Zjoin_cmdr   r   r   r   ¹   s    ú
zDomainBackupOfflineCmp.joinc                 C   sb   dj |d}|  |¡ dd„ t |¡D ƒ}t|ƒdkrLtdd  t|ƒ¡ ƒ‚tj ||d ¡}|S )	NzRsamba-tool domain backup offline --targetdir={prov_dir} -s {prov_dir}/etc/smb.conf)r   c                 S   s$   g | ]}|  d ¡r| d¡r|‘qS )zsamba-backup-z.tar.bz2)Ú
startswithÚendswith)Ú.0Úfnr   r   r   Ú
<listcomp>Ô   s   

þz1DomainBackupOfflineCmp.backup.<locals>.<listcomp>é   z(expected domain backup to create one tarz file but got {0}r   )rP   rK   r   Úlistdirr#   r   r   r   )r   r   rM   Z	tar_filesr&   r   r   r   r    Î   s    ÿ
ÿzDomainBackupOfflineCmp.backupc                 C   s*   t j| jd}dj||d}|  |¡ |S )Nr4   z\samba-tool domain backup restore --backup-file={f} --targetdir={d} --newservername=NEWSERVER)ÚfÚdrO   )r   r&   r   rM   r   r   r   r.   Þ   s    ý
zDomainBackupOfflineCmp.restorec                 C   s"   t  | j¡ | jrt  | j¡ d S r-   )r   Zrmtreer   r   r   r   r   r   ÚtearDowné   s    zDomainBackupOfflineCmp.tearDownN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r+   r,   r*   r2   r3   r1   r?   r@   rC   rD   rB   r>   rF   r   r   r    r.   r[   r   r   r   r   r	   $   s*   r	   )r!   r   r   r7   Zsamba.testsr   r   Zsamba.netcmdr   Zsamba.paramr   Z
samba.joinr   Zsamba.credentialsr   Zsamba.loggerr   r	   r   r   r   r   Ú<module>   s   	