ó
    cÛ–i`š  ã                   ó  • S SK r S SKrS SKrS SKrS SKJr  S SK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JrJr  \R,                  " S5      r " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      rg)é    N)ÚLdb)Ú
ndr_unpack)Úsecurity)ÚSCOPE_SUBTREEÚSCOPE_ONELEVELÚ
SCOPE_BASEÚERR_NO_SUCH_OBJECTÚLdbError)ÚCommandÚCommandErrorÚOptionz^([^;]+);range=(\d+)-(\d+|\*)$c                   ó˜   • \ rS rSrSSSSSSSS\R
                  \R                  S4S jrS rS	 r	S
 r
S rS rS rS rS rS rS rSrg)ÚLDAPBaseé+   FÚsectionÚ ÚSUBTc                 ó²  • / nUnSU;  a/  [         R                  R                  U5      (       a  SU-  nOSU-  nUR                  5       R	                  S5      (       a  S/nXÀl        XÐl        [        UUUUS9U l        X l	        X°l
        X@l        XPl        X`l        Xpl        X�l        X€l        Xl        Xàl        ['        U R                  R)                  5       5      U l        ['        U R                  R-                  5       5      U l        ['        U R                  R1                  5       5      U l        ['        U R                  R5                  5       5      U l        U R9                  5       U l        U R=                  5       U l        [@        RB                  " SSU R*                  5      RE                  S	S
5      U l#        U RI                  5       U l%        U RM                  5         U R                  (       aç  U R                  (       dÕ  U R
                  RO                  SU R"                  -  5        U R
                  RO                  SSU R*                  -  -   5        U R
                  RO                  SSU R:                  -  -   5        U R
                  RO                  SSU R>                  -  -   5        U R
                  RO                  SSU RF                  -  -   5        g g g )Nz://ztdb://%sz	ldap://%szldap://zmodules:paged_searches)ÚurlÚcredentialsÚlpÚoptionsz	[Dd][Cc]=r   Ú,Ú.z
* Place-holders for %s:
ú    z${DOMAIN_DN}      => %s
z${DOMAIN_NETBIOS} => %s
z${SERVER_NAME}     => %s
z${DOMAIN_NAME}    => %s
)(ÚosÚpathÚisfileÚlowerÚ
startswithÚoutfÚerrfr   ÚldbÚsearch_baseÚsearch_scopeÚtwo_domainsÚquietÚ
descriptorÚ	sort_acesÚviewÚverboseÚhostÚskip_missing_dnÚstrÚget_default_basednÚbase_dnÚget_root_basednÚroot_dnÚget_config_basednÚ	config_dnÚget_schema_basednÚ	schema_dnÚfind_netbiosÚdomain_netbiosÚfind_serversÚserver_namesÚreÚsubÚreplaceÚdomain_nameÚfind_domain_sidÚ
domain_sidÚget_sid_mapÚwrite)Úselfr,   Úcredsr   Útwor'   r(   r)   r+   r*   ÚbaseÚscoper!   r"   r-   Úldb_optionsÚ	samdb_urls                    Ú6/usr/lib/python3/dist-packages/samba/netcmd/ldapcmp.pyÚ__init__ÚLDAPBase.__init__-   sO  € ð ˆØˆ	Ø˜ÓÜ�w‰w�~‰~˜d×#Ñ#Ø&¨Ñ-‘	à'¨$Ñ.�	à�?‰?Ó×'Ñ'¨	×2Ñ2Ø3Ð4ˆKØŒ	ØŒ	Ü˜9Ø#(ØØ*ñ,ˆŒð  ÔØ!ÔØÔØŒ
Ø$ŒØ"ŒØŒ	ØŒØŒ	Ø.ÔÜ˜4Ÿ8™8×6Ñ6Ó8Ó9ˆŒÜ˜4Ÿ8™8×3Ñ3Ó5Ó6ˆŒÜ˜TŸX™X×7Ñ7Ó9Ó:ˆŒÜ˜TŸX™X×7Ñ7Ó9Ó:ˆŒØ"×/Ñ/Ó1ˆÔØ ×-Ñ-Ó/ˆÔÜŸ6š6 +¨r°4·<±<Ó@×HÑHÈÈcÓRˆÔØ×.Ñ.Ó0ˆŒØ×ÑÔð ×× D§J§JØ�I‰I�O‰OÐ9¸D¿I¹IÑEÔFØ�I‰I�O‰O˜GÐ&AØ ŸL™Lñ')ñ )ô *à�I‰I�O‰O˜GÐ&AØ ×/Ñ/ñ'0ñ 0ô 1à�I‰I�O‰O˜GÐ&BØ ×-Ñ-ñ'.ñ .ô /à�I‰I�O‰O˜GÐ&AØ ×,Ñ,ñ'-ñ -õ .ð %/Ðó    c                 óš   • U R                   R                  U R                  S[        S9n[	        [
        R                  US   S   S   5      $ )Nz(objectClass=*))rF   Ú
expressionrG   r   Ú	objectSid)r#   Úsearchr0   r   r   r   Údom_sid©rC   Úress     rJ   r?   ÚLDAPBase.find_domain_sidb   sA   € Ø�h‰h�o‰o 4§<¡<Ð<MÔU_ˆoÐ`ˆÜœ(×*Ñ*¨C°©F°;Ñ,?ÀÑ,BÓCÐCrM   c                 óÎ   • U R                   R                  SU R                  -  [        SS/S9n[	        U5      S:”  d   eU Vs/ s H  n[        US   S   5      PM     sn$ s  snf )z	
        zOU=Domain Controllers,%sz(objectClass=computer)Úcn)rF   rG   rO   Úattrsr   )r#   rQ   r0   r   Úlenr.   )rC   rT   Úxs      rJ   r9   ÚLDAPBase.find_serversf   sh   € ð �h‰h�o‰oÐ#=ÀÇÁÑ#LÜ$1Ð>VÐ_cÐ^dð ð fˆä�3‹x˜!‹|Ðˆ|Ù),Ó-ª A”�A�d‘G˜A‘J–©Ñ-Ð-ùÒ-s   ÁA"c                 ó:  •  U R                   R                  SU R                  -  [        S/S9n[        W5      S:X  a  [        S5      eU H!  nSU;   d  M  US   S   R                  5       s  $    g ! [         a  nUu  p4US;   a  [        XB5      e S nANfS nAff = f)NzCN=Partitions,%sÚnETBIOSName©rF   rG   rX   )z,Operation unavailable without authenticationr   zCould not find netbios name)r#   rQ   r4   r   r
   r   rY   Údecode)rC   rT   ÚeÚenumÚestrrZ   s         rJ   r7   ÚLDAPBase.find_netbiosn   s©   € ð	,Ø—(‘(—/‘/Ð'9¸D¿N¹NÑ'JÜ(5¸m¸_ð "ð NˆCô ˆs‹8�q‹=ÜÐ<Ó=Ð=ãˆAØ Õ!Ø˜Ñ'¨Ñ*×1Ñ1Ó3Ò3ò øô ó 	,Ø‰JˆDØÐGÓGÜ" 4Ó+Ð+ô Hûð	,ús   ‚-A1 Á1
BÁ;BÂBc                 óÀ   • S n U R                   R                  U[        S9n[        U5      S:H  $ ! [         a#  nUR                  u  pEU[
        :X  a   S nAge S nAff = f)N)rF   rG   Fé   )r#   rQ   r   r
   Úargsr	   rY   )rC   Ú	object_dnrT   Úe2ra   rb   s         rJ   Úobject_existsÚLDAPBase.object_exists~   s^   € Øˆð	Ø—(‘(—/‘/ y¼
�/ÐCˆCô �3‹x˜1‰}Ðøô ó 	ØŸ7™7‰LˆTØÔ)Ó)ÜØûð		ús   „0 °
AºAÁAÁAc                 ó    •  U R                   R                  U5        g ! [        R                   a  nS[	        U5      ;   d   e S nAg S nAff = f)NzNo such object)r#   Údeleter   r
   r.   )rC   rg   r`   s      rJ   Údelete_forceÚLDAPBase.delete_force‰   s=   € ð	.Ø�H‰H�O‰O˜IÕ&øÜ�|‰|ó 	.Ø#¤s¨1£vÓ-Ð-Õ-ûð	.ús   ‚ žA²AÁAc                 óX   • [         R                  U5      nUc  U$ UR                  S5      $ )zTReturns the real attribute name
It resolved ranged results e.g. member;range=0-1499
re   )ÚRE_RANGED_RESULTÚmatchÚgroup)rC   ÚkeyÚms      rJ   Úget_attribute_nameÚLDAPBase.get_attribute_name�   s,   € ô
 ×"Ñ" 3Ó'ˆØ‰9ØˆJà�w‰w�q‹zÐrM   c                 óœ  • [         R                  U5      nUc  U$ UR                  S5      n[        UR                  S5      5      n SXVS-   4-  nU R                  R                  U[        U/S9n[        U5      S:X  d   e[        US   5      nUS	 Sn	Sn
U HC  n[         R                  U5      nUc  M  UR                  S5      U:w  a  M4  Un	[        X‚   5      n
  O   U	c   U$ UR                  U
5        U	R                  S5      S:X  a   U$ [        U	R                  S	5      5      US-   :X  d   e[        U	R                  S5      5      nGM  )
z[Returns list with all attribute values
It resolved ranged results e.g. member;range=0-1499
Nre   é   z%s;range=%d-*r^   r   ÚdnÚ*é   )rp   rq   rr   Úintr#   rQ   r   rY   ÚdictÚlistÚextend)rC   rg   rs   Úvalsrt   ÚattrÚhiÚnrT   ÚfmÚfvalss              rJ   Úget_attribute_valuesÚLDAPBase.get_attribute_valuesš   sS  € ô
 ×"Ñ" 3Ó'ˆØ‰9àˆKà�w‰w�q‹zˆÜ�—‘˜“‹_ˆð à 4¨a© .Ñ0ˆAØ—(‘(—/‘/ y¼
È1È#�/ÐNˆCÜ�s“8˜q“=Ð �=Ü�s˜1‘v“,ˆCØ�D�	àˆBØˆEã�Ü$×*Ñ*¨3Ó/�à‘9Ùà—7‘7˜1“: Ó%Ùà�Ü˜S™X›�Ùñ ð ‰zØð ˆð �K‰K˜ÔØ�x‰x˜‹{˜cÓ!àð
 ˆô �r—x‘x “{Ó# r¨A¡vÓ-Ð-Ð-Ü�R—X‘X˜a“[Ó!ˆBòC rM   c                 ó   • U R                   R                  U[        S/S9n[        U5      S:X  d   e[	        US   5      nUS	 0 nUR                  5        H5  u  pEU R                  U5      n[        U5      nU R                  XU5      X6'   M7     U$ )z9Returns dict with all default visible attributes
        rz   r^   re   r   ry   )	r#   rQ   r   rY   r}   Úitemsru   Úsortedr†   )rC   rg   rT   Ú
attributesrs   r€   Únames          rJ   Úget_attributesÚLDAPBase.get_attributesÎ   s�   € ð �h‰h�o‰o 9´JÀsÀeˆoÐLˆÜ�3‹x˜1‹}Ðˆ}Ü�3�q‘6‹lˆà�ˆIàˆ
ØŸ™ž‰IˆCØ×*Ñ*¨3Ó/ˆDä˜$“<ˆDØ#×8Ñ8¸ÈÓNˆJÓñ	 %ð ÐrM   c                 óÂ   • U R                   R                  U[        S/S9nUS   S   S   n[        [        R
                  U5      nUR                  U R                  5      $ )NÚnTSecurityDescriptorr^   r   )r#   rQ   r   r   r   r(   Úas_sddlr@   )rC   rg   rT   Údescs       rJ   Úget_descriptor_sddlÚLDAPBase.get_descriptor_sddlà   sW   € Ø�h‰h�o‰o 9´JÐG]ÐF^ˆoÐ_ˆØ�1‰vÐ,Ñ-¨aÑ0ˆÜœ(×-Ñ-¨tÓ4ˆØ�|‰|˜DŸO™OÓ,Ð,rM   c           	      ó  • 0 U l         U R                  R                  U R                  S[        SS/S9nU HC  n [        US   S   5      U R                   S[        [        R                  US   S   5      -  '   ME     g! [         a     MU  f = f)z`Build dictionary that maps GUID to 'name' attribute found in Schema or Extended-Rights.
        z(objectSid=*)rP   ÚsAMAccountName)rF   rO   rG   rX   r   ú%sN)
Úsid_mapr#   rQ   r0   r   r.   r   r   rR   ÚKeyError)rC   rT   Úitems      rJ   rA   ÚLDAPBase.get_sid_mapæ   s—   € ð ˆŒØ�h‰h�o‰o 4§<¡<Ø)8ÄÐVaÐcsÐUtð ð vˆãˆDðÜZ]Ð^bÐcsÑ^tÐuvÑ^wÓZx�—‘˜T¤J¬x×/?Ñ/?ÀÀkÑARÐSTÑAUÓ$VÑVÓWò øô ó Úðús   º?A>Á>
BÂB)r0   r4   r(   r>   r8   r@   r"   r,   r#   r!   r'   r2   r6   r$   r%   r:   r˜   r-   r)   r&   r+   r*   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚsysÚstdoutÚstderrrK   r?   r9   r7   ri   rm   ru   r†   r�   r“   rA   Ú__static_attributes__© rM   rJ   r   r   +   s`   † ð  %°EÀUÐTYØ b°Ø—j‘j s§z¡zÀ4ô3.òjDò.ò4ò 	ò.ò	ò2òhò$-õ
rM   r   c                   ób   • \ rS rSr\R
                  \R                  4S jrS rS r	S r
S rSrg)	Ú
Descriptoréó   c                 ó  • X0l         X@l        Xl        X l        U R                  R	                  U R                  5      U l        U R                  5       U l        U R                  R                  (       a  U R                  R                  5         g g ©N)
r!   r"   Úconry   r“   ÚsddlÚextract_daclÚ	dacl_listr)   Úsort)rC   Ú
connectionry   r!   r"   s        rJ   rK   ÚDescriptor.__init__ô   sb   € ØŒ	ØŒ	ØŒØŒØ—H‘H×0Ñ0°·±Ó9ˆŒ	Ø×*Ñ*Ó,ˆŒØ�8‰8××Ø�N‰N×ÑÕ!ð rM   c                 ó:  •  SU R                   ;   a1  [        R                  " SU R                   5      R                  S5      nO1[        R                  " SU R                   5      R                  S5      n [        R
                  " SU5      $ ! [         a    / s $ f = f)zGExtracts the DACL as a list of ACE string (with the brackets).
        zS:zD:(.*?)(\(.*?\))S:r{   zD:(.*?)(\(.*\))z	(\(.*?\)))r«   r;   rQ   rr   ÚAttributeErrorÚfindallrS   s     rJ   r¬   ÚDescriptor.extract_daclþ   s|   € ð	Ø�t—y‘yÓ Ü—i’iÐ 5°t·y±yÓA×GÑGÈÓJ‘ä—i’iÐ 2°D·I±IÓ>×DÑDÀQÓG‘ô �zŠz˜,¨Ó,Ð,øô ó 	ØŠIð	ús   ‚A B Á0B ÂBÂBc                 óê   • SU-  n[         R                  " SU5      n[        U5      S:X  a  U$ U H.  n U R                  R                  U   nUR                  XE5      nM0     U$ ! [         a     MA  f = f)Nr—   z	S-[-0-9]+r   )r;   r³   rY   rª   r˜   r=   r™   )rC   ÚacerT   ÚsidsÚsidrŒ   s         rJ   Úfix_sidÚDescriptor.fix_sid
  sw   € Ø�S‰jˆÜ�zŠz˜+ sÓ+ˆäˆt‹9˜‹>ØˆJÛˆCðØ—x‘x×'Ñ'¨Ñ,�Ø—k‘k #Ó,’ñ ð ˆ
øô ó âðús   ´*A$Á$
A2Á1A2c                 óf  • Sn[        U R                  5      [        UR                  5      :w  aA  US-  nUSS[        U R                  5      -  -   -  nUSS[        UR                  5      -  -   -  nSnSn S nS n SU R                  U   -  n SUR                  U   -  n[        U5      [        U5      -   S:X  a   XB4$ SU R                  U5      -  nSUR                  U5      -  nXx:w  a  X'<S S	U< S
3-  nSnOX'<S SU< S
3-  nUS-  nMš  ! [         a    Sn N‘f = f! [         a    Sn N�f = f)Nr   ú    Difference in ACE count:
ú        ú=> %s
r   Tr—   z>60z * Ú
Fz | re   )rY   r­   Ú
IndexErrorr¹   )	rC   ÚotherrT   ÚiÚflagÚself_aceÚ	other_aceÚself_ace_fixedÚother_ace_fixeds	            rJ   Údiff_1ÚDescriptor.diff_1  s[  € ØˆÜˆt�~‰~Ó¤# e§o¡oÓ"6Ó6ØÐ9Ñ9ˆCØ�7˜Y¬¨T¯^©^Ó)<Ñ<Ñ<Ñ<ˆCØ�7˜Y¬¨U¯_©_Ó)=Ñ=Ñ=Ñ=ˆCàˆØˆØØˆHØˆIðØ $§.¡.°Ñ"3Ñ3�ðØ  5§?¡?°1Ñ#5Ñ5�	ô �8‹}œs 9›~Ñ-°Ó2Øð ˆ{Ðð " D§L¡L°Ó$:Ñ:ˆNØ" U§]¡]°9Ó%=Ñ=ˆOØÓ0Ø«»ÐHÑH�Ø‘à«»ÐHÑH�Ø�‰FˆAñ+ øô
 ó Ø’ðûô
 ó Ø’	ðús$   Á:D ÂD! ÄDÄDÄ!D0Ä/D0c                 óà  • Sn[        U R                  5      [        UR                  5      :w  aA  US-  nUSS[        U R                  5      -  -   -  nUSS[        UR                  5      -  -   -  n/ n/ n/ nU R                   Vs/ s H  o`R                  U5      PM     nnUR                   Vs/ s H  oaR                  U5      PM     nnU H&  n UR                  U5        UR	                  U5        M(     [        U5      n[        U5      S:”  a3  USSU R                  R                  -  -   -  nU H  nUSU-   S-   -  nM     U H&  n UR                  U5        UR	                  U5        M(     [        U5      n[        U5      S:”  a3  USSUR                  R                  -  -   -  nU H  nUSU-   S-   -  nM     [        [        [        U5      5      5      nU R                  R                  (       a  US	-  nU H  nUSU-   S-   -  nM     U/ :H  =(       a    U/ :H  U4$ s  snf s  snf ! [
         a    UR	                  U5         GM}  f = f! [
         a    UR	                  U5         GM'  f = f)
Nr   r¼   r½   r¾   r   r   zACEs found only in %s:
r¿   z    ACEs found in both:
)rY   r­   r¹   ÚindexÚappendÚ
ValueErrorrŠ   rª   r,   r~   Úsetr+   )	rC   rÁ   rT   Úcommon_acesÚ	self_acesÚ
other_acesr¶   Úself_dacl_list_fixedÚother_dacl_list_fixeds	            rJ   Údiff_2ÚDescriptor.diff_2:  sf  € ØˆÜˆt�~‰~Ó¤# e§o¡oÓ"6Ó6ØÐ9Ñ9ˆCØ�7˜Y¬¨T¯^©^Ó)<Ñ<Ñ<Ñ<ˆCØ�7˜Y¬¨U¯_©_Ó)=Ñ=Ñ=Ñ=ˆCàˆØˆ	Øˆ
Ø=A¿^º^ÓLº^°c§¡¨SÖ 1¹^ÐÐLØ?D¿ºÓ Oº¸§¡¨sÖ!3¹ÐÐ OÛ'ˆCð(Ø%×+Ñ+¨CÔ0ð ×"Ñ" 3Ö'ñ (ô ˜9Ó%ˆ	Üˆy‹>˜AÓØ�7Ð7¸$¿(¹(¿-¹-ÑGÑGÑGˆCÛ �Ø�w ‘} tÑ+Ñ+’ñ !ó )ˆCð(Ø$×*Ñ*¨3Ô/ð ×"Ñ" 3Ö'ñ )ô ˜JÓ'ˆ
Üˆz‹?˜QÓØ�7Ð7¸%¿)¹)¿.¹.ÑHÑHÑHˆCÛ!�Ø�w ‘} tÑ+Ñ+’ñ "ô œT¤# kÓ"2Ó3Ó4ˆØ�8‰8××ØÐ4Ñ4ˆCÛ"�Ø�w ‘} tÑ+Ñ+’ñ #à˜R‘×4 J°"Ñ$4°cÐ:Ð:ùòC  MùÚ Oøô ó &Ø× Ñ  ×%Ð%ð&ûô ó 'Ø×!Ñ! #×&Ð&ð'ús0   ÂH Â.H%ÃH*Å	IÈ*I
É	I
ÉI-É,I-)rª   r­   ry   r"   r!   r«   N)rœ   r�   rž   rŸ   r    r¡   r¢   rK   r¬   r¹   rÈ   rÔ   r£   r¤   rM   rJ   r¦   r¦   ó   s)   † Ø,/¯J©J¸S¿Z¹Zô "ò
-òòõB+;rM   r¦   c                   óz   • \ rS rSr\R
                  \R                  4S jrS rS r	S r
S rS rS rS	 rS
 rSrg)Ú
LDAPObjectih  c                 ó~  • XPl         X`l        Xl        U R                  R                  U l        U R                  R                  U l        U R                  R
                  U l        X0l        UR                  SU R                  R                  5      U l	        U R                  R                  SSU R                  R                  -  5      U l	        U R                  R                   H'  nU R                  R                  SSU-  5      U l	        M)     U R                  R                  U R                  5      U l        / SQU l        U R                  U l        U =R                  S/-  sl        U(       a  U =R                  U-  sl        / U l        / U l        / U l        / U l        / U l        U R                  (       Ga/  U =R                  / SQ-  sl        / SQU l        U R                    Vs/ s H  owR+                  5       PM     snU l        / S	QU l        U R"                   Vs/ s H  owR+                  5       PM     snU l        / S
QU l        U R$                   Vs/ s H  owR+                  5       PM     snU l        / SQU l        U R&                   Vs/ s H  owR+                  5       PM     snU l        SS/U l        U R(                   Vs/ s H  owR+                  5       PM     snU l        [-        U R                   Vs/ s H  owR+                  5       PM     sn5      U l        g s  snf s  snf s  snf s  snf s  snf s  snf )Nú${DOMAIN_DN}úCN=${DOMAIN_NETBIOS}úCN=%súCN=${SERVER_NAME}) ÚbadPasswordTimeÚbadPwdCountÚdSCorePropagationDataÚ
lastLogoffÚ	lastLogonÚ
logonCountÚmodifiedCountzmsDS-Cached-Membershipz!msDS-Cached-Membership-Time-StampzmsDS-EnabledFeatureBLzmsDS-ExecuteScriptPasswordzmsDS-NcTypezmsDS-ReplicationEpochzmsDS-RetiredReplNCSignatureszmsDS-USNLastSyncSuccessÚpartialAttributeDeletionListÚpartialAttributeSetÚpekListÚ	prefixMapÚreplPropertyMetaDataÚreplUpToDateVectorÚrepsFromÚrepsToÚ
rIDNextRIDÚrIDPreviousAllocationPoolÚschemaUpdateÚserverStateÚsubRefsÚ
uSNChangedÚ
uSNCreatedÚuSNLastObjRemÚwhenChangedÚmsExchServer1HighestUSN)$ÚobjectCategoryÚ
objectGUIDrP   ÚwhenCreatedrô   Ú
pwdLastSetrò   ÚcreationTimerã   ÚpriorSetTimeÚrIDManagerReferenceÚgPLinkÚipsecNFAReferenceÚfRSPrimaryMemberÚfSMORoleOwnerÚ
masteredByÚipsecOwnersReferenceÚwellKnownObjectsÚotherWellKnownObjectsrÞ   ÚipsecISAKMPReferenceÚipsecFilterReferencezmsDs-masteredByÚlastSetTimeÚipsecNegotiationPolicyReferencerð   ÚgPCFileSysPathÚaccountExpiresÚinvocationIdÚoperatingSystemÚoperatingSystemVersionÚoEMInformationÚ
schemaInfoÚtargetAddressÚmsExchMailboxGuidÚsiteFolderGUID)&ÚdistinguishedNameÚdefaultObjectCategoryÚmemberÚmemberOfÚsiteListÚnCNameÚhomeMDBÚhomeMTAÚinterSiteTopologyGeneratorÚserverReferencezmsDS-HasInstantiatedNCsÚhasMasterNCszmsDS-hasMasterNCszmsDS-HasDomainNCsÚdMDLocationúmsDS-IsDomainForÚrIDSetReferencesÚserverReferenceBLÚmsExchHomeRoutingGroupÚmsExchResponsibleMTAServerÚsiteFolderServerÚmsExchRoutingMasterDNÚmsExchRoutingGroupMembersBLÚ	homeMDBBLÚmsExchHomePublicMDBÚmsExchOwningServerÚtemplateRootsÚaddressBookRootsÚmsExchPolicyRootsÚglobalAddressListÚmsExchOwningPFTreeÚmsExchResponsibleMTAServerBLÚmsExchOwningPFTreeBLz$msDS-MembersOfResourcePropertyListBLzmsDS-ValueTypeReferencez"msDS-MembersOfResourcePropertyListzmsDS-ValueTypeReferenceBLzmsDS-ClaimTypeAppliesToClass)ÚproxyAddressesÚmailÚuserPrincipalNameÚ"msExchSmtpFullyQualifiedDomainNameÚdnsHostNameÚnetworkAddressÚdnsRootÚservicePrincipalName)r  rŒ   ÚCNr–   ÚdNSHostNamer8  r   r  r!  r  r  )r8  r9  r  r]   rŒ   rŒ   ÚDC)r!   r"   rª   r&   r'   r+   Úsummaryr=   r0   ry   r8   r:   r�   r‹   Únon_replicated_attributesÚignore_attributesÚdn_attributesÚdomain_attributesÚservername_attributesÚnetbios_attributesÚother_attributesÚupperrÎ   )rC   r¯   ry   r<  Úfilter_listr!   r"   rZ   s           rJ   rK   ÚLDAPObject.__init__i  s™  € àŒ	ØŒ	ØŒØŸ8™8×/Ñ/ˆÔØ—X‘X—^‘^ˆŒ
Ø—x‘x×'Ñ'ˆŒØŒØ—*‘*˜^¨T¯X©X×-=Ñ-=Ó>ˆŒØ—'‘'—/‘/Ð"8¸'ÀDÇHÁH×D[ÑD[Ñ:[Ó\ˆŒØ—‘×&Ô&ˆAØ—g‘g—o‘oÐ&9¸7ÀQ¹;ÓGˆDŽGñ 'àŸ(™(×1Ñ1°$·'±'Ó:ˆŒò#*
ˆÔ&ðH "&×!?Ñ!?ˆÔØ×ÒÐ#<Ð"=Ñ=ÕÞØ×"Ò" kÑ1Õ"àˆÔØ!#ˆÔØ%'ˆÔ"Ø"$ˆÔØ "ˆÔð ××ÐØ×"Ò"ò 'Hñ HÕ"ò""ˆDÔð" 6:×5GÒ5GÓ!HÒ5G°§'¡'¦)Ñ5GÑ!HˆDÔò&VˆDÔ"ð :>×9OÒ9OÓ%PÒ9O°A§g¡g¦iÑ9OÑ%PˆDÔ"ò*^ˆDÔ&ð >B×=WÒ=WÓ)XÒ=W¸¯'©'®)Ñ=WÑ)XˆDÔ&â&rˆDÔ#Ø:>×:QÒ:QÓ&RÒ:Q°Q§w¡w¦yÑ:QÑ&RˆDÔ#à%+¨TÐ$4ˆDÔ!Ø8<×8MÒ8MÓ$NÒ8M°1§W¡W¦YÑ8MÑ$NˆDÔ!ä!$¸×9OÒ9OÓ%PÒ9O°A§g¡g¦iÑ9OÑ%PÓ!QˆÕùò) "Iùò &Qùò *Yùò 'Sùò %Oùâ%Ps$   Ç'L!ÈL&ÉL+ÊL0ËL5Ë;L:c                 ód   • U R                   (       d  U R                  R                  US-   5        gg©z5
Log on the screen if there is no --quiet option set
r¿   N©r'   r!   rB   ©rC   Úmsgs     rJ   ÚlogÚLDAPObject.logê  s$   € ð �z�zØ�I‰I�O‰O˜C ™IÕ&ð rM   c                 ó$  • SU-  nU R                   (       d  U$ UR                  5       R                  U R                  R                  R                  5       5      (       a1  US [        U5      [        U R                  R                  5      -
   S-   nU$ )Nr—   rÙ   )r&   rD  Úendswithrª   r0   rY   ©rC   ÚsrT   s      rJ   Úfix_dnÚLDAPObject.fix_dnñ  sr   € Ø�Q‰hˆØ××ØˆJØ�9‰9‹;×Ñ §¡× 0Ñ 0× 6Ñ 6Ó 8×9Ñ9ØÐ7”s˜3“x¤# d§h¡h×&6Ñ&6Ó"7Ñ7Ð8¸>ÑIˆCØˆ
rM   c                 óJ  • SU-  nU R                   (       d  U$ UR                  U R                  R                  R	                  5       U R                  R                  R                  5       5      nUR                  U R                  R                  R                  5       S5      nU$ )Nr—   z${DOMAIN_NAME})r&   r=   rª   r>   r   rD  rP  s      rJ   Úfix_domain_nameÚLDAPObject.fix_domain_nameù  sx   € Ø�Q‰hˆØ××ØˆJØ�k‰k˜$Ÿ(™(×.Ñ.×4Ñ4Ó6¸¿¹×8LÑ8L×8RÑ8RÓ8TÓUˆØ�k‰k˜$Ÿ(™(×.Ñ.×4Ñ4Ó6Ð8HÓIˆØˆ
rM   c                 óJ  • SU-  nU R                   (       d  U$ UR                  U R                  R                  R	                  5       U R                  R                  R                  5       5      nUR                  U R                  R                  R                  5       S5      nU$ )Nr—   z${DOMAIN_NETBIOS})r&   r=   rª   r8   r   rD  rP  s      rJ   Úfix_domain_netbiosÚLDAPObject.fix_domain_netbios  sx   € Ø�Q‰hˆØ××ØˆJØ�k‰k˜$Ÿ(™(×1Ñ1×7Ñ7Ó9¸4¿8¹8×;RÑ;R×;XÑ;XÓ;ZÓ[ˆØ�k‰k˜$Ÿ(™(×1Ñ1×7Ñ7Ó9Ð;NÓOˆØˆ
rM   c                 óö   • SU-  nU R                   (       a#  [        U R                  R                  5      S:”  a  U$ U R                  R                   H#  nUR	                  5       R                  US5      nM%     U$ )Nr—   re   z${SERVER_NAME})r&   rY   rª   r:   rD  r=   )rC   rQ  rT   rZ   s       rJ   Úfix_server_nameÚLDAPObject.fix_server_name	  sa   € Ø�Q‰hˆØ××¤3 t§x¡x×'<Ñ'<Ó#=ÀÓ#AØˆJØ—‘×&Ô&ˆAØ—)‘)“+×%Ñ% aÐ)9Ó:ŠCñ 'àˆ
rM   c                 ó|   • U R                   R                  (       a  U R                  U5      $ U R                  U5      $ r©   )rª   r(   Úcmp_descÚ	cmp_attrs)rC   rÁ   s     rJ   Ú__eq__ÚLDAPObject.__eq__  s-   € Ø�8‰8××Ø—=‘= Ó'Ð'Ø�~‰~˜eÓ$Ð$rM   c                 óø  • [        U R                  U R                  U R                  U R                  S9n[        UR                  UR                  U R                  U R                  S9nU R                  R
                  S:X  a  UR                  U5      nONU R                  R
                  S:X  a  UR                  U5      nO"[        SU R                  R
                   35      eUS   U l	        US   Ul	        US   $ )N)r!   r"   r   Ú	collisionzUnknown --view option value: re   r   )
r¦   rª   ry   r!   r"   r*   rÔ   rÈ   rÍ   Úscreen_output)rC   rÁ   Úd1Úd2rT   s        rJ   r^  ÚLDAPObject.cmp_desc  s¸   € Ü˜Ÿ™ $§'¡'°·	±	ÀÇ	Á	ÑJˆÜ˜Ÿ	™	 5§8¡8°$·)±)À$Ç)Á)ÑLˆØ�8‰8�=‰=˜IÓ%Ø—)‘)˜B“-‰CØ�X‰X�]‰]˜kÓ)Ø—)‘)˜B“-‰CäÐ<¸T¿X¹X¿]¹]¸OÐLÓMÐMà  ™VˆÔØ! !™fˆÔà�1‰vˆrM   c                 ó(  • Sn/ U l         [        U R                   Vs/ s H  o3R                  5       PM     sn5      n[        UR                   Vs/ s H  o3R                  5       PM     sn5      nXE-
  UR                  -
  nU(       a3  USSU R
                  R                  -  -   -  nU H  nUSU-   S-   -  nM     XT-
  U R                  -
  nU(       a3  USSUR
                  R                  -  -   -  nU H  nUSU-   S-   -  nM     Xh-  n	Sn
U R                   GHš  nUR                  5       U R                  ;   d  UR                  5       U	;   a  M8  U R                  U   nUR                  R                  U5      n[        U[        5      (       a+  [        U[        5      (       a  [        U5      n[        U5      nX¼:w  d  M©  S nS nS nS nUR                  5       U R                  ;   a  U Vs/ s H.  nU R
                  R                  R                  S5      S   U:H  PM0     nnU Vs/ s H.  nUR
                  R                  R                  S5      S   U:H  PM0     nnXÞ:X  a  GMM  OlUR                  5       U R                  ;   aN  UnUnU Vs/ s H  nU R                  U5      PM     nnU Vs/ s H  nUR                  U5      PM     nnXÞ:X  a  GMº  UR                  5       U R                   ;   a`  UnUnU(       d  U(       d  UnUnU Vs/ s H  nU R#                  U5      PM     nnU Vs/ s H  nUR#                  U5      PM     nnXÞ:X  a  GM8  UR                  5       U R$                  ;   a`  UnUnU(       d  U(       d  UnUnU Vs/ s H  nU R'                  U5      PM     nnU Vs/ s H  nUR'                  U5      PM     nnXÞ:X  a  GM¶  UR                  5       U R(                  ;   a`  UnUnU(       d  U(       d  UnUnU Vs/ s H  nU R+                  U5      PM     nnU Vs/ s H  nUR+                  U5      PM     nnXÞ:X  a  GM4  U
(       a	  X*S-   -  nS n
U(       a  U(       a  USU-   S	U< SU< 3-   S-   -  nOUSU-   S	U< SU< 3-   S-   -  nU R                   R-                  U5        GM�     U	(       a  Xh:w  d   eU R.                  S
==   [        U5      -  ss'   U R.                  S==   U R                   -  ss'   UR.                  S
==   [        U5      -  ss'   UR.                  S==   U R                   -  ss'   X l        X!l        US:H  $ s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nr   r   zAttributes found only in %s:r½   r¿   z#    Difference in attribute values:r   r   z => 
Úunique_attrsÚdf_value_attrs)rj  rÎ   r‹   rD  r>  rª   r,   ÚgetÚ
isinstancer~   rŠ   rC  r>   Úsplitr?  rR  r@  rU  rA  r[  rB  rX  rÌ   r<  rd  )rC   rÁ   rT   r�   Ú
self_attrsÚother_attrsÚself_unique_attrsrZ   Úother_unique_attrsÚmissing_attrsÚtitleÚoursÚtheirsÚpÚqrt   rƒ   Újs                     rJ   r_  ÚLDAPObject.cmp_attrs%  s  € ØˆØ ˆÔä°4·?²?ÓC²?¨4Ÿ*™*ž,±?ÑCÓDˆ
Ü°E×4DÒ4DÓEÒ4D¨DŸ:™:ž<Ñ4DÑEÓFˆà&Ñ4°u×7NÑ7NÑNÐÞØ�7Ð;¸d¿h¹h¿m¹mÑKÑKÑKˆCÛ&�Ø�w ‘{ TÑ)Ñ)’ñ 'ð )Ñ5¸×8NÑ8NÑNÐÞØ�7Ð;¸e¿i¹i¿n¹nÑLÑLÑLˆCÛ'�Ø�w ‘{ TÑ)Ñ)’ñ (ð *Ñ>ˆØ;ˆØ—•ˆAØ�w‰w‹y˜D×2Ñ2Ó2°a·g±g³iÀ=Ó6PÙØ—?‘? 1Ñ%ˆDØ×%Ñ%×)Ñ)¨!Ó,ˆFä˜$¤×%Ñ%¬*°V¼T×*BÑ*BÜ˜d“|�Ü ›�à�~Ø�Ø�Ø�Ø�ð —7‘7“9 × 5Ñ 5Ó5ÙJNÓOÊ$ÀQ˜Ÿ™×-Ñ-×3Ñ3°CÓ8¸Ñ;¸qÔ@É$�AÐOÙKQÓRÊ6Àa˜Ÿ™×.Ñ.×4Ñ4°SÓ9¸!Ñ<ÀÔAÉ6�AÐRØ“vÚ ð ð —W‘W“Y $×"4Ñ"4Ó4Ø�AØ�AÙ12Ó3²¨A˜Ÿ™ Qž±�AÐ3Ù23Ó4²!¨Q˜Ÿ™ až±!�AÐ4Ø“vÚ à—7‘7“9 × 6Ñ 6Ó6Ø�AØ�AÞ¦QØ ˜Ø"˜Ù:;Ó<º!°Q˜×-Ñ-¨aÖ0¹!�AÐ<Ù;<Ó=º1°a˜×.Ñ.¨qÖ1¹1�AÐ=Ø“vÚ à—7‘7“9 × :Ñ :Ó:à�AØ�AÞ¦QØ ˜Ø"˜Ù:;Ó<º!°Q˜×-Ñ-¨aÖ0¹!�AÐ<Ù;<Ó=º1°a˜×.Ñ.¨qÖ1¹1�AÐ=Ø“vÚ à—7‘7“9 × 7Ñ 7Ó7à�AØ�AÞ¦QØ ˜Ø"˜Ù=>Ó?ºQ¸˜×0Ñ0°Ö3¹Q�AÐ?Ù>?Ó@ºa¸˜×1Ñ1°!Ö4¹a�AÐ@Ø“vÚ æØ 4™<Ñ'�CØ �EÞžØ˜7 Qš;»1ºaÐ)@Ñ@À4ÑGÑG‘Cà˜7 Qš;»4ÂÐ)HÑHÈ4ÑOÑO�CØ×#Ñ#×*Ñ*¨1×-ñS !öV Ø$Ó:Ð:Ð:Ø�‰�^Ó$¬Ð->Ó(?Ñ?Ó$Ø�‰Ð%Ó&¨$×*=Ñ*=Ñ=Ó&Ø�‰�nÓ%¬Ð.@Ó)AÑAÓ%Ø�‰Ð&Ó'¨4×+>Ñ+>Ñ>Ó'à ÔØ!Ôà�b‰yÐùòM DùÚEùòD PùÚRùò 4ùÚ4ùò =ùÚ=ùò =ùÚ=ùò @ùÚ@sG   �UÁUÇ+5U"È&5U'ÊU,Ê-U1Ì
U6Ì+U;ÎV Î)VÐV
Ð'V)r‹   rª   rj  ry   r?  r@  r"   r>  rB  r=  rC  r!   r'   rd  rA  r<  r&   r+   N)rœ   r�   rž   rŸ   r    r¡   r¢   rK   rL  rR  rU  rX  r[  r`  r^  r_  r£   r¤   rM   rJ   r×   r×   h  s@   † à—j‘j s§z¡zôRòB'òòòòò%ò
õjrM   r×   c                   ól   • \ rS rSrSS\R
                  \R                  4S jrS rS r	S r
S rS rS	rg)
Ú
LDAPBundlei’  Nc                 ó²  • XPl         X`l        Xl        U R                  R                  U l        U R                  R                  U l        U R                  R
                  U l        U R                  R                  U l        U R                  R                  U l        U R                  R                  U l        0 U l	        / U R                  S'   / U R                  S'   / U R                  S'   / U R                  S'   X@l
        U(       a  X0l        OKUR                  5       S;   a,  UR                  5       U l        U R                  U5      U l        O[        S5      eSnU[!        U R                  5      :  Ga  U R                  (       aý  U R                  U   nUS [!        U5      [!        U R                  R"                  5      -
   S-   nUR%                  S	U R                  R&                  -  S
5      n[!        U R                  R(                  5      S:X  a2  U R                  R(                   H  n	UR%                  S	U	-  S5      nM     X€R                  U'   US-  nU[!        U R                  5      :  a  U R                  (       a  Mý  [+        [-        U R                  5      5      U l        [/        U R                  5      U l        [!        U R                  5      U l        g )Nri  rj  Úknown_ignored_dnÚabnormal_ignored_dn©ÚDOMAINÚCONFIGURATIONÚSCHEMAÚ	DNSDOMAINÚ	DNSFORESTz-Unknown initialization data for LDAPBundle().r   rÙ   rÛ   rÚ   re   rÜ   )r!   r"   rª   r&   r'   r+   r$   r%   r-   r<  rE  Údn_listrD  ÚcontextÚget_dn_listÚ	ExceptionrY   r0   r=   r8   r:   r~   rÎ   rŠ   Úsize)
rC   r¯   r†  r…  rE  r!   r"   ÚcounterÚtmprZ   s
             rJ   rK   ÚLDAPBundle.__init__”  s#  € àŒ	ØŒ	ØŒØŸ8™8×/Ñ/ˆÔØ—X‘X—^‘^ˆŒ
Ø—x‘x×'Ñ'ˆŒØŸ8™8×/Ñ/ˆÔØ ŸH™H×1Ñ1ˆÔØ#Ÿx™x×7Ñ7ˆÔØˆŒØ')ˆ�‰�^Ñ$Ø)+ˆ�‰Ð%Ñ&Ø+-ˆ�‰Ð'Ñ(Ø.0ˆ�‰Ð*Ñ+Ø&ÔÞØ"�LØ�]‰]‹_Ð _Ó_Ø"Ÿ=™=›?ˆDŒLØ×+Ñ+¨GÓ4ˆD�LäÐKÓLÐLØˆØœ˜DŸL™LÓ)Ô)¨d×.>×.>à—,‘,˜wÑ'ˆCØÐ7”s˜3“x¤# d§h¡h×&6Ñ&6Ó"7Ñ7Ð8¸>ÑIˆCØ—+‘+˜g¨¯©×(?Ñ(?Ñ?ÐAWÓXˆCÜ�4—8‘8×(Ñ(Ó)¨QÓ.ØŸ™×.Ô.�AØŸ+™+ g°¡kÐ3FÓG’Cñ /à$'�L‰L˜Ñ!Ø�q‰LˆGð œ˜DŸL™LÓ)Ó)¨d×.>×.>Ñ.>ô œC §¡Ó-Ó.ˆŒÜ˜dŸl™lÓ+ˆŒÜ˜Ÿ™Ó%ˆ�	rM   c                 ód   • U R                   (       d  U R                  R                  US-   5        ggrH  rI  rJ  s     rJ   rL  ÚLDAPBundle.log»  s$   € ð �z�zØ�I‰I�O‰O˜C $™JÕ'ð rM   c                 ól   • [        U R                  5      U l        [        U R                  5      U l        g r©   )rY   r…  r‰  rŠ   )rC   s    rJ   Úupdate_sizeÚLDAPBundle.update_sizeÂ  s"   € Ü˜Ÿ™Ó%ˆŒ	Ü˜dŸl™lÓ+ˆ�rM   c           
      ó€  • SnU R                   UR                   :w  a@  U R                  SU R                   < SUR                   < 35        U R                  (       d  Sn[        U R                   Vs/ s H  o3R                  5       PM     sn5      n[        UR                   Vs/ s H  o3R                  5       PM     sn5      nU R                  [        :w  aÇ  U R                  (       d¶  XE-
  nU(       aP  SnU R                  SU R                  R                  -  5        [        U5       H  nU R                  SU-   5        M     XT-
  nU(       aP  SnU R                  SUR                  R                  -  5        [        U5       H  nU R                  SU-   5        M     XE-  n	U R                  S[        U	5      -  5        U	 GH
  n
 [        U R                  U
U R                  U R                  U R                  U R                   S9n [        UR                  U
UR                  U R                  U R                  U R                   S9nX½:X  a®  U R                  R$                  (       a’  U R                  S5        U R                  SUR&                  < SUR                  R                  < S35        U R                  SUR&                  < SUR                  R                  < S35        U R                  S5        O¯U R                  S5        U R                  SUR&                  < SUR                  R                  < S35        U R                  SUR&                  < SUR                  R                  < S35        U R                  UR(                  5        U R                  S5        SnUR                  U l        UR                  Ul        GM     U$ s  snf s  snf ! ["         a%  nU R                  S	U
< S
U< 35         S nAGME  S nAff = f! ["         a%  nU R                  S	U
< S
U< 35         S nAGMw  S nAff = f)NTz!
* DN lists have different size: z != Fz
* DNs found only in %s:r   z
* Objects to be compared: %d)r¯   ry   r<  rE  r!   r"   zLdbError for dn z: z
Comparing:Ú'z' [Ú]z    OKz
    FAILED)r‰  rL  r-   rÎ   r…  rD  r%   r   rª   r,   rŠ   rY   r×   r<  rE  r!   r"   r
   r+   ry   rd  )rC   rÁ   rT   rw  Úself_dnsÚ	other_dnsÚ	self_onlyrZ   Ú
other_onlyÚ
common_dnsry   Úobject1r`   Úobject2s                 rJ   ÚdiffÚLDAPBundle.diffÆ  s  € ØˆØ�9‰9˜Ÿ
™
Ó"Ø�HŠHÀTÇYÄYÐPU×PZÓPZÐ[Ô\Ø×'×'Ø�ä¨4¯<ª<Ó8ª< aŸ™ž	©<Ñ8Ó9ˆÜ¨E¯MªMÓ:ªM qŸ™ž©MÑ:Ó;ˆ	ð ×Ñ¤
Ó*°4×3G×3Gà Ñ,ˆIÞØ�Ø—‘Ð4°t·x±x·}±}ÑDÔEÜ 	Ö*�AØ—H‘H˜W q™[Ö)ñ +ð #Ñ-ˆJÞØ�Ø—‘Ð4°u·y±y·~±~ÑEÔFÜ 
Ö+�AØ—H‘H˜W q™[Ö)ñ ,ð Ñ)ˆ
Ø�‰Ð1´C¸
³OÑCÔDäˆBðÜ$°·±Ø(*Ø-1¯\©\Ø15×1AÑ1AØ*.¯)©)¸$¿)¹)ñ	E�ðÜ$°·	±	Ø(*Ø-2¯]©]Ø15×1AÑ1AØ*.¯)©)¸$¿)¹)ñ	E�ð Ó!Ø—8‘8×#×#Ø—H‘H˜^Ô,Ø—H’H¨G¯J¬J¸¿¹×8HÔ8HÐIÔJØ—H’H¨G¯J¬J¸¿¹×8HÔ8HÐIÔJØ—H‘H˜^Ô,øà—‘˜Ô(Ø—’¨¯
¬
°G·K±K×4DÔ4DÐEÔFØ—’¨¯
¬
°G·K±K×4DÔ4DÐEÔFØ—‘˜×.Ñ.Ô/Ø—‘Ð+Ô,Ø�Ø"Ÿ?™?ˆDŒLØ#ŸO™OˆE�MñI ðL ˆ
ùòA 9ùÚ:øôB ó Ø—’³RºÐ;Ô<Þûðûô ó Ø—’³RºÐ;Ô<Þûðús>   Á0OÂ#OÇA OÈA PÏ
PÏ&PÐPÐ
P=ÐP8Ð8P=c                 óL  • UR                  5       S:X  a  U R                  R                  nO±UR                  5       S:X  a  U R                  R                  nO†UR                  5       S:X  a  U R                  R                  nO[UR                  5       S:X  a  SU R                  R                  -  nO-UR                  5       S:X  a  SU R                  R
                  -  n/ nU R                  (       d  WU l        U R                  R                  5       U l        U R                  S:X  a  [        U l        OCU R                  S	:X  a  [        U l        O'U R                  S
:X  a  [        U l        O[        S5      e U R                  R                  R                  U R                  U R                  S/S9nU H%  nUR%                  US   R'                  5       5        M'     U$ ! [         a<  nUR                  u  pgU R                   R#                  SU R                  -  5        e SnAff = f)zªQuery LDAP server about the DNs of certain naming self.con.ext Domain (or Default), Configuration, Schema.
Parse all DNs and filter those that are 'strange' or abnormal.
r€  r�  r‚  rƒ  zDC=DomainDnsZones,%sr„  zDC=ForestDnsZones,%sr   ÚBASEÚONEz0Wrong 'scope' given. Choose from: SUB, ONE, BASEry   r^   zFailed search of base=%s
N)rD  rª   r0   r4   r6   r2   r$   r%   r   r   r   rÍ   r#   rQ   r
   rf   r!   rB   rÌ   Úget_linearized)	rC   r†  r$   r…  rT   Úe3ra   rb   rZ   s	            rJ   r‡  ÚLDAPBundle.get_dn_list  s´  € ð �=‰=‹?˜hÓ&ØŸ(™(×*Ñ*‰KØ�]‰]‹_ Ó/ØŸ(™(×,Ñ,‰KØ�]‰]‹_ Ó(ØŸ(™(×,Ñ,‰KØ�]‰]‹_ Ó+Ø0°4·8±8×3CÑ3CÑC‰KØ�]‰]‹_ Ó+Ø0°4·8±8×3CÑ3CÑCˆKàˆØ××Ø*ˆDÔØ ×-Ñ-×3Ñ3Ó5ˆÔØ×Ñ Ó%Ü -ˆDÕØ×Ñ &Ó(Ü *ˆDÕØ×Ñ %Ó'Ü .ˆDÕäÐOÓPÐPð	Ø—(‘(—,‘,×%Ñ%¨4×+;Ñ+;À4×CTÑCTÐ]aÐ\bÐ%ÐcˆCó
 ˆAØ�N‰N˜1˜T™7×1Ñ1Ó3Ö4ñ àˆøô ó 	ØŸ7™7‰LˆTØ�I‰I�O‰OÐ8¸4×;KÑ;KÑKÔLØûð	ús   Å6:G Ç
H#Ç'7HÈH#c                 óÚ  • [        [        U R                  S   5      5      U R                  S'   [        [        U R                  S   5      5      U R                  S'   U R                  S   (       ar  U R                  SU R                  R
                  -  5        U R                  SR                  U R                  S    Vs/ s H  n[        SU-   5      PM     sn5      5        U R                  S   (       ak  U R                  S5        U R                  SR                  U R                  S    Vs/ s H  n[        SU-   5      PM     sn5      5        / U R                  S'   g g s  snf s  snf )Nri  rj  z
Attributes found only in %s:r   z
    z"
Attributes with different values:)r~   rÎ   r<  rL  rª   r,   Újoinr.   )rC   rZ   s     rJ   Úprint_summaryÚLDAPBundle.print_summary4  s  € Ü'+¬C°·±¸^Ñ0LÓ,MÓ'Nˆ�‰�^Ñ$Ü)-¬c°$·,±,Ð?OÑ2PÓ.QÓ)Rˆ�‰Ð%Ñ&à�<‰<˜×'Ø�H‰HÐ5¸¿¹¿¹ÑEÔFØ�H‰H�R—W‘W¸t¿|¹|ÈNÒ?[Ó\Ò?[¸!œc .°1Ñ"4Ö5Ñ?[Ñ\Ó]Ô^à�<‰<Ð(×)Ø�H‰HÐ:Ô;Ø�H‰H�R—W‘W¸t¿|¹|ÐL\Ò?]Ó^Ò?]¸!œc .°1Ñ"4Ö5Ñ?]Ñ^Ó_Ô`Ø-/ˆD�L‰LÐ)Ò*ð *ùò ]ùò _s   Ã E#Ä/E()rª   r†  r…  r"   rE  r!   r'   r$   r%   r‰  r-   r<  r&   r+   )rœ   r�   rž   rŸ   r    r¡   r¢   rK   rL  r�  rœ  r‡  r¦  r£   r¤   rM   rJ   r{  r{  ’  s6   † à48ÀdØ—j‘j s§z¡zô%&òN(ò,òGòR#õJ0rM   r{  c                   óP  • \ rS rSrSrSr\R                  \R                  \R                  S.r
/ SQr\" SSSS	S
SS9\" SSSS	S
SS9\" S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S 9\" S!S"S#S$S%9\" S&S'S#S(S%9\" S)S*S+/ S,QS-S 9\" S.S/S#S0S%9\" S1S2S	S
S3S9/r    S7S5 jrS6rg4)8Úcmd_ldapcmpiB  zCompare two ldap databases.zO%prog <URL1> <URL2> (domain|configuration|schema|dnsdomain|dnsforest) [options])Ú	sambaoptsÚversionoptsÚcredopts)ÚURL1ÚURL2z	context1?z	context2?z	context3?z	context4?z	context5?z-wz--tworE   Ú
store_trueFz"Hosts are in two different domains)ÚdestÚactionÚdefaultÚhelpz-qz--quietr'   z1Do not print anything but relay on just exit codez-vz	--verboser+   z*Print all DN pairs that have been comparedz--sdr(   z,Compare nTSecurityDescriptor attributes onlyz--sort-acesr)   z=Sort ACEs before comparison of nTSecurityDescriptor attributez--viewr*   r   rc  zUDisplay mode for nTSecurityDescriptor results. Possible values: section or collision.)r°  r²  Úchoicesr³  z--baserF   r   z:Pass search base that will build DN list for the first DC.)r°  r²  r³  z--base2Úbase2znPass search base that will build DN list for the second DC. Used when --two or when compare two different DNs.z--scoperG   r   )r   r   rŸ  z>Pass search scope that builds DN list. Options: SUB, ONE, BASEz--filterÚfilterz>List of comma separated attributes to ignore in the comparisonz--skip-missing-dnr-   zCSkip report and failure due to missing DNs in one server or anotherNc                 ó.  • UR                  5       nUR                  S5      =(       d    UR                  S5      nU(       a  UR                  USS9nOS nUR                  USS9nUR	                  5       (       a  UnO"UR                  S5        UR                  S5        U(       a   UR                  5       (       d  [        S5      e/ nUc  U(       a  U(       a  S/nOW/ S	QnORX4XVU4 HI  nUc  M  UR                  5       S	;  a  [        S
U-  5      eUR                  UR                  5       5        MK     U
(       a  U	(       a  [        S5      eU(       d  U(       d  U(       a  U(       d  [        S5      e[        UUUX‰X¼X­UUU R                  U R                  US9n[        UR                  5      S:”  d   e[        UUUX‰X¼X­UUU R                  U R                  US9n[        UR                  5      S:”  d   eUR!                  S5      nSnU GHq  n U	(       d  U R                  R#                  SU -  5        [%        UU UU R                  U R                  S9n![%        UU UU R                  U R                  S9n"U!R'                  U"5      (       a)  U	(       d   U R                  R#                  SU -  5        M¨  Mª  U	(       d¾  U R                  R#                  SU -  5        U(       d™  [        U!R(                  S   5      [        U"R(                  S   5      :X  d   e/ U"R(                  S'   U R                  R#                  S5        U R                  R#                  S5        U!R+                  5         U"R+                  5         SnGMt     US:w  a  [        SU-  5      eg )NÚldapT)Úfallback_machineF)Úguessr   z3You must supply at least one username/password pairr€  r  zIncorrect argument: %sz-You cannot set --verbose and --quiet togetherz<You need to specify both --base and --base2 at the same time)rE   r'   r(   r)   r+   r*   rF   rG   r!   r"   r-   r   r   z
* Comparing [%s] context...
)r†  rE  r!   r"   z
* Result for [%s]: SUCCESS
z
* Result for [%s]: FAILURE
rj  z	
SUMMARY
z
---------
éÿÿÿÿzCompare failed: %d)Úget_loadparmr    Úget_credentialsÚget_credentials2Úis_anonymousÚ
set_domainÚset_workstationÚauthentication_requestedr   rD  rÌ   r   r!   r"   rY   r0   rm  rB   r{  rœ  r<  r¦  )#rC   r­  r®  Úcontext1Úcontext2Úcontext3Úcontext4Úcontext5rE   r'   r+   r(   r)   r*   rF   rµ  rG   r¶  r¬  rª  r«  r-   r   Ú
using_ldaprD   Úcreds2ÚcontextsÚcÚcon1Úcon2rE  Ústatusr†  Úb1Úb2s#                                      rJ   ÚrunÚcmd_ldapcmp.rung  s%  € ð ×#Ñ#Ó%ˆà—_‘_ VÓ,×G°·±ÀÓ0Gˆ
æØ×,Ñ,¨RÀ$Ð,ÐG‰EàˆEØ×*Ñ*¨2°UÐ*Ð;ˆØ×Ñ× Ñ Ø‰Fà×Ñ˜bÔ!Ø×"Ñ" 2Ô&Þ˜e×<Ñ<×>Ñ>ÜÐTÓUÐUð ˆØÑÞžð %˜:‘ò [‘à¨(¸hÓG�Ø‘9ÙØ—w‘w“yÐ$cÓcÜ&Ð'?À!Ñ'CÓDÐDØ—‘ §¡£	Ö*ñ Hö –uÜÐNÓOÐOÞž¦D¶ÜÐ]Ó^Ð^ä˜˜e RØ¸Ø '¸ÀUØ!ŸY™Y¨T¯Y©YÈñYˆô �4—<‘<Ó  1Ó$Ð$Ð$ä˜˜f bØ¸Ø '¸ÀeØ!ŸY™Y¨T¯Y©YÈñYˆô �4—<‘<Ó  1Ó$Ð$Ð$à—l‘l 3Ó'ˆàˆÜˆGÞØ—	‘	—‘Ð AÀGÑ KÔLä˜D¨'¸{Ø!%§¡°·±ñ<ˆBä˜D¨'¸{Ø!%§¡°·±ñ<ˆBð �w‰w�r�{‰{ÞØ—I‘I—O‘OÐ$DØ$+ñ%,ö -ñ ö Ø—I‘I—O‘OÐ$DÀwÑ$NÔOÞ%Ü" 2§:¡:Ð.>Ñ#?Ó@ÄCÈÏ
É
ÐScÑHdÓDeÓeÐeÐeØ79˜Ÿ
™
Ð#3Ñ4ØŸ	™	Ÿ™¨Ô6ØŸ	™	Ÿ™¨Ô6Ø×(Ñ(Ô*Ø×(Ñ(Ô*à“ñ1  ð2 �Q‹;ÜÐ3°fÑ<Ó=Ð=ð rM   r¤   )NNNNNFFFFFr   r   r   r   r   NNNF)rœ   r�   rž   rŸ   Ú__doc__Úsynopsisr   ÚSambaOptionsÚVersionOptionsÚCredentialsOptionsDoubleÚtakes_optiongroupsÚ
takes_argsr   Útakes_optionsrÑ  r£   r¤   rM   rJ   r©  r©  B  s=  † Ù%Ø`€Hð ×)Ñ)Ø×-Ñ-Ø×4Ñ4ñÐò c€Jñ 	ˆt�W 5°ÀuØ8ñ	:áˆt�Y W°\È5ØGñ	Iáˆt�[ y¸ÈuØ@ñ	Báˆv˜L°ÀuØBñ	Dáˆ} ;°|ÈUØSñ	Uáˆx˜f¨iÀ)È[ÐAYØkñ	máˆx˜f¨bØPñ	Ráˆy˜w°ð Eñ	Fáˆy˜w°Ò?UØTñ	Váˆz °"ØTñ	VáÐ"Ð):À<ÐY^ØYñ	[ð+€Mð4 RVØOTØCEØMR÷	W>rM   r©  )r   r;   r    ÚsambaÚsamba.getoptÚgetoptr   r   Ú	samba.ndrr   Úsamba.dcerpcr   r#   r   r   r   r	   r
   Úsamba.netcmdr   r   r   Úcompilerp   Úobjectr   r¦   r×   r{  r©  r¤   rM   rJ   Ú<module>rã     s‹   ðó0 
Û 	Û 
ã Ý Ý Ý  Ý !ß WÕ W÷ñ ð —:’:Ð?Ó@Ð ôEˆvô EôPr;�ô r;ôjg�ô gôT	m0�ô m0ô`|>�'õ |>rM   