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: //lib/python3/dist-packages/samba/__pycache__/remove_dc.cpython-310.pyc
o

�/a�H�@s�ddlZddlZddlmZddlmZddlmZddlmZm	Z	ddl
mZmZm
Z
mZmZmZGdd�de�Zd	d
�Zddd
�Zdd�Z					ddd�Z							ddd�Zdd�Zdd�ZdS)�N)�LdbError)�werror)�
ndr_unpack)�misc�dnsp)�DNS_TYPE_NS�
DNS_TYPE_A�
DNS_TYPE_AAAA�DNS_TYPE_CNAME�DNS_TYPE_SRV�DNS_TYPE_PTRc@s eZdZdZdd�Zdd�ZdS)�DemoteExceptionzBase element for demote errorscCs
||_dS�N��value)�selfr�r�1/usr/lib/python3/dist-packages/samba/remove_dc.py�__init__ �
zDemoteException.__init__cCs
d|jS)NzDemoteException: r)rrrr�__str__#rzDemoteException.__str__N)�__name__�
__module__�__qualname__�__doc__rrrrrrr
sr
c
Cs�|��}dd|fD]\}t�||�}|�|���dkr%td||��f��|�d�dkr2td|��|�dd|�z|�d	|�|�	|�Wq
tj
yf}z|j\}}|tjkr[n�WYd}~q
d}~wwd
D]^}t�||�}|�|�
��dkr�td||�
�f��|�d�dkr�td||f��|�dd|�z|�d	|�|�	|�Wqitj
y�}	z|	j\}}|tjkr�n�WYd}	~	qid}	~	wwdS)Nz3CN=Enterprise,CN=Microsoft System Volumes,CN=Systemz+CN=%s,CN=Microsoft System Volumes,CN=SystemFz+Failed constructing DN %s by adding base %szCN=Xz.Failed constructing DN %s by adding child CN=Xr�CNzRemoving Sysvol reference: %s)zMCN=Domain System Volumes (SYSVOL share),CN=File Replication Service,CN=SystemzDCN=Topology,CN=Domain System Volume,CN=DFSR-GlobalSettings,CN=SystemzAFailed constructing DN %s by adding child CN=X (soon to be CN=%s))�domain_dns_name�ldb�Dn�add_base�get_config_basednr
�	add_child�
set_component�info�deleter�args�ERR_NO_SUCH_OBJECT�get_default_basedn)
�samdb�logger�dc_name�realm�s�dn�e�enum�estr�e1rrr�remove_sysvol_references's`�
��

���
��

����r2Fcs��jdtjdgdgd�}t|�dkrdS|��}z	��|�\}�Wn3tyT}z'|j\}}	|tj	ks8|tj
krH|rAt�|||�WYd}~dStd||	f��d}~ww��
|g��jdtjdgd�}
t|
�d	ksmJ�|
dd}�fd
d��t�fdd
�|D��}�fdd��|D]b}
z|�d|
���|
�\}}Wn&ty�}z|j\}}	|tj	kr�WYd}~dStd|
|	f��d}~wwt|�}�fdd�|D�}t|�|kr�|�d|
t|�|t|�f���
|
|�q�t�|||�dS)N�z.(&(objectClass=dnsZone)(!(dc=RootDNSServers)))�search_options:0:2)�base�scope�
expression�attrs�controlsrzlookup of %s failed: %s�namingContexts�r6r8�cst��|����dd�dS)N�/r<r)rr�
canonical_str�split)r-)r(rr�dns_name_from_dn�sz/remove_dns_references.<locals>.dns_name_from_dnc3s�|]	}�t|��VqdSr)�str)�.0r-)r@rr�	<genexpr>�s�z(remove_dns_references.<locals>.<genexpr>cs@|jtks
|jtkr�D]}|j|jkr|j|jkrdSqdS�NTF)�wTyperr	�data)�	dnsRecord�rec)�primary_recsrr�a_rec_to_remove�s�z.remove_dns_references.<locals>.a_rec_to_removez(checking for DNS records to remove on %scsg|]}�|�s|�qSrr)rB�r)rJrr�
<listcomp>�sz)remove_dns_references.<locals>.<listcomp>�1updating %s keeping %d values, removing %s values)�searchr�
SCOPE_SUBTREE�len�upper�
dns_lookup�RuntimeErrorr%r�"WERR_DNS_ERROR_NAME_DOES_NOT_EXIST�WERR_DNS_ERROR_RCODE_NAME_ERROR�remove_hanging_dns_referencesr
�dns_replace�
SCOPE_BASE�set�debugr#)r(r)�dnsHostName�ignore_no_name�zones�dnsHostNameUpperr-�e4r/r0�res�ncs�a_names_to_remove_from�a_name�a_rec_dn�a_recs�e2�
orig_num_recsr)rJr@rIr(r�remove_dns_referencesZsj
�


���
�
�

����rhc	
s��fdd��|D]V}|�d|j�|j|jtjddgd�}|D]=}z|d}Wn	ty1Yq w�fdd�|D�}t|�t|�kr]|�d	|jt|�t|�t|�f�|�|j|�q qdS)
Ncsbttj|�}|jtks|jtks|jtkr |j���krdSdS|jt	kr/|jj
���kr/dSdSrD)rr�DnssrvRpcRecordrErr
rrFrQr�
nameTarget)rrG)r^rr�	to_remove�s



�z0remove_hanging_dns_references.<locals>.to_removezchecking %sz/(&(objectClass=dnsNode)(!(dNSTombstoned=TRUE)))rG)r5r6r7r8cs g|]}�|�sttj|��qSr)rrri)rB�v)rkrrrL�s�z1remove_hanging_dns_references.<locals>.<listcomp>rM)	rZr-rNrrO�KeyErrorrPr#�dns_replace_by_dn)	r(r)r^r]�zone�records�record�orig_values�valuesr)r^rkrrV�s4��
�
�����rVcCs0|jdtjdgd�}t|�dksJ�|ddd}	|j|gd�tjdd�}
|
d}t|d	d�}zt�||d
d�d��}
WntyLd}
Ynwz
t|dd�}Wntybd}Ynw|rl|�|d
g�|
dur�|j|
dgd�tjd�}d|dvr�t|ddd�}|�	d|�|�|�d|dvr�t|ddd�}|�	d|�|�|�|r�|�	d|
�|�|
d
g�d|vr�t|dd�}|r�|jdt�
|�|fgtj|��d�}t|�dkr�|�	d|dj
�|�|dj
�|du�r|�rt|||�|�rt|||�dSdS)Nr3�
dsServiceNamer;r<r)�serverReference�cnr[z(objectClass=server)�r5r8r6r7rvru�utf8r[�
tree_delete:0zobjectclass=computer)�msDS-KrbTgtLink�rIDSetReferencesrv�r5r7r8r6r{zRemoving RID Set: %srzzRemoving RODC KDC account: %sz5Removing computer account: %s (and any child objects)z=(&(objectclass=user)(cn=dns-%s)(servicePrincipalName=DNS/%s)))r7r8r6r5z/Removing Samba-specific DNS service account: %s)rNrrXrPrAr�decodermr$r#�
binary_encoderOr'r-rhr2)r(r)�	server_dn�remove_computer_obj�remove_server_obj�remove_sysvol_obj�remove_dns_names�remove_dns_accountr`�my_serviceName�msgs�msgr*�computer_dnr[�
computer_msgs�
rid_set_dn�krbtgt_link_dnrrr�offline_remove_server�st�����

���r�c

Cs8|jdtjdgd�}
t|
�dksJ�t�||
ddd�d��}|��}||kr/td|��z
|j|dd	gtjd
�}
WntyY}z|j	\}}|tj
krTtd|���d}~wwt|
�dkrjtd||��f��|
d}|j�
�d
ks||j��dkr�td|��ttj|d	d�}|r�|j|��d|d�}|D]}|�d|j�|�|j�q�|r�|jdtjd|dgd�}|D]'}t|�}t��}|j|_t�|tjd�|d<|�d|j|f�|�|�q�z|�d|�|�|dg�Wnt�y
}z|j	\}}td|��d}~wwt||||||||	d�dS)Nr3rtr;r<rrxz#Refusing to demote our own DSA: %s zobjectClass=ntdsDSA�
objectGUIDr|zGiven DN %s doesn't existz%s is not an ntdsda in %srz
NTDS Settingsz)Given DN (%s) wasn't the NTDS Settings DNz5(&(objectclass=nTDSConnection)(fromServer=<GUID=%s>)))r5r7zRemoving nTDSConnection: %sz(fsmoRoleOwner=<GUID=%s>))r4)r5r6r7r9�
fsmoRoleOwnerrz*Seizing FSMO role on: %s (now owned by %s)z'Removing nTDSDSA: %s (and any children)ryz,Failed to remove the DCs NTDS DSA object: %s�r�r�r�r�r�)rNrrXrPrr}�parentr
rr%r&rr-�get_rdn_name�
get_rdn_valuerr�GUIDr r#r$rOrA�Message�MessageElement�FLAG_MOD_REPLACE�warning�modifyr�)r(r)�ntds_dnr�r��remove_connection_obj�seize_stale_fsmor�r�r�r`r�rr��e5r/r0r��	ntds_guid�stale_connections�conn�stale_fsmo_roles�role�val�m�e6rrr�offline_remove_ntds_dc!s�
�
�

��
��
��
��
��
���
�r�c
Cs�|��d}ztj|d�}d|}Wn[tymz|j|��gdt�|�d�}WntyF}z|j	\}}	t
d||��|	f��d}~wwt|�dkr[|�
�t
d||��f��|dj}t�|d�}|�|�Ynwz|j|gtjd	d
�}
Wn.ty�}z"|j	\}}	|tjkr�g}
n|�
�t
d||��|	f��WYd}~nd}~wwt|
�dkr�|dur�|�
�t
d||��f��t|||dddddd
�nt|||
djdddddddd�
|��dS)N)�hexz	<GUID=%s>z(&(objectClass=server)(cn=%s)))r5r8r7z4Failure checking if %s is an server object in %s: %srz%s is not an AD DC in %szCN=NTDS Settingsz(objectClass=ntdsdsa)rwz/Failure checking if %s is an NTDS DSA in %s: %sTr�)r�r�r�r�r�r�r�)�transaction_start�uuid�UUID�
ValueErrorrNr rr~rr%r
rrP�transaction_cancelr-rrrXr&r�r��transaction_commit)r(r)r*rr�r��server_msgs�e3r/r0�	ntds_msgs�e7rrr�	remove_dcvs�
�
�
���
�

�
�

�����

���
r�cCs |��t||d�|��dSr)�start_transactionr��commit_transaction)r(r�rrr� offline_remove_dc_RemoveDsServer�sr�)F)FFFFF)FFFFFFF)r�rr�sambar�	samba.ndrr�samba.dcerpcrr�samba.dcerpc.dnsprrr	r
rr�	Exceptionr
r2rhrVr�r�r�r�rrrr�<module>s6 

3P-
�O
�UP