
    b(                         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	e          ZdS )
    N)BlackboxTestCaseBlackboxProcessError)CommandError)LoadParm)join_DC)Credentials)get_samba_loggerc                       e 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g fdZd Zd Zd Zd Zd ZdS )DomainBackupOfflineCmpc                 0    |                      d           d S Ntdbnested_testcaseselfs    C/usr/lib/python3/dist-packages/samba/tests/domain_backup_offline.py%test_domain_backup_offline_nested_tdbz<DomainBackupOfflineCmp.test_domain_backup_offline_nested_tdb&       U#####    c                 0    |                      d           d S Nmdbr   r   s    r   %test_domain_backup_offline_nested_mdbz<DomainBackupOfflineCmp.test_domain_backup_offline_nested_mdb)   r   r   c                    |                      |          | _        d | _        t          j                            | j        d          }t          j                            | j        dd          }t          j        ||           t          j                            | j        dd          }t          |          }|	                    d|           |
                    d|           |                     | j                  }t          j        |          }|                                }|                     t!          |          t!          t          |                               d S )Nprivatestateetczsmb.conf)filename_for_non_global_lpzprivate dirF)	provisionprov_dirextract_dirospathjoinshutilmover   setdumpbackuptarfileopengetnamesassertEquallen)	r   backendsrcdstsmbconflpbackup_filetfnamess	            r   r   z&DomainBackupOfflineCmp.nested_testcase,   s   w//gll4=)44gll4='9== 	C',,t}eZ@@ 999
}c"""
wkk$-00 \+&&USU__55555r   c                 0    |                      d           d S r   join_restore_testcaser   s    r   +test_domain_backup_offline_join_restore_tdbzBDomainBackupOfflineCmp.test_domain_backup_offline_join_restore_tdbD       ""5)))))r   c                 0    |                      d           d S r   r9   r   s    r   +test_domain_backup_offline_join_restore_mdbzBDomainBackupOfflineCmp.test_domain_backup_offline_join_restore_mdbG   r<   r   c                    |                      |          | _        d | _        	 |                     | j                  }n,# t          $ r}|                     |           Y d }~nd }~ww xY w|                     |          | _        d S N)r%   r!   r"   r*   r   failrestore)r   r0   r5   es       r   r:   z,DomainBackupOfflineCmp.join_restore_testcaseJ   s    		'**	++dm44KK# 	 	 	IIaLLLLLLLL	  <<44s   > 
A'A""A'c                 0    |                      d           d S r   hard_link_testcaser   s    r   (test_domain_backup_offline_hard_link_tdbz?DomainBackupOfflineCmp.test_domain_backup_offline_hard_link_tdbU       &&&&&r   c                 0    |                      d           d S r   rE   r   s    r   (test_domain_backup_offline_hard_link_mdbz?DomainBackupOfflineCmp.test_domain_backup_offline_hard_link_mdbX   rH   r   c           	      (   |                      |          | _        d | _        t          j        t          j                            | j        dd          t          j                            | j        dd                     |                     | j                  }t          j	        | j
                  | _        t          j        |          }|                    | j                   |                     t          j                            t          j                            | j        dd                               |                     t          j                            t          j                            | j        dd                               d S )Nr   z	krb5.confr   dirstatedir)r    r!   r"   r#   linkr$   r%   r*   tempfilemkdtemptempdirr+   r,   
extractall
assertTrueexistsassertFalser   r0   r5   r6   s       r   rF   z)DomainBackupOfflineCmp.hard_link_testcase[   s\   w// 	T]I{CCT]G[AA	C 	C 	C kk$-00 $+===\+&&
d&''' 	rw||D4D4={(L (L M M 	N 	N 	NT5E4>)M )M N N 	O 	O 	O 	O 	Or   c                 0    |                      d           d S r   untar_testcaser   s    r   $test_domain_backup_offline_untar_tdbz;DomainBackupOfflineCmp.test_domain_backup_offline_untar_tdbq       E"""""r   c                 0    |                      d           d S r   rY   r   s    r   $test_domain_backup_offline_untar_mdbz;DomainBackupOfflineCmp.test_domain_backup_offline_untar_mdbt   r\   r   c                 0    |                      d           d S r   restore_testcaser   s    r   &test_domain_backup_offline_restore_tdbz=DomainBackupOfflineCmp.test_domain_backup_offline_restore_tdbw       e$$$$$r   c                 0    |                      d           d S r   r`   r   s    r   &test_domain_backup_offline_restore_mdbz=DomainBackupOfflineCmp.test_domain_backup_offline_restore_mdbz   rc   r   c                 2   |                      |          | _        d | _        |                     | j                  }|                     |          | _        g d}dd                    |          z   }d|g}|                     | j        | j        |           d S )N)servicePrincipalNamelastLogonTimestamprIDAllocationPoolrIDAvailablePoolrIDUsedPoollocalPolicyFlagsoperatingSystemdisplayName	dnsRecorddNSTombstonedzmsDS-NC-Replica-LocationszmsDS-HasInstantiatedNCsinterSiteTopologyGeneratorz	--filter=,z--two)r    r!   r"   r*   rB   r%   ldapcmp)r   r0   r5   ignore_attrs
filter_argargss         r   ra   z'DomainBackupOfflineCmp.restore_testcase}   s    w//kk$-00<<446 6 6 !388L#9#99
$T]D$4d;;;;;r   c                 V   |                      |          | _        d | _        |                     | j                  }t	          j        | j                  | _        t          j        |          }|	                    | j                   | 
                    | j        | j                   d S )NrL   )r    r!   r"   r*   rP   rQ   rR   r+   r,   rS   rs   rW   s       r   rZ   z%DomainBackupOfflineCmp.untar_testcase   s    w//kk$-00#+===\+&&
d&'''T]D$455555r   c                    t           j                            dd          }dt           j                            t           j                            |          |          z   }dt           j                            t           j                            |          |          z   }dD ]5}dd                    |||g|z             z   }|                     |           6d S )Nr   zsam.ldbztdb://)domainconfigurationschema	dnsdomain	dnsforestzsamba-tool ldapcmp  )r#   r$   r%   realpathcheck_output)	r   r!   ex_dirrv   sam_fnurl1url2	partitioncmds	            r   rs   zDomainBackupOfflineCmp.ldapcmp   s    i33"',,rw'7'7'A'A6JJJ"',,rw'7'7'?'?HHH4 	# 	#I'#((D$	3JT3Q*R*RRCc""""	# 	#r   c                     t          j        | j                  }d}|                    ||          }|                     |           |S )NrL   zsamba-tool domain provision --domain FOO --realm foo.example.com --targetdir {target} --backend-store {backend} --host-name OLDSERVER --option="vfs objects=dfs_samba4 acl_xattr fake_acls xattr_tdb")targetr0   rP   rQ   rR   formatr   )r   r0   r   prov_cmds       r   r    z DomainBackupOfflineCmp.provision   sO    !dl333W ??&'?BB(###r   c           
         t          j        | j                  }d}d}|                    t          j        d         t          j        d         t          j        d         t          j        d         t          j        d         |||	          }|                     |           d
}|                    t          j        d         t          j        d         t          j        d         |          }|                     |           |S )NrL   offlinebackupdczsamba-tool domain join {domain} DC --server {server} --realm {realm} --username {username}%{password} --targetdir {target} --backend-store {backend} --option='netbios name = {new_dc_name}' --option="vfs objects=dfs_samba4 acl_xattr fake_acls xattr_tdb"	DC_SERVERDOMAINREALMUSERNAMEPASSWORD)serverry   realmusernamepasswordr   r0   new_dc_nameztsamba-tool domain demote --server {server} --username {username}%{password} --remove-other-dead-server={new_dc_name})r   r   r   r   )rP   rQ   rR   r   r#   environr   )r   r0   r   r   join_cmd
demote_cmds         r   r%   zDomainBackupOfflineCmp.join   s    !dl333'W ??"*[*A*,*X*>)+G)<,.Jz,B,.Jz,B*0+2/: # < < 	(###>

  &&bj.E02
:0F02
:0F3> ' @ @
 	*%%%r   c                 n   d                     |          }|                     |           d t          j        |          D             }t	          |          dk    r2t          dd                     t	          |                    z             t          j                            ||d                   }|S )Nz\samba-tool domain backup offline --targetdir={prov_dir} --configfile={prov_dir}/etc/smb.conf)r!   c                 f    g | ].}|                     d           |                    d          ,|/S )zsamba-backup-z.tar.bz2)
startswithendswith).0fns     r   
<listcomp>z1DomainBackupOfflineCmp.backup.<locals>.<listcomp>   sL     . . .Bo66.[[,,.R . . .r      z(expected domain backup to create one tarz file but got {0}r   )r   r   r#   listdirr/   r   r$   r%   )r   r!   r   	tar_filesr5   s        r   r*   zDomainBackupOfflineCmp.backup   s    67=vxv7P7P 	#. ."*X"6"6 . . .	 y>>QI299#i..II J K K K gll8Yq\::r   c                     t          j        | j                  }d                    ||          }|                     |           |S )NrL   z\samba-tool domain backup restore --backup-file={f} --targetdir={d} --newservername=NEWSERVER)fdr   )r   r5   r"   r   s       r   rB   zDomainBackupOfflineCmp.restore   sX    &4<888+,2F[5@ -3 -B -B 	 	#r   c                 |    t          j        | j                   | j        rt          j        | j                   d S d S r@   )r&   rmtreer!   r"   r   s    r   tearDownzDomainBackupOfflineCmp.tearDown   sB    dm$$$ 	,M$*+++++	, 	,r   N)__name__
__module____qualname__r   r   r   r;   r>   r:   rG   rJ   rF   r[   r^   rb   re   ra   rZ   rs   r    r%   r*   rB   r    r   r   r   r   $   s]       $ $ $$ $ $6 6 60* * ** * *	5 	5 	5' ' '' ' 'O O O,# # ## # #% % %% % %< < <$	6 	6 	6 .0 	# 	# 	# 	#  &" " "H   	 	 	, , , , ,r   r   )r+   r#   r&   rP   samba.testsr   r   samba.netcmdr   samba.paramr   
samba.joinr   samba.credentialsr   samba.loggerr	   r   r   r   r   <module>r      s   $  				   > > > > > > > > % % % % % %                   ) ) ) ) ) ) ) ) ) ) ) )X, X, X, X, X,- X, X, X, X, X,r   