
    b                        d dl mZ d dlZ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mZmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZmZm Z m!Z!m"Z" d dl#m$Z$ d dlm%Z% d Z&d 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. G d de          Z/ G d de          Z0 G d  d!e          Z1 G d" d#e          Z2dS )$    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                     	 t          j        | j        | j        | j                  \  | _        | _        | _        dS # t          $ r}t          d| j        z  |          d}~ww xY w)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   s    JKTKdeheoqtqwy|  zC  LD  LDHc(#*G*G*G J J J83:EqIIIJs   8< 
A#AA#c                     	 t          d| j        z  t                      | j        | j                  | _        dS # t          $ r}t          d| j        z  |          d}~ww xY w)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-   <   sz    KkCJ6'5'7'7&)iCF< < <			  K K K9CJFJJJKs   6: 
A!AA!c                 *    | \  }}|dk    rdS d||fz  S )z*return "was successful" or an error stringr   zwas successfulzfailed, result %u (%s) )werrecodeestrings      r%   
drs_errmsgr3   F   s+    UGzz#ug&666    c                 $   |                      d          }|d         dk    s|d         dk    s|d         dk    rt          d| z            |d	                              d
          d	         }|d                              d
          d	         }||fS )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   s    cAt!!!QqT\%9%9QqTZ=O=O+g5666qTZZ__QFqTZZ__QD&>r4   classicc                   j   e Zd ZdZdZej        ej        ej        dZ	 e
ddddd	           e
d
dddd	           e
ddddd	           e
ddddd           e
ddddde           e
dddd           e
ddd           gZd!gZd" Zd# Zd$ Zd%d%d%d%ed&dfd'Zd( Zd) Zd* Zd+ Zd, Zd- Zd. Zd%S )/cmd_drs_showreplz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 relevent servers?pull_summaryz--notify-summarynotify_summaryzsHave we successfully notified all relevent servers of local changes, and did they say they successfully replicated?)rO   rP   rN   rM   z	--classiczprint local replication detailsrA   )rM   rN   rO   rP   defaultz-vz	--verbosez
Be verbose
store_truerM   rO   z--colorzUse colour output (yes|no|auto)no)rM   rT   DC?c           	          t          |j                  }|j        |t          |j                  t          |j                  |j        t          |j                  t          |j	                  dd}	 | j
                            d|z  t          j        g            n=# t          j        $ r+}|j        \  }}|t          j        k    rd|d<   n Y d}~nd}~ww xY w	 t#          |j	                  \  }}|d||d	<   n# t$          $ r Y nw xY w|S )
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_neighbourz cmd_drs_showrepl.parse_neighbour~   sI   Q233(,!.q~!>!>$.q/D$E$E$%$?)!.991.//	
 	
		J;#?$'N$&  ( ( ( ( | 	 	 	JUA..."&,  		.q/BCCNT6#'440AeHH 	 	 	D	s*   3*B C-!CC!C> >
D
Dc                    |                      d|d         z             d|v r|                      d|d         z             n|                      d|d         z             |                      d|d         z             |                      d	|d
         d|d                    |                      d|d         z             |                      d|d         z             |                      d           dS )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_neighbourz cmd_drs_showrepl.print_neighbour   s   TAgJ&'''A::LL!E(23333LL1Y<7888.3C1DDEEE15H3I3I3I345K3L3LN 	O 	O 	O5-./ 	0 	0 	0,q/@@AAARr4   c                      t          j                    }||_        	  j                              j        d|          \  }}n%# t
          $ r}t          d|z  |          d }~ww xY w fd|j        D             }|S )Nr   z"DsReplicaGetInfo of type %u failedc                 :    g | ]}                     |          S r/   )r|   ).0rw   rv   s     r%   
<listcomp>z3cmd_drs_showrepl.get_neighbours.<locals>.<listcomp>   s'    <<<A$$Q''<<<r4   )r   DsReplicaGetInfoRequest1	info_typeDsReplicaGetInfor   r!   r   array)rv   r   req1infor$   repss   `     r%   get_neighbourszcmd_drs_showrepl.get_neighbours   s    /11"	T $ = =#Q!. !.Y 	T 	T 	TCiOQRSSS	T =<<<<<<s   $A 
A$AA$NFc                    |                      |           |                                | _        |t          j        | j                  }|| _        |                    | j        d          | _        || _        | j	        | j
        | j        | j        | j        d                    |          }|t          d|z             |            S )NTfallback_machine)rQ   rS   rR   rL   rA   zunknown showrepl format %s)apply_colour_choiceget_loadparmr   r   netcmd_dnsnamer   get_credentialsr   verbosesummary_outputnotify_summary_outputpull_summary_outputjson_outputclassic_outputgetr   )	rv   DCrF   rH   rG   rJ   r   coloroutput_functions	            r%   runzcmd_drs_showrepl.run   s     	  '''((**:&tw//B--dg-MM
 *"8 4$*
 
 #f++ 	 ";fDEEE   r4   c                 r    |                                  }|d= |d= t          j        || j        d           d S )Nr?   r   r7   indent)get_local_repl_datarL   dumpoutf)rv   datas     r%   r   zcmd_drs_showrepl.json_output   s@    ''))LN	$	!,,,,,,r4   c                    g }g }|                                  }|dk    rA|d         D ]8}|d         r|d         dk    s|d         dk    r|                    |           9|dk    rA|d         D ]8}|d         r|d         dk    s|d         dk    r|                    |           9|s|r|                     t          j        d	                     |rA|                     t          j        d
                     |D ]}|                     |           |rA|                     t          j        d                     |D ]}|                     |           dS |                     t          j        d                     dS )zcPrint a short message if every seems fine, but print details of any
        links that seem broken.rR   repsTora   r^   r   r_   rS   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_handlerz'cmd_drs_showrepl.summary_output_handler   s    --//
N**!(+ / /|$ -.!33s>7Ja7O7O"))#...,,,!*- 1 1|$ -.!33s>7Ja7O7O$++C000 	- 	LL&EFFGGG .V\*IJJKKK) . .C((---- .V\*GHHIII+ . .C((----1V^L1122222r4   c                 ,    |                      d          S )NrQ   r   rv   s    r%   r   zcmd_drs_showrepl.summary_output   s    **9555r4   c                 ,    |                      d          S )NrS   r   r   s    r%   r   z&cmd_drs_showrepl.notify_summary_output   s    **+;<<<r4   c                 ,    |                      d          S )NrR   r   r   s    r%   r   z$cmd_drs_showrepl.pull_summary_output  s    **>:::r4   c                    t          |            t          |            | j                                        }t	          |          \  }}	 | j                            |t          j        g d          }n$# t          $ r}t          d|z            d }~ww xY wt          t          |d         dd                    t          | j                            d|d         d         d                             t          | j                            d|d         d         d                             d}| j                            |d	          }|                     t          j                  }|                     t          j                  }	g }
|D ]}t%          |d
         d                                       d          \  }}}t%          |d                   t%          |d
         d                   t          t          |dd                    t          t          |dd                                                    dk    d}|
                    |           	 | j                            |t          j        dg          }t%          |d         d         d                   |d<   nM# t          j        $ r)}|j        \  }}|t          j        k    rd|d<   Y d }~nd }~wt2          t4          f$ r Y nw xY wg |d<   |                    dg           D ]Z}t%          |                              d          }|d                             |d         t          |d                   f           [|||	|
||dS )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   z$cmd_drs_showrepl.get_local_repl_data  s   d *..00*733v	H:$$'OxOxOx$yyDD 	H 	H 	H<wFGGG	H <QA>>??$TZ%C%Cd1gl3A6&8 &8 9 9&tz'E'Ed1gn5a8(: (: ; ;	
 
 z  g:X YY&&w'PQQ$$W%KLL 	= 	=A&)!L/!*<&=&=&G&G&L&L#E3AfI <!344|Ay!<<==&|A7J)/(1 (1 2 227%''VD	 A """
#z00k7:~8E  1  H  H !$LOM$B1$E F F*< + + +V
C222&*AlOj)    "$AoUU5r:: = =FFLL%%/"))1Q4QqT*;<<<<=
  +
 
 	
s7   )A5 5
B?BBAJ((K27KK21K2c                    |                                  }|d         }|d         }|d         }|d         }|d         }|d         }|                     |d|           |                     d|d	         z             |                     d
|d         z             |                     d|d         z             |                     d           |D ]}|                     |           |                     d           |D ]}|                     |           g d}	|                     d           |D ]}
|                     d           |
                    d          r|                     d           |                     d|
d         z             |                     dt	          |
d                                                   z             |                     d|
                    d          z             |                     d|
d         z             |                     d           |                     d|
d	         z             |
d         rv|
d         D ]k\  }}|                     d |z             |                     d!|z             |	D ]3}t          t          |d"          |z  r|                     d#|z             4l|                     d$           d S )%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   zcmd_drs_showrepl.classic_outputC  s!   ''))5k
#h-.F|hvv.///*[-CCDDD*[-FFGGG-N0KKLLL4555 	$ 	$A  ####5666 	$ 	$A  ####	= 	= 	= 	9::: 	J 	JALL)))uu\"" IGHHHLL01V9<===LL03q|3D3D3J3J3L3LLMMMLL1AEE*4E4EEFFFLL1AkNBCCCLL1222LL.9=>>>! J"#O"4 9 9JBLL!7"!<===LL!5!>???$ 9 9"4A..7 9 LLa88899 HIIII)	J 	Jr4   )__name__
__module____qualname____doc__synopsisr   SambaOptionsVersionOptionsCredentialsOptionstakes_optiongroupsr   DEFAULT_SHOWREPL_FORMATtakes_options
takes_argsr|   r   r   r   r   r   r   r   r   r   r   r/   r4   r%   rC   rC   [   s       ""'H )-.  	xB]&	B 	B 	B{ #5])	E 	E 	E 	 (D].	J 	J 	J 	!-%H#	% 	% 	%
 	{!B]).	0 	0 	0 	t[|LIIIy@	 	 	%M, J  >  
 
 
 Tt*! ! ! !0- - -#3 #3 #3J6 6 6= = =; ; ;=
 =
 =
~6J 6J 6J 6J 6Jr4   rC   c                   R    e Zd ZdZdZej        ej        ej        dZ	dgZ
	 	 ddZdS )cmd_drs_kccz)Trigger knowledge consistency center run.rD   rE   rX   Nc                    |                                 | _        |t          j        | j                  }|| _        |                    | j        d          | _        t          |            t          j	                    }	 | j        
                    | j        d|           n"# t          $ r}t          d|          d }~ww xY w|                     d|z             d S )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   rF   rH   rG   r   r$   s          r%   r   zcmd_drs_kcc.run  s     ((**:&tw//B--dg-MM
$&&	9L%%d&91dCCCC 	9 	9 	94a888	9:R?@@@@@s    !B" "
C,B<<CNNNNr   r   r   r   r   r   r   r   r   r   r   r   r/   r4   r%   r   r   |  si        33'H )-.  J%)'+A A A A A Ar4   r   c                   8   e Zd ZdZdZej        ej        ej        dZ	g dZ
 eddd           ed	d
d           eddd           eddd           eddd           eddd           eddd           eddd          gZ	 	 	 ddZ	 	 	 ddZdS )cmd_drs_replicatez+Replicate a naming context between two DCs.z/%prog <destinationDC> <sourceDC> <NC> [options]rE   )DEST_DC	SOURCE_DCNCz	--add-refz&use ADD_REF to add to repsTo on sourcerU   rV   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)Fc           	      r   || _         t          |            t          t                      d| j        | j        d          | _        t          d| j         z  t                      | j        | j                  | _        | j                            dt          j
        dg          }|d         d         d         | _        | j                            | j        t          j
        d	g          }t          j        | j                            d	|d         d	         d                             | _        t          j        | j                                                  }t          j        | j                                                  }| j        }	t"          j        }
|rt"          j        }
d
}| j                                         t+          j        d| j         z  | j        | j        | j        |          }| j                                        }	 |                    |||	|||
|          \  }}n%# t2          $ r}t5          d|z  |          d}~ww xY w| j                                         |r(|                     d|||| j        j        fz             dS |                     d|||| j        j        fz             dS )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_replicatez%cmd_drs_replicate.drs_local_replicate  s   
   !n.>.>D-1ZDG'(* * * {T[8(6(8(8'+zdg? ? ?

 %%2S^-<,= & ? ?1vo.q1%%4<s~-9N & < <J**<+.q6,+?+BD DE E $(9TZ-I-I-K-K#L#L !%4+;+M+M+O+O!P!P#~( 	0DI
$$&&&&'>'L'+w'+z43C'=? ? ''))		B'+~~b6N6J;?@I;?BM (6 (O (O$[))  	B 	B 	B82=qAAA	B
%%''' 		1LL 9%y)*.00 1 1 1 1 1
 LL 9%y)*.00 1 1 1 1 1s   	H) )
I3IINc           	         || _         |                                | _        |                    | j        d          | _        |r|                     |||||           d S |	r/t          j        d| j                  }t          j                    }nt          |            | j        }| j
        }|
sd|_        t          |            | j                            | j                                        dt!          j        |          dt!          j        |          d	g 
          }t%          |          dk    rt'          d|z            |d         d         }| j                            |t           j        dddg          }t%          |          dk    rt'          d|z            |d         d         d         }t+          t-          |dd                    }d}|t.          j        z  s|t          j        z  }|r|t          j        z  }|r|t          j        z  }|r|t          j        z  }|r|t          j        z  }|
r|t          j        z  }	 t?          j         |||||           n'# t>          j!        $ r}t'          d|          d }~ww xY w|
r| "                    d|d|d           d S | "                    d|d|d           d S )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  rF   rH   rG   server_bindserver_bind_handlemsg	server_dnsource_dsa_guiddsa_optionsreq_optionsestrs                          r%   r   zcmd_drs_replicate.run  s0   
 ((**--dg-MM
 	$$Yi3@1< % > > > F 	5!//$'JJJK!%!3!5!5D!!!,K!%!4 	1*0K'd jTZ%A%A%C%C%Ci((((i((((,* ')	   * *
 s88q==<yHIIIF4L	jYc6H+b'3Y&?   A A s88q==AIMNNNa&.q1,sIq99::dGG 	8777K 	7766K 	;7::K 	8777K 	=7<<K 	8777K	='5GZ\^ijjjj% 	= 	= 	=5t<<<	= 	[LLL999gggVWWWWWLLLiiiQXQXQXYZZZZZs   I( (J7JJ)FFF)FFFFFFFFNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r4   r%   r  r    s       55@H )-.  0//J 	{!IR^___%S\hiii|"JS_```}#7MMMyjs  	A  	A  	A  'H  Q]  	^  	^  	^|"D\ZZZ   (F  O[  	\  	\  	\	M <A*/(-D1 D1 D1 D1N INKP7;E[ E[ E[ E[ E[ E[r4   r  c                   R    e Zd ZdZdZej        ej        ej        dZ	dgZ
	 	 ddZdS )cmd_drs_bindz"Show DRS capabilities of a server.rD   rE   rX   Nc           
         |                                 | _        |t          j        | j                  }|| _        |                    | j        d          | _        t          |            t          j	                    }d|_
        t          j                    |_        | j                            t          j        t          j                  |          \  }}g d}g d}	|                     d|z             |                     d           |D ]O\  }
}t%          t          |
d          }|j        j        |z  rd	}nd
}|                     d|
dd|d|d           Pt)          |j        t          j                  rg|                     d           |	D ]O\  }
}t%          t          |
d          }|j        j        |z  rd	}nd
}|                     d|
dd|d|d           P|                     d|j        j        z             |                     d|j        j        z             t)          |j        t          j                  r$|                     d|j        j        z             d S d S )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   rF   rH   rG   	bind_infor   handleoptmap
optmap_extoptrh   optvalyesnos                 r%   r   zcmd_drs_bind.runP  s    ((**:&tw//B--dg-MM
)++		 -//	,,TYw7S-T-TV_``v#
 #
 #
JP P P

 	,r1222,---  	A 	AJS#Wc1--Fy-6 LLLssssEEE333?@@@@di!566 	ELL;<<<( E E
c #q1195> "!EE!E3333sssCDDDD&)<<===%	(<<===di!566 	GLL*TY-EEFFFFF	G 	Gr4   r   r   r/   r4   r%   rA  rA  C  so        ,,'H )-.  J%)'+QG QG QG QG QG QGr4   rA  c                       e Zd ZdZdZej        ej        ej        dZ	dgZ
 edddd	          gZd
ddddZ	 	 ddZdS )cmd_drs_optionszJQuery or change 'options' for NTDS Settings object of a Domain Controller.rD   rE   rX   z--dsa-optionzDSA option to enable/disablerh   za{+|-}IS_GC | {+|-}DISABLE_INBOUND_REPL | {+|-}DISABLE_OUTBOUND_REPL | {+|-}DISABLE_NTDSCONN_XLATE)rM   typemetavarr   r7   r8      )IS_GCDISABLE_INBOUND_REPLDISABLE_OUTBOUND_REPLDISABLE_NTDSCONN_XLATENc                     |                                  _        |t          j         j                  }| _        |                     j        d           _        t                       j        	                                } j        
                    |t          j        dg          }t          |d         d         d                    fd j        D             }                     dd                    |          z              |rB|d d	         d
vrt#          d|z            |d	d          }	|	 j                                        vrt#          d|z            |d d	         dk    r j        |	         z  n j        |	          z  t          j                    }
t          j         j        |          |
_        t          j        t/                    t          j        d          |
d<    j                            |
            fd j        D             }                     dd                    |          z              d S d S )NTr   r   rb   r   c                 4    g | ]}j         |         z  |S r/   
option_mapr   xdsa_optsrv   s     r%   r   z'cmd_drs_options.run.<locals>.<listcomp>  s*    PPP!$/!2Dx2OPAPPPr4   zCurrent DSA options: z, r   )+-zUnknown option %sr  c                 4    g | ]}j         |         z  |S r/   r  r  s     r%   r   z'cmd_drs_options.run.<locals>.<listcomp>  s*    TTTadoa6H86STTTTr4   zNew DSA options: )r   r   r   r   r   r   r   r-   r,   r   rp   rq   rr   r   r  r   joinr   keysMessageDnr#  MessageElementrh   FLAG_MOD_REPLACEmodify)rv   r   
dsa_optionrF   rH   rG   r=   r  cur_optsflagmr  s   `          @r%   r   zcmd_drs_options.run  sF    ((**:&tw//B--dg-MM
d*..00jWCN9+VVs1vi(+,, QPPPPtPPP,tyy/B/BBCCC  	D"1"~Z//"#6#CDDDabb>D4?//1111"#6#CDDD"1"~$$DOD11T_T222A6$*g..AD-c(mmS=QS\]]AiLJa   TTTTT4?TTTHLL,tyy/B/BBCCCCC#	D 	Dr4   )NNNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r/   r4   r%   r  r    s        TT'H )-.  J 	~$Bz	| 	| 	|M
 &*4+5,68 8J
 '+7;%D %D %D %D %D %Dr4   r  c                      e Zd ZdZdZej        ej        ej        dZ	 e
dde           e
dde           e
d	d
dd           e
ddd           e
dddddgd e            z             e
dddd          gZdgZ	 	 	 	 d dZdS )!cmd_drs_clone_dc_databasez9Replicate an initial clone of domain, but DO NOT JOIN it.z%prog <dnsdomain> [options]rE   z--serverz
DC to join)rM   r  z--targetdirz#where to store provision (required)z-qz--quietzBe quietrU   rV   z--include-secretszAlso replicate secret valuesz--backend-storechoiceBACKENDSTOREtdbmdbz7Specify the database backend to be used (default is %s))r  r  choicesrM   z--backend-store-sizebytesSIZEzeSpecify the size of the backend database, currentlyonly supported by lmdb backends (default is 8 Gb).)r  r  rM   domainNFc                     |                                 }|                    |          }|                     ||          }|t          d          t	          |||||d||	|
|
  
         d S )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  rF   rH   rG   r   r  r  r   r  r  r  r   r   r  s                  r%   r   zcmd_drs_clone_dc_database.run  s     ##%%((,,>>EFFF&u .>&!.&8		: 	: 	: 	: 	: 	:r4   )
NNNNNFFFNN)r   r   r   r   r   r   r   r   r   r   r   rh   r   r   r   r   r/   r4   r%   r  r    s*       CC,H )-.  	z3777}#HsSSStYZEEE")GP\]]] xu~&(A(A(C(CD	E 	E 	E 	%GVI	J 	J 	JM J37598=37: : : : : :r4   r  c            
           e Zd ZdZdZej        ej        ej        dZ	 e
ddddd	           e
d
dd           e
ddd           e
ddd           e
ddd           e
ddd          gZd Zd Z	 	 	 	 ddZdS )cmd_drs_uptodatenesszShow uptodateness statusz%prog [options]rE   z-Hz--URLURLHz%LDB URL for database or target server)r  rN   rM   z-pz--partitionzrestrict to this partition)rM   rI   rU   zPrint data in json format)rO   rM   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                 .    t          j        |d          S )Nr7   r   )rL   dumps)rv   partitions_summariess     r%   format_as_jsonz#cmd_drs_uptodateness.format_as_json+  s    z.q9999r4   c                     g }|                                 D ]S\  }}d |                                 D             }|ddd                    |          }|                    |           Td                    |          S )Nc                 "    g | ]\  }}|d |S )r  r/   )r   kvs      r%   r   z7cmd_drs_uptodateness.format_as_text.<locals>.<listcomp>1  s'    CCC41aAA&CCCr4   15r~   r  
)itemsr  r   )rv   r  lines	part_namerQ   r  lines          r%   format_as_textz#cmd_drs_uptodateness.format_as_text.  s    "6"<"<">"> 	 	IwCC7==??CCCE!*DIIe,<,<,<=DLLyyr4   NFc                    |                                 }|                    |d          }t          |||          \  }}|j        }t	          |          \  }}|r#||v r||         }||i}nt          d|z            g }|r|                    d           |r|                    d           i }i }|                                D ]C\  }}t          |||||          }t          ||          }t          ||          }|||<   |||<   D|r|                     |          }n-|r|                     |          }n|                     |          }t          || j                   d S )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   rL   r  r  fullrF   rH   rG   r  r   r   r   	local_kccdsasr,   short_partitionsr{   part_dnr  partitions_distancesr  r  
utdv_edges	distancesrQ   outputs                               r%   r   zcmd_drs_uptodateness.run6  s   
 ##%%((d(CC*1b%88	4077! 	G,,,*95$-w#7  "#9I#EFFF 	&NN9%%% 	%NN8$$$!!"2"8"8":": 	6 	6Iw'	4"eLLJ*:t<<I&y'BBBG.7 +.5 ++ 	C(()=>>FF C,,-ABB,,-ABBf49%%%%%%r4   )NNFFFFNNNFF)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 	2 	2x/	1 	1 	1{<9	; 	; 	;z,8	: 	: 	:x6	8 	8 	8M: : :      %):?7;!&*& *& *& *& *& *&r4   r  c                       e Zd ZdZi Z e            ed<    e            ed<    e            ed<    e            ed<    e	            ed<    e
            ed<    e            ed<   d	S )
cmd_drsz0Directory Replication Services (DRS) management.bindkccr  showreplr   zclone-dc-databaseuptodatenessN)r   r   r   r   subcommandsrA  r   r  rC   r  r  r  r/   r4   r%   r  r  c  s        ::K&,..K$K0022K..00K
,_..K	'@'@'B'BK#$"6"6"8"8Kr4   r  )3samba.getoptgetoptr   rq   loggingr   r   rL   
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  rA  r  r  r  r  r/   r4   r%   <module>r     ss  ,       



         % % % % % %            - , , , , ,       0 0 0 0 0 0 0 0 0 0 & & & & & & & & ! ! ! ! ! !                    $ # # # # # 1 1 1 1 1 1J J JK K K7 7 7   $ ^J ^J ^J ^J ^Jw ^J ^J ^JB	A A A A A' A A ABc[ c[ c[ c[ c[ c[ c[ c[L^G ^G ^G ^G ^G7 ^G ^G ^GB<D <D <D <D <Dg <D <D <D~+: +: +: +: +: +: +: +:\O& O& O& O& O&7 O& O& O&d
9 
9 
9 
9 
9l 
9 
9 
9 
9 
9r4   