
    g<                         S SK r S SKrS SK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  S rS rS	 rS
 rS rS rS rS rSS jrg)    N)
SCOPE_BASELdbError)nttime2unixdsdb)CommandError)SamDB)KCCc                    [        [        R                  " 5       5      n[        USS9nUR                  XU5        UR	                  5       n[        U5      n[        U5      [        U5      :w  a  [        S[        R                  S9  XF4$ )z>Get a readonly KCC object and the list of DSAs it knows about.T)readonlyzThere seem to be duplicate dsasfile)
inttimer	   
load_samdb	list_dsassetlenprintsysstderr)urllpcredsunix_nowkccdsa_listdsass          4/usr/lib/python3/dist-packages/samba/uptodateness.pyget_kcc_and_dsasr      sg    499;H
h
&CNN3E"}}Hx=D
4yCM!/cjjA9    c                     U R                  5       nU[        U R                  5       5      SU R                  5       -  SU-  SU-  S.n0 nUR                  5        H	  u  pEXCU'   M     X#4$ )zKGenerate dictionaries mapping short partition names to the
appropriate DNs.zCN=Schema,%szDC=DomainDnsZones,%szDC=ForestDnsZones,%s)DOMAINCONFIGURATIONSCHEMA	DNSDOMAIN	DNSFOREST)	domain_dnstrget_config_basednitems)samdbbase_dnshort_to_longlong_to_shortsls         r   get_partition_mapsr1   -   s{     ooGU4467 5#:#:#<<+g5+g5M M##%a & ''r    c                     Ub@  [        U 5      u  p#UR                  UR                  5       U5      nX;  a  [        SU-  5      eU$ )Nzunknown partition %s)r1   getupperr   )r+   partshort_partitionslong_partitionss       r   get_partitionr8   @   sL     ,>u,E)##DJJL$7&5<==Kr    c           	         / nU R                  5       n[        R                  " X5       H  n[        UR                  5      nU R                  USU-  SS/S9n [        US   S   S   5      nUR                  SS5      u  pUS	:w  a  [        S
U-  5      eUR                  U	U[        UR                  5      [        UR                  5      45        M     U$ ! [         a  n
 Sn
A
M  Sn
A
ff = f)z3This finds the uptodateness vector in the database.z)(&(invocationId=%s)(objectClass=nTDSDSA))distinguishedNameinvocationId)base
expressionattrsr   ,   NzCN=NTDS Settingsz!Expected NTDS Settings DN, got %s)r)   r   _dsdb_load_udv_v2r(   source_dsa_invocation_idsearchsplit
IndexErrorr   appendr   highest_usnr   last_sync_success)r+   dncursors	config_dncinv_idressettings_dnprefixdsa_dnes              r   get_utdvrS   K   s
   G'')I##E.Q//0ll	(@BH(I"5~!F  H	c!f%89!<=K(..sA6NF ''B* + , , 	AMM*#A$7$78: 	; /& N  		s   (C
C*%C*c                     U R                  S[        S/S9n[        US   S   S   5      n[        [        R                  " 5       5      nX#4$ )N highestCommittedUSN)r<   scoper>   r   )rC   r   r   r   )r+   rN   usnnows       r   get_own_cursorrZ   e   sS    
,,B'34  6C c!f*+A.
/C
diik
C:r    c           	      `   0 nU Hl  nU R                   R                  U[        S/S9nSUS   S   S   -  n [        XUS9n	[	        X5      n
[        U	5      u  pXk0nU
 H  u  pnnUX'   M     XU'   Mn     U$ ! [         a,  n[        SU< SU< S3[        R                  S	9   S nAM  S nAff = f)
NdNSHostName)rW   r>   z	ldap://%sr   )r   credentialsr   zCould not contact z ()r   )
r+   rC   r   r   rS   rZ   r   r   r   r   )	local_kccr   part_dnr   r   
utdv_edgesrQ   rN   ldap_urlr+   rJ   own_usnown_timeremotesrI   guidrX   trR   s                      r   get_utdv_edgesrh   n   s     Joo$$V+5,9? % < Q!6q!99
	hbAEu.G .u 5G'G$+ #q! %, %6! "   	1=zz#	s   6A77
B-!B((B-c                 ,   0 nU Hr  n X   U   n0 nXbU'   U H[  nXp;   a8  X0U   ;   a  X@U   U   -
  nXU'   M   [        SU SU 3[        R                  S9  M@  [        SU-  [        R                  S9  M]     Mt     U$ ! [          a  nSn S nAN~S nAff = f)Nr   zMissing dn z from UTD vector for dsa r   z"missing dn %s from UTD vector list)KeyErrorr   r   r   )	ra   r   	distancesdn1peakrR   ddn2dists	            r   get_utdv_distancesrq      s    I	?3'D #C S/)S/#"66D!cFKu,EcUK"zz+ :S@::'  $   	D	s   A==
BBBc                 |    SnU R                  5        H%  nUR                  5        H  n[        X5      nM     M'     U$ )Nr   )valuesmax)rk   max_distancevectordistances       r   get_utdv_max_distancerx      s<    L""$H|6L ( % r    c                    S=p#Sn/ nU R                  5        H6  u  pgUR                  5        H  u  pXh:w  d  M  UR                  U	5        M     M8     U(       a  UR                  5         US   n[        U5      n
U
S-  S:X  a$  U
S-  S-
  nX[   X[S-      -   S-  n[	        US5      nOU
S-
  S-  nX[   n[        U5      n[        U 5      [        U 5      S-
  -  nX-
  nUUUS.nU(       a  U Vs0 s H  oX   _M	     sn$ U$ s  snf )Nr   g           r@   g       @)maximummedianfailure)r*   rF   sortr   roundfloat)rk   filtersr|   r~   r}   rs   dn_outerrv   dn_innerrw   lengthindexexpected_lengthsummarykeys                  r   get_utdv_summaryr      s   GFF%OO-"(,,.H#h' #1 .
 *VA:?AIMEmf1Wo5s:F61%FaZ!OE]F6]Fi.C	NQ,>?!* G -45WcW\!W55 6s   ,C?)N)r   r   ldbr   r   sambar   r   samba.netcmdr   samba.samdbr   	samba.kccr	   r   r1   r8   rS   rZ   rh   rq   rx   r    r    r   <module>r      sI   (   $ # %  (&42.#r    