
    gI                         S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJrJ	r	  S SK
JrJrJrJrJrJr   " S S\5      rS	 rSS
 jrS r     SS jr       SS jrS rS rg)    N)LdbError)werror)
ndr_unpack)miscdnsp)DNS_TYPE_NS
DNS_TYPE_ADNS_TYPE_AAAADNS_TYPE_CNAMEDNS_TYPE_SRVDNS_TYPE_PTRc                   $    \ rS rSrSrS rS rSrg)DemoteException   zBase element for demote errorsc                     Xl         g Nvalue)selfr   s     1/usr/lib/python3/dist-packages/samba/remove_dc.py__init__DemoteException.__init__    s    
    c                      SU R                   -   $ )NzDemoteException: r   )r   s    r   __str__DemoteException.__str__#   s    "TZZ//r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes__ r   r   r   r      s    (0r   r   c           	         U R                  5       nSSU-  4 H  n[        R                  " X5      n UR                  U R	                  5       5         UR                  S5        UR                  SSU5         UR                  S	U-  5        U R                  U5        M     S
 H  n[        R                  " X5      n UR                  U R                  5       5         UR                  S5        UR                  SSU5         UR                  S	U-  5        U R                  U5        M     g ! [        R
                   a"    [        SU< SU R	                  5       < 35      ef = f! [        R
                   a    [        SU-  5      ef = f! [        R
                   a/  nUR                  u  pxU[        R                  :X  a   S nAGM  e S nAff = f! [        R
                   a"    [        SU< SU R                  5       < 35      ef = f! [        R
                   a    [        SU< SU< S35      ef = f! [        R
                   a/  n	U	R                  u  pxU[        R                  :X  a   S n	A	GM  e S n	A	ff = f)Nz3CN=Enterprise,CN=Microsoft System Volumes,CN=Systemz+CN=%s,CN=Microsoft System Volumes,CN=SystemzFailed constructing DN z by adding base zCN=Xz.Failed constructing DN %s by adding child CN=Xr   CNzRemoving Sysvol reference: %s)zMCN=Domain System Volumes (SYSVOL share),CN=File Replication Service,CN=SystemzDCN=Topology,CN=Domain System Volume,CN=DFSR-GlobalSettings,CN=Systemz% by adding child CN=X (soon to be CN=))domain_dns_nameldbDnadd_baseget_config_basednr   r   	add_childset_componentinfodeleteargsERR_NO_SUCH_OBJECTget_default_basedn)
samdbloggerdc_namerealmsdneenumestre1s
             r   remove_sysvol_referencesr=   '   sS   !!#EC;eCEVVE	EKK//12	*LL  	D'*	KK7"<=LL'E8V VVE	FKK0023	MLL  	D'*	KK7"<=LL'V) || 	E!%')@)@)B#D E E	E
 || 	*!"R%'#) * *	* || 	66LTs---	 || 	F!%')A)A)C#E F F	F
 || 	M!?A7#L M M	M || 	77LTs---	sk   D+E$7%F
<GH	%H5+6E!$#F
G"GGG6H	)H25I8	"I32I33I8c           
        ^ ^^ T R                  S[        R                  S/ S/S9n[        U5      S:X  a  g UR	                  5       n T R                  U5      u  nmT R                  U/ 5        T R                  S[        R                  S/S	9n
[        U
5      S
:X  d   eU
S   S   nU 4S jm[        U4S jU 5       5      nU4S jnU H  n UR!                  SU-  5        T R                  U5      u  nn[        U5      nU Vs/ s H  nU" U5      (       a  M  UPM     nn[        U5      U:w  d  Mi  UR#                  SU[        U5      U[        U5      -
  4-  5        T R                  UU5        M     [        T XU5        g ! [         ah  nUR                  u  pU[        R                  :X  d  U[        R                  :X  a  U(       a  [        T UUU5         S nAg [        SU< SU	< 35      eS nAff = f! [         a@  nUR                  u  pU[        R                  :X  a   S nA  g [        SU< SU	< 35      eS nAff = fs  snf )N z.(&(objectClass=dnsZone)(!(dc=RootDNSServers)))search_options:0:2)basescope
expressionattrscontrolsr   z
lookup of z	 failed: namingContextsrB   rD      c                 t   > [         R                  " TU 5      R                  5       R                  SS5      S   $ )N/rH   r   )r(   r)   canonical_strsplit)r8   r3   s    r   dns_name_from_dn/remove_dns_references.<locals>.dns_name_from_dn   s1     vveR ..066sA>qAAr   c              3   F   >#    U  H  nT" [        U5      5      v   M     g 7fr   )str).0r8   rM   s     r   	<genexpr>(remove_dns_references.<locals>.<genexpr>   s     6#Bs2w''#s   !c                    > U R                   [        :X  d  U R                   [        :X  aA  T H;  nUR                   U R                   :X  d  M  UR                  U R                  :X  d  M;    g   gNTF)wTyper	   r
   data)	dnsRecordrecprimary_recss     r   a_rec_to_remove.remove_dns_references.<locals>.a_rec_to_remove   sK    ??j(IOO},L#99	/CHH	4N $ r   z(checking for DNS records to remove on %s1updating %s keeping %d values, removing %s values)searchr(   SCOPE_SUBTREElenupper
dns_lookupRuntimeErrorr0   r   "WERR_DNS_ERROR_NAME_DOES_NOT_EXISTWERR_DNS_ERROR_RCODE_NAME_ERRORremove_hanging_dns_referencesr   dns_replace
SCOPE_BASEsetdebugr.   )r3   r4   dnsHostNameignore_no_namezonesdnsHostNameUpperr8   e4r:   r;   resncsa_names_to_remove_fromr[   a_namea_rec_dna_recse2orig_num_recsrrM   rZ   s   `                   @@r   remove_dns_referencesry   b   s<    LLb(9(9$T!#7"8  :E 5zQ"((*O"--k:\ 
k2&
,,r ^^4D3E  GCs8q==
a&!
"CB 6#6
6  )	NLLCfLM!&!1!1&!9Xv F#>V?1+=!V>v;-'KKKVmc&k.IJK Lff-! )$ "%5I  	OwwF===F:::-eV.>.35 ;MNN	Ob  	N77LTv@@@!vt"LMM		N ?sI   F (G7II
G4AG/G//G47
I"H<)H<<Ic                 ^  ^ U4S jnU GH	  nUR                  SUR                  -  5        U R                  UR                  [        R                  SS/S9nU H  n US   nU V	s/ s H+  o" U	5      (       a  M  [        [        R                  U	5      PM-     n
n	[        U
5      [        U5      :w  d  M[  UR                  SUR                  [        U
5      [        U5      [        U
5      -
  4-  5        U R                  UR                  U
5        M     GM     g ! [
         a     M  f = fs  sn	f )Nc                 n  > [        [        R                  U 5      nUR                  [        :X  d(  UR                  [
        :X  d  UR                  [        :X  a!  UR                  R                  5       T:X  a  g gUR                  [        :X  a)  UR                  R                  R                  5       T:X  a  ggrU   )r   r   DnssrvRpcRecordrV   r   r   r   rW   ra   r   
nameTarget)r   rX   rn   s     r   	to_remove0remove_hanging_dns_references.<locals>.to_remove   s    t33U;	??k)oo/oo-~~##%)99 :
  __,~~((..04DDr   zchecking %sz/(&(objectClass=dnsNode)(!(dNSTombstoned=TRUE)))rX   )rA   rB   rC   rD   r]   )rj   r8   r^   r(   r_   KeyErrorr   r   r|   r`   r.   dns_replace_by_dn)r3   r4   rn   rm   r~   zonerecordsrecordorig_valuesvvaluess     `        r   rf   rf      s"   

 ]TWW,-,,DGG33D3D+:&1]  4 F$[1  +@*!)A, :j!5!5q9*  @ 6{c+..O%yy#f+";/#f+=?? @ ''		6:#    @s   D&D*:D*
D'&D'c                 X   U R                  S[        R                  S/S9n[        U5      S:X  d   eUS   S   S   n	U R                  U/ SQ[        R                  SS9n
U
S   n[	        US	   S   5      n [        R
                  " XS
   S   R                  S5      5      n [	        US   S   5      nU(       a  U R                  US/5        Ub  U R                  US/ SQ[        R                  S9nSUS   ;   a9  [	        US   S   S   5      nUR                  SU-  5        U R                  U5        SUS   ;   a9  [	        US   S   S   5      nUR                  SU-  5        U R                  U5        U(       a'  UR                  SU-  5        U R                  US/5        SU;   a  [	        US   S   5      nU(       a  U R                  S[        R                  " U5      < SU< S3/ [        R                  U R                  5       S9n[        U5      S:X  a?  UR                  SUS   R                  -  5        U R                  US   R                  5        Ub  U(       a  [        XU5        U(       a  [        XU5        g g ! [         a    S n GNf = f! [         a    S n GNf = f)Nr?   dsServiceNamerG   rH   r   )serverReferencecnrk   z(objectClass=server)rA   rD   rB   rC   r   r   utf8rk   tree_delete:0zobjectclass=computer)msDS-KrbTgtLinkrIDSetReferencesr   rA   rC   rD   rB   r   zRemoving RID Set: %sr   zRemoving RODC KDC account: %sz5Removing computer account: %s (and any child objects)z(&(objectclass=user)(cn=dns-z)(servicePrincipalName=DNS/z)))rC   rD   rB   rA   z/Removing Samba-specific DNS service account: %s)r^   r(   rh   r`   rP   r)   decoder   r/   r.   binary_encoder_   r2   r8   ry   r=   )r3   r4   	server_dnremove_computer_objremove_server_objremove_sysvol_objremove_dns_namesremove_dns_accountrp   my_serviceNamemsgsmsgr5   computer_dnrk   computer_msgs
rid_set_dnkrbtgt_link_dns                     r   offline_remove_serverr      s    ,,r ^^O3D  FCs8q==VO,Q/N <<Y.!nn#9	  ;D
 q'C#d)A,GffU(9$:1$=$D$DV$LM#m,Q/0  	Y 12+0F,2 ,/>> % ; q!11]1-.@A!DEJKK.;<LL$a 00 q!12C!DQ!GHNKK7.HILL(KKOR]]^LL&78Cc-034Kll--g6'E!#3+<+< % 8 8 :  < s8q=KKICPQFIIUVLLQ##3e[9 8 c  
  s$   6+J "J JJJ)(J)c
                 6   U R                  S[        R                  S/S9n
[        U
5      S:X  d   e[        R                  " X
S   S   S   R                  S5      5      nUR                  5       nX:X  a  [        SU-  5      e U R                  USS	/[        R                  S
9n[        U5      S:X  a   [        U< SU R                  5       < 35      eUS   nUR                  R                  5       S:w  d  UR                  R                  5       S:w  a  [        SU-  5      e[        [         R"                  US	   S   5      nU(       ac  U R                  U R%                  5       SU-  S9nU H<  nUR'                  SUR                  -  5        U R)                  UR                  5        M>     U(       a  U R                  S[        R*                  SU-  S/S9nU H  n[-        U5      n[        R.                  " 5       nUR                  Ul        [        R0                  " U[        R2                  S5      US'   UR5                  SUR                  < SU< S35        U R7                  U5        M      UR'                  SU-  5        U R)                  US/5        [9        XUUUUUU	S9  g ! [         a7  nUR                  u  nnU[        R                  :X  a  [        SU-  5      ee S nAff = f! [         a"  nUR                  u  nn[        SU-  5      eS nAff = f)Nr?   r   rG   rH   r   r   z#Refusing to demote our own DSA: %s zobjectClass=ntdsDSA
objectGUIDr   zGiven DN %s doesn't existz is not an ntdsda in r%   zNTDS Settingsz)Given DN (%s) wasn't the NTDS Settings DNz5(&(objectclass=nTDSConnection)(fromServer=<GUID=%s>)))rA   rC   zRemoving nTDSConnection: %sz(fsmoRoleOwner=<GUID=%s>))r@   )rA   rB   rC   rE   fsmoRoleOwnerr   zSeizing FSMO role on: z (now owned by r&   z'Removing nTDSDSA: %s (and any children)r   z,Failed to remove the DCs NTDS DSA object: %sr   r   r   r   r   )r^   r(   rh   r`   r)   r   parentr   r   r0   r1   r'   r8   get_rdn_nameget_rdn_valuer   r   GUIDr+   r.   r/   r_   rP   MessageMessageElementFLAG_MOD_REPLACEwarningmodifyr   )r3   r4   ntds_dnr   r   remove_connection_objseize_stale_fsmor   r   r   rp   r   r   r   e5r:   r;   r   	ntds_guidstale_connectionsconnstale_fsmo_rolesrolevalme6s                             r   offline_remove_ntds_dcr   )  s    ,,r ^^O3D  FCs8q==VVEq6/#:1#=#D#DV#LMN I CnTUU||5J#/.  H 	D	Q!(%*?*?*AC D 	D q'C%/1I%& ' 	' 499c,&7&:;I "LLe.E.E.G5CEN5O ) P &DKK5?@LL! &  <<Rs7H7H3O*3442F1G ( I %Dn%CA77AD++C1E1E,;=AgJNN"gg~7 8LLO %&=GHW/0 %.A,=,=+;-?Ao  wwt3)))!"="GHHd  &wwtL $% & 	&&s0   !J( 1'K, (
K)22K$$K),
L6LLc                    U R                  5         S n [        R                  " US9nSU-  n U R	                  U/ [        R"                  SS9n
[        U
5      S:X  aC  Uc0  U R                  5         [        U< S	U R                  5       < 35      e['        XUSSSSSS9  O[)        XU
S   R                  SSSSSSSS9
  U R+                  5         g ! [         a     U R	                  U R                  5       / S[        R                  " U5      -  S9nOE! [         a8  nUR                  u  p[        SU< SU R                  5       < SU	< 35      eS nAff = f[        U5      S:X  a0  U R                  5         [        U< S	U R                  5       < 35      eUS   R                  n[        R                  " U S
5      nUR!                  U5         GNf = f! [         ad  nUR                  u  pU[        R$                  :X  a  / n
 S nAGNU R                  5         [        SU< SU R                  5       < SU	< 35      eS nAff = f)N)hexz	<GUID=%s>z(&(objectClass=server)(cn=%s)))rA   rD   rC   zFailure checking if z is an server object in z: r   z is not an AD DC in zCN=NTDS Settingsz(objectClass=ntdsdsa)r   z is an NTDS DSA in Tr   )r   r   r   r   r   r   r   )transaction_startuuidUUID
ValueErrorr^   r+   r(   r   r   r0   r   r'   r`   transaction_cancelr8   r)   r*   rh   r1   r   r   transaction_commit)r3   r4   r5   r   r   r   server_msgse3r:   r;   	ntds_msgse7s               r   	remove_dcr   ~  sS   
 
I$II'*		)0:LLgRs~~,C ! E	 	I!$$&!%,e.C.C.E#G H H 	e'260404/315	7 	u(|37155904150426	8 
}  $
	N,,E,C,C,E-/32),):):7)C3D ' EK
  	N77LT!%,e.C.C.Et#M N N	N !$$&!%,e.C.C.E#G H HN%%	&& 23#)$4  :ww3)))I$$&!%//149: ::sS   C  G 
G6DG
E3EEA9GG
I$H<5H<<Ic                 \    U R                  5         [        XS 5        U R                  5         g r   )start_transactionr   commit_transaction)r3   r   s     r    offline_remove_dc_RemoveDsServerr     s$    	540	r   )F)FFFFF)FFFFFFF)r   r(   r   sambar   	samba.ndrr   samba.dcerpcr   r   samba.dcerpc.dnspr   r	   r
   r   r   r   	Exceptionr   r=   ry   rf   r   r   r   r   r#   r   r   <module>r      s   &  
     #/ /0i 08vMJ`(;Z /4,1,1+0-2I9^ 05-216,1-2,1.3RAjK\r   