HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //proc/1233/root/usr/lib/python3/dist-packages/samba/__pycache__/domain_update.cpython-310.pyc
o

�/a�;�
@s�ddlZddlZddlmZddlmZddlmZmZddlm	Z	ddl
mZddlm
Z
ddlmZmZmZmZmZd	Zd
Zddd
ddddd�Zededed
ed
ediZededededediZgZGdd�de�ZGdd�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�Qz$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�Pr�Jr�X���	�
�c@seZdZdS)�DomainUpdateExceptionN)�__name__�
__module__�__qualname__�r r �5/usr/lib/python3/dist-packages/samba/domain_update.pyrJsrc@s�eZdZdZ		d&dd�Z		d'dd�Zd	d
�Zd(dd
�Zdd�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�ZdS))�DomainUpdatez2Check and update a SAM database for domain updatesFTcCs�||_||_||_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__Qs �zDomainUpdate.__init__Nc	Cs�|jj|jdgtjd�}t|}|rt|}|d7}nt}|�||�t|}t	|ddd�}|rQ||krS|j
sBtd||f��|j�dt
|j�|f�dSdSdS)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�rzERevision 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_levelns,

�
��
��z+DomainUpdate.check_updates_functional_levelcCs8|D]}|tks|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_iteratorrcCs^|}|tks||ks|tkrtd��||kr-|tvr#t|d|�|�|d7}||ksdSdS)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:
        rNrOr:N)r?rPr�missing_updatesrQ)r4�start�endrSr r r!r@�s�z DomainUpdate.check_updates_rangecCsBz|jj|jdt|d�}WntjyYdSwt|�dkS)zd
        :param op: Integer update number
        :return: True if update exists else False
        z(CN=%s))r7�
expressionFr:)r#r;r1�
update_mapr<�LdbError�len)r4rSrHr r r!�
update_exists�s


��zDomainUpdate.update_existscCs"|j�dt|t|j�f�dS)zo
        Add the corresponding container object for the given update
        :param op: Integer update
        z$dn: CN=%s,%s
objectClass: container
N)r#�add_ldifrYrDr1�r4rSr r r!�
update_add�s
�zDomainUpdate.update_addcCs`|�d�}|dkr|d|�|||d�}n||}||vr"dS|jj||dtgd�dS)a
        Add an ACE to a DACL, checking if it already exists with a simple string search.

        :param dn: DN to modify
        :param existing_sddl: existing sddl as string
        :param ace: string ace to insert
        :return: True if modified else False
        �S:���NF�
sd_flags:1:%d��controlsT)�rfindr�modify_sd_on_dnr)r4�dn�
existing_sddl�ace�index�new_sddlr r r!�insert_ace_into_dacl�s
	
�z!DomainUpdate.insert_ace_into_daclc	Cs�|jj||gdgd�}t|�dksJ�|d|d}|�d�}|dkr3|d|�|||d�}n||}||vr=dSt��}||_t�|tj|�||<|jj	|d	gd
�dS)aC
        Insert an ACE into a string attribute like defaultSecurityDescriptor.
        This also checks if it already exists using a simple string search.

        :param dn: DN to modify
        :param ace: string ace to insert
        :param attr: attribute to modify
        :return: True if modified else False
        �search_options:1:2)r7r8rdr:rr`raNF�relax:0rcT)
r#r;r[rer<�Messagerg�MessageElement�FLAG_MOD_REPLACE�modify)	r4rgri�attr�msgrhrjrk�mr r r!�insert_ace_into_string�s&
�

�z#DomainUpdate.insert_ace_into_stringcCs|js	td|��dS)z�
        Raises an exception if not set to fix.
        :param op: Integer operation
        :raise DomainUpdateException:
        z3Missing operation %d. Fix is currently set to FalseN)r$rr^r r r!�raise_if_not_fixs�zDomainUpdate.raise_if_not_fixcCsJ|�|�rdS|�|�|jjd|jddgd�|jr#|�|�dSdS)NzVdn: CN=TPM Devices,%s
objectClass: top
objectClass: msTPM-InformationObjectsContainer
rn�provision:0rc)r\rwr#r]r)r%r_r^r r r!�operation_78s

���zDomainUpdate.operation_78cC��|�|�rdS|�|�d}|jjddgdgd�}|D]}ttj|dd�}|�|j�}|�	|j
||�q|jjddgdgd�}|D]}ttj|dd�}|�|j�}|�	|j
||�qC|jrh|�|�dSdS)NzY(OA;CIIO;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;PS)�(objectClass=samDomain)�nTSecurityDescriptorrm�rXr8rdr�(objectClass=domainDNS)�
r\rwr#r;rr�
descriptor�as_sddlr/rlrgr%r_�r4rSrirHrt�existing_sdrhr r r!�operation_79s6

�
��
��zDomainUpdate.operation_79cCs�|�|�rdS|�|�dt|j�}|jj|jtjdgddt	gd�}|d}t
tj|dd�}|�
|j�}|�|j||�|jrJ|�|�dSdS)Nz5(OA;;CR;3e0f7e18-2c7a-4c10-ba82-4d926db99a3e;;%s-522)r|rmrb)r7r9r8rdr)r\rwrDr/r#r;r)r<r=rrrr�r�rlrgr%r_r�r r r!�operation_809s(


��
��zDomainUpdate.operation_80cCrz)Nz7(OA;CIOI;RPWP;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;PS)r{r|rmr}rr~rr�r r r!�operation_81Rs6

�
��
��zDomainUpdate.operation_81cCsr|�|�rdS|�|�t|j�}t|��d�}dt|j�}|jj	d||fddgd�|j
r7|�|�dSdS)N�utf8�CN=Managed Service Accounts,%sz�dn: %s
changetype: add
objectClass: container
description: Default container for managed service accounts
showInAdvancedViewOnly: FALSE
nTSecurityDescriptor:: %srnrxrc)r\rwrr/r�decoderDr)r#rCr%r_)r4rSr��managedservice_descr�managed_service_dnr r r!�operation_75vs 


����zDomainUpdate.operation_75cCs`|�|�rdS|�|�dt|j�}|jjdt|j�|fddgd�|jr.|�|�dSdS)Nr�zudn: %s
changetype: modify
add: otherWellKnownObjects
otherWellKnownObjects: B:32:1EB93889E40C45DF9F0C64D23BBB6237:%s
rnrxrc)r\rwrDr)r#rCr%r_)r4rSr�r r r!�operation_76�s 

�����zDomainUpdate.operation_76cCsN|�|�rdS|�|�|jjdt|j�ddgd�|jr%|�|�dSdS)NzFdn: CN=PSPs,CN=System,%s
objectClass: top
objectClass: msImaging-PSPs
rnrxrc)r\rwr#r]rDr)r%r_r^r r r!�operation_77�s

���zDomainUpdate.operation_77)FT)NF)rr)rrr�__doc__r5rMrTr@r\r_rlrvrwryr�r�r�r�r�r�r r r r!r"Ns,
�
�$


	#
$r")r<�samba�base64rr�	samba.ndrrr�samba.dcerpcr�samba.dcerpc.securityr�samba.descriptorr�
samba.dsdbr	r
rrr
r?rPrYr>rArU�	Exceptionr�objectr"r r r r!�<module>sD��	�