
    g7                        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
$ )	ARecord1        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8J8J # #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9K9K # #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
$ )		PTRRecordP   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    &&
'))+3x	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,    #$#D4F4F
 # #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
$ )	CNAMERecordc   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,    %&Cd6H6H
 # #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
$ )	NSRecordv   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#zz#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,    78c((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  iQ i  c                   > [         TU ]  5         [        R                  U l        X-  U l        X0l        Xl        [        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        Xl        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    zz#t9> !E F F	=1a[dg, !
 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        Xl        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-1ZZ_*F(	;CIs8}c&kBD
 D#F##  	8 !) ,0!0 1 788	8  	; !3 49:;	;s.   A  !A!  
A
AA!
A<+A77A<r1   r   r2   r6   s   @r   r   r      s0    ./A3((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	        Xl        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    &&
'eS!!GEA))+DH1vDHLL	 
 --/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,    %&Cd6H6H( $ $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    	!RS6X#2A4q1D"#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)zGet 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GGI>!!$ d66v66  >56A=>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    NNEOt[5011 O;hFGQ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    66==##%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/    foot4FFOOV44r   c                    [        XE5      n[        R                  n U R                  [        R                  SXUSXGSS5
      u  pU	(       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OU[        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OU[        R(                  :X  a)  ['        UR                  UR                  5      (       a  SnGOU[        R*                  :X  a)  ['        UR                  UR                  5      (       a  SnGOU[        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OU[        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0D88L	11111fD$tT3 #))q.wwqz!!99#$//)xx499$D...chh'>$))+DDD---chh		22D///chh		22D,,,chh		22D,,,chh33TYY5K5KLLxx##tyy'<'<<D---xx!!TYY%8%88xx499#4#44xx~~0chh114993G3GHHD---xx""dii&:&::xx!!TYY%8%88xx499#4#44xx  DII$6$66xx$$		(>(>>chh88"ii99; ;chh=="ii>>@ @D---xx~~0sxx~~.A! J XX\\!_00DIIMM!4D4H4HH  / 5Jc "f {  66!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   