File: //usr/lib/python3/dist-packages/samba/tests/__pycache__/domain_backup.cpython-310.pyc
o
�/ak � @ s� d dl mZmZ d dlZd dlZd dlZd dlmZmZm Z m
Z
mZ d dlZd dl
mZ d dlmZ d dl mZmZ d dlmZ d dlZd dl mZ d d lmZ d
d� ZG dd
� d
e
�ZG dd� de�ZG dd� de�ZG dd� de�ZdS )� )� provision�paramN)�env_loadparm�create_test_ou�BlackboxProcessError�BlackboxTestCase�
connect_samdb)�SamDB)�system_session)�Ldb�dn_from_dns_name)�get_fsmo_roleowner)�sites)�_dsdb_load_udv_v2c C s( t | t� |d�}|jdg d�tjdd�S )N)�session_info�lpzCN=Primary Domains)�objectClass�samAccountName�secretzmsDS-KeyVersionNumberz(objectClass=kerberosSecret))�base�attrs�scope�
expression)r r
�search�ldb�
SCOPE_SUBTREE)�secrets_pathr �secrets_ldb� r �;/usr/lib/python3/dist-packages/samba/tests/domain_backup.py�get_prim_dom! s �r c s� e Zd Z� fdd�Zdd� Zdd� Zdd� Zd d
� Zd2dd
�Zdd� Z dd� Z
d3dd�Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd � Zd4d"d#�Zd$d%� Zd&d'� Zd(d)� Zd*d+� Zd,d-� Zd2d.d/�Zd2d0d1�Z� ZS )5�DomainBackupBasec s� t t| ��� tjd }dtjd tjd f | _td| �| _d| _|� � | _
d | _ddg| _tjd | _
tjd
| _d | _d S )N� DC_SERVERz-U%s%%%s�DC_USERNAME�DC_PASSWORDz ldap://%s�
BACKUPSERV�
sidForRestore�
backupDate�DOMAIN�REALM)�superr! �setUp�os�environ� user_authr r �
new_server�upper�server�base_cmd�backup_markers�restore_domain�
restore_realm�backend)�selfr1 �� __class__r r r+ 2 s
�
zDomainBackupBase.setUpc C s || _ | jd| g7 _dS )z8Explicitly set the DB backend that the backup should usez--backend-store=N)r6 r2 )r7 r6 r r r �use_backendC s zDomainBackupBase.use_backendc C s. t |�� �}d| }||d| d| d| gS )NzCN=Configuration,%szCN=Schema,%szDC=DomainDnsZones,%szDC=ForestDnsZones,%s)�str�get_default_basedn)r7 �samdb�basedn� config_dnr r r �get_expected_partitionsH s
�z(DomainBackupBase.get_expected_partitionsc C s` |j dtjdgd�}dd� |d �d�D �}| �|�}|D ]}| �||v d|t|�f � qdS ) z?Asserts all expected partitions are present in the backup samdb� �namingContexts�r r r c S � g | ]}t |��qS r �r; )�.0�rr r r �
<listcomp>S � z>DomainBackupBase.assert_partitions_present.<locals>.<listcomp>r z%s not in %sN)r r �
SCOPE_BASE�getr@ �
assertTruer; )r7 r= �res�
actual_ncs�expected_ncs�ncr r r �assert_partitions_presentO s
�
��z*DomainBackupBase.assert_partitions_presentc C sX | j �� }| �|�}|D ]}d}t||�D ]
}|t|j�kr"d} nq| �|d� qdS )z>Asserts an replUpToDateVector entry exists for the original DCFTz"Couldn't find UDTV for original DCN)r �get_invocation_idr@ r r; �source_dsa_invocation_idrL )r7 r= �
orig_invoc_idrO rP �found�cursorr r r �assert_repl_uptodate_vector[ s
��z,DomainBackupBase.assert_repl_uptodate_vectorNc C sh d}|j |�� tj|d�}d}|D ]}|t|j�v rd}q| �|d| � |r2| �t|�|k� dS dS )z=Checks that the expected server is present in the restored DBz*(&(objectClass=Server)(serverReference=*))�r r FTzCould not find %s serverN)r �get_config_basednr r r; �dnrL �len)r7 r= �expected_server�expected_count�search_exprrM �server_found�msgr r r �assert_dcs_presenti s
����z#DomainBackupBase.assert_dcs_presentc C s8 t j�| jd�}t j�|�st �|� | �tj|� |S )N�tree) r, �path�join�tempdir�exists�mkdir�
addCleanup�shutil�rmtree)r7 �extract_dirr r r �restore_dirz s
zDomainBackupBase.restore_dirc C sB | � � }t�|��}|�|� W d � dS 1 sw Y dS )z@Untar the backup file's raw contents (i.e. not a proper restore)N)rl �tarfile�open�
extractall)r7 �backup_filerk �tfr r r �untar_backup� s "�zDomainBackupBase.untar_backupr c
C s� | � � }| �|� tj�| �� d�}tj�|d�}t� }t|t� |d�}|j t
�|d�t
j| j
d�}| �t|�d� | j
D ]}| �|d �|�d| � q=tj�|d �} t| |�}| �t|�|� | �|� d
S )z@Creates a backup, untars the raw files, and sanity-checks the DB�privatezsam.ldb)�urlr r �@SAMBA_DSDBrC � r z%s backup marker missingzsecrets.ldbN)�
create_backuprr r, rc rd rl r r r
r r �DnrJ r3 �assertEqualr[ �assertIsNotNonerK r rQ )
r7 �primary_domain_secretsrp �private_dir�
samdb_pathr r= rM �markerr r r r �_test_backup_untar� s&