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/netcmd/__pycache__/domain.cpython-310.pyc
o

eF�c��@sfddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddl
mZddl
mZddlmZddlmZmZddl
mZddlZ
ddlmZmZdd	lmZdd
lmZmZddlm Z m!Z!ddl"m#Z#dd
l"m$Z$ddl"m%Z%ddl"m&Z&ddl"m'Z'ddl"m(Z(ddl"m)Z)ddl*m+Z+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1ddl2m3Z3ddl4m5Z5ddl4m6Z6m7Z7m8Z8ddl9m:Z:ddl9m;Z<ddl=m>Z>ddl?m@Z@ddl
mAZAmBZBmCZCddlDmEZEddlFmZGddlHmIZIdd l
mJZJdd!lKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXdd"lYmZZZm[Z[m\Z\m]Z]dd#l^m_Z_m`Z`maZadd$lbmcZcdd%ldmeZedd&lfmgZgdd'lhmiZidd(l
mjZjePeQeRd)�Zke1d*d+d,d-d.�e1d/d0d1d2�e1d3d4d5d6d7gd8e�d9�e1d:d;d<d=d.�e1d>d?d@eldA�e1dBdCdDd0dE�gZme1dFdGeldH�e1dIdJeldH�e1dKdLd0dE�e1dMd4dNgdO�dPdQdR�e1dSdTdUd0dE�gZne1dVdWd0dE�gZodXdY�Zpze�Wneq�y�dZrYn	wGdZd[�d[e.�ZrGd\d]�d]e.�ZsGd^d_�d_e.�ZtGd`da�dae.�ZuGdbdc�dce.�ZvGddde�dee.�ZwGdfdg�dge.�ZxGdhdi�die.�ZyGdjdk�dke.�ZzGdldm�dme0�Z{Gdndo�doe.�Z|Gdpdq�dqe|�Z}Gdrds�dsej~�ZGdtdu�due.�Z�Gdvdw�dwe��Z�Gdxdy�dye��Z�Gdzd{�d{e��Z�Gd|d}�d}e��Z�Gd~d�de��Z�Gd�d��d�e��Z�Gd�d��d�e��Z�Gd�d��d�e.�Z�Gd�d��d�e0�Z�Gd�d��d�e0�Z�Gd�d��d��Z�Gd�d��d�e.�Z�Gd�d��d�e.�Z�Gd�d��d�e0�Z�dS)��N)�ntstatus)�
NTSTATUSError)�werror��getpass)�Net�LIBNET_JOIN_AUTOMATIC)�enable_net_export_keytab)�	join_RODC�join_DC)�system_session)�SamDB�get_default_backend_store)�ndr_pack�	ndr_print)�drsuapi)�drsblobs)�lsa)�netlogon)�security)�nbt)�misc)�DOMAIN_PASSWORD_COMPLEX�DOMAIN_PASSWORD_STORE_CLEARTEXT)�Command�CommandError�SuperCommand�Option)�get_fsmo_roleowner)�!netcmd_get_domain_infos_via_cldap)�NEVER_TIMESTAMP�timestamp_to_mins�timestamp_to_days)�Samba3)�param)�upgrade_from_samba3)�drsuapi_connect)�	remove_dc�arcfour_encrypt�string_to_byte_array)�system_session_unix)r)�default_path)�is_ad_dc_built)
�DS_DOMAIN_FUNCTION_2000�DS_DOMAIN_FUNCTION_2003�DS_DOMAIN_FUNCTION_2003_MIXED�DS_DOMAIN_FUNCTION_2008�DS_DOMAIN_FUNCTION_2008_R2�DS_DOMAIN_FUNCTION_2012�DS_DOMAIN_FUNCTION_2012_R2�$DS_NTDSDSA_OPT_DISABLE_OUTBOUND_REPL�#DS_NTDSDSA_OPT_DISABLE_INBOUND_REPL�UF_WORKSTATION_TRUST_ACCOUNT�UF_SERVER_TRUST_ACCOUNT�UF_TRUSTED_FOR_DELEGATION�UF_PARTIAL_SECRETS_ACCOUNT)�	provision�ProvisioningError�DEFAULT_MIN_PWD_LENGTH�
setup_path)�	FILL_FULL�FILL_NT4SYNC�FILL_DRS)�cmd_domain_passwordsettings_pso)�cmd_domain_backup)�
get_string)�CreateTrustedDomainRelax)�dsdb��2008_R2�2012�2012_R2z
--machinepass�string�PASSWORDz*choose machine password (otherwise random)��type�metavar�helpz--plaintext-secrets�
store_truezaStore secret/sensitive values as plain text on disk(default is to encrypt secret/ensitive values)��actionrOz--backend-store�choice�BACKENDSTORE�tdb�mdbz7Specify the database backend to be used (default is %s))rMrN�choicesrOz--backend-store-size�bytes�SIZEzfSpecify the size of the backend database, currently only supported by lmdb backends (default is 8 Gb).�--targetdir�DIRz/Set target directory (where to store provision))rNrOrM�-q�--quiet�Be quiet�rOrR�--serverz
DC to join�rOrM�--sitezsite to joinz--domain-critical-onlyz&only replicate critical domain objects�
--dns-backend�NAMESERVER-BACKEND)�SAMBA_INTERNAL�	BIND9_DLZ�NONEz�The DNS server backend. SAMBA_INTERNAL is the builtin name server (default), BIND9_DLZ uses samba4 AD to store zone information, NONE skips the DNS setup entirely (this DC will not be a DNS server)re�rMrNrWrO�default�-v�	--verbose�
Be verbose�--use-ntvfs�+Use NTVFS for the fileserver (default = no)cCsbttjd�}tj|ddd||gtj|d�}|��\}}|��|�d�}|r/t	|d��
�SdS)	N�wz-sz-lz--parameter-name=%s)�stdout�stderr�
r�)�open�os�devnull�
subprocess�Popen�PIPE�communicate�close�splitrC�strip)�testparm�smbconf�varname�errfile�p�out�err�lines�r��5/usr/lib/python3/dist-packages/samba/netcmd/domain.py�get_testparm_var�s
��
r�c@sFeZdZdZdZejejejd�Z	e
dded�gZdgZ
dd	d
�ZdS)�cmd_domain_export_keytabz/Dump Kerberos keys of the domain into a keytab.z%prog <keytab> [options]��	sambaopts�credopts�versionoptsz--principalzextract only this principalra�keytabNcCs$|��}td|�}|j||d�dS)N)r��	principal)�get_loadparmr�
export_keytab)�selfr�r�r�r�r��lp�netr�r�r��run�s
zcmd_domain_export_keytab.run�NNNN��__name__�
__module__�__qualname__�__doc__�synopsis�options�SambaOptions�CredentialsOptions�VersionOptions�takes_optiongroupsr�str�
takes_options�
takes_argsr�r�r�r�r�r��s��r�c@s:eZdZdZdZgZejejej	d�Z
dgZddd�ZdS)	�cmd_domain_infoz?Print basic info about a domain and the DC passed as parameter.z%prog <ip_address> [options]r��addressNcCs�|��}zt|d|�}Wntytd|d��w|j�d|j�|j�d|j�|j�d|j�|j�d|j	�|j�d|j
�|j�d|j�|j�d	|j�dS)
NzInvalid IP address 'z'!zForest           : %s
zDomain           : %s
zNetbios domain   : %s
zDC name          : %s
zDC netbios name  : %s
zServer site      : %s
zClient site      : %s
)
r�r�RuntimeErrorr�outf�write�forest�
dns_domain�domain_name�pdc_dns_name�pdc_name�server_site�client_site)r�r�r�r�r�r��resr�r�r�r��s�zcmd_domain_info.run�NNN)
r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��s�r�c@s4eZdZdZdZejejd�Ze	dddd�e	dd	d
dd�e	d
d	ddd�e	dd	ddd�e	dd	ddd�e	dd	ddd�e	dd	ddd�e	dd	ddd�e	dd	ddd�e	d d	d!d"d�e	d#d	d$d%d�e	d&d	d$d'd�e	d(d)d*gd+�d,d-d.�e	d/d	d$d0d�e	d1d	d2d3d�e	d4d	d2d5d�e	d6d	d7d8d�e	d9dd:d;�e	d<d)d=gd>�d?d@d.�e	dAd)dBgdC�dDdEd.�e	dFd)dGgdH�dIdJd.�e	dKdLdMdNdOdP�e	dQdRdd�e	dSddTd;�gZ
e	dUd)gdV�dWdXdYdZ�gZe
�e
�e��r�e
�e�e
�e�gZ	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	Y	\	[	[	\	[	[dcd]d^�Zd_d`�Zdadb�Zd[S)d�cmd_domain_provisionzProvision a domain.�%prog [options]�r�r�z
--interactivez
Ask for namesrPr_z--domainrJ�DOMAINzNetBIOS domain name to userLz
--domain-guid�GUIDz!set domainguid (otherwise random)z--domain-sid�SIDz set domainsid (otherwise random)z--ntds-guidz'set NTDS object GUID (otherwise random)z--invocationidz#set invocationid (otherwise random)z--host-name�HOSTNAMEzset hostnamez	--host-ip�	IPADDRESSzset IPv4 ipaddressz
--host-ip6�
IP6ADDRESSzset IPv6 ipaddressrb�SITENAMEz
set site namez--adminpassrKz(choose admin password (otherwise random)z--krbtgtpassz)choose krbtgt password (otherwise random)rcrSrd�re�BIND9_FLATFILErfrgz�The DNS server backend. SAMBA_INTERNAL is the builtin name server (default), BIND9_FLATFILE uses bind9 text database to store zone information, BIND9_DLZ uses samba4 AD to store zone information, NONE skips the DNS setup entirely (not recommended)rerhz	--dnspassz&choose dns password (otherwise random)z--root�USERNAMEzchoose 'root' unix usernamez--nobodyzchoose 'nobody' userz--users�	GROUPNAMEzchoose 'users' groupz--blankz.do not add users or groups, just the structurerQz
--server-role�ROLE)�domain controller�dc�
member server�member�
standalonez^The server role (domain controller | dc | member server | member | standalone). Default is dc.r��--function-levelz
FOR-FUN-LEVEL)�2000�2003�2008rGzyThe domain and forest function level (2000 | 2003 | 2008 | 2008_R2 - always native). Default is (Windows) 2008_R2 Native.rGz
--base-schemazBASE-SCHEMA)rG�2008_R2_oldrHrIz;The base schema files to use. Default is (Windows) 2012_R2.rIz
--next-rid�int�NEXTRIDi�zGThe initial nextRid value (only needed for upgrades).  Default is 1000.)rMrNrirOz--partitions-onlyzEConfigure Samba's partitions, but do not modify them (ie, join a BDC)z
--use-rfc2307z/Use AD to store posix attributes (default = no)�--use-xattrs��yes�no�auto�
[yes|no|auto]��Define if we should use the native fs capabilities or a tdb file for storing attributes likes ntacl when --use-ntvfs is set. auto tries to make an inteligent guess based on the user rights and system capabilitiesr��rMrWrNrOriNFc%7
Cs�|jd|d�|_|��}%|%j}&|dur|}'n
|��}'|'dur d}'t|j�dkr)d}|r�ddlm}(ddl})dOdd	�}*z|)�	��
d
d�d��}+WntySd}+Ynw|*d|+�},|,dvrat
d
��z	|,�
d
�d}+Wntyud}+Ynw|*d|+�}|dur�t
d��|*dd�}|*dd�}|dvr�t
d��|dkr�|*d|'�}|��dvr�d}'d}	|(d�}-|�|-�}.|.r�|j�d|.�n|(d�}/|-|/ks�|j�d�n|-}nq�n|j�d�},|,dur�t
d
��|dur�t
d��|r�|�|�}.|.r�t
|.��n|j�d�|dk�rt}0n|dk�rt}0n|dk�rt}0n|d k�rt}0|dk�r&|du�r&|'}t}1|�r.t}1n|�r3t}1|du�rDtj�|��sDt�|�d}2|d!k�rNd"}2nn|d#k�r[|d"k�r[d"}2na|d"k�rdt
d$��|d#k�r�|%�d%��s�|�r}t j!tj�"|�d&�}3nt j!tj�"tj�#|%�d'���d&�}3z(zt$j%�&|%|3j'd(d)t(�d*�d"}2Wnt)�y�|j�d+�YnwW|3�*�n|3�*�w|2�r�|j�d,�|du�r�t+�,|�}t-�}4|#du�r�t.�}#zpt/|j|4fid-|&�d.|�d/|1�d|,�d0|�d1|�d2|�d3|	�d4|
�d5|�d6|
�d7|�d8|�d9|�d:|�d;|�d<|�d=|�d>|�d?|�d@|�dA|�dB|�dC|0�dD|2�dE|�dF|%�dG|�dH| �dId"�dJ|!�dK|"�dL|#�dM|$��}5Wnt0�y\}6zt
dN|6��d}6~6ww|5�1|j�dS)PNr:)�name�quiet�none�TrrcSsN|durtd||fdd�n	td|fdd�tj��tj���d�p&|S)Nz	%s [%s]: � )�endz%s: �
)�print�sysrp�flush�stdin�readline�rstrip)�promptrir�r�r��askss

z%cmd_domain_provision.run.<locals>.ask�.�Realm)Nrsz
No realm set!�DomainzNo domain set!z$Server Role (dc, member, standalone)r�z=DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE)rezNo DNS backend set!z=DNS forwarder IP address (write 'none' to disable forwarding))Nr�zAdministrator password: z%s.
zRetype password: �Sorry, passwords do not match.
�realmz,Administrator password will be set randomly!r�r�r�rGr�Fr��r--use-xattrs=no requires --use-ntvfs (not supported for production use).  Please re-run with --use-xattrs omitted.�
posix:eadb��dir�private dir�O:S-1-5-32G:S-1-5-32�S-1-5-32�nativezZYou are not root or your system does not support xattr, using tdb backend for attributes. z�not using extended attributes to store ACLs and other metadata. If you intend to use this provision in production, rerun the script as root on a system supporting xattrs.r�	targetdir�
samdb_fill�domain�
domainguid�	domainsid�hostname�hostip�hostip6�sitename�ntdsguid�invocationid�	adminpass�
krbtgtpass�machinepass�dns_backend�
dns_forwarder�dnspass�root�nobody�users�
serverrole�dom_for_fun_level�useeadb�next_ridr��	use_ntvfs�use_rfc2307�skip_sysvolacl�base_schema�plaintext_secrets�
backend_store�backend_store_sizezProvision failed�N)2�
get_logger�loggerr��
configfile�_get_nameserver_ip�len�raw_argvr�socket�getfqdnr|�upper�
IndexErrorr�lower�_adminpass_issue�errfr��_lp�get�infor-r.r0r1r>r?r@ru�path�isdir�makedirs�tempfile�NamedTemporaryFile�abspath�dirname�samba�ntacls�setntaclr�r*�	Exceptionr{r�dom_sidrrr:r;�
report_logger)7r�r�r��interactiver��domain_guid�
domain_sid�	ntds_guidr��	host_name�host_ip�host_ip6r��siter�r�rrr�
ldapadminpassrrrr��blank�server_role�function_levelr	�partitions_onlyr��
use_xattrsr
rr
rrrr�r�suggested_forwarderrrr�rir��adminpassplain�issue�adminpassverifyrr��eadb�file�session�result�er�r�r�r�<sz$
�
�




�
�







"���


�����������������	�	�
�
�
����
�
�
�
�������
��zcmd_domain_provision.runcCs�ddlm}d}|�|�s|j�d|�dSd}z-t|d�}|D]}|�d�s)q!|����dW|dur<|�	�SSW|durF|�	�n
|durP|�	�ww|j�d	|�dS)
z5Grab the nameserver IP address from /etc/resolv.conf.r)r"z/etc/resolv.confzFailed to locate %sN�r�
nameserver���zNo nameserver found in %s)
rur"�isfiler�warningrt�
startswithr}r|r{)r�r"�RESOLV_CONF�handle�liner�r�r�rs.



����
�z'cmd_domain_provision._get_nameserver_ipcCs:t|t�r
|�d�}t|�tkrdtSt�|�sdSdS)zTReturns error string for a bad administrator password,
        or None if acceptable�utf8zdAdministrator password does not meet the default minimum password length requirement (%d characters)zBAdministrator password does not meet the default quality standardsN)�
isinstancerX�decoderr<r)�check_password_quality)r�r�r�r�r�rs

�
z%cmd_domain_provision._adminpass_issue)$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNr�FNNFNN)r�r�r�r�r�r�r�r�r�rr��
ntvfs_options�extend�common_provision_join_optionsr)�is_ntvfs_fileserver_built�common_ntvfs_optionsr�r�rrr�r�r�r�r��s
���������������������
���=��
	


�Kr�c@sneZdZdZdZejejejd�Z	gZ
e
�e�e
�e
�e��r&e
�e�ddgZ						d
dd	�ZdS)�cmd_domain_dcpromoz9Promote an existing domain member or NT4 PDC to an AD DC.z%%prog <dnsdomain> [DC|RODC] [options]�r�r�r�r��role?NFcCsB|��}|�|�}t|||jd�}|j||
d�}|�d�}|dur%|��}|dkr`tdid|�d|�d|�d|�d	|�d
|�d|�d|�d
|	�d|
�d|�d|�dd�d|�d|�d|��dS|dkr�tdid|�d|�d|�d|�d	|�d
|�d|�d|�d
|	�d|
�d|�d|�dd�d|�d|�d|��dSt	d|��)N��server��verboser��netbios name�DCrr\�credsr�r�r6�netbios_namer��domain_critical_onlyr�r
r�promote_existingTrrr�RODCz-Invalid role '%s' (possible values: DC, RODC)r�)
r��get_credentialsr�	ipaddressrr rrr
r)r�r��roler�r�r�r\r6r�rcr�r
rr�r^rrrr�rar�rrbr�r�r�r�Bsp

&�����������&�����������zcmd_domain_dcpromo.run)NNNNNNNFNFNFFFNN)r�r�r�r�r�r�r�r�r�r�r�rT�common_join_optionsrUr)rVrWr�r�r�r�r�r�rX-s(�


�rXc@s�eZdZdZdZejejejd�Z	e
dddd�gZe
ddd	d
�gZgZ
e
�e�e
�e�e��r6e
�e�e��r?e
�e�ddgZ	
	
	
	
			
ddd�Zd
S)�cmd_domain_joinz9Join domain as either member or backup domain controller.z,%prog <dnsdomain> [DC|RODC|MEMBER] [options]rYrmrnrPr_z--experimental-s4-memberzfPerform member joins using the s4 Net join_member. Don't choose this unless you know what you're doingrQr�rZNFc Cs|��}|�|�}t|||jd�}|j||d�}|�d�}|dur%|��}|dus-|dkr�|r<|j||t|
d�\}}}n�|�	d|�|�d�dkrY|�	d|j
|tjtj
Bd	�j�|�	d
d�|jre|jnt�}tjdtj�|�d
��)}|�d|j�tj�|�r�t�|�j}t�|j|�t�|j|�Wd�n1s�wYt��}|�|�t |||d�}|j||
|d�\}}|j!�"d||f�dS|dkr�t#�r�t$|||||||||	|
||
|||d�dS|dk�rt#��rt%|||||||||	|
||
|||d�dSt&d|��)Nr[r]r_�MEMBER)r�r��	workgroup�	WORKGROUP)r��flagszserver roler�F)�deleter�)r��debugzJoined domain %s (%s)
r`)rr\rar�r�r6rbr�rcr�r
rrrrrez5Invalid role '%s' (possible values: MEMBER, DC, RODC))'r�rfrrgrr r�join_memberr�set�finddcr�NBT_SERVER_LDAP�
NBT_SERVER_DSr�rr+r%r&rur"r(�dumpr��exists�stat�st_mode�chmod�rename�s3param�get_context�load�s3_Netrr�r,rr
r) r�r�rhr�r�r�r\r6r�rcr�r
�experimental_s4_memberrr�r^rrrr�rar�rrb�
join_password�sidr��smb_conf�f�mode�s3_lp�s3_netr�r�r�r��s~

����
��

�
�
�	zcmd_domain_join.run)NNNNNNNFNFFNFFFNN)r�r�r�r�r�r�r�r�r�r�rrS�selftest_optionsr�rTrirUr)rV�is_selftest_enabledr�r�r�r�r�r�rjhs@�����



�rjc
@s�eZdZdZdZedded�eddded	d
d�edd
ed�eddddd�eddddd�gZej	ej
ejd�Z				ddd�Z
dS)�cmd_domain_demotez4Demote ourselves from the role of Domain Controller.r�r`z(writable DC to write demotion changes onra�-H�--URL�%LDB URL for database or target server�URL�H�rOrMrN�destz--remove-other-dead-serverzMDead DC (name or NTDS GUID) to remove ALL references to (rather than this DC)r\r]r^rPr_rjrkrlr�NFc	0CsZ	|��}	|�|	�}
t|
|	|jd�}|j||d�}|durS|dur,td|t�|
|	d�}
n	t|t�|
|	d�}
z
t�|
||�WdStjyR}zt	d|��d}~ww|	�
d�}t|t�|
|	d�}
|s�|
jddd	gd
�}t|�dkrvt	d��t|�d
kr�t	d��d}|D]}t
|d	���|��kr�|d}nq�|
��}|
jt
|
���tjd|dgd�}t|�dks�d|dvr�t	d|��|dj}tt
|dd��}|
jdt
|�dgd�}t|�dkr�t	dt|���|j�d|�t||	|
�\}}}|j�d�t��}|dj|_|t@�s�|
���s�|tO}t�t
|�tjd�|d<|
�|�|j�d|�|
��|
��|
� �fD]l}t!�"�}t
|�|_t!�#�}||_$t!j%|_&t'�(|�|_)z
|�*|d
|�W�q<t+�y�}z9|j,\}}|t-j.k�rwn&|j�d|�|tN}t�t
|�tjd�|d<|
�|�t	dt
|�|��WYd}~�q<d}~wwz3td|t�|
|	d�} |j�d�| jt
| �/��d|�0�dgd�}|dj}!tt
|dd��}"Wn7t1�y}z*|t@�s
|
���s
|j�d �|tN}t�t
|�tjd�|d<|
�|�t	d!|��d}~wwt|�d
k�rH|t@�s@|
���s@|j�d"�|tN}t�t
|�tjd�|d<|
�|�t	d#|�0���|"}#|"t2t3Bt4BM}"|"t5O}"t��}|!|_t�d$|"tjd�|d<z| �|�Wn7t1�y�}z*|t@�s�|
���s�|j�d"�|tN}t�t
|�tjd�|d<|
�|�t	d!|��d}~ww|j�6�}$|dj�7�}%d%|%}&d}'t
|&�}(| �8| �9�t:j;�})| j|)|&tj<d&�}t|�dk�rd| j|)d'|&|'ftj<d&�}t|�dk�r|'d(k�r|'d
}'| j|)d'|&|'ftj<d&�}t|�dk�r|'d(k�s�|'d(k�r^|t@�s8|
���s8|j�d �|tN}t�t
|�tjd�|d<|
�|�t��}|!|_t�d$|"tjd�|d<| �|�t	d)t
|!�|&|&|'d*f��d'|&|'f}(zt�=| d+|(t
|)�f�}*| �>|!|*�WnWt1�y�}zJ|t@�s�|
���s�|j�d �|tN}t�t
|�tjd�|d<|
�|�t��}|!|_t�d$|"tjd�|d<| �|�t	d,t
|!�t
|*�f|��d}~ww|
�?�}+| � �},zt!�@�}t
|+�|_At
|,�|_/d
|_B|�C|d
|�Wnkt+�y]}-z^|-j,\}}|t@�s%|
���s%|j�d �|tN}t�t
|�tjd�|d<|
�|�t��}|*|_t�d$|"tjd�|d<| �|�| �>|*|!�|t-j.k�rQt	d-|+|-f��t	d.|+|-f��d}-~-wwt�D| ||%�d/d0|	�
d1�d2d3fD])}.z| �Et�=| d+|.t
|*�f��W�qptjF�y�}/zWYd}/~/�qpd}/~/wwtjG| ||
�H�d4d5�|j�d6�dS)7Nr[r]�	ldap://%s��url�session_info�credentialsr�zDemote failed: %sr_z.(&(objectClass=computer)(serverReferenceBL=*))�dnsHostNamer�)�
expression�attrsrzUnable to search for serversr�z%You are the last server in the domainz(objectGUID=%s)r���base�scoper�r�zFailed to find options on %sz(fSMORoleOwner=%s)zsearch_options:1:2)r��controlszaCurrent DC is still the owner of %d role(s), use the role command to transfer roles to another DCz,Using %s as partner server for the demotion
z!Deactivating inbound replication
z0Asking partner server %s to synchronize from us
zgError while replicating out last local changes from '%s' for demotion, re-enabling inbound replication
z6Error while sending a DsReplicaSync for partition '%s'z#Changing userControl and container
z)(&(objectClass=user)(sAMAccountName=%s$))�userAccountControl�r�r�r�z6Error while demoting, re-enabling inbound replication
z$Error while changing account controlz5Error while demoting, re-enabling inbound replicationz@Unable to find object with samaccountName = %s$ in the remote dcz%dzCN=%s)r�r�r�z%s-%d�dzOUnable to find a slot for renaming %s, all names from %s-1 to %s-%d seemed used�	z%s,%szError while renaming %s to %szHThe DC %s is not present on (already removed from) the remote server: %sz.Error while sending a removeDsServer of %s: %sz$CN=Enterprise,CN=NTFRS SubscriptionszCN=%s, CN=NTFRS Subscriptionsr�z?CN=Domain system Volumes (SYSVOL Share), CN=NTFRS SubscriptionszCN=NTFRS SubscriptionsT)�ignore_no_namezDemote successful
)Ir�rfrrgrr
rr'�DemoteExceptionrr �searchrr�r�
get_ntds_GUID�get_config_basedn�ldb�
SCOPE_SUBTREE�dnr�rr�r&�Messager4�am_rodcr5�MessageElement�FLAG_MOD_REPLACE�modify�get_schema_basedn�get_root_basednr�DsReplicaObjectIdentifier�DsReplicaSyncRequest1�naming_context�DRSUAPI_DRS_WRIT_REPr�rr��source_dsa_guid�
DsReplicaSyncr��argsr�WERR_DS_DRA_NO_REPLICA�	domain_dnrr,r7r8r9r6�parent�
get_rdn_value�get_wellknown_dn�get_default_basednrE�DS_GUID_COMPUTERS_CONTAINER�SCOPE_ONELEVEL�Dnr{�get_serverName�DsRemoveDSServerRequest1�	server_dn�commit�DsRemoveDSServer�remove_sysvol_referencesro�LdbError�remove_dns_references�
host_dns_name)0r�r�r�r�r\�remove_other_dead_serverr�r^r�r�rar�r�samdbr�rbr�rEr2�msg�ntds_dn�dsa_options�drsuapiBind�drsuapi_handle�supportedExtensions�nmsg�part�nc�req1�e1�werrrJ�remote_samdb�dc_dn�uac�olduacr��dc_name�rdn�i�newrdn�computer_dn�newdn�
server_dsa_dnr��e3�s�lr�r�r�r��s
����
�
�
���
��

��
������
�

��	�
���
��

��

����
�

�
��

�
��


�

�
�����
����zcmd_domain_demote.run)NNNNNNFF)r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r��s,
�����r�c	@s�eZdZdZdZejejejd�Z	e
dddeddd	�e
d
ddd
d�e
ddgd�dd�e
ddgd�dd�gZdgZ
		ddd�ZdS)�cmd_domain_levelz(Raise domain and forest function levels.z&%prog (show|raise <options>) [options]r�r�r�r�r�r�r�r\r]r^rPr_z--forest-levelrS)r�r�rGrHrIzBThe forest function level (2003 | 2008 | 2008_R2 | 2012 | 2012_R2)�rMrWrOz--domain-levelzBThe domain function level (2003 | 2008 | 2008_R2 | 2012 | 2012_R2)�
subcommandNFc	
Cs�|��}	|j|	dd�}
t|t�|
|	d�}|��}|jd|��tjdgd�}
t	|
�dks.J�|j|tjddgd�}t	|�dksAJ�|jd	|��tj
d
dgd�}t	|�dksXJ�t}t}d|
dvrlt|
ddd�}d|dvr|t|ddd�}t|ddd�}d}|D]}d|vr�|dus�t|dd�|kr�t|dd�}q�t}|tks�|tkr�t
d
��|tkr�t
d��||kr�t
d��||kr�t
d��|dk�r�|�d|�|tkr�|dkr�|�d�|tkr�|dkr�|�d�|tk�r|dk�r|�d�|�d�|tk�rd}n2|tk�rd}n*|tk�r d}n"|tk�r(d}n|tk�r0d}n|tk�r8d}n
|tk�r@d}nd}|�d|�|tk�rV|dk�rVd }n?|tk�rc|dk�rcd}n2|tk�rkd}n*|tk�rsd}n"|tk�r{d}n|tk�r�d}n|tk�r�d}n
|tk�r�d}nd}|�d!|�|tk�r�d}n*|tk�r�d}n"|tk�r�d}n|tk�r�d}n|tk�r�d}n
|tk�r�d}nd}|�d"|�dS|d#k�rgg}|du�r�|dk�r�t}n|dk�r�t}n|d$k�r�t}n|dk�rt}n|d%k�r
t}||k�r|dk�rt
d&��||k�r!t
d'��|dk�r�t��}t�||�|_t�d(tjd�|d<|�|�t��}t�|d)|	�d*�d+|���|_t�d(tjd�|d<z|�|�Wn tj�y�}z|j\}}|tjk�r}�WYd}~nd}~wwt��}t�||�|_t�t|�tjd�|d<|�|�t��}t�|d)|	�d*�d+|���|_t�t|�tjd�|d<z|�|�Wn tj�y�}z|j\}}|tjk�r�WYd}~nd}~ww|}|� d,�|du�rX|dk�rt}n|dk�r
t}n|d$k�rt}n|dk�rt}n|d%k�r!t}||k�r*t
d-��||k�r3t
d.��t��}t�|d|���|_t�t|�tjd�|d<|�|�|� d/�|� d0�|�d1�!|��dSt
d2|��)3NT)�fallback_machiner��CN=Partitions,%szmsDS-Behavior-Version�r�r�r��
nTMixedDomainzCN=Sites,%sz(objectClass=nTDSDSA))r�r�r�rzSDomain and/or forest function level(s) is/are invalid. Correct them or reprovision!zFLowest function level of a DC is invalid. Correct this or reprovision!zVForest function level is higher than the domain level(s). Correct this or reprovision!zdDomain function level is higher than the lowest function level of a DC. Correct this or reprovision!�showz0Domain and forest function level for domain '%s'z|
ATTENTION: You run SAMBA 4 on a forest function level lower than Windows 2000 (Native). This isn't supported! Please raise!z|
ATTENTION: You run SAMBA 4 on a domain function level lower than Windows 2000 (Native). This isn't supported! Please raise!z�
ATTENTION: You run SAMBA 4 on a lowest function level of a DC lower than Windows 2003. This isn't supported! Please step-up or upgrade the concerning DC(s)!rsr�z02003 with mixed domains/interim (NT4 DC support)r�r�z2008 R2rHz2012 R2zhigher than 2012 R2z!Forest function level: (Windows) z2000 mixed (NT4 DC support)z!Domain function level: (Windows) z)Lowest function level of a DC: (Windows) �raiserGrIzGDomain function level can't be smaller than or equal to the actual one!zMDomain function level can't be higher than the lowest function level of a DC!�0zCN=rlz,CN=Partitions,%szDomain function level changed!zGForest function level can't be smaller than or equal to the actual one!zdForest function level can't be higher than the domain function level(s). Please raise it/them first!zForest function level changed!�!All changes applied successfully!r�z4invalid argument: '%s' (choose from 'show', 'raise'))"r�rfr
rr�r�r�r��
SCOPE_BASErr�r-r�r�messager/r.r0r1r2r3r�r�r�r�r�r�r r�r��ERR_UNWILLING_TO_PERFORMr��append�join)r�r�r��forest_level�domain_levelr�r�r�r�r�rar�r��
res_forest�
res_domain�res_dc_s�level_forest�level_domain�level_domain_mixed�min_level_dcr��outstr�msgs�new_level_domain�mrE�enum�emsg�e2�new_level_forestr�r�r�r�sz��
���
































�
$�
���
�

�
�
���









�


zcmd_domain_level.run)NNNFNNNr�r�r�r�r�r��s,�
����
�r�c@sFeZdZdZdZejejejd�Z	e
dddeddd	�gZd
dd�Z
d
S)� cmd_domain_passwordsettings_showz1Display current password settings for the domain.r�rYr�r�r�r�r�r�Nc
Cs�|��}|�|�}t|t�||d�}|��}|j|tjgd�d�}	t|	�dks)J�zRt	|	ddd�}
t	|	ddd�}t	|	ddd�}t
|	dd	d�}
t
|	dd
d�}t	|	ddd�}t|	ddd�}t|	dd
d�}Wnty�}zt
d|��d}~ww|�d|�|�d�|
t@dkr�|�d�n|�d�|
t@dkr�|�d�n|�d�|�d|�|�d|�|�d|
�|�d|�|�d|�|�d|�|�d|�dS)Nr�)�
pwdProperties�pwdHistoryLength�minPwdLength�	minPwdAge�	maxPwdAge�lockoutDuration�lockoutThreshold�lockOutObservationWindowr�r�rrr	r
rrrr
rz'Could not retrieve password properties!z$Password information for domain '%s'rszPassword complexity: onzPassword complexity: offzStore plaintext passwords: onzStore plaintext passwords: offzPassword history length: %dzMinimum password length: %dzMinimum password age (days): %dzMaximum password age (days): %dz#Account lockout duration (mins): %dz(Account lockout threshold (attempts): %dz&Reset account lockout after (mins): %d)r�rfr
rr�r�r�r�rr�r"r!r,rr�rr)r�r�r�r�r�r�rar�r�r��	pwd_props�pwd_hist_len�cur_min_pwd_len�cur_min_pwd_age�cur_max_pwd_age�cur_account_lockout_threshold�cur_account_lockout_duration�cur_reset_account_lockout_afterrEr�r�r�r��sL
�
�
��


z$cmd_domain_passwordsettings_show.runr��r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�r�r�s�
��rc@s�eZdZdZdZejejejd�Z	e
dddeddd	�e
d
ddd
d�e
ddgd�dd�e
ddgd�dd�e
dded�e
dded�e
dded�e
dded�e
dd ed�e
d!d"ed�e
d#d$ed�gZ	%	%	%	%	%d)d'd(�Z
d%S)*�cmd_domain_passwordsettings_setaSet password settings.

    Password complexity, password lockout policy, history length,
    minimum password length, the minimum and maximum password age) on
    a Samba AD DC server.

    Use against a Windows DC is possible, but group policy will override it.
    z%prog <options> [options]rYr�r�r�r�r�r�r\r]r^rPr_z--complexityrS)�on�offriz=The password complexity (on | off | default). Default is 'on'r�z--store-plaintextz�Store plaintext passwords where account have 'store passwords with reversible encryption' set (on | off | default). Default is 'off'z--history-lengthzBThe password history length (<integer> | default).  Default is 24.raz--min-pwd-lengthzAThe minimum password length (<integer> | default).  Default is 7.z
--min-pwd-agezFThe minimum password age (<integer in days> | default).  Default is 1.z
--max-pwd-agezGThe maximum password age (<integer in days> | default).  Default is 43.z--account-lockout-durationz�The the length of time an account is locked out after exeeding the limit on bad password attempts (<integer in mins> | default).  Default is 30 mins.z--account-lockout-thresholdz�The number of bad password attempts allowed before locking out the account (<integer> | default).  Default is 0 (never lock out).z--reset-account-lockout-afterzuAfter this time is elapsed, the recorded number of attempts restarts from zero (<integer> | default).  Default is 30.NFcCsp|
��}|�|�}t|t�||d�}|��}g}t��}t�||�|_t	|�
��}|��}|��}|durU|dks=|dkrG|t
B}|�d�n|dkrU|t
@}|�d�|dury|dksa|dkrk|tB}|�d�n|dkry|t@}|�d�|dus�|dur�t�t|�tjd	�|d	<|dur�|dkr�d
}nt	|�}|dks�|d
kr�td��t�t|�tjd
�|d
<|�d�|dur�|dkr�d}nt	|�}|dks�|dkr�td��t�t|�tjd�|d<|�d�|du�r|dkr�d}nt	|�}|dks�|dk�rtd��t	|d�}t�t|�tjd�|d<|�d�|du�rY|dk�r'd}nt	|�}|dk�s5|dk�r9td��|dk�rAt}nt	|d�}t�t|�tjd�|d<|�d�|	du�r�|	dk�rfd}	nt	|	�}	|	dk�st|	d k�rxtd!��|	dk�r�t}nt	|	d"�}t�t|�tjd#�|d#<|�d$�|
du�r�|
dk�r�d}
nt	|
�}
t�t|
�tjd%�|d%<|�d&�|du�r�|dk�r�d}nt	|�}|dk�s�|d k�r�td!��|dk�r�t}nt	|d"�}t�t|�tjd'�|d'<|�d(�|�s�|�rt|�}t|�}|dk�r||k�rtd)||f��t|�dk�r$td*��|�|�|�d+�|�d,�|��dS)-Nr�rrizPassword complexity activated!rz Password complexity deactivated!z;Plaintext password storage for changed passwords activated!z=Plaintext password storage for changed passwords deactivated!r�rz8Password history length must be in the range of 0 to 24!r	z Password history length changed!��z8Minimum password length must be in the range of 0 to 14!r
z Minimum password length changed!r�i�z6Minimum password age must be in the range of 0 to 998!g8M%iBrzMinimum password age changed!�+i�z6Maximum password age must be in the range of 0 to 999!rzMaximum password age changed!�i��z8Maximum password age must be in the range of 0 to 99999!g��Ar
z!Account lockout duration changed!rz"Account lockout threshold changed!rz0Duration to reset account lockout after changed!zIMaximum password age (%d) must be greater than minimum password age (%d)!z7You must specify at least one option to set. Try --helpr�r�)r�rfr
rr�r�r�r�r�r��get_pwdProperties�
get_maxPwdAge�
get_minPwdAgerr�rr�r�r�rr r"rr�r�r�)r�r��min_pwd_age�max_pwd_ager��
complexity�store_plaintext�history_length�min_pwd_length�account_lockout_duration�account_lockout_threshold�reset_account_lockout_afterr�r�r�r�rar�r�rrr�max_pwd_age_ticks�min_pwd_age_ticksr�min_pwd_len�account_lockout_duration_ticks�!reset_account_lockout_after_ticksr�r�r�r�Ms�
�




�
�

�


�




�




�



�




�


z#cmd_domain_passwordsettings_set.run)NNNFNNNNNNNNNNrr�r�r�r�r#sZ	�
������������rc@s2eZdZdZiZe�ed<e�ed<e�ed<dS)�cmd_domain_passwordsettingsz Manage password policy settings.�psor�rrN)r�r�r�r��subcommandsrArrr�r�r�r�r2�s

r2c
@s�eZdZdZdZejejd�Ze	ddddd�e	d	dd
dd�e	dddd
d�e	ddddd�e	ddddd�e	dddgd�ddd�gZ
e	ddgd�dd d!d"�gZe�
�rZe
�e�e
�e�d#gZ	$	$	%d(d&d'�Zd$S))�cmd_domain_classicupgradez�Upgrade from Samba classic (NT4-like) database to Samba AD DC database.

    Specify either a directory with all Samba classic DC databases and state files (with --dbdir) or
    the testparm utility from your classic installation (with --testparm).
    z"%prog [options] <classic_smb_conf>r�z--dbdirrJr[z+Path to samba classic DC database directoryrLz
--testparm�PATHz�Path to samba classic DC testparm utility from the previous installation.  This allows the default paths of the previous installation to be followedrZzCPath prefix where the new Samba 4.0 AD domain should be initialisedr\r]r^rPr_rjrkrlrcrSrdr�aThe DNS server backend. SAMBA_INTERNAL is the builtin name server (default), BIND9_FLATFILE uses bind9 text database to store zone information, BIND9_DLZ uses samba4 AD to store zone information, NONE skips the DNS setup entirely (this DC will not be a DNS server)rerhr�r�r�r�r�r�rNFc	Cs�tj�|�std|��|rtj�|�std|��|r(tj�|�s(td|��|s0|s0td��|j||d�}|rB|rB|�d�d}|��}
t��}|j	rT|�
d|j	�|durctj�|�sct�|�d}|d	krld
}nf|dkrw|d
krwd
}n[|d
krtd��|dkr�|�
d
�s�|r�tjtj�|�d�}ntjtj�tj�|
�
d���d�}z&ztj�|
|jddt�d�d
}Wnty�|�d�YnwW|��n|��wi}|r�||d<||d<||d<|d|d<n/t||d�|d<t||d�|d<t||d�|d<t||d�|d<t|d�dk�r|d|d<|D]}|�
|||��q|�d�|�|�t||�}|�d�t|||t�||
|d�dS)NzFile %s does not existz"Testparm utility %s does not existzDirectory %s does not existz'Please specify either dbdir or testparmr]z2both dbdir and testparm specified, ignoring dbdir.r�Tr�Fr�r�r�r�r�r�r�r�z�You are not root or your system does not support xattr, using tdb backend for attributes. If you intend to use this provision in production, rerun the script as root on a system supporting xattrs.zstate directoryzlock directoryz
/smbpasswdzsmb passwd filerzReading smb.conf�Provisioning)r�rrr
) rur"rwrrrJr�r|r}r�rrr#�mkdirr r%r&r'r(r)r*r+r�r*r,r!r{r�rr~r#r%r)r�rr��dbdirr~r�r^r<r�r�rr
rr��s3confrA�tmpfile�pathsr��samba3r�r�r�r�*s�

"���




�zcmd_domain_classicupgrade.run)NNNNFFr�NNNF)r�r�r�r�r�r�r�r�r�rr�rSr)rVrTrWr�r�r�r�r�r�r5�sJ��������

�r5c@seZdZejZdZdS)�cmd_domain_samba3upgradeTN)r�r�r�r5r��hiddenr�r�r�r�r>�sr>c@�eZdZdd�ZdS)�LocalDCCredentialsOptionscCstjj||dd�dS)Nzlocal-dc)�special_name)r�r��__init__)r��parserr�r�r�rC�sz"LocalDCCredentialsOptions.__init__N�r�r�r�rCr�r�r�r�rA��rAc@seZdZdZdd�Zdd�Zdd�ZGdd	�d	e�ZGd
d�de�Z	Gdd
�d
e�Z
dd�Zdd�Zdd�Z
dd�Z		d?dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd@d,d-�Zd@d.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Z dAd=d>�Z!d<S)B�DomainTrustCommand�List domain trusts.cCs8t�|�d|_d|_d|_d|_d|_d|_d|_dSr)	rrC�local_lp�local_server�local_binding_string�local_creds�
remote_server�remote_binding_string�remote_creds�r�r�r�r�rC�s

zDomainTrustCommand.__init__cCst�|�jSr)�ctypes�c_uint32�value)r��vr�r�r��_uint32�szDomainTrustCommand._uint32cCs,|durdS|�|jd�}||krdSdS)NFrT)rUr�)r��runtime�val�err32r�r�r��check_runtime_error�sz&DomainTrustCommand.check_runtime_errorc@r@)z$DomainTrustCommand.LocalRuntimeErrorcC�<|�|jd�}|jd}d|j|||f}t�||�dS)Nrr�z%LOCAL_DC[%s]: %s - ERROR(0x%08X) - %s)rUr�rJrrC��exception_selfr�rVr�rX�errstrr�r�r�r�rC��

�z-DomainTrustCommand.LocalRuntimeError.__init__NrEr�r�r�r��LocalRuntimeError�rFr_c@r@)z%DomainTrustCommand.RemoteRuntimeErrorcCrZ)Nrr�z&REMOTE_DC[%s]: %s - ERROR(0x%08X) - %s)rUr�rMrrCr[r�r�r�rC�r^z.DomainTrustCommand.RemoteRuntimeError.__init__NrEr�r�r�r��RemoteRuntimeError�rFr`c@r@)z DomainTrustCommand.LocalLdbErrorcCs6|jd}|jd}d|j|||f}t�||�dS)Nrr�z!LOCAL_DC[%s]: %s - ERROR(%d) - %s)r�rJrrC)r\r��	ldb_errorr��errvalr]r�r�r�r�rC�s


�z)DomainTrustCommand.LocalLdbError.__init__NrEr�r�r�r��
LocalLdbError�rFrcc
Cs�|jdur|jS|��}|j}|dur3|��}|dkr!td|��|�d�}d}d}|d7}d}d}	n
d}d}d|}|�|�}	||_||_d	|||f|_||_	|	|_
|jS)
N�ROLE_ACTIVE_DIRECTORY_DCzInvalid server_role %sr_�ncalrpcrsz,auth_type=ncalrpc_as_system�ncacn_npr�z	%s:%s[%s])rJr�rgr9rr rfrIrK�local_ldap_urlrL)
r�r��localdcoptsr�rJr9�local_transport�local_binding_optionsrgrLr�r�r��setup_local_server�s0


z%DomainTrustCommand.setup_local_servercC�t�|j|j|j�Sr)r�lsarpcrKrIrLrPr�r�r��new_local_lsa_connection��z+DomainTrustCommand.new_local_lsa_connectioncC�t�|j|j|j�Sr)rrKrIrLrPr�r�r��new_local_netlogon_connection�roz0DomainTrustCommand.new_local_netlogon_connectioncCst|jt�|j|jd�S)Nr�)r
rgrrLrIrPr�r�r��new_local_ldap_connection�s
�z,DomainTrustCommand.new_local_ldap_connectionTc
Cs�|r|sJ�|jdur|jSd||_|jdusJ�|�|j�}|j}d}z&t||j|d�}tjtjB}	|r;|	tj	O}	|rB|	tj
O}	|j|	||d�}
Wn#tyb}zt
d||jdf��d}~wtynt
d|��witj
d�tjd	�tjd
�tjd�tjd�tjd
�tjd�tj	d�tjd�tjd�tjd�tjd�tjd�tjd�tjd�tjd�tjd�}|j||
jdd�}
|j� d|
j!|
j"|
f�|
j"|_d|j|f|_#||_$|jS)Nz__unknown__remote_server__.%srsr[)rnr�r�z1Failed to find a writeable DC for domain '%s': %sr�z-Failed to find a writeable DC for domain '%s'�PDC�GC�LDAP�DS�KDC�TIMESERV�CLOSEST�WRITABLE�
GOOD_TIMESERV�NDNC�SELECT_SECRET_DOMAIN_6�FULL_SECRET_DOMAIN_6�ADS_WEB_SERVICE�DS_8�HAS_DNS_NAME�
IS_DEFAULT_NC�FOREST_ROOTT��
names_onlyz,RemoteDC Netbios[%s] DNS[%s] ServerType[%s]
zncacn_np:%s[%s])%rMrJrfrIrgrrrtru�NBT_SERVER_WRITABLE�NBT_SERVER_PDCrsrrr�r,�
NBT_SERVER_GC�NBT_SERVER_KDC�NBT_SERVER_TIMESERV�NBT_SERVER_CLOSEST�NBT_SERVER_GOOD_TIMESERV�NBT_SERVER_NDNC�!NBT_SERVER_SELECT_SECRET_DOMAIN_6�NBT_SERVER_FULL_SECRET_DOMAIN_6�NBT_SERVER_ADS_WEB_SERVICE�NBT_SERVER_DS_8�NBT_SERVER_HAS_DNS_NAME�NBT_SERVER_IS_DEFAULT_NC�NBT_SERVER_FOREST_ROOT�generic_bitmap_to_string�server_typer�r�r�r�rNrO)r�r�r��require_pdc�require_writablerOrM�remote_binding_options�
remote_net�remote_flags�remote_info�error�flag_map�server_type_stringr�r�r��setup_remote_server�s�



�����������	�
���
�������z&DomainTrustCommand.setup_remote_servercCrlr)rrmrNrIrOrPr�r�r��new_remote_lsa_connection2roz,DomainTrustCommand.new_remote_lsa_connectioncCrpr)rrNrIrOrPr�r�r��new_remote_netlogon_connection5roz1DomainTrustCommand.new_remote_netlogon_connectioncCs<t��}t��|_|�d�d�||�}|�|tj�}||fS)N�zutf-8)r�ObjectAttribute�QosInfo�sec_qos�OpenPolicy2rQ�QueryInfoPolicy2�LSA_POLICY_INFO_DNS)r��conn�
policy_access�
objectAttr�policyr!r�r�r��get_lsa_info8s
�zDomainTrustCommand.get_lsa_infoc	Cs@z|�|dddddtj�}|jWSty|�||�YSw�Nr)�netr_DsRGetDCNameEx2r�DS_RETURN_DNS_NAME�dc_uncr��netr_GetDcName)r�r�r\r�r!r�r�r��get_netlogon_dc_uncCs
��z&DomainTrustCommand.get_netlogon_dc_uncc	Cs|�|dddddtj�}|Sr�)r�rr�)r�r�r\r!r�r�r��get_netlogon_dc_infoLs

�z'DomainTrustCommand.get_netlogon_dc_infocCs|jtjkr	|jS|jSr)�
trust_typer�LSA_TRUST_TYPE_DOWNLEVELrb�dns_name�r��tr�r�r��netr_DomainTrust_to_nameRsz+DomainTrustCommand.netr_DomainTrust_to_namecCs�d}d}|D]}|jtj@r|}|jtj@s||j}nq|jtj@r?||ur*dS|jtj@r2dS||j}||ur=dSdS|jtj@rGdSdS)N�Parent�TreeRoot�Child�Shortcut�Forest�External)	�trust_flagsr�NETR_TRUST_FLAG_PRIMARY�NETR_TRUST_FLAG_TREEROOT�parent_index�NETR_TRUST_FLAG_IN_FOREST�trust_attributesr�%LSA_TRUST_ATTRIBUTE_FOREST_TRANSITIVE)r��ar��primary�primary_parent�_tr�r�r�r��netr_DomainTrust_to_typeXs*
�
z+DomainTrustCommand.netr_DomainTrust_to_typecCs4|jtj@rdS|jtj@rdS|jtj@rdSdS)N�Yes�No)r�rr�r�r�"LSA_TRUST_ATTRIBUTE_NON_TRANSITIVEr�r�r�r�r��netr_DomainTrust_to_transitivetsz1DomainTrustCommand.netr_DomainTrust_to_transitivecCs@|jtj@r|jtj@rdS|jtj@rdS|jtj@rdSdS)N�BOTH�INCOMING�OUTGOING�INVALID)r�r�NETR_TRUST_FLAG_INBOUND�NETR_TRUST_FLAG_OUTBOUNDr�r�r�r��netr_DomainTrust_to_direction�s
�z0DomainTrustCommand.netr_DomainTrust_to_directionFcCsBz||}Wnty|�|�}d|}Ynwd||f}|S)Nz__unknown__%08X__�	0x%x (%s))�KeyErrorrU)r��e_dictrTr�ro�v32rFr�r�r��generic_enum_to_string�s
�z)DomainTrustCommand.generic_enum_to_stringc
Cs~g}|}t|���D]}||@sq
||M}|||g7}q
|dkr.|�|�}|d|g7}d�|�}|r7|Sd||f}	|	S)Nrz__unknown_%08X__�,r�)�sorted�keysrUr�)
r��b_dictrTr�r��c�b�c32rorFr�r�r�r��s


z+DomainTrustCommand.generic_bitmap_to_stringcCs(tjdtjdtjdtjdi}|�||�S)N�	DOWNLEVEL�UPLEVEL�MIT�DCE)rr��LSA_TRUST_TYPE_UPLEVEL�LSA_TRUST_TYPE_MIT�LSA_TRUST_TYPE_DCEr�)r�rT�typesr�r�r��trustType_string�s�z#DomainTrustCommand.trustType_stringcCs(tjtjBdtjdtjdi}|�||�S)Nr��INBOUND�OUTBOUND)r�LSA_TRUST_DIRECTION_INBOUND�LSA_TRUST_DIRECTION_OUTBOUNDr�)r�rT�
directionsr�r�r��trustDirection_string�s��z(DomainTrustCommand.trustDirection_stringcCs@tjdtjdtjdtjdtjdtjdtjdtjdi}|�	||�S)	N�NON_TRANSITIVE�UPLEVEL_ONLY�QUARANTINED_DOMAIN�FOREST_TRANSITIVE�CROSS_ORGANIZATION�
WITHIN_FOREST�TREAT_AS_EXTERNAL�USES_RC4_ENCRYPTION)
rr�� LSA_TRUST_ATTRIBUTE_UPLEVEL_ONLY�&LSA_TRUST_ATTRIBUTE_QUARANTINED_DOMAINr��&LSA_TRUST_ATTRIBUTE_CROSS_ORGANIZATION�!LSA_TRUST_ATTRIBUTE_WITHIN_FOREST�%LSA_TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL�'LSA_TRUST_ATTRIBUTE_USES_RC4_ENCRYPTIONr�)r�rT�
attributesr�r�r��trustAttributes_string�s�
z)DomainTrustCommand.trustAttributes_stringcCsLtjdtjdtjdtjdtjdtjdtjdtjdtj	d	tj
d
i
}|�||�S)N�DES_CBC_CRC�DES_CBC_MD5�RC4_HMAC_MD5�AES128_CTS_HMAC_SHA1_96�AES256_CTS_HMAC_SHA1_96zAES256_CTS_HMAC_SHA1_96-SK�FAST_SUPPORTED�COMPOUND_IDENTITY_SUPPORTED�CLAIMS_SUPPORTED�!RESOURCE_SID_COMPRESSION_DISABLED)r�KERB_ENCTYPE_DES_CBC_CRC�KERB_ENCTYPE_DES_CBC_MD5�KERB_ENCTYPE_RC4_HMAC_MD5�$KERB_ENCTYPE_AES128_CTS_HMAC_SHA1_96�$KERB_ENCTYPE_AES256_CTS_HMAC_SHA1_96�'KERB_ENCTYPE_AES256_CTS_HMAC_SHA1_96_SK�KERB_ENCTYPE_FAST_SUPPORTED�(KERB_ENCTYPE_COMPOUND_IDENTITY_SUPPORTED�KERB_ENCTYPE_CLAIMS_SUPPORTED�.KERB_ENCTYPE_RESOURCE_SID_COMPRESSION_DISABLEDr�)r�rT�enctypesr�r�r��kerb_EncTypes_string�s�z'DomainTrustCommand.kerb_EncTypes_stringcCs6|dkrdStjdtjdtjdi}d|j||dd�S)	Nr�Status[Enabled]zDisabled-New�DisabledzDisabled-Conflicting�
Status[%s]Tr�)r�LSA_TLN_DISABLED_NEW�LSA_TLN_DISABLED_ADMIN�LSA_TLN_DISABLED_CONFLICTr��r��e_flagsrnr�r�r��entry_tln_status�s�z#DomainTrustCommand.entry_tln_statuscCs<|dkrdStjdtjdtjdtjdi}d|j||dd	�S)
NrrzDisabled-SIDzDisabled-SID-ConflictingzDisabled-NBzDisabled-NB-ConflictingrTr�)r�LSA_SID_DISABLED_ADMIN�LSA_SID_DISABLED_CONFLICT�LSA_NB_DISABLED_ADMIN�LSA_NB_DISABLED_CONFLICTr�rr�r�r��entry_dom_status�s�z#DomainTrustCommand.entry_dom_statusNc	Cs|dur	d|}nd}|j�dt|j�|f�t|j�D]h\}}|j}d}|dur?|jD]}	|	j|kr5q-|	j}d|	jj}q-|j	}
|j
tjkrX|j�d|�
|�|
j|f�q|j
tjkrj|j�dd|
jf�q|j
tjkr�|j�d|�|�|
jj|
jj|
j|f�qdS)Nz TDO[%s]rszNamespaces[%d]%s:
z Collision[%s]zTLN: %-32s DNS[*.%s]%s
zTLN_EX: %-29s DNS[*.%s]
z)DOM: %-32s DNS[%s] Netbios[%s] SID[%s]%s
)r�r�r�entries�	enumeratern�indexr�rJ�forest_trust_datarMr�LSA_FOREST_TRUST_TOP_LEVEL_NAMEr!�"LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX�LSA_FOREST_TRUST_DOMAIN_INFOr&�dns_domain_name�netbios_domain_namer1)r��fti�tln�
collisions�
tln_stringr�rErn�collision_stringr��dr�r�r��write_forest_trust_info�sD

�


�
���z*DomainTrustCommand.write_forest_trust_info)TT)F)NN)"r�r�r�r�rCrUrYrr_r`rcrkrnrqrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr!r&r6r�r�r�r�rG�sB

�@	


		
rGc@s2eZdZdZdZejejed�Z	gZ
ddd�ZdS)�cmd_domain_trust_listrHr��r�r�rhNc
Cs|�||�}z|��}Wnty}z|�||d��d}~wwz|�|tjtjBtjB�}Wn!tyP}z|�	|t
j�rEtd|j
��|�||d��d}~ww|j}|D]*}	|	jtj@r_qV|j�dd|�||	�d|�|	�d|�|	�d|�|	�f�qVdS)	N�!failed to connect netlogon serverz:LOCAL_DC[%s]: netr_DsrEnumerateDomainTrusts not supported.z$netr_DsrEnumerateDomainTrusts failedz%-14s %-15s %-19s %s
zType[%s]zTransitive[%s]z
Direction[%s]zName[%s])rkrqr�r_�netr_DsrEnumerateDomainTrustsrr�r�r�rYr�WERR_RPC_S_PROCNUM_OUT_OF_RANGErrJ�arrayr�r�r�r�r�r�r�r�)
r�r�r�rhrJ�local_netlogonr��local_netlogon_trustsr�r�r�r�r�r�%sF���������
�zcmd_domain_trust_list.runr�)r�r�r�r�r�r�r�r�rAr�r�r�r�r�r�r�r7s�r7c@s8eZdZdZdZejejed�Z	gZ
dgZddd�ZdS)	�cmd_domain_trust_show�Show trusted domain details.�%prog NAME [options]r8r�Nc
Cs<|�||�}z|��}Wnty}z|�||d��d}~wwz
tj}|�||�\}	}
Wnty@}z|�||d��d}~ww|j�d|
j	j
|
jj
|
jf�t�
�}||_
z|�|	|tj�}|j}
|j}Wn ty�}z|�|tj�r}td|��|�||d��d}~wwz
|�|	|tj�}Wn6ty�}z*|�|tj�r�d}|�|tj�r�d}|dur�|�||d��t��}d|_WYd}~nd}~wwzd}|
jtj@r�|�|	|tj�}Wn;t�y}z.|�|tj �r�d}|�|tj!�r�d}|du�r|�||d��t�"�}d|_#g|_$WYd}~nd}~ww|j�d	�|j�d
|
j%j
�|
j%j
|
j&j
k�r;|j�d|
j&j
�|j�d|
j�|j�d
|�'|
j(��|j�d|�)|
j*��|j�d|�+|
j��t,�-|j�j.}t,�/|j�j.}|j�d||f�|j�d|�0|j��|
jtj@�r�|j1||
j&j
d�dS)N�failed to connect lsa server�#failed to query LSA_POLICY_INFO_DNS�(LocalDomain Netbios[%s] DNS[%s] SID[%s]
�4trusted domain object does not exist for domain [%s]z.QueryTrustedDomainInfoByName(FULL_INFO) failed�?QueryTrustedDomainInfoByName(SUPPORTED_ENCRYPTION_TYPES) failedrz&lsaRQueryForestTrustInformation failedzTrustedDomain:

zNetbiosName:    %s
zDnsName:        %s
zSID:            %s
zType:           %s
zDirection:      %s
zAttributes:     %s
zPosixOffset:    0x%08X (%d)
zkerb_EncTypes:  %s
�r1)2rkrnr�r_r�!LSA_POLICY_VIEW_LOCAL_INFORMATIONr�r�r�r�rJr�r��String�QueryTrustedDomainInfoByName�!LSA_TRUSTED_DOMAIN_INFO_FULL_INFO�info_ex�posix_offsetrrYr�NT_STATUS_OBJECT_NAME_NOT_FOUNDr�-LSA_TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES�NT_STATUS_INVALID_PARAMETER�NT_STATUS_INVALID_INFO_CLASS� TrustDomainInfoSupportedEncTypes�	enc_typesr�r��lsaRQueryForestTrustInformationr-�"NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE�NT_STATUS_NOT_FOUND�ForestTrustInformation�countr'rbr�r�r�r��trust_directionrrQrRrS�c_int32rr6)r�r�r�r�rhrJ�	local_lsar��local_policy_access�local_policy�local_lsa_info�	lsaString�local_tdo_full�local_tdo_info�local_tdo_posix�local_tdo_enctypes�local_tdo_forest�posix_offset_u32�posix_offset_i32r�r�r�r�Vs��������
�������
���
���zcmd_domain_trust_show.runr�)
r�r�r�r�r�r�r�r�rAr�r�r�r�r�r�r�r�r?Fs�r?c	@sleZdZdZdZejejed�Z	e
dddddd	�e
d
ddddd	�e
d
ddddd	�gZdgZ		ddd�Z
dS)�cmd_domain_trust_modifyr@rAr8z--use-aes-keysrPz!The trust uses AES kerberos keys.�use_aes_keysN�rRrOr�ri�
--no-aes-keysz:The trust does not have any support for AES kerberos keys.�disable_aes_keysz--raw-kerb-enctypes�storezThe raw kerberos enctype bits�
kerb_enctypesr�c
Cs�d}d}	|dur|	d7}	|dur|	d7}	|dur|	d7}	|	dkr$td��|	dkr,|d7}|dkr4td��|�||�}
z|��}WntyS}z|�||d��d}~wwztj}
|
tjO}
|�||
�\}}Wntyy}z|�||d��d}~ww|j	�
d|jj|j
j|jf�|	dk�rYt��}||_z
|�||tj�}Wn6ty�}z*|�|tj�r�d}|�|tj�r�d}|dur�|�||d��t��}d|_WYd}~nd}~ww|j	�
d	|�|j��t��}|dur�t|dd
�|_n |du�rtj|_|jtjO_n|du�rtj|_ntd��|j|jk�rSz|�||tj|�}|j	�
d|�|j��WdSt�yR}z|du�rG|�||d
��WYd}~dSd}~ww|j	�
d�dS)Nrr�zL--no-aes-keys, --use-aes-keys and --raw-kerb-enctypes are mutually exclusivez/modification arguments are required, try --helpzfailed to connect to lsa serverrCrDrFzOld kerb_EncTypes:  %s
)r�z&Internal error should be checked abovezNew kerb_EncTypes:  %s
z=SetTrustedDomainInfoByName(SUPPORTED_ENCRYPTION_TYPES) failedzNo kerb_EncTypes update needed
) rrkrnr�r_rrH�LSA_POLICY_TRUST_ADMINr�r�r�r�rJr�r�rIrJrOrrYrrPrQrRrSrr�rrrr�SetTrustedDomainInfoByName)r�r�r�r�rhrkrhrm�num_modifications�enctype_argsrJr[r�r\r]r^r_rcrSr�r�r�r��s���
���
�����



���
�
���zcmd_domain_trust_modify.run)NNNNNN�r�r�r�r�r�r�r�r�rAr�rr�r�r�r�r�r�r�rg�s6������rgc@s�eZdZdZdZejejeje	d�Z
edddddgd	d
dd�eddd
gd�dddd�edddddgdddd�edddddd�edddgd�d d!d"d�ed#dd$d%dd�ed&dd'd(dd�ed)d*d+d,d-d�ed.d*d/d0d-d�g	Zd1gZ
	"	"	"		-d4d2d3�Zd"S)5�cmd_domain_trust_createz Create a domain or forest trust.�%prog DOMAIN [options]�r�r�r�rhz--typerS�TYPE�externalr�z.The type of the trust: 'external' or 'forest'.r��rMrNrWrOr�riz--direction�	DIRECTION)�incoming�outgoing�bothz6The trust direction: 'incoming', 'outgoing' or 'both'.rYr|z--create-location�LOCATION�localz=Where to create the trusted domain object: 'local' or 'both'.�create_locationz--cross-organisationrPz=The related domains does not belong to the same organisation.�cross_organisationFriz
--quarantinedzyes|no)r�r�Nz�Special SID filtering rules are applied to the trust. With --type=external the default is yes. With --type=forest the default is no.�quarantined_argNz--not-transitivez#The forest trust is not transitive.�not_transitivez--treat-as-externalz'The treat the forest trust as external.�treat_as_externalrj�store_falsez)The trust does not use AES kerberos keys.rhTz--skip-validationzSkip validation of the trust.�validater�c@
s"
t��}d}|
dur|dkrd}n|
dkrd}|dkr'|r!td��|r'td��t��}|
r:tj|_|jtjO_ntj|_tj	}|tj
O}|tjO}t��}tj
|_d|_|d	krk|jtjO_|jtjO_n|d
krx|jtjO_n|dkr�|jtjO_d|_|	r�|jtjO_|r�|jtjO_|dkr�|jtjO_|r�|jtjO_|r�|jtjO_�fdd
�}d}d}tj	}|dkr�|jtj@r�|d�}t|�d��}|jtj@r�|d�}t|�d��}d}n�dd�}|jtj@r�|d�}|jtj@�r
|d�}|tj
O}|tjO}t��}tj
|_d|_|d	k�r5|jtjO_|jtjO_n|d
k�rC|jtjO_n
|dk�rP|jtjO_d|_|	�r^|jtjO_|�ri|jtjO_|dk�rv|jtjO_|�r�|jtjO_|�r�|jtjO_��||�}z���}Wnt�y�}z���|d��d}~wwz
��||�\}} Wnt�y�}z���|d��d}~ww�j� d| j!j"| j#j"| j$f�z��%||�}!Wnt�y�}z��&�|d��d}~wwz��'�}"Wnt�y}z��&�|d��d}~wwz
��|"|�\}#}$Wnt�y2}z��&�|d��d}~ww�j� d|$j!j"|$j#j"|$j$f�|$j#j"|j(_"|$j!j"|j)_"|$j$|_$|�rf| j#j"|j(_"| j!j"|j)_"| j$|_$z|j(j"|_"|�*||tj+�}%td|j"��t,�y�}z��-|t.j/��s����|d|j"��WYd}~nd}~wwz|j)j"|_"|�*||tj+�}&td|j"��t,�y�}z��-|t.j/��sψ��|d|j"��WYd}~nd}~ww|�rQz|j(j"|_"|"�*|#|tj+�}'td|j"��t,�y}z��-|t.j/��s��&�|d|j"��WYd}~nd}~wwz|j)j"|_"|"�*|#|tj+�}(td|j"��t,�yP}z��-|t.j/��sF��&�|d|j"��WYd}~nd}~wwz��0�})Wnt�yk}z���|d��d}~wwz��1|)|�}*Wnt�y�}z���|d��d}~ww|�r�z��2�}+Wnt�y�}z��&�|d��d}~wwz	��3|+|!|�},Wnt�y�}z��&�|d��d}~wwdd�}-t4�5�}.|-||.�}/|-||.�}0zg|�r�j� d �d!d"d#�}1t6|"|#|tj7|0|/�}2�j� d$�|�r�j� d%�d!d&d#�}1|"�8|2tj9|��j� d'�dd"d#�}1t6|||tj7|/|0�}3�j� d(�|�r=�j� d)�dd&d#�}1|�8|3tj9|�WnXt�y�}zK�j� d*|1d+|1d,f�|2�re�j� d-�|"�:|2�d}2|3�ru�j� d.�|�:|3�d}3|1d,d!k�r���&�|d/|1d+�����|d/|1d+��d}~ww|�rE|jtj@�rK�j� d0�z
|)�;|*j<|$j#j"t=j>�}4Wnt�y�}z���|d1��d}~wwz
|�?||$j#tj@|4d�}5Wnt�y�}z���|d2��d}~ww�jA|4|$j#j"|5d3�|�rK�j� d4�z|+�;|,| j#j"t=j>�}6Wnt�y}z��&�|d1��d}~wwz
|"�?|#| j#tj@|6d�}7Wnt�y@}z��&�|d2��d}~ww�jA|6| j#j"|7d3�|jtj@�rLjj� d5�z|)�B|*j<t=jCd6|$j#j"�}8Wnt�yz}z���|d7��d}~ww��D|8jEd�}9��D|8jFd�}:|8jGt=jH@�r�d8|8jI|8jFd9|8jEd9f};nd:|8jI|8jFd9|8jEd9f};|9tJjKk�s�|:tJjKk�r�t|;���j� d;|;�|�rE|jtj@�rE�j� d<�z
|+�B|,t=jCd6| j#j"�}<Wnt�y�}z��&�|d7��d}~ww��D|<jEd�}=��D|<jFd�}>|<jGt=jH@�rd=|<jI|<jFd9|<jEd9f}?nd>|<jI|<jFd9|<jEd9f}?|=tJjKk�s9|>tJjKk�r=t|?���j� d;|?�|2du�rgz|"�L|2�Wnt�yd}zWYd}~nd}~wwd}2|3du�r�z|�L|3�Wnt�y�}zWYd}~nd}~wwd}3�j� d?�dS)@NFrwTr�r�z'--not-transitive requires --type=forestz*--treat-as-external requires --type=forestrr|rzr{csLd}	|dur
|dkr
|Std|�}td|�}||ks%d}�j�d�q)NTrszNew %s Password: zRetype %s Password: r�)rr�r�)r��password�passwordverifyrPr�r��get_password�	s�z1cmd_domain_trust_create.run.<locals>.get_passwordr~zIncoming Trust�	utf-16-lezOutgoing TrustcSs"t�|d|d�}t|�d��S)N�r�)r)� generate_random_machine_passwordr)�encode)�length�pwr�r�r��random_trust_secret�	sz8cmd_domain_trust_create.run.<locals>.random_trust_secret��rBrCrD�failed to locate remote server�)RemoteDomain Netbios[%s] DNS[%s] SID[%s]
zTrustedDomain %s already exist'z2QueryTrustedDomainInfoByName(%s, FULL_INFO) failedr9�failed to get netlogon dc infocSs�|dur
t��}d|_|St��}t|�|_||_t��}t�	|�|_
tj|_
||_t��}d|_|g|_t��}d|_||_|S)Nrr�)r�trustAuthInOutBlobrX�
AuthInfoClearr�sizer��AuthenticationInformationr)�unix2nttime�LastUpdateTimer�TRUST_AUTH_TYPE_CLEAR�AuthType�AuthInfo�AuthenticationInformationArrayr<�current)�secret�update_time�blob�clearr!r<r�r�r��generate_AuthInOutBlobW
s$
z;cmd_domain_trust_create.run.<locals>.generate_AuthInOutBlobzCreating remote TDO.
�remote�CreateTrustedDomainEx2)�locationr�zRemote TDO created.
z2Setting supported encryption types on remote TDO.
�SetInformationTrustedDomainzCreating local TDO.
zLocal TDO created
z1Setting supported encryption types on local TDO.
z$Error: %s failed %sly - cleaning up
r�r�zDeleting remote TDO.
zDeleting local TDO.
�%sz(Setup local forest trust information...
�*netr_DsRGetForestTrustInformation() failed�&lsaRSetForestTrustInformation() failed�r1r2z)Setup remote forest trust information...
zValidating outgoing trust...
r��!NETLOGON_CONTROL_TC_VERIFY failed�GLocalValidation: DC[%s] CONNECTION[%s] TRUST[%s] VERIFY_STATUS_RETURNEDr��0LocalValidation: DC[%s] CONNECTION[%s] TRUST[%s]�OK: %s
zValidating incoming trust...
�HRemoteValidation: DC[%s] CONNECTION[%s] TRUST[%s] VERIFY_STATUS_RETURNED�1RemoteValidation: DC[%s] CONNECTION[%s] TRUST[%s]z	Success.
)MrrIrrRrrrSrrrHrn�LSA_POLICY_CREATE_SECRET�TrustDomainInfoInfoExr�r�rYr�r�r�r�r�r�r�rr)r�rkrnr�r_r�r�r�r�rJr�r�r�r`r�r�rbrJrKrrYrrNrqr�r�r�r)�current_unix_timerD�LSA_TRUSTED_DOMAIN_ALL_ACCESSr�rO�DeleteObject�!netr_DsRGetForestTrustInformationr�r�DS_GFTI_UPDATE_TDO�lsaRSetForestTrustInformationr-r6�netr_LogonControl2Ex�NETLOGON_CONTROL_TC_VERIFYrU�pdc_connection_status�tc_connection_statusrn�NETLOGON_VERIFY_STATUS_RETURNED�trusted_dc_namer�WERR_SUCCESS�Close)@r�r�r�rhr�r�r�rYrr�r�r�r�rhr�r_�quarantinedrSr\�local_trust_infor��incoming_secret�outgoing_secret�remote_policy_access�incoming_password�outgoing_password�remote_trust_infor�rJr[r�r]r^rM�
remote_lsa�
remote_policy�remote_lsa_info�local_old_netbios�
local_old_dns�remote_old_netbios�remote_old_dnsr=�local_netlogon_info�remote_netlogon�remote_netlogon_dc_uncr�r��
incoming_blob�
outgoing_blob�current_request�remote_tdo_handle�local_tdo_handle�local_forest_info�local_forest_collision�remote_forest_info�remote_forest_collision�local_trust_verify�local_trust_status�local_conn_status�local_validation�remote_trust_verify�remote_trust_status�remote_conn_status�remote_validationr�rPr�r�c	sR�







������������
�������
�������
�������
����������������


�
�
�
���


�
��������������������������������
��
��zcmd_domain_trust_create.run)
NNNNNNNFNFFFT�r�r�r�r�r�r�r�r�r�rAr�rr�r�r�r�r�r�r�rs(	s������������-�rsc	@�XeZdZdZdZejejeje	d�Z
edddddgd	d
dd�gZdgZ
	
	
ddd�Zd
S)�cmd_domain_trust_deletezDelete a domain trust.rtruz--delete-locationrSr}r~r|z=Where to delete the trusted domain object: 'local' or 'both'.�delete_locationrxr�NcCs�tj}|tjO}|tjO}|dkrd}n
tj}|tjO}|tjO}|�||�}	z|��}
Wnty@}z|�||d��d}~wwz
|�|
|�\}}
Wnty^}z|�||d��d}~ww|j	�
d|
jj|
j
j|
jf�d}d}d}d}t��}z
||_|
�||tj�}Wn ty�}z|�|tj�r�td|��|�||d��d}~ww|du�r�z|�||�}Wnty�}z|�||d��d}~wwz|��}Wnty�}z|�||d��d}~wwz
|�||�\}}Wnt�y}z|�||d��d}~ww|j	�
d|jj|j
j|jf�|j|jk�s,|jj|jjk�s,|j
j|jjk�r:td|jj|jj|jf��z|
j
j|_|�||tj�}Wn%t�yn}z|�|tj��sd|�||d	|j��WYd}~nd}~ww|du�r�|
j|jk�s�|
jj|jjk�s�|
j
j|jjk�r�td
|jj|jj|jf��|du�r�z|jj|_|
�||tj�}Wnt�y�}z
|�||d|j��d}~ww|
�|�d}|du�r�z|jj|_|�||tj�}Wnt�y�}z
|�||d|j��d}~ww|du�r/z|�|�d}|j	�
d�Wn t�y.}z|j	�
d
|�||d��WYd}~nd}~ww|du�rfz|
�|�d}|j	�
d�WdSt�ye}z|j	�
d
|�||d��WYd}~dSd}~wwdS)Nr~rBrCrDz$Failed to find trust for domain '%s'r�r�z2LocalTDO inconsistend: Netbios[%s] DNS[%s] SID[%s]z QueryTrustedDomainInfoByName(%s)z3RemoteTDO inconsistend: Netbios[%s] DNS[%s] SID[%s]zOpenTrustedDomainByName(%s)zRemoteTDO deleted.
z%s
zDeleteObject() failedzLocalTDO deleted.
) rrHrnr�rkrnr�r_r�r�r�r�rJr�r�rIrJ�LSA_TRUSTED_DOMAIN_INFO_INFO_EXrrYrrNrr`r�r�rbr��OpenTrustedDomainByNamer�SEC_STD_DELETEr�)r�r�r�rhr�r�r�r\r�rJr[r�r]r^rar��remote_tdo_infor�r_rMr�r�r�r�r�r�r�Es*



��������
��������
��
���
�

��
���


��
���

&��

�$��zcmd_domain_trust_delete.run�NNNNNr�r�r�r�r�r�/�&����r�c	@r�)�cmd_domain_trust_validatezValidate a domain trust.rtruz--validate-locationrSr}r~r|z?Where to validate the trusted domain object: 'local' or 'both'.�validate_locationrxr�Nc 
Cs�tj}|�||�}z|��}	Wnty"}
z|�||
d��d}
~
wwz
|�|	|�\}}Wnty@}
z|�||
d��d}
~
ww|j�d|j	j
|jj
|jf�zt�
�}
||
_
|	�||
tj�}Wn ty�}
z|�|
tj�rwtd|��|�||
d��d}
~
ww|j�d|jj
|jj
|jf�z|��}Wnty�}
z|�||
d��d}
~
wwz
|�|tjd|jj
�}Wnty�}
z|�||
d	��d}
~
ww|�|jd
�}|�|jd
�}|jtj@r�d|j |jd|jdf}nd
|j |jd|jdf}|t!j"k�s
|t!j"k�rt|��|j�d|�z|j �#dd�}d|jj
|f}|�|tj$d|�}Wnt�yG}
z|�||
d��d}
~
ww|�|jd
�}d|j |jdf}|t!j"k�rdt|��|j�d|�|dk�rlz
|j%||dd�}Wnt�y�}
z|�&||
d��d}
~
wwz|�'�}Wnt�y�}
z|�&||
d��d}
~
wwz
|�|tjd|jj
�}Wnt�y�}
z|�&||
d	��d}
~
ww|�|jd
�}|�|jd
�}|jtj@�r�d|j |jd|jdf}nd|j |jd|jdf}|t!j"k�s
|t!j"k�rt|��|j�d|�z|j �#dd�}d|jj
|f}|�|tj$d|�}Wnt�yG}
z|�&||
d��d}
~
ww|�|jd
�}d|j |jdf}|t!j"k�rdt|��|j�d|�dS)NrBrCrDrE�,QueryTrustedDomainInfoByName(INFO_EX) failed�%LocalTDO Netbios[%s] DNS[%s] SID[%s]
r9r�r�rr�r�r�r��\rsz%s\%sz"NETLOGON_CONTROL_REDISCOVER failedz&LocalRediscover: DC[%s] CONNECTION[%s]r~F)r�r�r�r�z'RemoteRediscover: DC[%s] CONNECTION[%s])(rrHrkrnr�r_r�r�r�r�rJr�r�rIrJr�rrYrrNrrbr�rqr�rr�rUr�r�rnr�r�rr��replace�NETLOGON_CONTROL_REDISCOVERr�r`r�) r�r�r�r�r�rhr�r\rJr[r�r]r^r_rar=r�r�r�r�r\�domain_and_server�local_trust_rediscover�local_rediscoverrMr�r�r�r�r��remote_trust_rediscover�remote_rediscoverr�r�r�r��s4�����������������������
���������������zcmd_domain_trust_validate.runr�r�r�r�r�r�r��r�r�c@s\eZdZdZdZejejed�Z	e
dddgd�dd	d
d�e
dd
dddd�e
dddddgd�e
dddddgd�e
dddddgd�e
ddddd gd�e
d!dd"d#d$gd�e
d%dd"d&d'gd�e
d(dd)d*d+gd�e
d,dd)d-d.gd�e
d/ddd0d1gd�e
d2ddd3d4gd�e
d5ddd6d7gd�e
d8ddd9d:gd�gZd;gZd
d
d
d
d
dggggggggggggfd<d=�Z
d
S)>�cmd_domain_trust_namespaceszManage forest trust namespaces.z%prog [DOMAIN] [options]r8z	--refreshrSzcheck|store)�checkrlNzLList and maybe store refreshed forest trust information: 'check' or 'store'.�refreshNrxz--enable-allrPzATry to update disabled entries, not allowed with --refresh=check.�
enable_allFriz--enable-tlnr��	DNSDOMAINz?Enable a top level name entry. Can be specified multiple times.�
enable_tln)rRrNrOr�riz
--disable-tlnz@Disable a top level name entry. Can be specified multiple times.�disable_tlnz--add-tln-exzAAdd a top level exclusion entry. Can be specified multiple times.�
add_tln_exz--delete-tln-exzDDelete a top level exclusion entry. Can be specified multiple times.�
delete_tln_exz--enable-nb�
NETBIOSDOMAINzIEnable a netbios name in a domain entry. Can be specified multiple times.�	enable_nbz--disable-nbzJDisable a netbios name in a domain entry. Can be specified multiple times.�
disable_nbz--enable-sid�	DOMAINSIDz@Enable a SID in a domain entry. Can be specified multiple times.�enable_sid_strz
--disable-sidzADisable a SID in a domain entry. Can be specified multiple times.�disable_sid_strz--add-upn-suffixzVAdd a new uPNSuffixes attribute for the local forest. Can be specified multiple times.�add_upnz--delete-upn-suffixz^Delete an existing uPNSuffixes attribute of the local forest. Can be specified multiple times.�
delete_upnz--add-spn-suffixz[Add a new msDS-SPNSuffixes attribute for the local forest. Can be specified multiple times.�add_spnz--delete-spn-suffixzcDelete an existing msDS-SPNSuffixes attribute of the local forest. Can be specified multiple times.�
delete_spnzdomain?cGCs�d}|dur�|dkrtd|��|rtd��t|�dkr td��t|�dkr*td��t|	�dkr4td��t|
�dkr>td	��t|
�dkrHtd
��t|�dkrRtd��t|�dkr\td��t|�dkrftd
��t|�dkr~|D]
}|�d�svqntd|��d}t|�dkr�|D]
}|�d�s�q�td|��d}|D]}|D]}|��|��kr�q�td|��q�t|�dkr�|D]
}|�d�s�q�td|��d}t|�dkr�|D]
}|�d�s�q�td|��d}|D]}|D]}|��|��kr�q�td|��q�n,t|�dk�rtd��t|�dk�r
td��t|�dk�rtd��t|�dk�r#td��|du�r�|dk�r/d}|�r=|dk�r=td|��t|�dk�rHtd��t|�dk�rStd��t|	�dk�r^td��t|
�dk�ritd��t|
�dk�rttd��t|�dk�rtd ��t|�dk�r�td!��t|�dk�r�td"���nJ|�r�d}t|�dk�r�td#��t|
�dk�r�td$��t|�dk�r�td%��t|�dk�r�d}t|�dk�r�d}|D]}|D]}|��|��k�r�q�td&|���q�t|	�dk�r|	D]}|�d��s��q�td'|��d}t|
�dk�r |
D]}|�d��s�qtd(|��d}|	D]}|
D]}|��|��k�r3�q&td)|���q"t|
�dk�rDd}t|�dk�rMd}|
D]}|D]}|��|��k�r`�qStd*|���qOg}|D]#}zt�|�}Wnt�y�}ztd+|��d}~ww|�|��qlg}|D]#}zt�|�}Wnt�y�}ztd,|��d}~ww|�|��q�t|�dk�r�d}t|�dk�r�d}|D]}|D]}||k�rِq�td-|���q�t	j
}|�r�|t	jO}|�||�}z|�
�}Wnt�y}z|�||d.��d}~wwz
|�||�\} }!Wnt�y+}z|�||d/��d}~ww|j�d0|!jj|!jj|!jf�|du�r�z|��}"Wnt�y[}z|�||d1��d}~wwz|�|"|�}#Wnt�yx}z|�||d2��d}~ww|#j|#jk�r�td3|#j|#jf��z
|"�|#jdd�}$WnAt�y�}z4|�|tj��r�td4|j ��|�|tj!��r�td4|j ��|�|tj"��r�td4|j ��|�||d5��d}~ww|j�d6�|j#|$|!jjd7�z|�$�}%Wnt�y�}z|�||d8��d}~wwd9t%|%�&��}&d:d;g}'z|%j'|&t(j)d<|'d=�}(|(d})Wnt(j*�y1}z|�+||d>��d}~wwg}*d:|)v�r@|*�,|)d:�g}+d;|)v�rN|+�,|)d;�|j�d?t|*��|*D]
},|j�d@dA|,f��qZ|j�dBt|+��|+D]
},|j�d@dA|,f��qt|�s�dSd}-g}.|.�,|*�d}/g}0|0�,|+�|D]%}1t-|.�D]\}2},t%|,���|1��k�r�tdC|1���q�|.�|1�d}-�q�|D]/}1d}3t-|.�D]\}2},t%|,���|1��k�rܐq�|2}3|3du�r�tdD|1��|.�.|3�d}-�q�|D]%}4t-|0�D]\}2},t%|,���|4��k�rtdE|4���q�|0�|4�d}/�q�|D]/}4d}3t-|0�D]\}2},t%|,���|4��k�r6�q%|2}3|3du�rDtdF|4��|0�.|3�d}/�q|j�dGt|.��|.D]
},|j�d@dA|,f��qY|j�dHt|0��|0D]
},|j�d@dA|,f��qst(�/�}5|)j0|5_0|-�r�t(�1|.t(j2d:�|5d:<|/�r�t(�1|0t(j2d;�|5d;<z|%�3|5�Wnt(j*�y�}z|�+||dI��d}~wwz
|"�|#jdd�}6Wnt�y�}z|�||d5��d}~ww|j�dJ�|j#|6|!jjd7�dSzt	�4�}7||7_|�5| |7t	j6�}8Wn"t7�y#}z|�|t8j9��rtdK|��|�||dL��d}~ww|j�dM|8j:j|8jj|8jf�|8j;t	j<@�sAtdN|��|du�r!z|��}"Wnt�y`}z|�||d1��d}~wwz|�|"|�}#Wnt�y}}z|�||d2��d}~wwdO}9|dk�r�t=j>}:|�r�d}9nd}:z|"�|#j|8jj|:�};Wnt�y�}z|�||d5��d}~wwz
|�?| |8jt	j@|;|9�}<Wnt�y�}z|�||dP��d}~ww|j�dQ�|j#|;|8jj|<dR�|dk�rzt	�4�}7|8jj|7_|�A| |7t	j@�}6Wnt�y}z|�||dS��d}~ww|j�dJ�|j#|6|8jjd7�dSzt	�4�}7|8jj|7_|�A| |7t	j@�}=Wnt�yH}z|�||dS��d}~ww|j�dT�|j#|=|8jjd7�|�s]dSg}>|>�,|=jB�t	�C�}?t|>�|?_D|>|?_B|�r�t-|?jB�D]+\}2}@|@jEt	jFk�r��qy|?jB|2jGdk�r��qyd|?jB|2_H|?jB|2jGt	jIM_G�qyt-|?jB�D]7\}2}@|@jEt	j@k�r��q�|?jB|2jGdk�rq�d|?jB|2_H|?jB|2jGt	jJM_G|?jB|2jGt	jKM_G�q�|D]T}Ad}3t-|?jB�D]\}2}@|@jEt	jFk�r��q�|@jLj��|A��k�r�q�|2}3|3du�rtdU|A��|?jB|3jGt	jI@�s%tdV|A��d|?jB|3_H|?jB|3jGt	jIM_G�q�|D]_}Ad}3t-|?jB�D]\}2}@|@jEt	jFk�rQ�qD|@jLj��|A��k�r^�qD|2}3|3du�rltdW|A��|?jB|3jGt	jM@�r|tdX|A��d|?jB|3_H|?jB|3jGt	jIM_G|?jB|3jGt	jMO_G�q;|	D]�}Bd}3t-|?jB�D]\}2}@|@jEt	jNk�r��q�|@jLj��|B��k�r��q�|2}3|3du�r�tdY|B��dZ|B��}Cd}3t-|?jB�D]*\}2}@|@jEt	jFk�r�q�dZ|@jLj��}D|C|Dk�r�td[|B��|C�O|D��	s�q�|2}3|3du�	rtd\|B��t	�P�}@t	jN|@_Ed|@_Gd|@_H|B|@jL_g}>|>�,|?jB�|>�Q|3dO|@�t|>�|?_D|>|?_B�q�|
D]G}Bd}3t-|?jB�D]\}2}@|@jEt	jNk�	rU�	qH|@jLj��|B��k�	rb�	qH|2}3|3du�	rptd]|B��g}>|>�,|?jB�|>�.|3�t|>�|?_D|>|?_B�	q?|
D]U}Ed}3t-|?jB�D]\}2}@|@jEt	j@k�	r��	q�|@jLjRj��|E��k�	r��	q�|2}3|3du�	r�td^|E��|?jB|3jGt	jJ@�	s�td_|E��d|?jB|3_H|?jB|3jGt	jJM_G�	q�|D]`}Ed}3t-|?jB�D]\}2}@|@jEt	j@k�	r��	q�|@jLjRj��|E��k�
r�	q�|2}3|3du�
rtd`|E��|?jB|3jGt	jS@�
r#tda|E��d|?jB|3_H|?jB|3jGt	jJM_G|?jB|3jGt	jSO_G�	q�|D]P}d}3t-|?jB�D]\}2}@|@jEt	j@k�
rZ�
qM|@jLjT|k�
rc�
qM|2}3|3du�
rqtdb|��|?jB|3jGt	jK@�
s�tdc|E��d|?jB|3_H|?jB|3jGt	jKM_G�
qD|D][}d}3t-|?jB�D]\}2}@|@jEt	j@k�
r��
q�|@jLjT|k�
r��
q�|2}3|3du�
r�tdd|��|?jB|3jGt	jU@�
r�tde|E��d|?jB|3_H|?jB|3jGt	jKM_G|?jB|3jGt	jUO_G�
q�z
|�?| |8jt	j@|?d�}FWnt�y}z|�||dP��d}~ww|j�df�|j#|?|8jj|FdR�zt	�4�}7|8jj|7_|�A| |7t	j@�}6Wnt�yL}z|�||dS��d}~ww|j�dJ�|j#|6|8jjd7�dS)gNFrlz'--refresh=%s not allowed without DOMAINz'--enable-all not allowed without DOMAINrz'--enable-tln not allowed without DOMAINz(--disable-tln not allowed without DOMAINz'--add-tln-ex not allowed without DOMAINz*--delete-tln-ex not allowed without DOMAINz&--enable-nb not allowed without DOMAINz'--disable-nb not allowed without DOMAINz'--enable-sid not allowed without DOMAINz(--disable-sid not allowed without DOMAINz*.zEvalue[%s] specified for --add-upn-suffix should not include with '*.'TzHvalue[%s] specified for --delete-upn-suffix should not include with '*.'z@value[%s] specified for --add-upn-suffix and --delete-upn-suffixzEvalue[%s] specified for --add-spn-suffix should not include with '*.'zHvalue[%s] specified for --delete-spn-suffix should not include with '*.'z@value[%s] specified for --add-spn-suffix and --delete-spn-suffixz1--add-upn-suffix not allowed together with DOMAINz4--delete-upn-suffix not allowed together with DOMAINz1--add-spn-suffix not allowed together with DOMAINz4--delete-spn-suffix not allowed together with DOMAINz3--enable-all not allowed together with --refresh=%sz0--enable-tln not allowed together with --refreshz1--disable-tln not allowed together with --refreshz0--add-tln-ex not allowed together with --refreshz3--delete-tln-ex not allowed together with --refreshz/--enable-nb not allowed together with --refreshz0--disable-nb not allowed together with --refreshz0--enable-sid not allowed together with --refreshz1--disable-sid not allowed together with --refreshz3--enable-tln not allowed together with --enable-allz2--enable-nb not allowed together with --enable-allz3--enable-sid not allowed together with --enable-allz6value[%s] specified for --enable-tln and --disable-tlnzAvalue[%s] specified for --add-tln-ex should not include with '*.'zDvalue[%s] specified for --delete-tln-ex should not include with '*.'z8value[%s] specified for --add-tln-ex and --delete-tln-exz4value[%s] specified for --enable-nb and --disable-nbz7value[%s] specified for --enable-sid is not a valid SIDz8value[%s] specified for --disable-sid is not a valid SIDz6value[%s] specified for --enable-sid and --disable-sidrBrCrDr9r�z1The local domain [%s] is not the forest root [%s]z@LOCAL_DC[%s]: netr_DsRGetForestTrustInformation() not supported.r�z Own forest trust information...
rGzfailed to connect to SamDBr��uPNSuffixeszmsDS-SPNSuffixesz(objectClass=crossRefContainer)r�zfailed to search partition dnz#Stored uPNSuffixes attributes[%d]:
zTLN: %-32s DNS[*.%s]
rsz(Stored msDS-SPNSuffixes attributes[%d]:
zBEntry already present for value[%s] specified for --add-upn-suffixz?Entry not found for value[%s] specified for --delete-upn-suffixzBEntry already present for value[%s] specified for --add-spn-suffixz?Entry not found for value[%s] specified for --delete-spn-suffixz#Update uPNSuffixes attributes[%d]:
z(Update msDS-SPNSuffixes attributes[%d]:
zfailed to update partition dnz#Stored forest trust information...
rEr�r�zItrusted domain object for domain [%s] is not marked as FOREST_TRANSITIVE.r�r�z"Fresh forest trust information...
r�z(lsaRQueryForestTrustInformation() failedz"Local forest trust information...
z8Entry not found for value[%s] specified for --enable-tlnzGEntry found for value[%s] specified for --enable-tln is already enabledz9Entry not found for value[%s] specified for --disable-tlnzIEntry found for value[%s] specified for --disable-tln is already disabledz>Entry already present for value[%s] specified for --add-tln-exz.%sz:TLN entry present for value[%s] specified for --add-tln-exz>No TLN parent present for value[%s] specified for --add-tln-exz;Entry not found for value[%s] specified for --delete-tln-exz7Entry not found for value[%s] specified for --enable-nbzFEntry found for value[%s] specified for --enable-nb is already enabledz7Entry not found for value[%s] specified for --delete-nbzHEntry found for value[%s] specified for --disable-nb is already disabledz8Entry not found for value[%s] specified for --enable-sidzGEntry found for value[%s] specified for --enable-sid is already enabledz8Entry not found for value[%s] specified for --delete-sidzIEntry found for value[%s] specified for --disable-sid is already disabledz$Updated forest trust information...
)VrrrKrrrr-�	TypeErrorr�rrHrnrkrnr�r_r�r�r�r�rJr�r�rqr�r��forest_namer�r�rYrr;rJ�WERR_INVALID_FUNCTION�WERR_NERR_ACFNOTLOADEDr6rrr�r�r�r�r�r�rcrTr(�popr�r�r�r�r�rIrJr�rrrNrbr�r�rr�r�r-rTr'rWrXrMr+rn�time�LSA_TLN_DISABLED_MASK�LSA_NB_DISABLED_MASK�LSA_SID_DISABLED_MASKr*rr,�endswith�ForestTrustRecord�insertr/r$r1r")Gr�r�r�rhr�r�r�rrrrrr	rrr
rrr
�require_update�nr�r5rE�
enable_sidr�r�r��disable_sidr\rJr[r]r^r=r��own_forest_info�local_samdb�local_partitions_dnr�r�
stored_msg�stored_upn_vals�stored_spn_valsrT�replace_upn�update_upn_vals�replace_spn�update_spn_vals�upnr��idx�spn�
update_msg�stored_forest_infor_ra�lsa_update_check�netlogon_update_tdo�fresh_forest_info�fresh_forest_collisionr�r'�update_forest_inforFr1�tln_ex�tln_dot�r_dot�nb�update_forest_collisionr�r�r�r��s

�

��

��������
�
�����
�����������������



��


��


�������������
����
����������

�����
�����















����
����zcmd_domain_trust_namespaces.runrrr�r�r�r�r��s�����������������<�r�c@sbeZdZdZdZedddeddd�ed	d
ed�edd
ed�gZdgZ	e
je
je
j
d�Zdd�ZdS)�cmd_domain_tombstones_expungezZExpunge tombstones from the database.

This command expunges tombstones from the database.z%prog NC [NC [...]] [options]r�r�r�r�r�r�z--current-timezQThe current time to evaluate the tombstone lifetime from, expressed as YYYY-MM-DDraz--tombstone-lifetimez2Number of days a tombstone should be preserved forznc*r�c
Osz|�d�}|�d�}|�d�}|�d�}|�d�}|��}|�|�}	t|t�|	|d�}
|durA|durAtd|jd�td	|jd�|durSt�|d
�}t	t�
|��}nt	t���}t|�dkr}|
jddt
jd
gd�}
g}|
dd
D]	}|�t|��qrnt|�}d}z|
��d}|
j|||d�\}}Wnty�}z|r�|
��td|��d}~ww|
��|j�d||f�dS)Nr�r�r��current_time�tombstone_lifetimer�ztNote: without --current-time or --tombstone-lifetime only tombstones already scheduled for deletion will be deleted.)rBz5To remove all tombstones, use --tombstone-lifetime=0.z%Y-%m-%drrs�namingContexts)r�r�r�r�FT)r9r:z.Failed to expunge / garbage collect tombstonesz-Removed %d objects and %d links successfully
)r r�rfr
rr�r�r�strptimer��mktimerr�r�r�r�r��list�transaction_start�garbage_collect_tombstonesr,�transaction_cancelr�transaction_commitr�)r��ncs�kwargsr�r�r��current_time_stringr:r�rar��current_time_objr9r�r��started_transaction�removed_objects�
removed_linksr�r�r�r�r��sd





�������
��
�z!cmd_domain_tombstones_expunge.runN)r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r8ms$
���	�r8c@sZeZdZdZiZe�ed<e�ed<e�ed<e�ed<e	�ed<e
�ed<e�ed<d	S)
�cmd_domain_trustz#Domain and forest trust management.r>r��creater�ror��
namespacesN)r�r�r�r�r4r7r?rsrgr�r�r�r�r�r�r�rJ�s





rJc@seZdZdZiZe�ed<dS)�cmd_domain_tombstonesz0Domain tombstone and recycled object management.�expungeN)r�r�r�r�r4r8r�r�r�r�rM�srMc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�ldif_schema_updatez-Helper class for applying LDIF schema updatescCsd|_d|_d|_d|_dS)NFrs)�
is_defunct�unknown_oidr��ldifrPr�r�r�rC�s
zldif_schema_update.__init__cCsR|j\}}|tjkr|jrtd|j�dS|jdur'td|j|jf�dSdS)z>Checks if we can safely ignore failure to apply an LDIF updatez)Defunct object %s doesn't exist, skippingTNz%Skipping unknown OID %s for object %sF)r�r��ERR_NO_SUCH_OBJECTrPr�r�rQ)r�r��numr]r�r�r��can_ignore_failure�s

z%ldif_schema_update.can_ignore_failurec
Cs�z:z
|j|jdgd�WWd	Stjy:}z|jdtjkr-|��|j|jdgd�n�WYd}~Wd	Sd}~wwtjyi}z"|�|�rOWYd}~dStd|�td�td�td|j��d}~ww)
z*Applies a single LDIF update to the schemazrelax:0)r�rN�
Exception: %sz4Encountered while trying to apply the following LDIFz4----------------------------------------------------r�r�)	�modify_ldifrRr�r�r��ERR_INVALID_ATTRIBUTE_SYNTAX�set_schema_update_nowrUr�)r�r�rEr�r�r��apply�s.����
��zldif_schema_update.applyN)r�r�r�r�rCrUrZr�r�r�r�rO�s
rOc@s�eZdZdZdZejejejd�Z	e
dddeddd	�e
d
ddd
d�e
dddd
d�e
dddddgddd�e
deddd�e
deddd�gZdd �Z
d!d"�Zd#d$�ZdS)%�cmd_domain_schema_upgradezDomain schema upgradingr�rYr�r�r�r�r�r�r\r]r^rPr_rjrkrlz--schemarS�SCHEMArHrI�<The schema file to upgrade to. Default is (Windows) 2012_R2.rhz
--ldf-fileNzBJust apply the schema updates in the adprep/.LDF file(s) specified)rMrirOz
--base-dirz4Location of ldf files Default is ${SETUPDIR}/adprep.cCs�d}t�}|D]�}|��}|dkr"|jdkrq||�|�7}t�}q|���d�r9|dtd��t|���}n|���d�rO|dtd��t|���}|�	d�}|d�
�dkrc|d��|_|d�
�d	kr{|�
��
d
d�}|�
��
dd
�}|d�
�dvr�|\}}d|vr�|j|��d||fdgd�}	t|	�dkr�||_nt|	ddd�}
|�
|d|
�}|d�
�dkr�|d���
�dkr�d|_|d�
�dkr�|d���
�dkr�d}|j|d7_q|S)z�
        Applies a series of updates specified in an .LDIF file. The .LDIF file
        is based on the adprep Schema updates provided by Microsoft.
        rrszDC=XNzCN=X�:r�r��
changetypez: ntdsschemaaddz: addz: ntdsschemamodifyz: modify)�rdnattid�
subclassof�systemposssuperiors�systemmaycontain�systemauxiliaryclassr�z!(|(attributeId=%s)(governsId=%s))�ldapDisplayNamer�r��	isdefunct�trueT�add�showinadvancedviewonlyzreplace: showInAdvancedViewOnlyr�)rOr�rRrZrrrr�r�r|rr}r�r�r�r�rQrP)r�r��	ldif_filerX�ldif_oprN�values�_rSr��display_namer�r�r��_apply_updates_in_file!sV
 

�
�
��$$z0cmd_domain_schema_upgrade._apply_updates_in_filecCs`td|�d}zttj�||��}|�||�}W|r|��n|r'|��wwtd|�|S)zBWrapper function for parsing an LDIF file and applying the updateszApplying %s updates...Nz%u changes applied)r�rtrur"r�ror{)r�r��update_file�base_dirrjrXr�r�r��
_apply_updatets��
�z'cmd_domain_schema_upgrade._apply_updatec!
Ks�zddlm}Wnty }z|j�d|�td��d}~wwddlm}d}|�d�}|�d�}|�	�}|�
|�}	|�d	�}
|�d
�}|�d�}|�d�}
d}t|
t�|	|d
�}|�d�durn|�
dd�td�d}t�||���}t|t|���d
�}||kr�td��|r�|�d�}n�g}|�|�}|j|��tjdgd�}t|�dkr�td��t|ddd�d}td�}|
dur�t��}td�}z|||�Wnty�}ztd|�t� |�td��d}~ww|}
t!||d�D]j}d|}|�"|�t#j$�%t#j$�&||d��}|�r_t#j$�'|��r_zt(j)d|d|gt(j*t(j*|d �}Wnt+t,f�y;t� |�td!��w|�-�\}}|j.�rWtd"||f�t� |�td��td#||f�q�|
du�ritd$�}
|�/�d}d}z'|D]} ||�0|| |
�7}�qt|dk�r�|�1�td%�ntd&�|�2�Wn#t�y�}ztd'|�td(�|�2�d}WYd}~nd}~ww|�r�|�
dd)�|�r�t� |�|�r�td��dS)*Nr)�read_ms_markdownz#Exception in importing markdown: %sz Failed to import module markdown)�SchemaFr�r�r��schema�ldf_filerqr��dsdb:schema update allowedr��;Temporarily overriding 'dsdb:schema update allowed' settingT�%This server is not the schema master.r��
objectVersion)r�r�r�r�z*Could not determine current schema versionzadprep/WindowsServerDocsz*adprep/WindowsServerDocs/Schema-Updates.mdz!Exception in markdown parsing: %szFailed to upgrade schemaz	Sch%d.ldfz.diff�patchz-i)rprq�cwdz6Failed to upgrade schema. Is '/usr/bin/patch' missing?zException in patch: %s
%szPatched %s using %s�adprepzSchema successfully updatedzNo changes applied to schemarVz*Error encountered, aborting schema upgrader�)3�samba.ms_schema_markdownrs�ImportErrorr�r�r�samba.schemartr r�rfr
rrrr�r�r��get_dsServiceNamerr�r�r|�get_versionr�r�rr�r=r%�mkdtempr,�shutil�rmtree�ranger�rur"r'r�rwrwrxry�OSError�IOErrorrz�
returncoder?rrrBrA)!r�rDrsrErt�updates_allowed_overriddenr�r�r�rar��
target_schema�	ldf_filesrq�temp_folderr��own_dn�master�schema_updatesr�r��start�diff_dirrp�version�update�diffr�rprqrX�error_encounteredrjr�r�r�r��s���






�

�
��

�
�
�


���
�zcmd_domain_schema_upgrade.run)r�r�r�r�r�r�r�r�r�r�rr�r�rorrr�r�r�r�r�r[s6�
�����Sr[c@s�eZdZdZdZejejejd�Z	e
dddeddd	�e
d
ddd
d�e
dddd
d�e
dddgd�ddd�e
dd
dd�e
dd
dd�gZdd�Z
d S)!�cmd_domain_functional_prepz#Domain functional level preparationr�rYr�r�r�r�r�r�r\r]r^rPr_rjrkrlr�rS�FUNCTION_LEVELrFr]rIrhz
--forest-prepzJRun the forest prep (by default, both the domain and forest prep are run).rQz
--domain-prepzJRun the domain prep (by default, both the domain and forest prep are run).c
KsHd}|�d�}|�d�}|��}|�|�}|�d�}t|�d�}|�d�}	|�d�}
t|t�||d�}|�d	�durG|�d	d
�td�d}|	durS|
durSd}	d}
t�	||�
��}|	rot|t|�
��d
�}
||
krotd��|
r�|��}d|}t||d�}
||
kr�td��|	r�|��d}z!ddlm}||dd�}|�gd��|j|tdd�|��Wnty�}ztd|�|��d}WYd}~nd}~ww|
�r|��d}zddlm}||dd�}|j|tdd�|��Wnt�y}ztd|�|��d}WYd}~nd}~ww|�r|�d	d�|�r"td��dS)NFr�r�r�r:�forest_prep�domain_prepr�rwr�rxTruryzCN=Infrastructure,�infrastructurez-This server is not the infrastructure master.r)�ForestUpdate)�fix)�5�O�P�Q�R�S)�update_revisionrV)�DomainUpdater�z!Failed to perform functional prep)r r�rf�string_version_to_constantr
rrrr�r�r�r�rr�r�rr�r?�samba.forest_updater��check_updates_iterator�check_updates_functional_levelr1rBr,rA�samba.domain_updater�r0)r�rDr�r�r�r�rar��target_levelr�r�r�r�r�r��infrastructure_dnr�r�r�rEr�r�r�r�r�r�s�





���������zcmd_domain_functional_prep.runNrr�r�r�r�r�s2�
�����r�c@s�eZdZdZiZedure�ed<e�ed<e�ed<e�r\e	�ed<e
�ed<e�ed<e�ed	<e
�ed
<e�ed<e�ed<e�ed
<e�ed<e�ed<e�ed<e�ed<dSdS)�
cmd_domainzDomain management.N�exportkeytabr!r��demoter:�dcpromo�level�passwordsettings�classicupgrade�
samba3upgrade�trust�
tombstones�
schemaupgrade�functionalprep�backup)r�r�r�r�r4r�r�rjr,r�r�rXr�r2r5r>rJrMr[r�rBr�r�r�r�r�os*













�r�)��samba.getopt�getoptr�r�rur�rQ�randomr%�loggingrwrr�r)rrrr�	samba.netrrr	�samba.ntacls�
samba.joinr
r�
samba.authr�samba.samdbr
r�	samba.ndrrr�samba.dcerpcrrrrrrr�samba.dcerpc.samrrr�samba.netcmdrrrr�samba.netcmd.fsmor�samba.netcmd.commonrr r!r"�samba.samba3r#r$r|�
samba.upgrader%�samba.drs_utilsr&r'r(r)�samba.auth_utilr*�samba.net_s3r�samba.paramr+r,�
samba.dsdbr-r.r/r0r1r2r3r4r5r6r7r8r9�samba.provisionr:r;r<r=�samba.provision.commonr>r?r@�samba.netcmd.psorA�samba.netcmd.domain_backuprB�samba.commonrC�samba.trust_utilsrDrEr�r�rUrirWr�rr�r�r�rXrjr�r�rrr2r5r>r�rArGr7r?rgrsr�r�r�r8rJrMrOr[r�r�r�r�r�r��<module>s(<�������������
�J;g,k@Q	
	/jx"4oN
8j