
    gQ                         S SK r S SKJr  S SKrS SKJr  S SKJrJr  S SK	J
r
  S SKr S SKJrJrJrJr  S SKJr  S rS rS	 r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      rg)    N)LdbError)drsuapimisc)system_session)CommandCommandErrorSuperCommandOption)SamDBc                 D    U R                  U[        R                  S/S9nSUS   ;   a0  [        R                  " XS   S   S   R                  S5      5      nU$ SnU$ ! [         a6  nUR                  u  pVU[        R
                  :X  a  [        SU-  5      ee SnAff = f)zbGets the owner of an FSMO role

:param roledn: The DN of the FSMO role
:param role: The FSMO role
fSMORoleOwnerscopeattrsz+The '%s' role is not present in this domainNr   utf8)	searchldb
SCOPE_BASEr   argsERR_NO_SUCH_OBJECTr   Dndecode)samdbrolednrolerese7nummsgmaster_owners           3/usr/lib/python3/dist-packages/samba/netcmd/fsmo.pyget_fsmo_roleownerr"   $   s    ll6!$7H  J #a& u!f_&=a&@&G&G&OP    WW
#(((LtSTT	s    A 
B)1BBc           
         US:X  a  UR                  5       nSU-   nO/US:X  a)  [        R                  " UR                  5       5      nSU-   nUR	                  5       nUR                  WS/[        R                  S/S9n	SU	S   ;   a   [        [        R                  " [        R                  " UU	S   S   S   R                  S	5      5      R                  S
5      5      5      n
[        [        R                  " XIS   S   S   R                  S	5      5      5      nOU R#                  SU-  5        gUS:X  a=  U
< SUR%                  5       < 3nUR'                  5       < SUR%                  5       < 3nOBUS:X  a<  U
< SUR                  5       < 3nUR'                  5       < SUR                  5       < 3nUR)                  5       nWW:w  GaE  UR+                  5       nUR-                  USS9n[/        SU-  [1        5       UUS9n[        R2                  " 5       n[        R                  " XF5      Ul        [        R6                  " U[        R8                  S5      US'   [        R6                  " U[        R:                  S5      US'    UR=                  U5         [        R>                  RA                  UUU5      n US   nUS   n[D        RF                  nUSS n[        R>                  RI                  UUU
UU5        U R#                  SU-  5        gU R#                  SU-  5        g! [         a0  nUR                  u  p[!        SU	S   S   S   < SU< S35      eSnAff = f! [         a&  nUR                  u  p[!        SU< SU< 35      eSnAff = f! [        R>                  RB                   a  n[!        SU5      eSnAff = f! [        R>                  RB                   a  n[!        SU5      eSnAff = f) zTransfer dns FSMO role. 	domaindns$CN=Infrastructure,DC=DomainDnsZones,	forestdns$CN=Infrastructure,DC=ForestDnsZones,r   zextended_dn:1:1)r   r   controlsr   r   GUIDz"No GUID found in naming master DN z : z 
Nz0* The '%s' role does not have an FSMO roleowner
Fz._msdcs.Tfallback_machinez	ldap://%surlsession_infocredentialslpfSMORoleOwner_DelfSMORoleOwner_AddzFailed to add role 'z': zDrsuapi Connect failed      zReplication failed&FSMO transfer of '%s' role successful
'This DC already has the '%s' FSMO role
)%	domain_dnsambadn_from_dns_nameforest_dns_namehost_dns_namer   r   r   strr   r)   r   r   get_extended_componentr   r   r   writedomain_dns_nameget_ntds_GUIDget_dsServiceNameget_loadparmget_credentialsr   r   MessagednMessageElementFLAG_MOD_DELETEFLAG_MOD_ADDmodify	drs_utilsdrsuapi_connectdrsExceptionr   DRSUAPI_DRS_WRIT_REPsendDsReplicaSync)outf	sambaoptscredoptsr   r   r7   role_object	forest_dnnew_host_dns_namer   master_guidr    e3r   r   master_dns_namenew_dns_name	new_ownerr0   credsme5
connectionedrsuapi_connectiondrsuapi_handlereq_optionsNCestrs                                r!   transfer_dns_rolerd   ;   s    {OO%	<yH		**5+@+@+BC	<yH++-
,,{-. ^^!2 3  5C
 #a& 	Bdiiu/21vo/Fq/I/P/PQW/X)Z)?)?)GI JK svveVO-DQ-G-N-Nv-VWXL 	

FMN{,7,1,A,A,CE).)<)<)>).)>)>)@B		,7,1,A,A,CE).)<)<)>).)>)>)@B '')I,&##%((d(C+9#1#3"'B0 KKMvve)!$!3!3L474G4G4C"E
 "%!3!3I474D4D4C"E
	LLLO
	<889J9;UDJ

	;!+A']N!66KRS!BOO--.@.<.9.0+? 	

<tCD

=DEA  	BJS #A 7 :C A B B	BL  	LJScJKK	L ++ 	<7;;	< ++ 	;3T::	;sb   BL& M# !N :AO &
M 0+MM #
N-!NNO4O  OO7&O22O7c                 8   UR                  5       nSU-   nSUR                  5       -  nSU-   n[        UR                  5       5      n[        R
                  " X"R                  5       5      n[        R                  " 5       n	[        R
                  " US5      U	l        US:X  a7  [        X$U5      n
[        R                  " S[        R                  S5      U	S'   GO7US:X  ar  [        X#U5      n
UR                  U[        R                  S	/S
9n[        U5      S:X  d   eUS   S	   S   n[        R                  " U[        R                  S5      U	S'   OUS:X  a6  [        X%U5      n
[        R                  " S[        R                  S5      U	S'   OUS:X  a6  [        X&U5      n
[        R                  " S[        R                  S5      U	S'   OGUS:X  a6  [        X'U5      n
[        R                  " S[        R                  S5      U	S'   O[        S5      eU
c  U R!                  SU-  5        gX:w  a'   UR#                  U	5        U R!                  SU-  5        gU R!                  SU-  5        g! [$         a&  nUR&                  u  p[        SU< SU< 35      eSnAff = f)zTransfer standard FSMO role. CN=RID Manager$,CN=System,CN=Partitions,%sCN=Infrastructure, rid1becomeRidMasterpdc	objectSidr   r3   r   	becomePdcnamingbecomeDomainMasterinfrastructurebecomeInfrastructureMasterschemabecomeSchemaMasterInvalid FSMO role.NzECannot transfer, no DC assigned to the %s role.  Try 'seize' instead
FzTransfer of 'z' role failed: r5   Tr6   )r7   get_config_basednr<   get_schema_basednr   r   rA   rD   rE   r"   rF   FLAG_MOD_REPLACEr   r   lenr   r>   rI   r   r   )rO   r   r   r7   rid_dn	naming_dninfrastructure_dn	schema_dnrY   r[   r    r   side6r   r   s                   r!   transfer_roler      s    !I)I5F"U%<%<%>>I,y8E++-.Iu5578IA66%ADu})%>"11%% 
 
)%DAll9!$}  F3x1}}!f[!!$++%%+ 
	)%DA"%"4"4%% #"
 
!	!)%DI*-*<*<%%(+*
&' 
	)%DA"%"4"4%% #"
 /00

[^bbc 	,LLO 	

<tCD

=DE  	,JS $c + , ,	,s   .I) )
J3!JJc            	           \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSS\SS	S
9\" SSSS9\" SS/ SQSS9/r/ rS rS r  SS jrSrg)cmd_fsmo_seize   zSeize the role.%prog [options]rP   rQ   versionopts-H--URL%LDB URL for database or target serverURLHhelptypemetavardestz--forcez5Force seizing of role without attempting to transfer.
store_true)r   action--rolechoicerj   rm   rr   rt   rp   r$   r&   allI  The FSMO role to seize or transfer.

rid=RidAllocationMasterRole

schema=SchemaMasterRole

pdc=PdcEmulationMasterRole

naming=DomainNamingMasterRole

infrastructure=InfrastructureMasterRole

domaindns=DomainDnsZonesMasterRole

forestdns=ForestDnsZonesMasterRole

all=all of the above

You must provide an Admin user and password.r   choicesr   c                    UR                  5       nUR                  5       nSU-   U l        SUR                  5       -  U l        [        UR                  5       5      U l        SU-   U l        [        R                  " 5       nUS:X  a&  [        R                  " X R                  5      Ul        OUS:X  a  [        R                  " X%5      Ul        OUS:X  a&  [        R                  " X R                  5      Ul        OcUS:X  a&  [        R                  " X R                  5      Ul        O7US:X  a&  [        R                  " X R                  5      Ul        O[        S	5      eS
n[        X&R                  U5      nUbb  X:w  a>  Uc:  U R                  S5         [!        U R"                  X5        U R                  S5        gO!U R"                  R%                  SU-  5        g
SnUc  U(       a  U R                  SU-  5        [        R&                  " U[        R(                  S5      US'   UR+                  5          UR-                  U5        US:X  a  UR/                  5         UR9                  5         U R"                  R%                  SU-  5        gg!   SnU R                  S5         N= f! [0         a  n	U	R2                  u  pUS:X  a  U
[        R4                  :X  az  UR7                  5         UR+                  5          UR-                  U5         Sn	A	N! [0         a6  nUR2                  u  pUR7                  5         [        SU< SU< 35      eSnAff = fUR7                  5         [        SU< SU< 35      eSn	A	ff = f)zSeize standard fsmo role. rh   rg   rf   rj   rm   rp   rr   rt   rv   FNAttempting transfer...z%Transfer successful, not seizing roleT!Transfer unsuccessful, seizing...r6   Seizing %s FSMO role...r   Failed to seize '' role: #FSMO seize of '%s' role successful
)rA   r7   r}   rw   r|   r<   rx   r~   r{   r   rD   r   rE   r   r"   messager   rO   r>   rF   ry   transaction_startrI   create_own_rid_setr   r   ERR_ENTRY_ALREADY_EXISTStransaction_canceltransaction_commit)selfr   r   forceserviceNamer7   r[   seizer    e1r   r   r^   s                r!   
seize_rolecmd_fsmo_seize.seize_role   s    --/OO%	!5	!A+e.E.E.GGU44672Y>KKM5=66%-ADU]66%+ADX66%0AD%%66%!7!78ADX66%0AD344)%t<#*=LL!9:$%dii= %LM# ! 		 J $!% &ELL2T9:!$!3!3S11"!Ao ##%4Q5=,,.0 $$&IIOOBTIJM !&J $%HI0  4WW
5=SC,H,H%H ,,.++-8Q# 8%&VV
002*,0#,7 8 88 ,,.&(,c(3 4 4)4sC   J 4'J% J"%
M9/AM48L
M1M		M&M44M9c                 0   UR                  5       nUR                  5       n[        R                  " UR	                  5       5      n	SU-   U l        SU	-   U l        [        R                  " 5       n
US:X  a&  [        R                  " X R
                  5      U
l
        O7US:X  a&  [        R                  " X R                  5      U
l
        O[        S5      eSn[        X*R                  U5      nUbd  X:w  a@  Uc<  U R                  S5         [        U R                  XCUU5        U R                  S	5        g
O!U R                  R!                  SU-  5        gS
nUc  U(       an  U R                  SU-  5        [        R"                  " U[        R$                  S5      U
S'    UR'                  U
5        U R                  R!                  SU-  5        g
g!   S
nU R                  S5         N= f! [(         a&  nUR*                  u  p[        SU< SU< 35      eSnAff = f)zSeize DNS FSMO role. r%   r'   r$   r&   rv   FNr   z&Transfer successful, not seizing role
Tr   r6   r   r   r   r   r   )rA   r7   r8   r9   r:   domaindns_dnforestdns_dnr   rD   r   rE   r   r"   r   rd   rO   r>   rF   ry   rI   r   r   )r   r   r   rQ   rP   r   r   r   r7   rS   r[   r   r    e2r   r   s                   r!   seize_dns_rolecmd_fsmo_seize.seize_dns_roleN  s    --/OO%	**5+@+@+BC	BYNBYNKKM;66%!2!23AD[ 66%!2!23AD344)%t<#*=LL!9:	$)$))Y$*/1 %NO# ! 		 J $!% &ELL2T9:!$!3!3S11"!Ao0Q
 IIOOBTIJ !&J $%HI$  0WW
"$(#$/ 0 00s$   G G% G"%
H/!HHNc                    UR                  5       nUR                  USS9n[        U[        5       XS9n	US:X  a  U R	                  SX5        U R	                  SX5        U R	                  SX5        U R	                  SX5        U R	                  S	X5        U R                  S
XUXa5        U R                  SXUXa5        g US
:X  d  US:X  a  U R                  X9XEXa5        g U R	                  X9U5        g NTr*   r,   r   rj   rm   rp   rr   rt   r$   r&   )rB   rC   r   r   r   r   
r   r   r   r   rQ   rP   r   r0   rZ   r   s
             r!   runcmd_fsmo_seize.run  s     ##%((d(C!.*:"'0 5=OOE50OOE50OOHe3OO,e;OOHe3Ui +4Ui +4 {"dk&9##D$/8 U3    )r   r   r}   r|   r{   r~   NNNNNN)__name__
__module____qualname____firstlineno____doc__synopsisoptionsSambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr
   r<   takes_options
takes_argsr   r   r   __static_attributes__ r   r!   r   r      s     H ))..-- 	tW#JS	2yK"	$ 	xh 1f	0	1M( JWr7r ,07;4r   r   c            	           \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSS\SS	S
9/r/ rSS jrSrg)cmd_fsmo_showi  zShow the roles.r   r   r   r   r   r   r   r   Nc           	         UR                  5       nUR                  USS9n[        U[        5       XeS9nUR	                  5       n[
        R                  " UR                  5       5      n	SU-   n
SUR                  5       -  nUR                  5       nSU-   nSU-   nSU	-   nUS	S
4U
SS4USS4USS4USS4USS4USS4/nU HQ  nUu  nnn [        UUU5      nUb#  U R                  U< S[        U5      < 35        M=  U R                  SU-  5        MS     g ! [         a-  nU R                  U< SUR                  < 35         S nAM  S nAff = f)NTr*   r,   rh   rg   rf   r%   r'   rt   SchemaMasterRolerr   InfrastructureMasterRolerj   RidAllocationMasterRolerm   PdcEmulationMasterRolerp   DomainNamingMasterRoler$   DomainDnsZonesMasterRoler&   ForestDnsZonesMasterRolez owner: z%s has no current ownerz: * )rB   rC   r   r   r7   r8   r9   r:   rw   rx   r"   r   r<   r   )r   r   rQ   rP   r   r0   rZ   r   r7   rS   r}   r|   r~   r{   r   r   mastersmasterrE   
short_name	long_namer^   s                         r!   r   cmd_fsmo_show.run  s   ##%((d(C!.*:"'0 OO%	**5+@+@+BC	09<&)@)@)BB	++-	-	9=	I=	Ix);<%'79STE#<=u&>?x)AB +/IJ +/IJ F*0'RYB+E2zB%LL9c&k!JKLL!:i!HI    B9aii@AABs   	1D<D
E"EEr   )NNNNr   r   r   r   r   r   r   r   r   r   r   r
   r<   r   r   r   r   r   r   r!   r   r     s[     H ))..-- 	tW#JS	2M
 J"Br   r   c            	           \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSS\SS	S
9\" SS/ SQSS9/r/ r  SS jrSrg)cmd_fsmo_transferi  zTransfer the role.r   r   r   r   r   r   r   r   r   r   r   r   r   Nc                 2   UR                  5       nUR                  USS9n[        U[        5       XS9n	US:X  a  [	        U R
                  SU	5        [	        U R
                  SU	5        [	        U R
                  SU	5        [	        U R
                  SU	5        [	        U R
                  S	U	5        [        U R
                  XTS
U	5        [        U R
                  XTSU	5        g US
:X  d  US:X  a  [        U R
                  XTX95        g [	        U R
                  X95        g r   )rB   rC   r   r   r   rO   rd   r   s
             r!   r   cmd_fsmo_transfer.run  s     ##%((d(C!.*:"'0 5=$))UE2$))UE2$))Xu5$))%5u=$))Xu5dii)52diik#% {"dk&9!$))Y$Ndii5r   r   r   r   r   r   r!   r   r     sw     H ))..-- 	tW#JS	2xh 1f	0	1M" J+/7;6r   r   c                   X    \ rS rSrSr0 r\" 5       \S'   \" 5       \S'   \" 5       \S'   Sr	g)cmd_fsmoi  z:Flexible Single Master Operations (FSMO) roles management.r   showtransferr   N)
r   r   r   r   r   subcommandsr   r   r   r   r   r   r!   r   r     s0    DK)+K'/K/1K
r   r   )r8   samba.getoptgetoptr   r   r   samba.dcerpcr   r   
samba.authr   samba.drs_utilssamba.netcmdr   r   r	   r
   samba.samdbr   r"   rd   r   r   r   r   r   r   r   r!   <module>r      st   (   
  & %   .Wt<~K4W K4\4BG 4Bn56 56p2| 2r   