+
    4Ssi7                        ^ RI t ^ RIt^ RIHtHt ^ RIHtHt  ! R R]4      t	 ! R R]P                  4      t ! R R	]P                  4      t ! R
 R]P                  4      t ! R R]P                  4      t ! R R]P                  4      t ! R R]P                  4      t ! R R]P                  4      t ! R R]P                  4      t ! R R]P                  4      t/ tR t]! 4        ARR ltR tR tR tR tR tR# )     N)	dnsserverdnsp)WERRORErrorwerrorc                       ] tR t^-tRtR# )DNSParseError N)__name__
__module____qualname____firstlineno____static_attributes__r	       1/usr/lib/python3/dist-packages/samba/dnsserver.pyr   r   -   s    r   r   c                   f   a a ] tR t^1t o^R]P
                  ^ 3V 3R llt]RR l4       tRt	Vt
V ;t# )ARecord  c                   < \         SV `  4        \        P                  V n        WE,          V n        W n        W0n        Wn        R # 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                    V ! V3/ VB # 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   __classdictcell____classcell__r$   __classdict__s   @@r   r   r   1   s3     '(c8J8J # # #r   r   c                   f   a a ] tR t^@t o^R]P
                  ^ 3V 3R llt]RR l4       tRt	Vt
V ;t# )
AAAARecordr   c                   < \         SV `  4        \        P                  V n        WE,          V n        W n        W0n        Wn        R # 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                    V ! V3/ VB # r   r	   r'   s   &&&,r   r+   AAAARecord.from_stringK   r-   r   r.   r   r/   r4   s   @@r   r7   r7   @   s3     ()s9K9K # # #r   r7   c                   f   a a ] tR t^Pt o^R]P
                  ^ 3V 3R llt]RR l4       tRt	Vt
V ;t# )	PTRRecordr   c                   < \         SV `  4        \        P                  V n        WE,          V n        W n        W0n        \        P                  ! 4       pWn
        \        V4      Vn        W`n        R # 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                    V ! V3/ VB # r   r	   r'   s   &&&,r   r+   PTRRecord.from_string^   r-   r   r.   r   r/   r4   s   @@r   r?   r?   P   s3     #$#D4F4F
 # # #r   r?   c                   f   a a ] tR t^ct o^R]P
                  ^ 3V 3R llt]RR l4       tRt	Vt
V ;t# )CNAMERecordr   c                   < \         SV `  4        \        P                  V n        WE,          V n        W n        W0n        \        P                  ! 4       pWn
        \        V4      Vn        W`n        R # r   )r   r   r   DNS_TYPE_CNAMEr   r   r   r   r   rB   rC   rD   r   )r   cnamer    r!   r"   r#   
cname_namer$   s   &&&&&& r   r   CNAMERecord.__init__e   sS    ((
'++-
U
	r   c                    V ! V3/ VB # r   r	   r'   s   &&&,r   r+   CNAMERecord.from_stringq   r-   r   r.   r   r/   r4   s   @@r   rK   rK   c   s3     %&Cd6H6H
 # # #r   rK   c                   f   a a ] tR t^vt o^R]P
                  ^ 3V 3R llt]RR l4       tRt	Vt
V ;t# )NSRecordr   c                   < \         SV `  4        \        P                  V n        WE,          V n        W n        W0n        \        P                  ! 4       pWn
        \        V4      Vn        W`n        R # r   )r   r   r   DNS_TYPE_NSr   r   r   r   r   rB   rC   rD   r   )r   
dns_serverr    r!   r"   r#   nsr$   s   &&&&&& r   r   NSRecord.__init__x   sS    %%
'##%Z	r   c                    V ! V3/ VB # r   r	   r'   s   &&&,r   r+   NSRecord.from_string   r-   r   r.   r   r/   r4   s   @@r   rT   rT   v   s3     *+4;M;M
 # # #r   rT   c                   f   a a ] tR t^t o^R]P
                  ^ 3V 3R llt]RR l4       tRt	Vt
V ;t# )MXRecordr   c                  < \         SV `  4        \        P                  V n        WV,          V n        W0n        W@n        \        P                  ! 4       pW'n
        WP                  n        \        V4      VP                  n        Wpn        R # r   )r   r   r   DNS_TYPE_MXr   r   r   r   r   DNS_RPC_RECORD_NAME_PREFERENCEwPreferencenameExchangerC   rD   r   )	r   mail_server
preferencer    r!   r"   r#   mxr$   s	   &&&&&&& r   r   MXRecord.__init__   sc    %%
'557#)!+.	r   c                     VP                  V4      w  rE\        V4      pT ! YE3/ TB #   \         d   p\        R T,          4      ThRp?ii ; i)z?MX data must have server and priority (space separated), not %rN)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r.   r   r/   r4   s   @@r   r]   r]      s3     78c((A / / /r   r]   c                      a a ] tR t^t o^RRRRR]P
                  ]P                  3V 3R llt]RR l4       t	Rt
VtV ;t# )		SOARecordr   iX  iQ i  c                  < \         SV `  4        \        P                  V n        W,          V n        W0n        Wn        \        P                  ! 4       pW;n
        WKn        W[n        Wkn        W{n        WP                  n        \#        V4      VP                  n        W+P$                  n        \#        V4      VP$                  n        Wn        R # r   )r   r   r   DNS_TYPE_SOAr   r   r   r   r   DNS_RPC_RECORD_SOA
dwSerialNo	dwRefreshdwRetrydwExpiredwMinimumTtlNamePrimaryServerrC   rD   ZoneAdministratorEmailr   )r   mnamernamer    refreshretryexpireminimumr!   r"   r#   soar$   s   &&&&&&&&&&& r   r   SOARecord.__init__   s     	&&
'**,"$)!$'J!).""&),U""&	r   c                    VP                  V4      p\        V4      ^8w  d   \        R4      h \        ^^4       F  p\	        WE,          4      WE&   K  	  T ! T/ TB #   \
         d   p\        R4      ThRp?ii ; i)   zhData requires 7 space separated elements - nameserver, email, serial, refresh, retry, expire, minimumttlzBSOA serial, refresh, retry, expire, minimumttl' should be integersN)rh   rD   r   rangeri   rj   )r(   r   r)   r*   argsirm   s   &&&,   r   r+   SOARecord.from_string   s    zz#t9> !E F F	=1a[dg, !
 D#F##  	= !5 6;<=	=s   &A A8'A33A8r.   r   )r
   r   r   r   r   r0   DNS_RPC_FLAG_AUTH_ZONE_ROOTr   r1   r+   r   r2   r3   r4   s   @@r   rp   rp      sB     ,-s#tD<N<N;;( $ $ $r   rp   c                   j   a a ] tR t^t o^ ^d^R]P
                  ^ 3V 3R llt]RR l4       tRt	Vt
V ;t# )	SRVRecordr   c	                .  < \         S
V `  4        \        P                  V n        Wx,          V n        WPn        W`n        \        P                  ! 4       p	W9n
        WIn        W)n        WP                  n        \        V4      V	P                  n        Wn        R # r   )r   r   r   DNS_TYPE_SRVr   r   r   r   r   DNS_RPC_RECORD_SRV	wPrioritywWeightwPort
nameTargetrC   rD   r   )r   targetportrl   weightr    r!   r"   r#   srvr$   s   &&&&&&&&& r   r   SRVRecord.__init__   sl    &&
'**, 	# [	r   c                
    VP                  V4      w  rErg T\        T4      \        T4      \        T4      3p	T ! T	/ TB #   \         d   p\        R T,          4      ThRp?ii ; i  \         d   p\        R4      ThRp?ii ; i)zXSRV data must have four space separated elements: server, port, priority, weight; not %rNz/SRV port, priority, and weight must be integers)rh   rj   r   ri   )
r(   r   r)   r*   r   r   rl   r   rm   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#&B1A==Br.   r   r/   r4   s   @@r   r   r      s7     ./A3((A $ $ $r   r   c                   f   a a ] tR t^t o^R]P
                  ^ 3V 3R llt]RR l4       tRt	Vt
V ;t# )	TXTRecordr   c                  < \         S
V `  4        \        P                  V n        WE,          V n        W n        W0n        \        V\        4      '       d   V.p. pV F?  p\        P                  ! 4       pWxn	        \        V4      Vn        VP                  V4       KA  	  \        P                  ! 4       p	\        V4      V	n        Win	        Wn        R # r   )r   r   r   DNS_TYPE_TXTr   r   r   r   
isinstancerC   r   rB   rD   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                @    \         P                  ! V4      pV ! V3/ VB # r   )shlexrh   )r(   r   r)   r*   r   s   &&&, r   r+   TXTRecord.from_string  s     D!5#F##r   r.   r   r/   r4   s   @@r   r   r      s3     %&Cd6H6H( $ $ $r   r   c                      \        4       P                  4        F?  w  rV RR R8X  g   K  V RR p \        \        RV ,           4      pV\        V &   V\        V&   KA  	  R# )   NRecord	DNS_TYPE_i)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                    \        V \        4      '       d   V P                  4       p  \        V ,          pTP                  ! T3RT/TB #   \         d   p\        R4      ThRp?ii ; i)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   rC   upperr   KeyErrorr   r+   )tr   r)   r*   r   rm   s   &&&,  r   record_from_stringr     sh     !SGGI>!!$ d66v66  >56A=>s   A
 
A&A!!A&c                     V P                  4       p \        \        R V,           4      #   \         d   p\	        RT ,          4      ThRp?ii ; i)r   zUnknown type of DNS record %sN)r   r   r   AttributeErrorr   )rec_typertyperm   s   &  r   flag_from_stringr   (  sK    NNEOt[5011 O;hFGQNOs   ) AAAc                  R    \        V / VB p\        P                  ! 4       pW#n        V# 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                    V P                   P                  R4      P                  4       VP                   P                  R4      P                  4       8H  # )z%Match dns name (of type DNS_RPC_NAME).)rC   rstriplower)n1n2s   &&r   dns_name_equalr   7  s9    66==##%s);)A)A)CCCr   c                    \         P                  ! \         P                  V 4      p\         P                  ! \         P                  V4      # )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                   \        WE4      p\        P                  p V P                  \        P                  ^ WVRWGRR4
      w  rT	'       d   T	P                  ^ 8X  d   R# T	P                  ^ ,          P                   EF  pTP                  T8w  d   K  RpT\        P                  8X  d    TP                  TP                  8X  d   RpEMT\        P                   8X  d2   \#        TP                  4      \#        TP                  4      8X  d   RpEM^T\        P$                  8X  d+   \'        TP                  TP                  4      '       d   RpEMT\        P(                  8X  d+   \'        TP                  TP                  4      '       d   RpEMT\        P*                  8X  d+   \'        TP                  TP                  4      '       d   RpEMT\        P,                  8X  dn   \'        TP                  P.                  TP                  P.                  4      '       d2   TP                  P0                  TP                  P0                  8X  d   RpEMT\        P2                  8X  d   TP                  P4                  TP                  P4                  8X  d   TP                  P6                  TP                  P6                  8X  dl   TP                  P8                  TP                  P8                  8X  d=   \'        TP                  P:                  TP                  P:                  4      '       d   RpEM?T\        P<                  8X  Ede   TP                  P>                  TP                  P>                  8X  Ed4   TP                  P@                  TP                  P@                  8X  Ed   TP                  PB                  TP                  PB                  8X  d   TP                  PD                  TP                  PD                  8X  d   TP                  PF                  TP                  PF                  8X  dw   \'        TP                  PH                  TP                  PH                  4      '       d=   \'        TP                  PJ                  TP                  PJ                  4      '       d   RpMT\        PL                  8X  d   TP                  P                  TP                  P                  8X  d   Rp\O        TP                  P                  4       F\  pT;'       dP    TP                  PP                  T,          PP                  TP                  PP                  T,          PP                  8H  pK^  	  T'       g   EK  Tu # 	  R#   \
         d4   p
T
P                  ^ ,          \        P                  8X  d    Rp
?
R# T
hRp
?
ii ; i)z1Find a dns record that matches the specified dataNFT))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   r9   r   rA   r   rM   rV   r_   rb   ra   r   r   r   r   r   rr   rt   ru   rv   rw   rx   ry   rz   r   r   rC   )dns_connrk   zoner   record_typer   urecselect_flagsbuflenresrm   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 J XX\\!_00DIIMM!4D4H4HH  / 5Jc "f {  66!9AAA s   (V V?&V:8V::V?r   )r   r   samba.dcerpcr   r   sambar   r   rj   r   DNS_RPC_RECORDr   r7   r?   rK   rT   r]   rp   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   