
    g                        S SK Jr  S SKr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JrJr  S SKJr  S SKJr  S SKJrJrJr  S S	KJrJr  S S
KJr  S SKJr  S SKJrJrJ r J!r!J"r"  S SK#J$r$  S SKJ%r%  S r&S r'S r(S r)Sr* " S S\5      r+ " S S\5      r, " S S\5      r- " S S\5      r. " S S\5      r/ " S S\5      r0 " S  S!\5      r1 " S" S#\5      r2g)$    N   )common)system_session)CommandCommandErrorOptionSuperCommand)attr_default)SamDB)	drs_utilsnttime2stringdsdb)drsuapimisc)
join_clone)colour)get_partition_mapsget_utdv_edgesget_utdv_distancesget_utdv_summaryget_kcc_and_dsas)
get_string)get_default_backend_storec                      [         R                  " U R                  U R                  U R                  5      u  U l        U l        U l        g! [         a  n[        SU R                  -  U5      eSnAff = f)z'make a DRSUAPI connection to the serverzDRS connection to %s failedN)
r   drsuapi_connectserverlpcredsr   drsuapi_handlebind_supported_extensions	Exceptionr   ctxes     2/usr/lib/python3/dist-packages/samba/netcmd/drs.pyr   r   4   su    JKTKdKdeheoeoqtqwqwy|  zC  zC  LDHc(#*G J83::EqIIJs   A	A 
A4A//A4c                      [        SU R                  -  [        5       U R                  U R                  S9U l        g! [         a  n[        SU R                  -  U5      eSnAff = f)z$make a ldap connection to the server	ldap://%surlsession_infocredentialsr   zLDAP connection to %s failedN)r   r   r   r   r   samdbr!   r   r"   s     r%   samdb_connectr-   <   s]    KkCJJ6'5'7&)iiCFF<	  K9CJJFJJKs   := 
A%A  A%c                 $    U u  pUS:X  a  gSX4-  $ )z*return "was successful" or an error stringr   zwas successfulzfailed, result %u (%s) )werrecodeestrings      r%   
drs_errmsgr3   F   s"    Uz#u&666    c                     U R                  S5      nUS   S:w  d  US   S:w  d	  US   S:w  a  [        SU -  5      eUS	   R                  S
5      S	   nUS   R                  S
5      S	   nX24$ )z+parse a NTDS DN returning a site and server,r   zCN=NTDS Settings   z
CN=Servers   zCN=Siteszbad NTDS DN %sr   =   )splitRuntimeError)ntds_dnar   sites       r%   drs_parse_ntds_dnr@   N   sx    cAt!!QqT\%9QqTZ=O+g566qTZZ_QFqTZZ_QD>r4   classicc                   ,   \ 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SS
9\" SSSSSS
9\" SSSSSS9\" SSSSS\S9\" SSSSS9/rS/rS rS  rS! rS"S"S"S"\S#4S$ jrS% rS& rS' rS( rS) rS* rS+ rS,rg")-cmd_drs_showrepl[   zShow replication status.%prog [<DC>] [options]	sambaoptsversionoptscredopts--jsonz"replication details in JSON formatformatstore_constjson)helpdestactionconstz	--summaryz5summarize overall DRS health as seen from this serversummaryz--pull-summaryz:Have we successfully replicated from all relevant servers?pull_summaryz--notify-summarynotify_summaryzsHave we successfully notified all relevant servers of local changes, and did they say they successfully replicated?)rP   rQ   rO   rN   z	--classiczprint local replication detailsrA   )rN   rO   rP   rQ   defaultz-vz	--verbosez
Be verbose
store_truerN   rP   DC?c           	      \   [        UR                  5      nUR                  U[        UR                  5      [        UR                  5      UR                  [        UR                  5      [        UR                  5      SS.n U R                  R                  SU-  [        R                  / S9   [#        UR                  5      u  pxU< SU< 3US	'   U$ ! [        R                   a2  nUR                  u  pVU[        R                   :X  a
  SUS'    SnANfe SnAff = f! [$         a     U$ f = f)
z8Convert an ldb neighbour object into a python dictionaryF)NC dnDSA objectGUIDlast attempt timelast attempt messageconsecutive failureslast successNTDS DN
is deletedz	<GUID=%s>basescopeattrsTra   N\DSA)strsource_dsa_obj_guidnaming_context_dnr   last_attemptr3   result_last_attemptconsecutive_sync_failureslast_successsource_dsa_obj_dnr,   searchldb
SCOPE_BASELdbErrorargsERR_NO_SUCH_OBJECTr@   r<   )	selfndsa_objectguiddr$   errno_r?   r   s	            r%   parse_neighbour cmd_drs_showrepl.parse_neighbour|   s   Q223((,!.q~~!>$.q/D/D$E$%$?$?)!..91../	
		JJ;#?$'NN$&  (	.q/B/BCNT#'0AeH  || 	JU..."&,	  		s0   ,C /#D D('DDD
D+*D+c                    U R                  SUS   -  5        SU;   a  U R                  SUS   -  5        OU R                  SUS   -  5        U R                  SUS   -  5        U R                  S	US
   < SUS   < 35        U R                  SUS   -  5        U R                  SUS   -  5        U R                  S5        g)z&print one set of neighbour informationz%srZ   rg   z	%s via RPCz	NTDS DN: %sr`   z		DSA object GUID: %sr[   z		Last attempt @ r\    r]   z		%u consecutive failure(s).r^   z		Last success @ %sr_    N)message)rv   ry   s     r%   print_neighbour cmd_drs_showrepl.print_neighbour   s    TAgJ&'A:LL!E(23LL1Y<78.3C1DDE15H3I345K3LN 	O5-./ 	0,q/@@ARr4   c                 0   [         R                  " 5       nXl         U R                   R                  U R                  SU5      u  pUR                   Vs/ s H  oPR                  U5      PM     nnU$ ! [
         a  n[        SU-  U5      eS nAff = fs  snf )Nr   z"DsReplicaGetInfo of type %u failed)	r   DsReplicaGetInfoRequest1	info_typeDsReplicaGetInfor   r!   r   arrayr|   )rv   r   req1infor$   rw   repss          r%   get_neighbourscmd_drs_showrepl.get_neighbours   s    //1"	T $ = =##Q!.Y
 26<A$$Q'<	  	TCiOQRSS	T =s   )A2 B2
B<BBNFc                    UR                  5       U l        Uc   [        R                  " U R                  5      nXl        UR                  U R                  SS9U l        X`l        U R                  U R                  U R                  U R                  U R                  S.R                  U5      nUc  [        SU-  5      eU" 5       $ )NTfallback_machine)rR   rT   rS   rM   rA   zunknown showrepl format %s)get_loadparmr   r   netcmd_dnsnamer   get_credentialsr   verbosesummary_outputnotify_summary_outputpull_summary_outputjson_outputclassic_outputgetr   )rv   DCrG   rI   rH   rK   r   output_functions           r%   runcmd_drs_showrepl.run   s     ((*:&&tww/B--dgg-M
 **"88 44$$**
 #f+ 	 ";fDEE  r4   c                 n    U R                  5       nUS	 US	 [        R                  " XR                  SS9  g )Nr?   r   r7   indent)get_local_repl_datarM   dumpoutf)rv   datas     r%   r   cmd_drs_showrepl.json_output   s0    '')LN		$		!,r4   c                    / n/ nU R                  5       nUS:w  a=  US    H4  nUS   (       a  M  US   S:w  d  US   S:X  d  M#  UR                  U5        M6     US:w  a=  US    H4  nUS   (       a  M  US   S:w  d  US   S:X  d  M#  UR                  U5        M6     U(       d  U(       a  U R                  [        R                  " S	5      5        U(       a?  U R                  [        R                  " S
5      5        U H  nU R                  U5        M     U(       a?  U R                  [        R                  " S5      5        U H  nU R                  U5        M     gU R                  [        R                  " S5      5        g)z[Print a short message if every seems fine, but print details of any
links that seem broken.rS   repsTora   r^   r   r_   rT   repsFromzThere are failing connectionszFailing outbound connections:zFailing inbound connection:r   z
[ALL GOOD]N)r   appendr   r   c_REDr   c_GREEN)rv   typeof_outputfailing_repstofailing_repsfrom
local_datareps         r%   summary_output_handler'cmd_drs_showrepl.summary_output_handler   sN    --/
N*!(+|$-.!3s>7Ja7O"))#.	 , ,,!*-|$-.!3s>7Ja7O$++C0	 . -LL&EFGV\\*IJK)C((- *V\\*GHI+C((- , V^^L12r4   c                 $    U R                  S5      $ )NrR   r   rv   s    r%   r   cmd_drs_showrepl.summary_output   s    **955r4   c                 $    U R                  S5      $ )NrT   r   r   s    r%   r   &cmd_drs_showrepl.notify_summary_output   s    **+;<<r4   c                 $    U R                  S5      $ )NrS   r   r   s    r%   r   $cmd_drs_showrepl.pull_summary_output   s    **>::r4   c                    [        U 5        [        U 5        U R                  R                  5       n[	        U5      u  p# U R                  R                  U[        R                  / SQS9n[        [        US   SS5      5      [        U R                  R                  SUS   S   S   5      5      [        U R                  R                  SUS   S   S   5      5      S.nU R                  R                  USS	9nU R                  [        R                   5      nU R                  [        R"                  5      n	/ n
U GH2  n[%        US
   S   5      R'                  S5      u  pn[%        US   5      [%        US
   S   5      [        [        USS5      5      [        [        USS5      5      R)                  5       S:H  S.nU
R+                  U5         U R                  R                  U[        R                  S/S9n[%        US   S   S   5      US'   / US'   UR7                  S/ 5       HB  n[%        U5      R9                  S5      nUS   R+                  US   [        US   5      45        MD     GM5     UUU	U
UUS.$ ! [         a  n[        SU-  5      eS nAff = f! [        R,                   a2  nUR.                  u  nnU[        R0                  :X  a  SUS'    S nANS nAf[2        [4        4 a     Nf = f)N)options
objectGUIDinvocationIdrb   zFailed to search NTDS DN %sr   r   r   r   z(objectClass=nTDSConnection))rc   
expression
fromServerr6   nameenabledConnectionTRUE)r   	remote DNr   enableddnsHostNamedns nameTra   replicates NCzmS-DS-ReplicatesNCReason:r:   r7   )dsar   r   NTDSConnectionsr?   r   )r   r-   r,   get_dsServiceNamer@   rp   rq   rr   r!   r   intr
   r   schema_format_valuer   r   !DRSUAPI_DS_REPLICA_INFO_NEIGHBORSDRSUAPI_DS_REPLICA_INFO_REPSTOrh   	partitionupperr   rs   rt   ru   KeyError
IndexErrorr   r;   )rv   r=   r?   r   ntdsr$   dsa_detailsconnrepsfromrepstoconn_detailscc_rdnsepc_server_dnry   c_server_resrz   r{   rr>   s                        r%   r   $cmd_drs_showrepl.get_local_repl_data  s   d **..0*73	H::$$'Ox$yD
 <QA>?$TZZ%C%Cd1gl3A6&8 9&tzz'E'Ed1gn5a8(: ;	
 zz  g:X Y&&w'P'PQ$$W%K%KLA&)!L/!*<&=&G&G&L#EAfI <!34|Ay!<=&|A7J)/(1 227%'VD	A "
#zz00k7:~~8E  1  H !$LOM$B1$E F* "$AoUU5r:FLL%/"))1Q4QqT*;< ;1 :  +
 	
Y  	H<wFGG	H@ << +VV
C222&*AlOj) s6   +I; AJ;
JJJK2/(KK21K2c                    U R                  5       nUS   nUS   nUS   nUS   nUS   nUS   nU R                  U< SU< 35        U R                  SUS	   -  5        U R                  S
US   -  5        U R                  SUS   -  5        U R                  S5        U H  nU R                  U5        M     U R                  S5        U H  nU R                  U5        M     / SQn	U R                  S5        U GHo  n
U R                  S5        U
R                  S5      (       a  U R                  S5        U R                  SU
S   -  5        U R                  S[	        U
S   5      R                  5       -  5        U R                  SU
R                  S5      -  5        U R                  SU
S   -  5        U R                  S5        U R                  SU
S	   -  5        U
S   (       aq  U
S    He  u  pU R                  S U-  5        U R                  S!U-  5        U	 H2  n[        [        US"5      U-  (       d  M  U R                  S#U-  5        M4     Mg     GM^  U R                  S$5        GMr     g )%Nr   r   r   r   r?   r   rf   zDSA Options: 0x%08xr   zDSA object GUID: %sr   zDSA invocationId: %s
r   z==== INBOUND NEIGHBORS ====
z==== OUTBOUND NEIGHBORS ====
)
NTDSCONN_KCC_GC_TOPOLOGYNTDSCONN_KCC_RING_TOPOLOGY#NTDSCONN_KCC_MINIMIZE_HOPS_TOPOLOGY#NTDSCONN_KCC_STALE_SERVERS_TOPOLOGY,NTDSCONN_KCC_OSCILLATING_CONNECTION_TOPOLOGY"NTDSCONN_KCC_INTERSITE_GC_TOPOLOGYNTDSCONN_KCC_INTERSITE_TOPOLOGY%NTDSCONN_KCC_SERVER_FAILOVER_TOPOLOGY#NTDSCONN_KCC_SITE_FAILOVER_TOPOLOGY&NTDSCONN_KCC_REDUNDANT_SERVER_TOPOLOGYz!==== KCC CONNECTION OBJECTS ====
zConnection --ra   z'	WARNING: Connection to DELETED server!z	Connection name: %sr   z	Enabled        : %sr   z	Server DNS name : %sr   z	Server DN name  : %sr   z		TransportType: RPCz		options: 0x%08Xr   z		ReplicatesNC: %sz		Reason: 0x%08xr   z			%sz)Warning: No NC replicated for Connection!)r   r   r   r   rh   r   getattrr   )rv   r   r   r   r   r   r?   r   rw   reasonsry   ncreasonss                 r%   r   cmd_drs_showrepl.classic_output@  s;   '')5k
#h-.F|hv./*[-CCD*[-FFG-N0KKL45A  #  	56A  # 	= 	9:ALL)uu\""GHLL01V9<=LL03q|3D3J3J3LLMLL1AEE*4EEFLL1AkNBCLL12LL.9=>!"#O"4JBLL!7"!<=LL!5!>?$"4A.77 LLa8 % #5 HI) r4   )r   r   r   r   )__name__
__module____qualname____firstlineno____doc__synopsisr   SambaOptionsVersionOptionsCredentialsOptionstakes_optiongroupsr   DEFAULT_SHOWREPL_FORMATtakes_options
takes_argsr|   r   r   r   r   r   r   r   r   r   r   __static_attributes__r/   r4   r%   rC   rC   [   s   "'H ))--.. 	xB]&	B{ #5])	E 	 (D].	J 	!-%H#	%
 	{!B]).	0 	t[|LI#M( J>
 Tt*!.-#3J6=;=
~6Jr4   rC   c                   x    \ rS rSrSrSr\R                  \R                  \R                  S.r
S/r  S	S jrSrg)
cmd_drs_kcciy  z)Trigger knowledge consistency center run.rE   rF   rX   Nc                    UR                  5       U l        Uc   [        R                  " U R                  5      nXl        UR                  U R                  SS9U l        [        U 5        [        R                  " 5       n U R                  R                  U R                  SU5        U R                  SU-  5        g ! [         a  n[        SU5      eS nAff = f)NTr   r   zDsExecuteKCC failedz#Consistency check on %s successful.)r   r   r   r   r   r   r   r   r   DsExecuteKCC1DsExecuteKCCr   r!   r   r   )rv   r   rG   rI   rH   r   r$   s          r%   r   cmd_drs_kcc.run  s     ((*:&&tww/B--dgg-M
$$&	9LL%%d&9&91dC 	:R?@  	94a88	9s   ?'B; ;
CCCr   r   r   NNNNr   r   r   r   r   r   r   r   r   r   r   r   r   r  r/   r4   r%   r  r  y  sD    3'H ))--.. J%)'+Ar4   r  c                       \ rS rSrSrSr\R                  \R                  \R                  S.r
/ SQr\" SSSS	9\" S
SSS	9\" SSSS	9\" SSSS	9\" SSSS	9\" SSSS	9\" SSSS	9\" SSSS	9/r   SS jr   SS jrSrg)cmd_drs_replicatei  z+Replicate a naming context between two DCs.z/%prog <destinationDC> <sourceDC> <NC> [options]rF   )DEST_DC	SOURCE_DCNCz	--add-refz&use ADD_REF to add to repsTo on sourcerV   rW   z--sync-forcedz,use SYNC_FORCED to force inbound replicationz
--sync-allz&use SYNC_ALL to replicate from all DCsz--full-synczresync all objectsz--localzIpull changes directly into the local database (destination DC is ignored)z--local-onlinez_pull changes into the local database (destination DC is ignored) as a normal online replicationz
--async-opz use ASYNC_OP for the replicationz--single-objectz\Replicate only the object specified, instead of the whole Naming Context (only with --local)c           
         Xl         [        U 5        [        [        5       SU R                  U R
                  SS9U l        [        SU R                   -  [        5       U R                  U R
                  S9U l        U R                  R                  S[        R                  S/S9nUS   S   S   U l        U R                  R                  U R                  [        R                  S	/S9n[        R                  " U R                  R                  S	US   S	   S   5      5      U l        [        R                  " U R                  R!                  5       5      n[        R                  " U R                  R!                  5       5      nU R                  n	["        R$                  n
U(       a  ["        R&                  n
S
nU R                  R)                  5         [*        R,                  " SU R                   -  U R
                  U R                  U R                  U5      nU R                  R/                  5       n UR1                  UUU	UUU
US9u  pU R                  R7                  5         U(       a,  U R9                  SXUU R                  R:                  4-  5        gU R9                  SXUU R                  R:                  4-  5        g! [2         a  n[5        SU-  U5      eSnAff = f)z+replicate from a source DC to the local SAMNr   )r*   r)   r+   r   flagsr'   r(   r   dsServiceNamerb   r   Tzncacn_ip_tcp:%s[seal])rodc	full_syncexopsync_forcedzError replicating DN %szMFull Replication of all %d objects and %d links from %s to %s was successful.zPIncremental replication of %d objects and %d links from %s to %s was successful.)r   r   r   r   r   r   local_samdbr,   rp   rq   rr   r=   r   GUIDr   	ntds_guidget_invocation_idr   DRSUAPI_EXOP_NONEDRSUAPI_EXOP_REPL_OBJtransaction_startr   drs_Replicateam_rodc	replicater!   r   transaction_commitr   r)   )rv   r  r  r  single_objectr  ressource_dsa_invocation_iddest_dsa_invocation_iddestination_dsa_guidr  replr  num_objects	num_linksr$   s                   r%   drs_local_replicate%cmd_drs_replicate.drs_local_replicate  s   
   !n.>D-1ZZDGG'(* {T[[8(6(8'+zzdgg?

 %%2S^^-<,= & ?1vo.q1%%4<<s~~-9N & <JJ**<+.q6,+?+BDE $(99TZZ-I-I-K#L !%4+;+;+M+M+O!P#~~((00DI

$$&&&'>'L'+ww'+zz43C3C'=? '')		B'+~~b6N6J;?@I;?BM (6 (O$[ 	

%%'LL 9%)**..00 1
 LL 9%)**..00 1  	B82=qAA	Bs   1K 
KKKNc           	         Xl         UR                  5       U l        UR                  U R                  SS9U l        U(       a  U R                  X#UUUS9  g U	(       a5  [        R                  " SU R                  S9n[        R                  " 5       nO#[        U 5        U R                  nU R                  nU
(       d  SUl        [        U 5        U R                  R                  U R                  R                  5       S[         R"                  " U5      < S[         R"                  " U5      < S	3/ S
9n[%        U5      S:X  a  ['        SU-  5      eUS   S   nU R                  R                  U[         R(                  SSS/S9n[%        U5      S:X  a  ['        SU-  5      eUS   S   S   n[+        [-        USS5      5      nSnU[.        R0                  -  (       d  U[        R2                  -  nU(       a  U[        R4                  -  nU(       a  U[        R6                  -  nU(       a  U[        R8                  -  nU(       a  U[        R:                  -  nU
(       a  U[        R<                  -  n [>        R@                  " UUUUU5        U
(       a  U RE                  SU< SU< S35        g U RE                  SU< SU< S35        g ! [>        RB                   a  n['        SU5      eS nAff = f)NTr   )r  r"  r  zirpc:dreplsrv)lp_ctxi,  z!(&(objectCategory=server)(|(name=z)(dNSHostName=z))))rc   r   re   r   zFailed to find source DC %sdnz5(|(objectCategory=nTDSDSA)(objectCategory=nTDSDSARO))r   r   )rc   rd   r   re   z Failed to find source NTDS DN %szDsReplicaSync failedzReplicate from z to z was started.z was successful.)#r   r   r   r   r   r*  r   r   policy_handler   r   request_timeoutr-   r,   rp   get_config_basednrq   binary_encodelenr   SCOPE_ONELEVELr   r
   r   $DS_NTDSDSA_OPT_DISABLE_OUTBOUND_REPLDRSUAPI_DRS_WRIT_REPDRSUAPI_DRS_ADD_REFDRSUAPI_DRS_SYNC_FORCEDDRSUAPI_DRS_SYNC_ALLDRSUAPI_DRS_FULL_SYNC_NOWDRSUAPI_DRS_ASYNC_OPr   sendDsReplicaSyncdrsExceptionr   )rv   r  r  r  add_refr  sync_allr  locallocal_onlineasync_opr"  rG   rI   rH   server_bindserver_bind_handlemsg	server_dnsource_dsa_guiddsa_optionsreq_optionsestrs                          r%   r   cmd_drs_replicate.run  s   
 ((*--dgg-M
$$Yi3@1< % > !///$''JK!%!3!3!5D!,,K!%!4!4*0K'd jjTZZ%A%A%Ci(i(,* ')	   *
 s8q=<yHIIF4L	jjYc6H6H+b'3Y&?   A s8q=AIMNNa&.q1,sIq9:dGGG7777K7666K7:::K7777K7<<<K7777K	=''5GZ\^ij LL9gVWLLiQXYZ %% 	=5t<<	=s   0K K,K''K,)r   r  r   r=   r  r,   r   )FFF)FFFFFFFFNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*  r   r  r/   r4   r%   r  r    s    5@H ))--.. 0J 	{!IR^_%S\hi|"JS_`}#7Myjs  	A  'H  Q]  	^|"D\Z   (F  O[  	\	M <A*/(-D1N INKP7;E[r4   r  c                   x    \ rS rSrSrSr\R                  \R                  \R                  S.r
S/r  S	S jrSrg)
cmd_drs_bindi@  z"Show DRS capabilities of a server.rE   rF   rX   Nc           
      J   UR                  5       U l        Uc   [        R                  " U R                  5      nXl        UR                  U R                  SS9U l        [        U 5        [        R                  " 5       nSUl
        [        R                  " 5       Ul        U R                  R                  [        R                  " [        R                   5      U5      u  pg/ SQn/ SQn	U R#                  SU-  5        U R#                  S5        U HX  u  p[%        [        U
S5      nUR                  R&                  U-  (       a  S	nOS
nU R#                  SU
<S SU< SU< S35        MZ     [)        UR                  [        R*                  5      (       ao  U R#                  S5        U	 HX  u  p[%        [        U
S5      nUR                  R,                  U-  (       a  S	nOS
nU R#                  SU
<S SU< SU< S35        MZ     U R#                  SUR                  R.                  -  5        U R#                  SUR                  R0                  -  5        [)        UR                  [        R*                  5      (       a)  U R#                  SUR                  R2                  -  5        g g )NTr      )") DRSUAPI_SUPPORTED_EXTENSION_BASEDRS_EXT_BASE)-DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATIONDRS_EXT_ASYNCREPL)%DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPIDRS_EXT_REMOVEAPI)&DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2DRS_EXT_MOVEREQ_V2)+DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESSDRS_EXT_GETCHG_DEFLATE)%DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1DRS_EXT_DCINFO_V1)4DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION DRS_EXT_RESTORE_USN_OPTIMIZATION)$DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYDRS_EXT_ADDENTRY)'DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTEDRS_EXT_KCC_EXECUTE)'DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2DRS_EXT_ADDENTRY_V2)4DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION DRS_EXT_LINKED_VALUE_REPLICATION)%DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2DRS_EXT_DCINFO_V2)8DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD$DRS_EXT_INSTANCE_TYPE_NOT_REQ_ON_MOD)'DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BINDDRS_EXT_CRYPTO_BIND))DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFODRS_EXT_GET_REPL_INFO)-DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTIONDRS_EXT_STRONG_ENCRYPTION)&DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01DRS_EXT_DCINFO_VFFFFFFFF)1DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIPDRS_EXT_TRANSITIVE_MEMBERSHIP)+DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORYDRS_EXT_ADD_SID_HISTORY)&DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3DRS_EXT_POST_BETA3)(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V5DRS_EXT_GETCHGREQ_V5),DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2DRS_EXT_GETMEMBERSHIPS2)(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6DRS_EXT_GETCHGREQ_V6))DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCSDRS_EXT_NONDOMAIN_NCS)(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8DRS_EXT_GETCHGREQ_V8)*DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5DRS_EXT_GETCHGREPLY_V5)*DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6DRS_EXT_GETCHGREPLY_V6),DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3DRS_EXT_WHISTLER_BETA3)*DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7r  ))DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECTr  )+DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESSDRS_EXT_W2K3_DEFLATE))DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V10DRS_EXT_GETCHGREQ_V10)*DRSUAPI_SUPPORTED_EXTENSION_RESERVED_PART2*DRS_EXT_RESERVED_FOR_WIN2K_OR_DOTNET_PART2)*DRSUAPI_SUPPORTED_EXTENSION_RESERVED_PART3*DRS_EXT_RESERVED_FOR_WIN2K_OR_DOTNET_PART3)) DRSUAPI_SUPPORTED_EXTENSION_ADAMDRS_EXT_ADAM)$DRSUAPI_SUPPORTED_EXTENSION_LH_BETA2DRS_EXT_LH_BETA2)'DRSUAPI_SUPPORTED_EXTENSION_RECYCLE_BINDRS_EXT_RECYCLE_BINzBind to %s succeeded.zExtensions supported:r   YeszNo   60: z ()z
Extended Extensions supported:z
Site GUID: %szRepl epoch: %uzForest GUID: %s)r   r   r   r   r   r   r   r   r   DsBindInfoCtrlengthDsBindInfo28r   DsBindr   r  DRSUAPI_DS_BIND_GUIDr   r   supported_extensions
isinstanceDsBindInfo48supported_extensions_ext	site_guid
repl_epochconfig_dn_guid)rv   r   rG   rI   rH   	bind_infor   handleoptmap
optmap_extoptrh   optvalyesnos                 r%   r   cmd_drs_bind.runM  s    ((*:&&tww/B--dgg-M
))+		 --/	,,TYYw7S7S-TV_`#
JP

 	,r12,- JSWc1-Fyy--6LLsE3?@ ! dii!5!566LL;<(
 #q19955>!E!E3sCD ) 	&)<)<<=%		(<(<<=dii!5!566LL*TYY-E-EEF 7r4   r  r	  r
  r/   r4   r%   rM  rM  @  sE    ,'H ))--.. J%)'+QGr4   rM  c                       \ rS rSrSrSr\R                  \R                  \R                  S.r
S/r\" SSSS	S
9/rSSSSS.r  SS jrSrg)cmd_drs_optionsi  zJQuery or change 'options' for NTDS Settings object of a Domain Controller.rE   rF   rX   z--dsa-optionzDSA option to enable/disablerh   za{+|-}IS_GC | {+|-}DISABLE_INBOUND_REPL | {+|-}DISABLE_OUTBOUND_REPL | {+|-}DISABLE_NTDSCONN_XLATE)rN   typemetavarr   r7   r8      )IS_GCDISABLE_INBOUND_REPLDISABLE_OUTBOUND_REPLDISABLE_NTDSCONN_XLATENc                    UR                  5       U l        Uc   [        R                  " U R                  5      nXl        UR                  U R                  SS9U l        [        U 5        U R                  R                  5       nU R                  R                  U[        R                  S/S9n[        US   S   S   5      nU R                   V	s/ s H  oR                  U	   U-  (       d  M  U	PM     n
n	U R                  SSR!                  U
5      -   5        U(       GaT  US S S	;  a  [#        S
U-  5      eUSS  nXR                  R%                  5       ;  a  [#        S
U-  5      eUS S S:X  a  XR                  U   -  nOXR                  U   ) -  n[        R&                  " 5       n[        R(                  " U R                  U5      Ul        [        R,                  " [/        U5      [        R0                  S5      US'   U R                  R3                  U5        U R                   V	s/ s H  oR                  U	   U-  (       d  M  U	PM     n
n	U R                  SSR!                  U
5      -   5        g g s  sn	f s  sn	f )NTr   r   rb   r   zCurrent DSA options: z, r   )+-zUnknown option %sr  zNew DSA options: )r   r   r   r   r   r   r   r-   r,   r   rp   rq   rr   r   
option_mapr   joinr   keysMessageDnr.  MessageElementrh   FLAG_MOD_REPLACEmodify)rv   r   
dsa_optionrG   rI   rH   r=   r#  dsa_optsxcur_optsflagms                r%   r   cmd_drs_options.run  s    ((*:&&tww/B--dgg-M
d**..0jjWCNN9+Vs1vi(+,  $P!//!2Dx2OAP,tyy/BBC "1~Z/"#6#CDDab>D??//11"#6#CDD"1~$OOD11__T222A66$**g.AD--c(mS=Q=QS\]AiLJJa #'??T?aooa6H86S?HTLL,tyy/BBC# 	 Q( Us   I5-I5*I:I:r  )NNNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r/   r4   r%   r  r    sw    T'H ))--.. J 	~$Bz	|M
 &*4+5,68J
 '+7;%Dr4   r  c                       \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SS\S9\" SS	\S9\" S
SSSS9\" SSSS9\" SSSSS/S\" 5       -  S9\" SSSSS9/rS/r    S!S jrS rg)"cmd_drs_clone_dc_databasei  z9Replicate an initial clone of domain, but DO NOT JOIN it.z%prog <dnsdomain> [options]rF   z--serverz
DC to join)rN   r  z--targetdirz#where to store provision (required)z-qz--quietzBe quietrV   rW   z--include-secretszAlso replicate secret valuesz--backend-storechoiceBACKENDSTOREtdbmdbz7Specify the database backend to be used (default is %s))r  r  choicesrN   z--backend-store-sizebytesSIZEzeSpecify the size of the backend database, currentlyonly supported by lmdb backends (default is 8 Gb).)r  r  rN   domainNc                     UR                  5       nUR                  U5      nU R                  XS9nUc  [        S5      e[	        XXUSXiU
US9
  g )N)r   quietz$--targetdir option must be specifiedSAMBA_INTERNAL)
loggerr   r   r   r  dns_backend	targetdirinclude_secretsbackend_storebackend_store_size)r   r   
get_loggerr   r   )rv   r  rG   rI   rH   r   r  r  r   r  r  r  r   r   r  s                  r%   r   cmd_drs_clone_dc_database.run  s_     ##%((,>EFF&u .>&!.&8		:r4   r/   )
NNNNNFFFNN)r   r   r   r   r   r   r   r   r   r   r   r   rh   r   r   r   r   r  r/   r4   r%   r  r    s    C,H ))--.. 	z37}#HsStYZE")GP\] xu~&(A(CD	E 	%GVI	JM J37598=37:r4   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S9\" SSSS9\" SSSS9\" SSSS9\" SSSS9/rS rS r    SS jrSrg)cmd_drs_uptodatenessi  zShow uptodateness statusz%prog [options]rF   z-Hz--URLURLHz%LDB URL for database or target server)r  rO   rN   z-pz--partitionzrestrict to this partition)rN   rJ   rV   zPrint data in json format)rP   rN   z	--maximumz#Print maximum out-of-date-ness onlyz--medianz"Print median out-of-date-ness onlyz--fullz Print full out-of-date-ness datac                 ,    [         R                  " USS9$ )Nr7   r   )rM   dumps)rv   partitions_summariess     r%   format_as_json#cmd_drs_uptodateness.format_as_json(  s    zz.q99r4   c                    / nUR                  5        HZ  u  p4UR                  5        VVs/ s H  u  pVU< SU< 3PM     nnnU<S SSR                  U5      < 3nUR                  U5        M\     SR                  U5      $ s  snnf )Nr  15r   r  
)itemsr  r   )	rv   r  lines	part_namerR   kvr  lines	            r%   format_as_text#cmd_drs_uptodateness.format_as_text+  st    "6"<"<">I3:==?C?41A&?EC!*DIIe,<=DLL #? yy Ds   BNc                    UR                  5       nUR                  USS9n[        XU5      u  pUR                  n[	        U5      u  nnU(       a  UU;   a
  UU   nUU0nO[        SU-  5      e/ nU(       a  UR                  S5        U(       a  UR                  S5        0 n0 nUR                  5        H3  u  nn[        XUX5      n[        UU5      n[        UUS9nUUU'   UUU'   M5     U(       a  U R                  U5      nO*U(       a  U R                  U5      nOU R                  U5      n[        UU R                  S9  g )NTr   zunknown partition %smaximummedian)filters)file)r   r   r   r,   r   r   r   r  r   r   r   r  r  printr   )rv   r  r   rM   r  r  fullrG   rI   rH   r  r   r   r   	local_kccdsasr,   short_partitionsr{   part_dnr  partitions_distancesr  r  
utdv_edges	distancesrR   outputs                               r%   r   cmd_drs_uptodateness.run3  sL   
 ##%((d(C*1%8	07!,,*95$-w#7 "#9I#EFFNN9%NN8$!!"2"8"8":Iw'	"LJ*:t<I&y'BG.7 +.5 + #; (()=>F,,-AB,,-ABf499%r4   r/   )NNFFFFNNNFF)r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r  r/   r4   r%   r  r    s    " H ))--.. 	tWe#;	=t]0	2x/	1{<9	;z,8	:x6	8M:  %):?7;!&*&r4   r  c                       \ rS rSrSr0 r\" 5       \S'   \" 5       \S'   \" 5       \S'   \	" 5       \S'   \
" 5       \S'   \" 5       \S'   \" 5       \S	'   S
rg)cmd_drsi`  z0Directory Replication Services (DRS) management.bindkccr   showreplr   zclone-dc-databaseuptodatenessr/   N)r   r   r   r   r   subcommandsrM  r  r  rC   r  r  r  r  r/   r4   r%   r  r  `  sd    :K&.K$K02K.0K
,.K	'@'BK#$"6"8Kr4   r  )3samba.getoptgetoptr   rq   loggingr   r   rM   
samba.authr   samba.netcmdr   r   r   r	   samba.netcmd.commonr
   samba.samdbr   sambar   r   r   samba.dcerpcr   r   
samba.joinr   r   samba.uptodatenessr   r   r   r   r   samba.commonr   r   r   r-   r3   r@   r   rC   r  r  rM  r  r  r  r  r/   r4   r%   <module>r     s   ,  
    %  -  0 0 & !   $ 1JK7 $ [Jw [J|A' ABc[ c[L^G7 ^GB<Dg <D~+: +:\O&7 O&d
9l 
9r4   