ó
    cÛ–i�7  ã                   ó  • S SK r S SKrS SKJrJr  S SKJrJr   " S S\5      r	 " S S\R                  5      r " S S	\R                  5      r " S
 S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r0 rS r\" 5         CSS jrS rS rS rS rS rg) é    N)Ú	dnsserverÚdnsp)ÚWERRORErrorÚwerrorc                   ó   • \ rS rSrSrg)ÚDNSParseErroré-   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r
   ó    Ú1/usr/lib/python3/dist-packages/samba/dnsserver.pyr   r   -   s   † Úr   r   c                   ó\   ^ • \ rS rSrSS\R
                  S4U 4S jjr\SS j5       rSr	U =r
$ )	ÚARecordé1   é   é„  r   c                 ó‚   >• [         TU ]  5         [        R                  U l        XE-  U l        X l        X0l        Xl        g ©N)	ÚsuperÚ__init__r   Ú
DNS_TYPE_AÚwTypeÚdwFlagsÚdwSerialÚdwTtlSecondsÚdata)ÚselfÚip_addrÚserialÚttlÚrankÚ	node_flagÚ	__class__s         €r   r   ÚARecord.__init__2   s3   ø€ ä‰ÑÔÜ—_‘_ˆŒ
ØÑ'ˆŒØŒØÔØ�	r   c                 ó   • U " U40 UD6$ r   r
   ©Úclsr    ÚsepÚkwargss       r   Úfrom_stringÚARecord.from_string;   ó   € á�4Ñ"˜6Ñ"Ð"r   ©r    r   r   r   r   r   ©r   r   r   r   r   ÚDNS_RANK_ZONEr   Úclassmethodr.   r   Ú__classcell__©r'   s   @r   r   r   1   s,   ø† Ø'(¨c¸×8JÑ8JØ÷ð ó#ó ö#r   r   c                   ó\   ^ • \ rS rSrSS\R
                  S4U 4S jjr\SS j5       rSr	U =r
$ )	Ú
AAAARecordé@   r   r   r   c                 ó‚   >• [         TU ]  5         [        R                  U l        XE-  U l        X l        X0l        Xl        g r   )	r   r   r   ÚDNS_TYPE_AAAAr   r   r   r   r    )r!   Úip6_addrr#   r$   r%   r&   r'   s         €r   r   ÚAAAARecord.__init__B   s5   ø€ ä‰ÑÔÜ×'Ñ'ˆŒ
ØÑ'ˆŒØŒØÔØ�	r   c                 ó   • U " U40 UD6$ r   r
   r*   s       r   r.   ÚAAAARecord.from_stringK   r0   r   r1   r   r2   r6   s   @r   r8   r8   @   s,   ø† à()¨s¸×9KÑ9KØ÷ð ó#ó ö#r   r8   c                   ó\   ^ • \ rS rSrSS\R
                  S4U 4S jjr\SS j5       rSr	U =r
$ )	Ú	PTRRecordéP   r   r   r   c                 óØ   >• [         TU ]  5         [        R                  U l        XE-  U l        X l        X0l        [        R                  " 5       nXl
        [        U5      Ul        X`l        g r   )r   r   r   ÚDNS_TYPE_PTRr   r   r   r   r   ÚDNS_RPC_NAMEÚstrÚlenr    )r!   Úptrr#   r$   r%   r&   Úptr_namer'   s          €r   r   ÚPTRRecord.__init__R   sS   ø€ ä‰ÑÔÜ×&Ñ&ˆŒ
ØÑ'ˆŒØŒØÔÜ×)Ò)Ó+ˆØŒÜ˜3“xˆŒØ�	r   c                 ó   • U " U40 UD6$ r   r
   r*   s       r   r.   ÚPTRRecord.from_string^   r0   r   r1   r   r2   r6   s   @r   rA   rA   P   s,   ø† à#$¨#°D×4FÑ4FØ÷
ð ó#ó ö#r   rA   c                   ó\   ^ • \ rS rSrSS\R
                  S4U 4S jjr\SS j5       rSr	U =r
$ )	ÚCNAMERecordéc   r   r   r   c                 óØ   >• [         TU ]  5         [        R                  U l        XE-  U l        X l        X0l        [        R                  " 5       nXl
        [        U5      Ul        X`l        g r   )r   r   r   ÚDNS_TYPE_CNAMEr   r   r   r   r   rE   rF   rG   r    )r!   Úcnamer#   r$   r%   r&   Ú
cname_namer'   s          €r   r   ÚCNAMERecord.__init__e   sS   ø€ ä‰ÑÔÜ×(Ñ(ˆŒ
ØÑ'ˆŒØŒØÔÜ×+Ò+Ó-ˆ
ØŒÜ˜U›ˆ
ŒØ�	r   c                 ó   • U " U40 UD6$ r   r
   r*   s       r   r.   ÚCNAMERecord.from_stringq   r0   r   r1   r   r2   r6   s   @r   rN   rN   c   s,   ø† à%&¨C°d×6HÑ6HØ÷
ð ó#ó ö#r   rN   c                   ó\   ^ • \ rS rSrSS\R
                  S4U 4S jjr\SS j5       rSr	U =r
$ )	ÚNSRecordév   r   r   r   c                 óØ   >• [         TU ]  5         [        R                  U l        XE-  U l        X l        X0l        [        R                  " 5       nXl
        [        U5      Ul        X`l        g r   )r   r   r   ÚDNS_TYPE_NSr   r   r   r   r   rE   rF   rG   r    )r!   Ú
dns_serverr#   r$   r%   r&   Únsr'   s          €r   r   ÚNSRecord.__init__x   sS   ø€ ä‰ÑÔÜ×%Ñ%ˆŒ
ØÑ'ˆŒØŒØÔÜ×#Ò#Ó%ˆØŒÜ�Z“ˆŒØ�	r   c                 ó   • U " U40 UD6$ r   r
   r*   s       r   r.   ÚNSRecord.from_string„   r0   r   r1   r   r2   r6   s   @r   rX   rX   v   s,   ø† à*+°¸4×;MÑ;MØ÷
ð ó#ó ö#r   rX   c                   ó\   ^ • \ rS rSrSS\R
                  S4U 4S jjr\SS j5       rSr	U =r
$ )	ÚMXRecordé‰   r   r   r   c                 ó  >• [         TU ]  5         [        R                  U l        XV-  U l        X0l        X@l        [        R                  " 5       nX'l
        XR                  l        [        U5      UR                  l        Xpl        g r   )r   r   r   ÚDNS_TYPE_MXr   r   r   r   r   ÚDNS_RPC_RECORD_NAME_PREFERENCEÚwPreferenceÚnameExchangerF   rG   r    )	r!   Úmail_serverÚ
preferencer#   r$   r%   r&   Úmxr'   s	           €r   r   ÚMXRecord.__init__‹   sc   ø€ ä‰ÑÔÜ×%Ñ%ˆŒ
ØÑ'ˆŒØŒØÔÜ×5Ò5Ó7ˆØ#ŒØ)�‰ÔÜ! +Ó.ˆ�‰ÔØ�	r   c                 ó”   •  UR                  U5      u  pE[        U5      nU " XE40 UD6$ ! [         a  n[        SU-  5      UeS nAff = f)Nz?MX data must have server and priority (space separated), not %r)ÚsplitÚintÚ
ValueErrorr   )r+   r    r,   r-   ÚserverÚpriorityÚes          r   r.   ÚMXRecord.from_string˜   sg   € ð	KØ#Ÿz™z¨#›ÑˆFÜ˜8“}ˆHñ �6Ñ. vÑ.Ð.øô ó 	KÜð !<Ø>Bñ!Có DØIJðKûð	Kús   ‚) ©
A³AÁAr1   r   r2   r6   s   @r   rb   rb   ‰   s,   ø† à78¸cØ×(Ñ(°A÷ð ó/ó ö/r   rb   c                   óx   ^ • \ rS rSrSSSSSS\R
                  \R                  4U 4S jjr\S
S j5       r	S	r
U =r$ )Ú	SOARecordé£   r   r   iX  i€Q i  c                 ó�  >• [         TU ]  5         [        R                  U l        Xš-  U l        X0l        X€l        [        R                  " 5       nX;l
        XKl        X[l        Xkl        X{l        XR                  l        [#        U5      UR                  l        X+R$                  l        [#        U5      UR$                  l        X°l        g r   )r   r   r   ÚDNS_TYPE_SOAr   r   r   r   r   ÚDNS_RPC_RECORD_SOAÚ
dwSerialNoÚ	dwRefreshÚdwRetryÚdwExpireÚdwMinimumTtlÚNamePrimaryServerrF   rG   ÚZoneAdministratorEmailr    )r!   ÚmnameÚrnamer#   ÚrefreshÚretryÚexpireÚminimumr$   r%   r&   Úsoar'   s               €r   r   ÚSOARecord.__init__¥   s›   ø€ ô 	‰ÑÔÜ×&Ñ&ˆŒ
ØÑ'ˆŒØŒØÔÜ×*Ò*Ó,ˆØŒØŒØŒØŒØ"ÔØ$)×ÑÔ!Ü$'¨£Jˆ×ÑÔ!Ø).×"Ñ"Ô&Ü),¨U«ˆ×"Ñ"Ô&Ø�	r   c                 óê   • UR                  U5      n[        U5      S:w  a  [        S5      e [        SS5       H  n[	        XE   5      XE'   M     U " U0 UD6$ ! [
         a  n[        S5      UeS nAff = f)Né   zhData requires 7 space separated elements - nameserver, email, serial, refresh, retry, expire, minimumttlé   zBSOA serial, refresh, retry, expire, minimumttl' should be integers)rn   rG   r   Úrangero   rp   )r+   r    r,   r-   ÚargsÚirs   s          r   r.   ÚSOARecord.from_string¹   sŠ   € à�z‰z˜#‹ˆÜˆt‹9˜‹>Üð !Eó Fð Fð	=Ü˜1˜a–[�Ü˜d™g›,�“ñ !ñ
 �DÐ#˜FÑ#Ð#øô ó 	=Üð !5ó 6Ø;<ð=ûð	=ús   ­"A Á
A2Á!A-Á-A2r1   r   )r   r   r   r   r   r3   ÚDNS_RPC_FLAG_AUTH_ZONE_ROOTr   r4   r.   r   r5   r6   s   @r   rv   rv   £   s;   ø† à,-°sÀ#Ø t°¸D×<NÑ<NØ×;Ñ;÷ð( ó$ó ö$r   rv   c                   ó`   ^ • \ rS rSrSSSS\R
                  S4U 4S jjr\S	S j5       rSr	U =r
$ )
Ú	SRVRecordéÉ   r   éd   r   r   c	                 ó$  >• [         T
U ]  5         [        R                  U l        Xx-  U l        XPl        X`l        [        R                  " 5       n	X9l
        XIl        X)l        XR                  l        [        U5      U	R                  l        X�l        g r   )r   r   r   ÚDNS_TYPE_SRVr   r   r   r   r   ÚDNS_RPC_RECORD_SRVÚ	wPriorityÚwWeightÚwPortÚ
nameTargetrF   rG   r    )r!   ÚtargetÚportrr   Úweightr#   r$   r%   r&   Úsrvr'   s             €r   r   ÚSRVRecord.__init__Ë   sl   ø€ ä‰ÑÔÜ×&Ñ&ˆŒ
ØÑ'ˆŒØŒØÔÜ×*Ò*Ó,ˆØ ŒØŒØŒ	Ø#�‰ÔÜ  ›[ˆ�‰ÔØ�	r   c                 óþ   •  UR                  U5      u  pEpg U[        U5      [        U5      [        U5      4n	U " U	0 UD6$ ! [         a  n[        SU-  5      UeS nAff = f! [         a  n[        S5      UeS nAff = f)NzXSRV data must have four space separated elements: server, port, priority, weight; not %rz/SRV port, priority, and weight must be integers)rn   rp   r   ro   )
r+   r    r,   r-   r�   rž   rr   rŸ   rs   rŽ   s
             r   r.   ÚSRVRecord.from_stringÚ   s£   € ð	8Ø-1¯Z©Z¸«_Ñ*ˆF˜(ð	;ØœC ›I¤s¨8£}´c¸&³kÐBˆDñ
 �DÐ#˜FÑ#Ð#øô ó 	8Üð !)ð ,0ñ!0ó 1ð 78ð8ûð	8ûô ó 	;Üð !3ó 4Ø9:ð;ûð	;ús.   ‚A  —!A! Á 
AÁ
AÁAÁ!
A<Á+A7Á7A<r1   r   r2   r6   s   @r   r“   r“   É   s0   ø† à./¸ÀAÈ3Ø×(Ñ(°A÷ð ó$ó ö$r   r“   c                   ó\   ^ • \ rS rSrSS\R
                  S4U 4S jjr\SS j5       rSr	U =r
$ )	Ú	TXTRecordéì   r   r   r   c                 ó–  >• [         T
U ]  5         [        R                  U l        XE-  U l        X l        X0l        [        U[        5      (       a  U/n/ nU H?  n[        R                  " 5       nXxl	        [        U5      Ul        UR                  U5        MA     [        R                  " 5       n	[        U5      U	l        Xil	        X�l        g r   )r   r   r   ÚDNS_TYPE_TXTr   r   r   r   Ú
isinstancerF   r   rE   rG   ÚappendÚDNS_RPC_RECORD_STRINGÚcountr    )r!   Úslistr#   r$   r%   r&   ÚnamesÚsÚnameÚtxtr'   s             €r   r   ÚTXTRecord.__init__î   s¢   ø€ ä‰ÑÔÜ×&Ñ&ˆŒ
ØÑ'ˆŒØŒØÔÜ�eœS×!Ñ!Ø�GˆEØˆÛˆAÜ×)Ò)Ó+ˆDØŒHÜ˜1“vˆDŒHØ�L‰L˜Öñ	 ô
 ×-Ò-Ó/ˆÜ˜“JˆŒ	ØŒØ�	r   c                 ó@   • [         R                  " U5      nU " U40 UD6$ r   )Úshlexrn   )r+   r    r,   r-   r­   s        r   r.   ÚTXTRecord.from_string  s    € ä—’˜DÓ!ˆÙ�5Ñ#˜FÑ#Ð#r   r1   r   r2   r6   s   @r   r¥   r¥   ì   s,   ø† à%&¨C°d×6HÑ6HØ÷ð( ó$ó ö$r   r¥   c                  ó°   • [        5       R                  5        H:  u  pU SS  S:X  d  M  U S S n [        [        SU -   5      nU[        U '   U[        U'   M<     g )NiúÿÿÿÚRecordÚ	DNS_TYPE_)ÚglobalsÚitemsÚgetattrr   Ú_RECORD_TYPE_LUT)ÚkÚvÚflags      r   Ú_setup_record_type_lutrÀ     sV   € Ü“	—‘Ö!‰ˆØˆRˆSˆ6�XÕØ�#�2�ˆAÜœ4 ¨q¡Ó1ˆDØ"#Ô˜QÑØ%&Ô˜TÓ"ò "r   c                 óÆ   • [        U [        5      (       a  U R                  5       n  [        U    nUR                  " U4SU0UD6$ ! [         a  n[        S5      UeSnAff = f)z²Get a DNS record of type t based on the data string.
Additional keywords (ttl, rank, etc) can be passed in.

t can be a dnsp.DNS_TYPE_* integer or a string like "A", "TXT", etc.
zUnsupported record typeNr,   )r©   rF   Úupperr¼   ÚKeyErrorr   r.   )Útr    r,   r-   r·   rs   s         r   Úrecord_from_stringrÅ     sh   € ô �!”S×ÑØ�G‰G‹Iˆð>Ü! !Ñ$ˆð ×Ò˜dÑ6¨Ð6¨vÑ6Ð6øô ó >ÜÐ5Ó6¸AÐ=ûð>ús   §	A Á
A ÁAÁA c                 óŒ   • U R                  5       n [        [        SU-   5      $ ! [         a  n[	        SU -  5      UeS nAff = f)Nr¸   zUnknown type of DNS record %s)rÂ   r»   r   ÚAttributeErrorr   )Úrec_typeÚrtypers   s      r   Úflag_from_stringrÊ   (  sK   € Ø�N‰NÓ€EðOÜ”t˜[¨5Ñ0Ó1Ð1øÜó OÜÐ;¸hÑFÓGÈQÐNûðOús   ’% ¥
A¯>¾Ac                  óR   • [        U 0 UD6n[        R                  " 5       nX#l        U$ r   )rÅ   r   ÚDNS_RPC_RECORD_BUFÚrec)rŽ   r-   rÍ   Úbufs       r   Úrecbuf_from_stringrÏ   0  s)   € Ü
˜dÐ
- fÑ
-€CÜ
×
&Ò
&Ó
(€CØ„GØ€Jr   c                 ó¨   • U R                   R                  S5      R                  5       UR                   R                  S5      R                  5       :H  $ )z%Match dns name (of type DNS_RPC_NAME)Ú.)rF   ÚrstripÚlower)Ún1Ún2s     r   Údns_name_equalrÖ   7  s9   € à�6‰6�=‰=˜Ó×#Ñ#Ó%¨¯©¯©°sÓ);×)AÑ)AÓ)CÑCÐCr   c                 ó–   • [         R                  " [         R                  U 5      n[         R                  " [         R                  U5      $ )z.Convert an AAAA address into a canonical form.)ÚsocketÚ	inet_ptonÚAF_INET6Ú	inet_ntop)ÚaddrÚpackeds     r   Úipv6_normaliserÞ   <  s/   € ä×ÒœfŸo™o¨tÓ4€FÜ×ÒœFŸO™O¨VÓ4Ð4r   c                 ó  • [        XE5      n[        R                  n U R                  [        R                  SXUSXGSS5
      u  p‰U	(       a  U	R                  S:X  a  gU	R                  S   R                   GHÕ  nUR                  U:w  a  M  SnU[        R                  :X  a  UR                  UR                  :X  a  SnGO€U[        R                   :X  a0  [#        UR                  5      [#        UR                  5      :X  a  SnGO<U[        R$                  :X  a)  ['        UR                  UR                  5      (       a  SnGOÿU[        R(                  :X  a)  ['        UR                  UR                  5      (       a  SnGOÂU[        R*                  :X  a)  ['        UR                  UR                  5      (       a  SnGO…U[        R,                  :X  ak  ['        UR                  R.                  UR                  R.                  5      (       a0  UR                  R0                  UR                  R0                  :X  a  SnGOU[        R2                  :X  aÇ  UR                  R4                  UR                  R4                  :X  a—  UR                  R6                  UR                  R6                  :X  ai  UR                  R8                  UR                  R8                  :X  a;  ['        UR                  R:                  UR                  R:                  5      (       a  SnGO+U[        R<                  :X  Ga\  UR                  R>                  UR                  R>                  :X  Ga,  UR                  R@                  UR                  R@                  :X  aþ  UR                  RB                  UR                  RB                  :X  aÐ  UR                  RD                  UR                  RD                  :X  a¢  UR                  RF                  UR                  RF                  :X  at  ['        UR                  RH                  UR                  RH                  5      (       a;  ['        UR                  RJ                  UR                  RJ                  5      (       a  SnOºU[        RL                  :X  a¦  UR                  R                  UR                  R                  :X  ax  Sn[O        UR                  R                  5       HS  nU=(       aG    UR                  RP                  U   RP                  UR                  RP                  U   RP                  :H  nMU     U(       d  GMÔ  Us  $    g! [
         a-  n
U
R                  S   [        R                  :X  a   Sn
A
gU
eSn
A
ff = f)z1Find a dns record that matches the specified datar   NFT))rÅ   r   ÚDNS_RPC_VIEW_AUTHORITY_DATAÚDnssrvEnumRecords2ÚDNS_CLIENT_VERSION_LONGHORNr   rŽ   r   Ú"WERR_DNS_ERROR_NAME_DOES_NOT_EXISTr¬   rÍ   Úrecordsr   r   r   r    r;   rÞ   rD   rÖ   rQ   r[   re   rh   rg   r—   r™   rš   r›   rœ   ry   r{   r|   r}   r~   r   r€   r�   r¨   r�   rF   )Údns_connrq   Úzoner°   Úrecord_typer    ÚurecÚselect_flagsÚbuflenÚresrs   rÍ   Úfoundr�   s                 r   Údns_record_matchrí   B  sØ  € ô ˜kÓ0€Dä×8Ñ8€Lð	Ø×1Ñ1Ü×1Ñ1°1°fÀDÈ$Ø t¨Tó3‰ˆö �#—)‘)˜q“.Øà�w‰w�q‰z×!Õ!ˆØ�9‰9˜Ó#ÙàˆØœ$Ÿ/™/Ó)Ø�x‰x˜4Ÿ9™9Ó$Ø�ùØœD×.Ñ.Ó.Ü˜cŸh™hÓ'¬>¸$¿)¹)Ó+DÓDØ�ùØœD×-Ñ-Ó-Ü˜cŸh™h¨¯	©	×2Ñ2Ø�ùØœD×/Ñ/Ó/Ü˜cŸh™h¨¯	©	×2Ñ2Ø�ùØœD×,Ñ,Ó,Ü˜cŸh™h¨¯	©	×2Ñ2Ø�ùØœD×,Ñ,Ó,Ü˜cŸh™h×3Ñ3°T·Y±Y×5KÑ5K×LÑLØ�x‰x×#Ñ# t§y¡y×'<Ñ'<Ó<Ø�ùØœD×-Ñ-Ó-Ø�x‰x×!Ñ! T§Y¡Y×%8Ñ%8Ó8Ø�x‰x×Ñ 4§9¡9×#4Ñ#4Ó4Ø�x‰x�~‰~ §¡§¡Ó0Ü˜cŸh™h×1Ñ1°4·9±9×3GÑ3G×HÑHØ�ùØœD×-Ñ-Ô-Ø�x‰x×"Ñ" d§i¡i×&:Ñ&:Ô:Ø�x‰x×!Ñ! T§Y¡Y×%8Ñ%8Ó8Ø�x‰x×Ñ 4§9¡9×#4Ñ#4Ó4Ø�x‰x× Ñ  D§I¡I×$6Ñ$6Ó6Ø�x‰x×$Ñ$¨¯	©	×(>Ñ(>Ó>Ü˜cŸh™h×8Ñ8Ø"Ÿi™i×9Ñ9÷;ñ ;ä˜cŸh™h×=Ñ=Ø"Ÿi™i×>Ñ>÷@ñ @à�øØœD×-Ñ-Ó-Ø�x‰x�~‰~ §¡§¡Ó0Ø�Ü˜sŸx™xŸ~™~Ö.�AØ!÷ JØ ŸX™XŸ\™\¨!™_×0Ñ0°D·I±I·M±MÀ!Ñ4D×4HÑ4HÑHò ñ /÷ ‰5ØŠJñc "ðf øô{ ó Ø�6‰6�!‰9œ×AÑAÓAô Øˆûðús   �(U Õ
VÕ!VÖVÖVr   )r´   rØ   Úsamba.dcerpcr   r   Úsambar   r   rp   r   ÚDNS_RPC_RECORDr   r8   rA   rN   rX   rb   rv   r“   r¥   r¼   rÀ   rÅ   rÊ   rÏ   rÖ   rÞ   rí   r
   r   r   Ú<module>rñ      sü   ðó& Û ß (ß %ô.	�Jô 	ô#ˆi×&Ñ&ô #ô#�×)Ñ)ô #ô #�	×(Ñ(ô #ô&#�)×*Ñ*ô #ô&#ˆy×'Ñ'ô #ô&/ˆy×'Ñ'ô /ô4#$�	×(Ñ(ô #$ôL $�	×(Ñ(ô  $ôF$�	×(Ñ(ô $ð> Ð ò'ñ Ô Øô7ò OòòDò
5óSr   