
    bQ                         d dl Z d dlmZ d dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlZ d dlmZmZmZmZ d dlmZ d Zd Zd	 Z G d
 de          Z G d de          Z G d de          Z G d de          ZdS )    N)LdbError)drsuapimisc)system_session)CommandCommandErrorSuperCommandOption)SamDBc                 \   	 |                      |t          j        dg          }n?# t          $ r2}|j        \  }}|t          j        k    rt          d|z             d}~ww xY wd|d         v r;t          j        | |d         d         d                             d                    }nd}|S )znGets 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 J   W
c#(((LtSTTT	 #a&  uc!f_&=a&@&G&G&O&OPPs   #& 
A"-AA"c           
         |dk    r|                                 }d|z   }n1|dk    r+t          j        |                                          }d|z   }|                                }|                    |dgt          j        dg          }	d|	d         v r	 t          t          j
        t          j        ||	d         d         d                             d	                                        d
                              }
t          t          j        ||	d         d         d                             d	                              }n^# t          $ r7}|j        \  }}t!          d|	d         d         d         d|d          d}~ww xY w|                     d|z             dS |dk    rE|
d|                                }|                                d|                                }nJ|dk    rD|
d|                                }|                                d|                                }|                                }||k    r|                                }|                    |d          }t/          d|z  t1                      ||          }t          j                    }t          j        ||          |_        t          j        |t          j        d          |d<   t          j        |t          j        d          |d<   	 |                    |           n1# t          $ r$}|j        \  }}t!          d|d|          d}~ww xY w	 t          j                             |||          }n,# t          j        j!        $ r}t!          d|          d}~ww xY w	 |d         }|d         }tD          j#        }|dd         }t          j        $                    |||
||           n,# t          j        j!        $ r}t!          d|          d}~ww xY w|                     d|z             dS |                     d|z             dS ) 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+BCC	<yH++--
,,{-. ^!2 3  5 5C
 #a&  	Bdiu/21vo/Fq/I/P/PQW/X/X)Z )Z)?)?)G)GI I J JK sveSVO-DQ-G-N-Nv-V-VWWXXLL 	B 	B 	BJS#, #A 7 : : :CCC A B B B	B
 	

FMNNNu{,7KK,1,A,A,C,C,CE).)<)<)>)>)>)>).)>)>)@)@)@B			,7KK,1,A,A,C,C,CE).)<)<)>)>)>)>).)>)>)@)@)@B ''))I,&&##%%((d(CC+9#1#3#3"'B0 0 0 KMMve[))!$!3L474G4C"E "E
 "%!3I474D4C"E "E
	LLLOOOO 	L 	L 	LJS#,ccJKKK	L	<889J9;UD DJJ+ 	< 	< 	<7;;;	<
	;!+A']N!6KRSS!BO--.@.<.9.0+? ? ? ? + 	; 	; 	;3T:::	; 	

<tCDDDt

=DEEEusb   B3E
 

F2FFL/ /
M9MM!!N N,N''N,0A	O: :P#PP#c                    |                                 }d|z   }d|                                z  }d|z   }t          |                                          }t	          j        ||                                          }t	          j                    }	t	          j        |d          |	_        |dk    r6t          |||          }
t	          j
        dt          j        d          |	d<   nG|dk    rt          |||          }
|                    |t          j        d	g
          }t          |          dk    sJ |d         d	         d         }t	          j
        |t          j        d          |	d<   n|dk    r5t          |||          }
t	          j
        dt          j        d          |	d<   n|dk    r5t          |||          }
t	          j
        dt          j        d          |	d<   nJ|dk    r5t          |||          }
t	          j
        dt          j        d          |	d<   nt          d          |
|                     d|z             dS |
|k    rb	 |                    |	           n1# t$          $ r$}|j        \  }}t          d|d|          d}~ww xY w|                     d|z             dS |                     d|z             dS )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ue557788IA6%ADu}})%>>"1%   
 
)%DAAll9!$}  F F3xx1}}}}!f[!!$+% + 
		)%DAA"%"4% #" #"
 
!	!	!)%1BDII*-*<%(+* +*
&'' 
		)%DAA"%"4% #" #"
 /000

[^bbcccuy  	,LLOOOO 	, 	, 	,JS#, $cc + , , ,	,
 	

<tCDDDt

=DEEEus   I' '
J1JJc                       e Zd ZdZdZej        ej        ej        dZ	 e
dddedd	           e
d
dd           e
ddg dd          gZg Zd Zd Z	 	 ddZdS )cmd_fsmo_seizez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                 :   |                                 }|                                }d|z   | _        d|                                z  | _        t          |                                          | _        d|z   | _        t          j
                    }|dk    r t          j        || j                  |_        n|dk    rt          j        ||          |_        n|dk    r t          j        || j                  |_        n[|dk    r t          j        || j                  |_        n5|dk    r t          j        || j                  |_        nt          d	          d
}t          ||j        |          }|||k    rd|a|                     d           	 t!          | j        ||           |                     d           dS #  d}|                     d           Y n%xY wn!| j                            d|z             d
S d}||r|                     d|z             t          j        |t          j        d          |d<   |                                 	 |                    |           |dk    r|                                 n# t0          $ r}	|	j        \  }
}|dk    r|
t          j        k    r|                                 |                                 	 |                    |           nn# t0          $ r8}|j        \  }
}|                                 t          d|d|          d}~ww xY w|                                 t          d|d|          Y d}	~	nd}	~	ww xY w|                                 | j                            d|z             dS dS )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_rolezcmd_fsmo_seize.seize_role   s    --//OO%%	!5	!A+e.E.E.G.GGU4466772Y>KMM5==6%--ADDU]]6%++ADDX6%00ADD%%%6%!788ADDX6%00ADD3444)%t<<#{**=LL!9:::$%diu=== %LMMM#tJ $%HIIIII ! 	 J $!% & & &uELL2T9:::!$!3S1"! "!Ao ##%%%4Q5==,,... 4 4 4W
c5==SC,H%H%H ,,...++---8Q# 8 8 8%&V
c00222*l,0DD##,7 8 8 88 ,,...&,(,cc(3 4 4 4 (4, $$&&&IOOBTIJJJ4M sI   F? ?G/J 
M%AM K-,M -
L/73L**L//,M  M%c                 @   |                                 }|                                }t          j        |                                          }	d|z   | _        d|	z   | _        t          j                    }
|dk    r t          j	        || j                  |
_
        n5|dk    r t          j	        || j                  |
_
        nt          d          d}t          ||
j
        |          }|||k    rf|c|                     d           	 t          | j        ||||           |                     d	           d
S #  d
}|                     d           Y n%xY wn!| j                            d|z             dS d
}||r|                     d|z             t          j        |t          j        d          |
d<   	 |                    |
           n1# t(          $ r$}|j        \  }}t          d|d|          d}~ww xY w| j                            d|z             d
S dS )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_rolezcmd_fsmo_seize.seize_dns_roleN  sg    --//OO%%	*5+@+@+B+BCC	BYNBYNKMM;6%!233ADD[  6%!233ADD3444)%t<<#{**=LL!9:::	$)$)Y$*/1 1 1 %NOOO#tJ $%HIIIII ! 	 J $!% & & &uELL2T9:::!$!3S1"! "!Ao0Q 0 0 0W
c"l$(DD##$/ 0 0 00 IOOBTIJJJ4 s$   	D8 8E8G 
G<G77G<Nc                 v   |                                 }|                    |d          }t          |t                      ||          }	|dk    r|                     d|	|           |                     d|	|           |                     d|	|           |                     d|	|           |                     d	|	|           |                     d
|	||||           |                     d|	||||           d S |d
k    s|dk    r|                     ||	||||           d S |                     ||	|           d S 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!   runzcmd_fsmo_seize.run  s    ##%%((d(CC!.*:*:"'B0 0 0 5==OOE5%000OOE5%000OOHeU333OO,eU;;;OOHeU333UHi +U4 4 4UHi +U4 4 4 4 4 {""dk&9&9##D%9$/8 8 8 8 8 eU33333    NNNNNN)__name__
__module____qualname____doc__synopsisoptionsSambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr
   r<   takes_options
takes_argsr   r   r    r   r!   r   r      s         H ).-  	tW#JS	2 	2 	2yK"	$ 	$ 	$ 	xh 1f 1f 1f	0	1 	1 	1M( JW W Wr7 7 7r ,07;4 4 4 4 4 4r   r   c                   p    e Zd ZdZdZej        ej        ej        dZ	 e
dddedd	          gZg ZddZd
S )cmd_fsmo_showzShow the roles.r   r   r   r   r   r   r   r   Nc           	         |                                 }|                    |d          }t          |t                      ||          }|                                }t          j        |                                          }	d|z   }
d|                                z  }|	                                }d|z   }d|z   }d|	z   }|d	d
f|
ddf|ddf|ddf|ddf|ddf|ddfg}|D ]}|\  }}}	 t          |||          }|(|                     |dt          |                     n|                     d|z             ]# t          $ r)}|                     |d|j                   Y d }~d }~ww xY wd S )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   zcmd_fsmo_show.run  s   ##%%((d(CC!.*:*:"'B0 0 0 OO%%	*5+@+@+B+BCC	09<&)@)@)B)BB	++--	-	9=	I=	Ix);<%'79STE#<=u&>?x)AB +/IJ +/IJ  		B 		BF*0'RYB+E2zBB%LL999c&kkk!JKKKKLL!:i!HIII B B B999aii@AAAAAAAAB		B 		Bs   -AE
E4E//E4)NNNN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 	2 	2M
 J"B "B "B "B "B "Br   r   c                       e Zd ZdZdZej        ej        ej        dZ	 e
dddedd	           e
d
dg dd          gZg Z	 	 ddZdS )cmd_fsmo_transferzTransfer the role.r   r   r   r   r   r   r   r   r   r   r   r   r   Nc                 ^   |                                 }|                    |d          }t          |t                      ||          }	|dk    rt	          | j        d|	           t	          | j        d|	           t	          | j        d|	           t	          | j        d|	           t	          | j        d	|	           t          | j        ||d
|	           t          | j        ||d|	           d S |d
k    s|dk    rt          | j        ||||	           d S t	          | j        ||	           d S r   )rB   rC   r   r   r   rO   rd   r   s
             r!   r   zcmd_fsmo_transfer.run  sW    ##%%((d(CC!.*:*:"'B0 0 0 5==$)UE222$)UE222$)Xu555$)%5u===$)Xu555diH)52 2 2diHk#% % % % % {""dk&9&9!$)Y$NNNNNdiu55555r   r   r   r   r   r!   r   r     s         H ).-  	tW#JS	2 	2 	2xh 1f 1f 1f	0	1 	1 	1M" J+/7;6 6 6 6 6 6r   r   c                   d    e Zd ZdZi Z e            ed<    e            ed<    e            ed<   dS )cmd_fsmoz:Flexible Single Master Operations (FSMO) roles management.r   showtransferN)r   r   r   r   subcommandsr   r   r   r   r   r!   r   r     sP        DDK)>++K'-//K//1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      s  (        



       & & & & & & & & % % % % % %                       .W W Wt< < <~K4 K4 K4 K4 K4W K4 K4 K4\4B 4B 4B 4B 4BG 4B 4B 4Bn56 56 56 56 56 56 56 56p2 2 2 2 2| 2 2 2 2 2r   