File: //proc/1233/root/usr/lib/python3/dist-packages/samba/__pycache__/domain_update.cpython-310.pyc
o
�/a�; �
@ s� d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dlm Z d dl
mZ d dlm
Z
d dlmZmZmZmZmZ d Zd
Zddd
ddddd�Zededed
ed
ediZededededediZg ZG dd� de�ZG dd� de�ZdS )� N)� b64encode)�sd_utils)�
ndr_unpack�ndr_pack)�security)�SECINFO_DACL)�'get_managed_service_accounts_descriptor)�DS_DOMAIN_FUNCTION_2008�DS_DOMAIN_FUNCTION_2008_R2�DS_DOMAIN_FUNCTION_2012�DS_DOMAIN_FUNCTION_2012_R2�DS_DOMAIN_FUNCTION_2016�K �Q z$5e1574f6-55df-493e-a671-aaeffca6a100z$d262aae8-41f7-48ed-9f35-56bbb677573dz$82112ba0-7e4c-4a44-89d9-d46c9612bf91z$c3c927a6-cc1d-47c0-966b-be8f9b63d991z$54afcfb9-637a-4251-9f47-4d50e7021211z$f4728883-84dd-483c-9897-274f2ebcf11ez$ff4f9d27-7157-4cb0-80a9-5d6f2b14c8ff)r �L �M �N �O �P r �J r �X � � � �
� c @ s e Zd ZdS )�DomainUpdateExceptionN)�__name__�
__module__�__qualname__� r r �5/usr/lib/python3/dist-packages/samba/domain_update.pyr J s r c @ s� e Zd ZdZ d&dd�Z d'dd�Zd d
� Zd(dd
�Zdd� Zdd� Z dd� Z
dd� Zdd� Zdd� Z
dd� Zdd� Zdd� Zd d!� Zd"d#� Zd$d%� ZdS ))�DomainUpdatez2Check and update a SAM database for domain updatesFTc C s� || _ || _|| _d| _| j �� | _| j �� | _| j �� | _t �
|�| _ t�|�
� �| _| j �� | _| j�d�s<td��| j �� | _| j�d�sLtd��dS )z�
:param samdb: LDB database
:param fix: Apply the update if the container is missing
:param add_update_container: Add the container at the end of the change
:raise DomainUpdateException:
Fz(CN=Operations,CN=DomainUpdates,CN=Systemz+Failed to add domain update container childz3CN=ActiveDirectoryUpdate,CN=DomainUpdates,CN=Systemz#Failed to add revision object childN)�samdb�fix�add_update_container�check_update_applied�get_config_basedn� config_dn� domain_dn�get_schema_basedn� schema_dnr �SDUtilsr �dom_sid�get_domain_sid�
domain_sid�get_root_basedn�domainupdate_container� add_childr �revision_object)�selfr# r$ r% r r r! �__init__Q s �zDomainUpdate.__init__Nc C s� | j j| jdgtjd�}t| }|rt| }|d7 }nt}| �||� t| }t |d d d �}|rQ||k rS| j
sBtd||f ��| j �dt
| j�|f � dS dS dS )a
Apply all updates for a given old and new functional level
:param functional_level: constant
:param old_functional_level: constant
:param update_revision: modify the stored version
:raise DomainUpdateException:
�revision)�base�attrs�scope� r zERevision is not high enough. Fix is set to False.
Expected: %dGot: %dz9dn: %s
changetype: modify
replace: revision
revision: %d
N)r# �searchr3 �ldb�
SCOPE_BASE�functional_level_to_max_update�
MIN_UPDATE�check_updates_range�functional_level_to_version�intr$ r �modify_ldif�str) r4 �functional_level�old_functional_level�update_revision�res�expected_update�
min_update�expected_version�
found_versionr r r! �check_updates_functional_leveln s,
�
��
��z+DomainUpdate.check_updates_functional_levelc C s8 |D ]}|t k s|tkrtd��t| d| �|� qdS )z�
Apply a list of updates which must be within the valid range of updates
:param iterator: Iterable specifying integer update numbers to apply
:raise DomainUpdateException:
�Update number invalid.�operation_%dN)r? �
MAX_UPDATEr �getattr)r4 �iterator�opr r r! �check_updates_iterator� s
�z#DomainUpdate.check_updates_iteratorr c C s^ |}|t k s||ks|tkrtd��||kr-|tvr#t| d| �|� |d7 }||ksdS dS )z�
Apply a range of updates which must be within the valid range of updates
:param start: integer update to begin
:param end: integer update to end (inclusive)
:raise DomainUpdateException:
rN rO r: N)r? rP r �missing_updatesrQ )r4 �start�endrS r r r! r@ � s �z DomainUpdate.check_updates_rangec C sB z| j j| jdt| d�}W n tjy Y dS w t|�dkS )zd
:param op: Integer update number
:return: True if update exists else False
z(CN=%s))r7 �
expressionFr: )r# r; r1 �
update_mapr<