
    VhE1                     (   d dl mZmZmZ eZd dlZd dlmZ d dl	m
Z
mZ 	 d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZdZdZ G d de      Z G d d	e      Z G d
 de      Z G d de      ZddZd Zy# e$ r  ej,                         ZY Nw xY w)    )absolute_importdivisionprint_functionN)missing_required_lib)	to_nativeto_texti  c                       e Zd Zy)ResolverErrorN)__name__
__module____qualname__     o/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/dns/plugins/module_utils/resolver.pyr
   r
   $   s    r   r
   c                   *    e Zd ZddZddZd ZddZy)	_Resolvec                 t    || _         || _        || _        t        j                  j                         | _        y N)timeouttimeout_retriesservfail_retriesdnsresolverget_default_resolverdefault_resolver)selfr   r   r   s       r   __init__z_Resolve.__init__)   s.    . 0 # A A Cr   Nc                 l   |j                         }|t        j                   j                  k(  ry|r||v ry|t        j                   j                  k(  r$t        j                  j                  |g||i      dt        j                   j                  |      z  }|r|d|}|r|d|}t        |      )NT)qnames	responseszError %sz while querying z with query )rcoder   NOERRORNXDOMAINr   r   r
   )r   targetresponse
nameserverqueryaccept_errorsr!   msgs           r   _handle_reponse_errorsz_Resolve._handle_reponse_errors/   s     CII%%%Um3CII&&&,,''xFHCU'VV399,,U33,/<C(+U3CC  r   c                     d}	 	  ||i |S # t         j                  j                  $ r }|| j                  k\  r||dz  }Y d }~nd }~ww xY wJ)Nr      )r   	exceptionTimeoutr   )r   functionargskwargsretryexcs         r   _handle_timeoutz_Resolve._handle_timeout>   sZ    000==(( D000I
 s    A
AA
c                    d}	 	  | j                   |j                  |fd| j                  i|}|j                  j                         t        j                  j                  k(  r|| j                  k  r|dz  }v|r(| j                  ||j                  |j                         |j                   S # t        $ r |j	                  dd      |_        	  | j                   |j                  |fd| j                  i|}n># t        $ r2 | j                  |_         | j                   |j                  |fi |}Y nw xY wY w xY w)Nr   lifetimesearchFr,   )r&   )r4   resolver   AttributeErrorpopr7   r'   	TypeErrorr6   r%   r!   r   SERVFAILr   r*   nameserversrrset)r   r   dnsnamehandle_response_errorsr1   r2   r%   s          r   _resolvez_Resolve._resolveH   s6   
W/4//0@0@'kTXT`T`kdjk   &&(CII,>,>>54K`K`C`
%++GX5F5FS[SgSg+h>>! " W"(**Xu"=W3t33HNNGmVZVbVbmflmH  W(,H%3t33HNNGVvVHWWs5   *B/ / D=*C;:D=;8D63D=5D66D=<D=
      r   )NNNF)r   r   r   r   r*   r4   rA   r   r   r   r   r   (   s    D!"r   r   c                   4     e Zd Z	 	 	 d fd	ZddZd Z xZS )SimpleResolverc                 2    t         t        |   |||       y N)r   r   r   )superrG   r   )r   r   r   r   	__class__s       r   r   zSimpleResolver.__init___   s"     	nd,+- 	- 	
r   c                 N   |r+t         j                  j                  t        |      d       }n(t         j                  j                  t        |            }| j                  }|r8t         j
                  j                  d      }| j                  |_        ||_        |j                  dt         j                  j                  t               	  | j                  ||fddi|S # t         j
                  j                  $ r |rY y  t         j
                  j                  $ r Y y w xY w)N)originF	configurer   	ednsflagspayloadr@   T)r   namefrom_unicoder   r   r   Resolverr   r=   use_ednsflagsDO
_EDNS_SIZErA   r#   NoAnswer)r   r$   nxdomain_is_emptyserver_addressestarget_can_be_relativer1   r?   r   s           r   r8   zSimpleResolver.resolvek   s    !hh++GFOD+IGhh++GFO<G((||,,u,=H#||H#3H !syy||ZH	 4==7Z4ZSYZZ||$$ 	 ||$$ 		s   C# #D$D$#D$c                 @   t         j                  j                  t        |            }| j                  }g }	  | j
                  ||fdt         j                  j                  d|D ]  }|j                  t        |              	 	  | j
                  ||fdt         j                  j                  d|D ]  }|j                  t        |              	 |S # t         j                  j                  $ r Y qw xY w# t         j                  j                  $ r Y |S w xY wNT)r@   rdtype)r   rS   rT   r   r   rA   	rdatatypeAappendstrr   rZ   AAAA)r   r$   r1   r?   r   resultdatas          r   resolve_addressesz SimpleResolver.resolve_addresses   s	   ((''8((	%hwPT]`]j]j]l]lwpvw )c$i()	%hzPT]`]j]j]o]ozsyz )c$i()  ||$$ 		
 ||$$ 		s%   AC AC< C98C9<DDrB   )TNF)r   r   r   r   r8   rh   __classcell__rK   s   @r   rG   rG   ^   s     	

.r   rG   c                   `     e Zd Z	 	 	 	 	 d
 fd	ZddZd Zd Zd Zd Zd Z	ddZ
dd	Z xZS )ResolveDirectlyFromNameServersc                     t         t        |   |||       i | _        || j                  j
                  n|| _        || _        y rI   )rJ   rl   r   cacher   r=   default_nameserversalways_ask_default_resolver)r   r   r   r   rp   r\   rK   s         r   r   z'ResolveDirectlyFromNameServers.__init__   sP     	,d<+- 	= 	

 
HXH`4#8#8#D#Dfv +F(r   c                    | j                   rd }| j                  }||| j                  }|s|r| j                  |d         }|st        d      t        j
                  j                  |t        j                  j                        }d}	 | j                  t        j                  j                  ||d   | j                        }|j                         t        j                  j                  k(  r|| j                  k  r|dz  }{	 | j!                  |||d   d|z  t        j                  j"                  g       d }|j$                  D ]U  }|j&                  t        j                  j(                  k(  s+t        j*                  j-                  t/        |d               }W g }	t1        |j2                        }
|
j5                  |j$                         |
D ]o  }|j&                  t        j                  j6                  k(  rd |fc S |j&                  t        j                  j                  k(  sX|	j5                  d |D               q |	rt9        t;        |	            |fS d |fS )Nr   z+Have neither nameservers nor nameserver IPs)r   r,   zget NS for "%s")r&   r'   r(   c              3   F   K   | ]  }t        |j                          y wr   )rd   r$   ).0	ns_records     r   	<genexpr>zBResolveDirectlyFromNameServers._lookup_ns_names.<locals>.<genexpr>   s     &Ts9+;+;'<&Ts   !)rp   ro   _lookup_addressr
   r   message
make_queryra   NSr4   r'   udpr   r!   r<   r   r*   r#   answerr`   CNAMErS   	from_textr   list	authorityextendSOAsortedset)r   r$   r=   nameserver_ipsr'   r2   r%   cnamer>   new_nameserversrrsetss              r   _lookup_ns_namesz/ResolveDirectlyFromNameServers._lookup_ns_names   s   ++K!55N>#9!55N+!11+a.AN MNN&&vs}}/?/?@++CIIMM5.QRBS]a]i]i+jH~~399#5#55%$BWBW:W
##H):BSV\B\mpmvmvmm  mA 	$ 	
 __ 	>E||s}}222**758+<=	> h(()hoo& 	UE||s}}000U{"||s}}///&&&Te&TT	U 0?vc/*+%OOD%OOr   c                     	 | j                  | j                  |d|      }|D cg c]  }t        |       c}S c c}w # t        j                  j
                  $ r g cY S w xY wr_   )rA   r   rd   r   r   rZ   )r   r$   r`   r{   ress        r   _lookup_address_implz3ResolveDirectlyFromNameServers._lookup_address_impl   s[    	]]4#8#8&Y]fl]mF(./CH///||$$ 	I	s   #? :? ? A! A!c                 ,   | j                   j                  |df      }|st| j                  |t        j                  j
                        }|j                  | j                  |t        j                  j                               || j                   |df<   |S )Naddr)rn   getr   r   ra   rb   r   re   r   r$   rf   s      r   rv   z.ResolveDirectlyFromNameServers._lookup_address   sq     01..vs}}GFMM$33FCMM<N<NOP+1DJJ'(r   c                    | j                   }d }t        dt        |j                        dz         D ]  }|j	                  |      d   }| j
                  j                  t        |      df      }|P| j                  |||      \  }}||}|| j
                  t        |      df<   || j
                  t        |      df<   n|}d } |S )N   r,   ns)r=   r   r   )	ro   rangelenlabelssplitrn   r   rd   r   )	r   r$   r   r=   itarget_part_nameserversnameserver_namesr   s	            r   _do_lookup_nsz,ResolveDirectlyFromNameServers._do_lookup_ns   s    11q#fmm,q01 	"A ,,q/!,K::>>3{+;T*BCL#*.*?*?Yd  vD*?  +E' %#/"2K7B

C,d34:?

C,g67*!N	" r   c                     | j                   j                  t        |      df      }|s+| j                  |      }|| j                   t        |      df<   |S )Nr   )rn   r   rd   r   r   s      r   
_lookup_nsz)ResolveDirectlyFromNameServers._lookup_ns   sL    Vd 34''/F.4DJJFT*+r   c                    dj                  t        |      gt        |      z         df}| j                  j	                  |      }|t
        j                  j                  d      }|j                  dt
        j                  j                  t               | j                  |_        t               }|D ]"  }|j                  | j                  |             $ t        |      |_        || j                  |<   |S )N|r   FrN   r   rP   )joinrd   r   rn   r   r   r   rU   rV   rW   rX   rY   r   r   updaterv   r=   )r   r?   r=   cache_indexr   r   r&   s          r   _get_resolverz,ResolveDirectlyFromNameServers._get_resolver   s    xxW1D DEzR::>>+.||,,u,=Ha399<<L#||H UN) H
%%d&:&::&FGH#).#9H &.DJJ{#r   c                    | j                  t        j                  j                  t	        |                  }|r@t               }|xs g D ]"  }|j                  | j                  |             $ t        |      }t        |xs g       S r   )
r   r   rS   rT   r   r   r   rv   r~   r   )r   r$   rh   r=   r   r&   s         r   resolve_nameserversz2ResolveDirectlyFromNameServers.resolve_nameservers  sv    oochh&;&;GFO&LM UN)/R H
%%d&:&::&FGH~.Kk'R((r   c                    t         j                  j                  t        |            }t	               }	 	 | j                  |      }| j                  j                  t        |      df      }|n2|}||v rt        dj                  |            |j                  |       mi }|xs g D ]4  }	d ||	<   | j                  ||	g      }
	  | j                  |
|fddi|||	<   6 |S # t         j                  j                  $ r |ri cY S  w xY w# t         j                  j                   $ r Y t         j                  j                  $ r |rg ||	<   n Y w xY w)NTr   z Found CNAME loop starting at {0}r@   )r   rS   rT   r   r   r   r   r#   rn   r   rd   r
   formataddr   rA   rZ   )r   r$   r[   r1   r?   loop_catcherr=   r   resultsr&   r   s              r   r8   z&ResolveDirectlyFromNameServers.resolve  se   ((''8u"oog6
 JJNNCL'#:;E}G,&#$F$M$Mf$UVVW%  %+ 	J"&GJ))'J<@H&3dmmHg&m^b&mfl&m
#		 3 <<(( $I$ <<(( <<(( $*,GJ' (s)   C" D
"!DD
E)%EE)rC   rD   r   TNNNrE   )T)r   r   r   r   r   r   rv   r   r   r   r   r8   ri   rj   s   @r   rl   rl      sD     $(G"%PN&)r   rl   c           
         |dj                  |      nd}i }	  |        S # t        $ rS}| |       } |j                  ddj                  |t        |            t	        j
                         d| Y d }~y d }~wt        j                  j                  $ rS}| |       } |j                  ddj                  |t        |            t	        j
                         d| Y d }~y d }~ww xY w)Nz for {0} z"Unexpected resolving error{0}: {1}r)   r-   zUnexpected DNS error{0}: {1}r   )	r   r
   	fail_jsonr   	traceback
format_excr   r-   DNSException)runnermoduleservergenerate_additional_resultssuffixr1   es          r   guarded_runr   .  s    *0*<Zv&"FF
x 
&202F 	
4;;FIaLQ**,	
 	

 ==%% 
&202F 	
.55filK**,	
 	

s"     	C*A	A77 C*A	C%%C*c                 R    t         !| j                  t        d      t                y y )N	dnspythonr   )DNSPYTHON_IMPORTERRORr   r   )r   s    r   assert_requirements_presentr   E  s+    ($[1+ 	 	
 )r   r   ) 
__future__r   r   r   type__metaclass__r   ansible.module_utils.basicr   +ansible.module_utils.common.text.convertersr   r   r   dns.exceptiondns.messagedns.name	dns.query	dns.rcodedns.rdatatypedns.resolverr   ImportErrorr   rY   	Exceptionr
   objectr   rG   rl   r   r   r   r   r   <module>r      s    A @   ; J! ! 
	I 	3"v 3"l2X 2jXX Xv
.
U	  30I0023s    A8 8BB