ó
    cÛ–i<  ã                   ó’   • 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   € ä”4—9’9“;Ó€HÜ
ˆh Ñ
&€CØ‡N�N�3˜EÔ"à�}‰}‹€HÜˆx‹=€DÜ
ˆ4ƒy”C˜“MÓ!ÜÐ/´c·j±jÒ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{   € ð �o‰oÓ€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Ñ)ÐØ×#Ñ# D§J¡J£L°$Ó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  p‰U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ˆØ�l‰l 	ð(@ØBHñ(Ià"5°~Ð!Fð ð Hˆð	Ü˜c !™fÐ%8Ñ9¸!Ñ<Ó=ˆKØ(×.Ñ.¨s°AÓ6‰NˆFð Ð'Ó'ÜÐBØ*ñ +ó ,ð ,ð 	�‰˜ØÜ˜AŸM™MÓ*Ü# 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ð ð 6€Cô ˆc�!‰fÐ*Ñ+¨AÑ.Ó
/€CÜ
Œd�iŠi‹kÓ
€CØˆ:Ðr    c           	      ó`  • 0 nU Hl  nU R                   R                  U[        S/S9nSUS   S   S   -  n [        X„US9n	[	        X’5      n
[        U	5      u  p¼Xk0nU
 H  u  pïnnUXÞ'   M     XÕU'   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ÛˆØ�o‰o×$Ñ$ VÜ+5Ø,9¨?ð %ð <ˆð   Q¡¨Ñ!6°qÑ!9Ñ9ˆð
	Ü˜h¸bÑAˆEÜ˜uÓ.ˆGÜ .¨uÓ 5ÑˆGØÐ'ˆGÛ$+Ñ �˜#˜qØ!�“ñ %,ð %�6Óñ! ð" Ðøô ó 	Ý³»1Ð=Ü—z‘zò#åûð	ú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X†U'   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Ñ6�DØ!�c“Fä˜K¨ uÐ,EÀcÀUÐKÜ"Ÿz™zô+ô Ð:¸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Ü˜|Ó6ŠLó (ñ %ð Ðr    c                 ó  • S=p#Sn/ nU R                  5        H6  u  pgUR                  5        H  u  p‰Xh: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  oîXÞ   _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à%ŸO™OÖ-ÑˆØ"(§,¡,¦.ÑˆHØÕ#Ø—‘˜hÖ'ó #1ñ .ö
 Ø�‰ŒØ˜‘*ˆÜ�V“ˆØ�A‰:˜‹?Ø˜A‘I ‘MˆEØ‘m f°1©W¡oÑ5°sÑ:ˆFÜ˜6 1Ó%‰Fà˜a‘Z !‘OˆEØ‘]ˆFÜ˜6“]ˆFä˜i›.¬C°	«N¸QÑ,>Ñ?ˆØ!Ñ*ˆð ØØñ€Gö Ù-4Ó5ªW c�W‘\Ò!©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    