
    g!;                         S SK r S SKJr  S SKJrJrJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKJrJrJrJrJrJr  S SKJr  S SKJrJrJr  S S	KJr   " S
 S\5      rg)    N)dsdb	remove_dcwerror)system_session)drsuapimisc)drsuapi_connect)#DS_NTDSDSA_OPT_DISABLE_INBOUND_REPL$DS_NTDSDSA_OPT_DISABLE_OUTBOUND_REPLUF_PARTIAL_SECRETS_ACCOUNTUF_SERVER_TRUST_ACCOUNTUF_TRUSTED_FOR_DELEGATIONUF_WORKSTATION_TRUST_ACCOUNT)Net)CommandCommandErrorOption)SamDBc                       \ rS rSrSrSr\" SS\S9\" SSS	\S
SS9\" SS\S9\" SSSSS9\" SSSSS9/r\	R                  \	R                  \	R                  S.r    SS jrSrg)cmd_domain_demote,   z4Demote ourselves from the role of Domain Controller.z%prog [options]z--serverz(writable DC to write demotion changes on)helptypez-Hz--URLz%LDB URL for database or target serverURLH)r   r   metavardestz--remove-other-dead-serverzMDead DC (name or NTDS GUID) to remove ALL references to (rather than this DC)z-qz--quietzBe quiet
store_true)r   actionz-vz	--verbosez
Be verbose)	sambaoptscredoptsversionoptsNc	                 l   UR                  5       n	UR                  U	5      n
U R                  XxS9nUbF  Ub  [        SU-  [	        5       XS9nO[        U[	        5       XS9n [
        R
                  " XU5        g U	R                  S5      n[        U[	        5       XS9nU(       d  UR                  SSS/S	9n[        U5      S
:X  a  [        S5      e[        U5      S:X  a  [        S5      eS nU H8  n[        US   5      R                  5       UR                  5       :w  d  M3  US   n  O   UR                  5       nUR                  [        UR                  5       5      [        R                   SU-  S/S9n[        U5      S
:X  d	  SUS
   ;  a  [        SU-  5      eUS
   R"                  n[%        [        US
   S   5      5      nUR                  S[        U5      -  S/S9n[        U5      S
:w  a  [        S[        U5      -  5      eU R&                  R)                  SU-  5        [+        XIU
5      u  nnnU R&                  R)                  S5        [        R,                  " 5       nUS
   R"                  Ul        U[.        -  (       Gd;  UR1                  5       (       Gd%  U[2        -  n[        R4                  " [        U5      [        R6                  S5      US'   UR9                  U5        U R&                  R)                  SU-  5        UR;                  5       UR                  5       UR=                  5       4 H  n[>        R@                  " 5       n[        U5      Ul        [>        RB                  " 5       nUUl"        [>        RF                  Ul$        [J        RL                  " U5      Ul'         URQ                  USU5        M      [        SU-  [	        5       XS9nU R&                  R)                  S5        UR                  [        UR[                  5       5      SUR]                  5       -  S/S9nUS
   R"                  n [%        [        US
   S   5      5      n![        U5      S:w  a  U[.        -  (       d|  UR1                  5       (       dg  U R&                  R)                  S5        U[2        -  n[        R4                  " [        U5      [        R6                  S5      US'   UR9                  U5        [        S!UR]                  5       -  5      eU![`        [b        -  [d        -  ) -  n!U![f        -  n![        R,                  " 5       nU Ul        [        R4                  " S"U!-  [        R6                  S5      US'    UR9                  U5        US
   R"                  Ri                  5       n"S#U"-  n#S
n$[        U#5      n%URk                  URm                  5       [n        Rp                  5      n&UR                  U&U#[        Rr                  S$9n[        U5      S
:w  Ga  UR                  U&S%U#U$4-  [        Rr                  S$9n[        U5      S
:w  aF  U$S&:  a@  U$S-   n$UR                  U&S%U#U$4-  [        Rr                  S$9n[        U5      S
:w  a  U$S&:  a  M@  U$S&:X  Ga  U[.        -  (       d|  UR1                  5       (       dg  U R&                  R)                  S5        U[2        -  n[        R4                  " [        U5      [        R6                  S5      US'   UR9                  U5        [        R,                  " 5       nU Ul        [        R4                  " S"U!-  [        R6                  S5      US'   UR9                  U5        [        S'[        U 5      U#U#U$S(-
  4-  5      eS%U#U$4-  n% [        Rt                  " UU%< S)[        U&5      < 35      n'URw                  U U'5        URy                  5       n(UR=                  5       n) [>        Rz                  " 5       n[        U(5      Ul>        [        U)5      Ul-        SUl?        UR                  USU5        [
        R                  " UUU"5        S0S1U	R                  S25      -  S3S44 H:  n+ UR                  [        Rt                  " UU+< S)[        U'5      < 35      5        M<     [
        R                  " UXR                  5       S5S69  U R&                  R)                  S75        g ! [
        R                   a  n[        SU-  5      eS nAff = f! [R         a  nURT                  u  nnU[V        RX                  :X  a   S nAGM  U R&                  R)                  SU-  5        U[2        -  n[        R4                  " [        U5      [        R6                  S5      US'   UR9                  U5        [        S[        U5      -  U5      eS nAff = f! [^         a  nU[.        -  (       d|  UR1                  5       (       dg  U R&                  R)                  S5        U[2        -  n[        R4                  " [        U5      [        R6                  S5      US'   UR9                  U5        [        S U5      eS nAff = f! [^         a  nU[.        -  (       d|  UR1                  5       (       dg  U R&                  R)                  S5        U[2        -  n[        R4                  " [        U5      [        R6                  S5      US'   UR9                  U5        [        S U5      eS nAff = f! [^         Ga  nU[.        -  (       d|  UR1                  5       (       dg  U R&                  R)                  S5        U[2        -  n[        R4                  " [        U5      [        R6                  S5      US'   UR9                  U5        [        R,                  " 5       nU Ul        [        R4                  " S"U!-  [        R6                  S5      US'   UR9                  U5        [        S*[        U 5      < S+[        W'5      < 3U5      eS nAff = f! [R         GaC  n*U*RT                  u  nnU[.        -  (       d|  UR1                  5       (       dg  U R&                  R)                  S5        U[2        -  n[        R4                  " [        U5      [        R6                  S5      US'   UR9                  U5        [        R,                  " 5       nU'Ul        [        R4                  " S"U!-  [        R6                  S5      US'   UR9                  U5        URw                  U'U 5        U[V        RX                  :X  a  [        S,U(< S-U*< 35      e[        S.U(< S/U*< 35      eS n*A*ff = f! [        R                   a     GM;  f = f)8N)verbosequietz	ldap://%s)urlsession_infocredentialslpzDemote failed: %sznetbios namez.(&(objectClass=computer)(serverReferenceBL=*))dnsHostNamename)
expressionattrsr   zUnable to search for servers   z%You are the last server in the domainz(objectGUID=%s)options)basescoper,   r-   zFailed to find options on %sz(fSMORoleOwner=%s)zsearch_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)r0   r,   r-   z6Error while demoting, re-enabling inbound replication
z$Error while changing account controlz@Unable to find object with samaccountName = %s$ in the remote dcz%dzCN=%s)r0   r,   r1   z%s-%dd   zOUnable to find a slot for renaming %s, all names from %s-1 to %s-%d seemed used	   ,zError while renaming z to zThe DC z= is not present on (already removed from) the remote server: z(Error while sending a removeDsServer of z: z$CN=Enterprise,CN=NTFRS SubscriptionszCN=%s, CN=NTFRS Subscriptionsrealmz?CN=Domain system Volumes (SYSVOL Share), CN=NTFRS SubscriptionszCN=NTFRS SubscriptionsT)ignore_no_namezDemote successful
)Fget_loadparmget_credentials
get_loggerr   r   r   DemoteExceptionr   getsearchlenstrlowerget_ntds_GUIDget_config_basednldbSCOPE_SUBTREEdninterrfwriter	   Messager   am_rodcr
   MessageElementFLAG_MOD_REPLACEmodifyget_schema_basednget_root_basednr   DsReplicaObjectIdentifierDsReplicaSyncRequest1naming_contextDRSUAPI_DRS_WRIT_REPr/   r   GUIDsource_dsa_guidDsReplicaSyncRuntimeErrorargsr   WERR_DS_DRA_NO_REPLICA	domain_dnupper	Exceptionr   r   r   r   get_rdn_valueget_wellknown_dnget_default_basednr   DS_GUID_COMPUTERS_CONTAINERSCOPE_ONELEVELDnrenameget_serverNameDsRemoveDSServerRequest1	server_dncommitDsRemoveDSServerremove_sysvol_referencesdeleteLdbErrorremove_dns_referenceshost_dns_name),selfr    r!   r"   serverremove_other_dead_serverr   r$   r%   r)   credsloggersamdberrnetbios_namerese	ntds_guidmsgntds_dndsa_optionsdrsuapiBinddrsuapi_handlesupportedExtensionsnmsgpartncreq1e1werrstringremote_samdbdc_dnuacdc_namerdninewrdncomputer_dnnewdnserver_dsa_dndomaine3ss,                                               </usr/lib/python3/dist-packages/samba/netcmd/domain/demote.pyruncmd_domain_demote.runA   s\    ##%((,>#/!+"6+9+;*/8 !.2BPU]>##E3KL vvn-!.*:U,,*Zcprxby,zCCA"#ABBCA"#JKKFqy>'')\-?-?-AA}-F 
 '')	llE$;$;$= >!$!2!2?PS\?\"+  . s8q=ISV3=	IJJa&))#c!fY/01ll&:S\&I%9$:  < s8q=  ,  #3x ( ) )
 			G 	 =LVY^=_:n&9		<={{}a&))BBBEMMOO>>K!00[1A3CWCWYbcDOLLIIOOO$% &002002..02 668D	446&(#&;;'+yy';$y--naF22	J [6%9.<.>-2;L IIOOBC%%3|/E/E/G+H1\&2&8&8&:2;-A,B & DC FIIEc#a&!5678C HM"FFPUP]P]P_P_		MOBB"%"4"4S5EsG[G[]f"gYT"  35A5G5G5I J K K 	(*++, - 	- 	++kkm$'$6$6tcz7:7K7K7K%M !
	J$ a&))))+ S"33++-,,. !!{s#J\J\!]HM%%;7cSTXCU,/,>,> & @Cc(a-AGE")){wRUWXQYGY030B0B * D c(a-AG
 Cx#&JJTYTaTaTcTcIIOOQS#FFK&)&8&8[9I3K_K_aj&kDOLL&kkm,/,>,>tcz?B?S?S?S-U() ##C(" $O$'JS!a%#@$A B B Qx'F	^FF<FC<L)MNEu-& ,,.--/	8335D /DN [DNDK((DA6 	**<I 91BFF7OCS*,A##CFF<67U+D%F G, 	''f>Q>Q>S7;	= 			-.y ,, >"#6#<==>H $ y%'WWNT6v<<<		@BFGH $'JJ*-*<*<S=MsOcOcen*oYT**+cfijnfo+oqwxxy2  	J"FFPUP]P]P_P_		MOBB"%"4"4S5EsG[G[]f"gYT"EqII	J@  	J"FFPUP]P]P_P_		MOBB"%"4"4S5EsG[G[]f"gYT"EqII	Jp  	^"FFPUP]P]P_P_		MOBB"%"4"4S5EsG[G[]f"gYT"++-CCF(+(:(:4#:;>;O;O;O)QC$% $#e*cRWjY[\]]!	^8  	8WWNT6"FFPUP]P]P_P_		MOBB"%"4"4S5EsG[G[]f"gYT"++-CCF(+(:(:4#:;>;O;O;O)QC$% $u-v444"$12$7 8 8 #$12$7 8 8-	8H << s   "c5 -dBg 8j 9l- 8Aq	 ;6v5d	dd
g)#gBgg
j'Bi==j
l*Bl%%l*-q8D	qq	vD>vvv32v3 )NNNNNNFF)__name__
__module____qualname____firstlineno____doc__synopsisr   r@   takes_optionsr/   SambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr   __static_attributes__r       r   r   r   ,   s    > H 	z JQTUtW#JQT3	(+ 3CIL	NtYZEt[|LIM ))..-- ,0%)-1!&N/r   r   )rD   samba.getoptgetoptr/   sambar   r   r   
samba.authr   samba.dcerpcr   r   samba.drs_utilsr	   
samba.dsdbr
   r   r   r   r   r   	samba.netr   samba.netcmdr   r   r   samba.samdbr   r   r   r   r   <module>r      sB   2   ) ) % & +   6 6 c/ c/r   