
    Id;                         d dl Z d dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d d	lmZ  G d
 de      Zy)    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            
           e Zd ZdZdZ edde       eddded	d
       edde       edddd       edddd      gZej                  ej                  ej                  dZ	 	 	 	 ddZy)cmd_domain_demotez4Demote 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	                    |j                         }	|j                  |	      }
| j                  ||      }|M|t        d|z  t	               |
|	      }nt        |t	               |
|	      }	 t        j
                  |||       y |	j                  d      }t        |t	               |
|	      }|s|j                  dddg	      }t        |      d
k(  rt        d      t        |      dk(  rt        d      d }|D ]6  }t        |d         j                         |j                         k7  s1|d   } n |j                         }|j                  t        |j                               t        j                   d|z  dg      }t        |      d
k(  sd|d
   vrt        d|z        |d
   j"                  }t%        t        |d
   d               }|j                  dt        |      z  dg      }t        |      d
k7  rt        dt        |      z        | j&                  j)                  d|z         t+        ||	|
      \  }}}| j&                  j)                  d       t        j,                         }|d
   j"                  |_        |t.        z  s0|j1                         s|t2        z  }t        j4                  t        |      t        j6                  d      |d<   |j9                  |       | j&                  j)                  d|z         |j;                         |j                         |j=                         fD ]  }t?        j@                         }t        |      |_        t?        jB                         }||_"        t>        jF                  |_$        tK        jL                  |      |_'        	 |jQ                  |d|        	 t        d|z  t	               |
|	      }| j&                  j)                  d       |j                  t        |j[                               d|j]                         z  dg      }|d
   j"                  } t%        t        |d
   d               }!t        |      dk7  r|t.        z  sv|j1                         sf| j&                  j)                  d!       |t2        z  }t        j4                  t        |      t        j6                  d      |d<   |j9                  |       t        d"|j]                         z        |!t`        tb        z  td        z   z  }!|!tf        z  }!t        j,                         }| |_        t        j4                  d#|!z  t        j6                  d      |d<   	 |j9                  |       |d
   j"                  ji                         }"d$|"z  }#d
}$t        |#      }%|jk                  |jm                         tn        jp                        }&|j                  |&|#t        jr                  %      }t        |      d
k7  rz|j                  |&d&|#|$fz  t        jr                  %      }t        |      d
k7  rE|$d'k  r@|$dz   }$|j                  |&d&|#|$fz  t        jr                  %      }t        |      d
k7  r|$d'k  r@|$d'k(  r|t.        z  sv|j1                         sf| j&                  j)                  d       |t2        z  }t        j4                  t        |      t        j6                  d      |d<   |j9                  |       t        j,                         }| |_        t        j4                  d#|!z  t        j6                  d      |d<   |j9                  |       t        d(t        |       |#|#|$d)z
  fz        d&|#|$fz  }%	 t        jt                  ||%d*t        |&            }'|jw                  | |'       |jy                         }(|j=                         })	 t?        jz                         }t        |(      |_>        t        |)      |_-        d|_?        |j                  |d|       t        j                  |||"       d1d2|	j                  d3      z  d4d5fD ]6  }+	 |j                  t        jt                  ||+d*t        |'                   8 t        j                  |||j                         d67       | j&                  j)                  d8       y # t
        j                  $ r}t        d|z        d }~ww xY w# tR        $ r}|jT                  \  }}|tV        jX                  k(  rn| j&                  j)                  d|z         |t2        z  }t        j4                  t        |      t        j6                  d      |d<   |j9                  |       t        dt        |      z  |      Y d }~zd }~ww xY w# t^        $ r}|t.        z  sv|j1                         sf| j&                  j)                  d       |t2        z  }t        j4                  t        |      t        j6                  d      |d<   |j9                  |       t        d |      d }~ww xY w# t^        $ r}|t.        z  sv|j1                         sf| j&                  j)                  d!       |t2        z  }t        j4                  t        |      t        j6                  d      |d<   |j9                  |       t        d |      d }~ww xY w# t^        $ r}|t.        z  sv|j1                         sf| j&                  j)                  d       |t2        z  }t        j4                  t        |      t        j6                  d      |d<   |j9                  |       t        j,                         }| |_        t        j4                  d#|!z  t        j6                  d      |d<   |j9                  |       t        d+t        |       d,t        '      |      d }~ww xY w# tR        $ r1}*|*jT                  \  }}|t.        z  sv|j1                         sf| j&                  j)                  d       |t2        z  }t        j4                  t        |      t        j6                  d      |d<   |j9                  |       t        j,                         }|'|_        t        j4                  d#|!z  t        j6                  d      |d<   |j9                  |       |jw                  |'|        |tV        jX                  k(  rt        d-|(d.|*      t        d/|(d0|*      d }*~*ww xY w# t        j                  $ r Y w xY w)9N)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)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%dzCN=%s)r/   r+   r0   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runzcmd_domain_demote.runA   sn    ##%((,>#/!+"6+9+;*/B8 !.2BPUZ\]>##E63KL vvn-!.*:RT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 	 =LVUWY^=_:n&9		<={{}a&))BBEMMO>>K!00[1A3CWCWYbcDOLLIIOOO$% &002002..02 y 668D	446&(#&;;'+yy';$y--naFy2	J [6%9.<.>-2r;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_		KM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JTYTaTaTc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	 	''fe>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_		MOBB"%"4"4S5EsG[G[]f"gYT"EqII	J@  	J"FFPUP]P]P_		KMBB"%"4"4S5EsG[G[]f"gYT"EqII	Jp  	^"FFPUP]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_		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   ,c (c=>Bf8 *i 6k0 Ao; 3t9c:'c55c:=	f5B$f00f58	iBii	k-Bk((k-0	o89C:o33o8;
t6D,t11t69uu)NNNNNNFF)__name__
__module____qualname____doc__synopsisr   r?   takes_optionsr.   SambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr        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   )rC   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   