%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python2.7/site-packages/salt/utils/
Upload File :
Create Path :
Current File : //usr/lib/python2.7/site-packages/salt/utils/dns.pyc

�
���^c@@s�dZddlmZmZmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZddlmZyddlZ e!Z"Wne#k
r]e$Z"nXyddl%Z%e!Z&Wne#k
r�e$Z&nXej'j(j)d�dk	Z+d	Z,ej'j(j)d
�dk	Z-ej'j(j)d�dk	Z.ej'j(j)d�dk	Z/iej0j1j2d
6Z3e	j4e5�Z6de7fd��YZ8d�Z9e$d�Z:d�Z;d�Z<d�Z=d�Z>d�Z?d�Z@dddd�ZAdddd�ZBdd�ZCddd�ZDdddd�ZEddd�ZFddde$e$dd�ZGddde$e$dd�ZHe!e!d �ZId!�ZJd"�ZKd#�ZLd$d%�ZMd&�ZNd'�ZOd(�ZPd)�ZQd$d$d*�ZRd+dd,�ZSd-�ZTd.�ZUd/�ZVd0�ZWd1�ZXd+de$dd2�ZYd3d4�ZZd5d6�Z[dS(7u�
Compendium of generic DNS utilities
# Examples:
dns.lookup(name, rdtype, ...)
dns.query(name, rdtype, ...)

dns.srv_rec(data)
dns.srv_data('my1.example.com', 389, prio=10, weight=100)
dns.srv_name('ldap/tcp', 'example.com')

i(tabsolute_importtprint_functiontunicode_literalsN(t	ipaddress(tOrderedDict(tsix(tzipudigu)+search +fail +noall +answer +nocl +nottludrilluhostunslookupucmd.run_alltRFCcB@s�eZdZdZeddddf�Zed d!f�Zed"d#d$d%f�Zed&d'f�Zed(d)d*f�Z	d+Z
ed,d��Z
RS(-uL
    Simple holding class for all RFC/IANA registered lists & standards
    uissueu	issuewilduiodefiursaiudsaiuecdsaiued25519usha1usha256iupkixtaupkixeeudanetaudaneeeucertuspkiufullusha512utcpuudpusctpcC@sp||kr|S|dkrOg|j�D]\}}||kr)|^q)dS|j�|j�j|�SdS(Nuini����(titemstkeystvaluestindex(tlookuptreftmatchtcodetname((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pytvalidaters
3(uissueu	issuewilduiodef(iursa(iudsa(iuecdsa(iued25519(iusha1(iusha256(iupkixta(iupkixee(iudaneta(iudaneee(iucert(iuspki(iufull(iusha256(iusha512(utcpuudpusctpN(t__name__t
__module__t__doc__tCAA_TAGSRt
SSHFP_ALGOt
SSHFP_HASHt
TLSA_USAGEtTLSA_SELECTt
TLSA_MATCHINGt	SRV_PROTOtstaticmethodtNoneR(((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyRAs:cC@siy6t|�}d|ko&dkns1t�|SWn,ttfk
rdtdj|���nXdS(Nii��uInvalid port {0}(tinttAssertionErrort
ValueErrortformat(tport((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_to_port}s"cC@s�|jd�}d|ks'td��|s|trHtj|�j}q|tjd|�j�}t	j
dj||��n|g}xTtr�|j
d�}|dkr�Pn||d}||kr�Pn|j|�q�W|S(u0
    Split out a domain in its parents

    Leverages tldextract to take the TLDs from publicsuffix.org
    or makes a valiant approximation of that

    :param domain: dc2.ams2.example.com
    :param tld: Include TLD in list
    :return: [ 'dc2.ams2.example.com', 'ams2.example.com', 'example.com']
    u.uProvide a decent domainuC((?:(?:ac|biz|com?|info|edu|gov|mil|name|net|n[oi]m|org)\.)?[^.]+)$u;Without tldextract, dns.util resolves the TLD of {0} to {1}ii(trstripRtHAS_TLDEXTRACTt
tldextracttextracttsuffixtretsearchtgrouptlogtinfoR!tTruetfindtappend(tdomainttldtrestidx((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_tree�s"		cC@s�g}g|D]}|d^q
}x~|r�tj�t|�}x[t|�D]M\}}||8}|dkrO|j|j|�d�|j|�PqOqOWq&W|S(Nuweightiuname(trandomtsumt	enumerateR0tpop(trecsR3trectweightstrndtitw((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_weighted_order�s	

cC@slt|t�r9t|j�d�|�}||}|St|ttf�r^tj||�S||�SdS(Ni(t
isinstancetdictttypeR	tlistttupleRR(trec_datatrec_castR3((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_cast�s
cC@s0y�|jd�}t|�t|�ks0t�t|�t|�kr|t|�d}|d|!dj||�g}nt|�dkr�t|dtt|j����}n%td�t	|j
�|�D��}|SWnItttt
fk
r+}t
dj||dj|j�����nXdS(u�
    schema = OrderedDict({
        'prio': int,
        'weight': int,
        'port': to_port,
        'name': str,
    })
    rec_data = '10 20 25 myawesome.nl'

    res = {'prio': 10, 'weight': 20, 'port': 25 'name': 'myawesome.nl'}
    u iiucs@s0|]&\\}}}|t||�fVqdS(N(RH(t.0t
field_nameRGt	rec_field((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pys	<genexpr>�su"Unable to cast "{0}" as "{2}": {1}N(tsplittlenRtjoinRHtnexttiterR
RBRRtAttributeErrort	TypeErrorR R!R	(tschemaRFt
rec_fieldstcutoffR3te((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt	_data2rec�s"$(	cC@s#t|ttf�s!|g}nt�}y�x�|D]�}t||�}|r[||ksat�|j|�}||kr�g||<nt|�dkr�tt	|j
���}n||j|�q4W|SWnLttfk
r}tdj
dj|�dj|j��|���nXdS(Niu-Unable to cast "{0}" as a group of "{1}": {2}u,u (RARDRERRWRR9RMRORPR
R0R R!RNR	(RSt	recs_datat	group_keyR3trdataR4RV((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_data2rec_group�s&	

	cG@s
dj|�S(Nu (RN(RZ((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt	_rec2datascC@sC|jtj�}|jd�r;|jd�r;|dd!S|SdS(Nu"u'ii����(u"u'(u"u'(tstriptstringt
whitespacet
startswithtendswith(tdata((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_data_cleansc
C@s�djt|�}|rJ|djg|D]}dj|�^q(�7}n|dk	r�|r{tt|�t|��}nt|�}|dj|�7}n|r�|d7}ntddj||�dtd	d
�}d|dkrt	d
j|���nM|ddkr?t
jd|d|djt
jd��tS|dsMgSt}g}x||dj�D]j}	|	jdd�\}
}}|dkr�|dkr�qjn|dkr�t}qjn|jt|��qjW|r�|r�|r�tS|SdS(u�
    Use dig to lookup addresses
    :param name: Name of record to search
    :param rdtype: DNS record type
    :param timeout: server response timeout
    :param servers: [] of servers to use
    :return: [] of records or False if error
    udig {0} -t {1} uu@{0} u
+time={0} u+dnssec +adflag ucmd.run_allu{0} {1}tpython_shelltoutput_logleveluquietuignoring invalid typeustderruInvalid DNS type {}uretcodeiudig returned (%s): %su;ustdoutiuCNAMEuRRSIGN(R!tDIG_OPTIONSRNRRtfloatRMt__salt__tFalseR R,twarningR]R^R_t
splitlinesRLR.R0Rc(
Rtrdtypettimeouttserverstsecuretcmdtsrvt	validatedR3tlinet_trtypeRZ((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_lookup_digsB	2
("
c
C@s�d}|r|d7}n|dj||�7}|rg|djg|D]}dj|�^qE�7}ntd|d|dtd	d
�}|ddkr�tjd
|d|d�tSt|dj��}t}g}	y�d}
xd|
krt|�}
q�Wx�t	r�t|�}
|
j
�}
|
s9|
jd�r=Pn|
jdd�d\}}|dkrw|dkrwqn<|dkr�t	}qn$||kr�tdj|���n|	jt|��qWWntk
r�nX|	r�|r�|r�tS|	SdS(u�
    Use drill to lookup addresses
    :param name: Name of record to search
    :param rdtype: DNS record type
    :param timeout: command return timeout
    :param servers: [] of servers to use
    :return: [] of records or False if error
    udrill u	-D -o ad u{0} {1} uu@{0} ucmd.run_allRmRdReuquieturetcodeiudrill returned (%s): %sustderrustdoutuANSWER SECTIONu;;ii����uCNAMEuRRSIGuInvalid DNS type {}N(R!RNRhRiR,RjRPRkROR.R]R`RLRR R0Rct
StopIteration(
RRlRmRnRoRpRqt
lookup_resRrR3Rstl_typetl_rec((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt
_lookup_drillAsL	
2	
cC@s�y"itjd6tjd6|}Wn&tk
rJtdj|���nX|ratjd�nyAgtj|d|dtj
�D]}|dd^q�}|SWntjk
r�tSXdS(u�
    Use Python's socket interface to lookup addresses
    :param name: Name of record to search
    :param rdtype: A or AAAA
    :param timeout: ignored
    :return: [] of addresses or False if error
    uAuAAAAu"Invalid DNS type {} for gai lookupu<Ignoring timeout on gai resolver; fix resolv.conf to do thatiiN(
tsockettAF_INETtAF_INET6tKeyErrorR R!R,R-tgetaddrinfoRtSOCK_RAWtgaierrorRi(RRlRmtsock_ttsockt	addresses((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_lookup_gaiys


9c	C@s�dj|�}|r1|djt|��7}n||7}|dk	r]|dj|�7}ntd|dtdd�}d|d	kr�td
j|���nC|ddkr�tjd
|d|d	�tSd|dkr�gSg}|dkr|dn|djd�d}x�|j	�D]�}|dkrHd|krHq$n|jdd�d}x5dD]-}|j
|�re|t|�d}PqeqeW|jt
|��q$W|S(u�
    Use host to lookup addresses
    :param name: Name of record to search
    :param server: Server to query
    :param rdtype: DNS record type
    :param timeout: server response wait
    :return: [] of records or False if error
    uhost -t {0} u-W {0} u {0}ucmd.run_allRdReuquietuinvalid typeustderruInvalid DNS type {}uretcodeiuhost returned (%s): %suhas noustdoutu

i����uCNAMEuis an aliasu iurecorduaddressu
handled byu	alias foriN(urecorduaddressu
handled byu	alias for(R!RRRhRiR R,RjRLRkR`RMR0Rc(	RRlRmtserverRpR3t_stdoutRstprefix((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_lookup_host�s4	
-
cC@stjj�}|dk	r-t|�|_n|r?||_n|r]|jtjj	7_ny?g|j
||dt�D]}t|j
��^qy}|SWnatjjk
r�tdj|���n6tjjtjjtjjtjjfk
r�tSXdS(u�
    Use dnspython to lookup addresses
    :param name: Name of record to search
    :param rdtype: DNS record type
    :param timeout: query timeout
    :param server: [] of server(s) to try in order
    :return: [] of records or False if error
    traise_on_no_answeruInvalid DNS type {}N(tdnstresolvertResolverRRgtlifetimetnameserverst	ednsflagstflagstDOtqueryRiRctto_textt	rdatatypetUnknownRdatatypeR R!tNXDOMAINtYXDOMAINt
NoNameserverst	exceptiontTimeout(RRlRmRnRoR�trrR3((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_lookup_dnspython�s$	4
		cC@s�dj||�}|dk	r:|djt|��7}n|dk	r\|dj|�7}ntd|dtdd�}|dd	kr�tjd
|d|dj�djt	j
d
��tSt|dj��}g}y�t|�}d|krt
dj|���nx&tr8||kr)Pnt|�}qWx!tr\|j�}|sd|jd�rhPn�|dkr�d|kr�|j�dd }t|�}q<n�|dkr�|jd�}nr|jd�r�t|�}|jdd�}nB|j|�r6d|kr$|jdd�}q6|jd�}n|jt|d��t|�}q<WWntk
rqnX|dkr�dj|d�gS|SdS(u�
    Use nslookup to lookup addresses
    :param name: Name of record to search
    :param rdtype: DNS record type
    :param timeout: server response timeout
    :param server: server to query
    :return: [] of records or False if error
    unslookup -query={0} {1}u
 -timeout={0}u {0}ucmd.run_allRdReuquieturetcodeiunslookup returned (%s): %sustdouti����u;uunknown query typeuInvalid DNS type {}u*uCNAMEucanonical nameuSOAu=uName:u:iu N(R!RRRhRiR,RjRkR]R^R_RPROR R.R`RLR0RcRwRN(RRlRmR�RpRxR3Rs((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_lookup_nslookup�s\	%		
c@s�i}�p|jdd��|p3|jdd�}�pK|jdd��|pc|jdt�}|j�}dtt|dk�|f�fd	ttfd
tt	fdt
tfdtt
o�|fd
tto�|ff}	yK�dkrtd�|	D��\�}
nt�fd�|	D��}
Wn(tk
rYtjd�||�tSXi|d6}�r�t�ttf�s��g�n�dkr��|d<q�|r�|t��:}n�fd�}||
�}
n|s�|g}n�d}
|dkr|jd�d}
n|jd|
�d}
||
}|d|
!}t||�}|dkr�g|D]}||^qg}n|r�|t|�:}n|r�||d<n|r�||d<nx*|D]"}|
d||�}|r�|Sq�W|S(uI
    Lookup DNS records and return their data

    :param name: name to lookup
    :param rdtype: DNS record type
    :param method: gai (getaddrinfo()), dnspython, dig, drill, host, nslookup or auto (default)
    :param servers: (list of) server(s) to try in-order
    :param timeout: query timeout or a valiant approximation of that
    :param walk: Walk the DNS upwards looking for the record type or name/recordtype if walk='name'.
    :param walk_tld: Include the final domain in the walk
    :param secure: return only DNSSEC secured responses
    :return: [] of record data
    umethoduautousecureuserversutimeoutugaiuAuAAAAu	dnspythonudigudrilluhostunslookupcs@s*|] \}}}|r||fVqdS(N((RItrnametrcbtrtest((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pys	<genexpr>Osc3@s0|]&\}}}|�kr|r|VqdS(N((RIR�R�R�(tmethod(s2/usr/lib/python2.7/site-packages/salt/utils/dns.pys	<genexpr>RsuZUnable to lookup %s/%s: Resolver method %s invalid, unsupported or unable to perform queryurdtypec@s%tj����fd��}|S(Nc@s1x*�D]"}�d||�}|r|SqWdS(NR�((t
res_kwargsR�ts_res(tresolv_funcRn(s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_wrapperis
(t	functoolstwraps(R�R�(Rn(R�s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt_multi_srvrhs!iuSRVuTLSAu.iunameRN(uAuAAAA(u	dnspythonudigudrill(uSRVuTLSA(tgetRRitupperR�tanyR�t
HAS_DNSPYTHONRvtHAS_DIGR{t	HAS_DRILLR�tHAS_HOSTR�tHAS_NSLOOKUPRORwR,terrorRARDRERMR/R5(RRlR�RnRmtwalktwalk_tldRotoptst
query_methodsR�R�R�R4R1R�R3((R�Rns2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR!sl" 





 


c
C@s�|j�}i|d6|d6|d6|d6|d6|d6}|dkrg|jd�rgt|�}n|d	kr�gt|d
|�D]}	|	jd�r�|	^q�}
|
s�t|||�}
q�nt|||�}
i	td6td
6td6td6t	d6t
d	6td6td6t
d6}|
s/||kr3|
S|dkreg|
D]}|||�^qF}n3|dkr�|||
d�}n|||
�}|S(u�
    Query DNS for information.
    Where `lookup()` returns record data, `query()` tries to interpret the data and return it's results

    :param name: name to lookup
    :param rdtype: DNS record type
    :param method: gai (getaddrinfo()), pydns, dig, drill, host, nslookup or auto (default)
    :param servers: (list of) server(s) to try in-order
    :param timeout: query timeout or a valiant approximation of that
    :param secure: return only DNSSEC secured response
    :param walk: Walk the DNS upwards looking for the record type or name/recordtype if walk='name'.
    :param walk_tld: Include the top-level domain in the walk
    :return: [] of records
    umethoduserversutimeoutuwalkuwalk_tldusecureuPTRuarpauSPFuTXTuv=spfuAuAAAAuCAAuMXuSOAuSRVuSSHFPuTLSAi(uAuAAAAuSSHFPuTLSA(uSOAuSPF(R�Ratptr_nameRR`ta_rectaaaa_rectcaa_rectmx_rectsoa_rectspf_rectsrv_rect	sshfp_recttlsa_rec(
RRlR�RnRmR�R�Rotqargstanswertqrestrec_mapR3((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR��sB
4
&cK@sfi}|r4t|d|�}|r4||d<q4n|rbt|d|�}|rb||d<qbn|S(u�
    Return a list of addresses for name

    ip6:
        Return IPv6 addresses
    ip4:
        Return IPv4 addresses

    the rest is passed on to lookup()
    uAAAAuip6uAuip4(R(Rtip4tip6tkwargsR3((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pythost�scC@s%tdtjff�}t||�S(u}
    Validate and parse DNS record data for an A record
    :param rdata: DNS record data
    :return: { 'address': ip }
    uaddress(RRtIPv4AddressRW(RZtrschema((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR��scC@s%tdtjff�}t||�S(u�
    Validate and parse DNS record data for an AAAA record
    :param rdata: DNS record data
    :return: { 'address': ip }
    uaddress(RRtIPv6AddressRW(RZR�((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR��scC@s�tdd�fdtjfdd�ff�}t||d�}x�dD]�}|j|t�}|smqInxtt|�D]f\}}d|kr�qzn|jdd	�\}}td
�t	j|�D��}i||6||<qzWqIW|S(uz
    Validate and parse DNS record data for a CAA record
    :param rdata: DNS record data
    :return: dict w/fields
    uflagscS@st|�dkrdgSgS(Niucritical(R(tflag((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt<lambda>sutaguvaluecS@s
|jd�S(Nu',"(R](tval((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR�suissueu	issuewildu;ics@s|]}|jd�VqdS(u=N(RL(RItparam((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pys	<genexpr>s(uissueu	issuewild(
RRRR[R�RiR8RLRBtshlex(trdatasR�R3ttagttag_resR4R�tparams((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR�s 
i
cC@stt|�|�S(u�
    Generate MX record data
    :param target: server
    :param preference: preference number
    :return: DNS record data
    (R\R(ttargett
preference((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pytmx_data!scC@s.tdtfdtff�}t||d�S(uz
    Validate and parse DNS record data for MX record(s)
    :param rdata: DNS record data
    :return: dict w/fields
    u
preferenceuname(RRtstrR[(R�R�((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR�+s	cC@s=ytj|�jSWn"tk
r8tjd|�tSXdS(u_
    Return PTR name of given IP
    :param rdata: IP address
    :return: PTR record name
    u;Unable to generate PTR record; %s is not a valid IP addressN(Rt
ip_addresstreverse_pointerR R,R�Ri(RZ((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR�8s
c	C@sXtdtfdtfdtfdtfdtfdtfdtff�}t||�S(u{
    Validate and parse DNS record data for SOA record(s)
    :param rdata: DNS record data
    :return: dict w/fields
    umnameurnameuserialurefreshuretryuexpireuminimum(RR�RRW(RZR�((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR�Hs						c	C@s�|jd�}|jd�jd�s6td��nt�}t�}x\|D]T}|jd�r�|jdd�\}}||kr�td	j|���n|j|�qOni}|ddkr�|d|d<|d}nd|kr|jdd�\}}n;d|kr@|j	d�}|d|!}||}nd}|||<|s\qOn=|dkr�tj|�}|j
t|d�ks�t�n||d<qOW|S(u{
    Validate and parse DNS record data for SPF record(s)
    :param rdata: DNS record data
    :return: dict w/fields
    u iuv=spfuNot an SPF recorduexpuredirectu=iu!Modifier {0} can only appear onceu+u-u~u?u	qualifieru:u/uip4uip6i����uvalue(uexpuredirect(u+u-u~u?N(uip4uip6(RLR9R`R RtsetRR!taddR/RRtip_interfacetversionRR(	RZt
spf_fieldsR3tmodst	mech_spectmodR�tmechR4((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR�Zs>		

	



"cC@st||||�S(uw
    Generate SRV record data
    :param target:
    :param port:
    :param prio:
    :param weight:
    :return:
    (R\(R�R"tpriotweight((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pytsrv_data�s	utcpcC@setj|tj�}t|t�s0|j�r?t|�}n|rRd|}ndj|||�S(u�
    Generate SRV record name
    :param svc: ldap, 389 etc
    :param proto: tcp, udp, sctp etc.
    :param domain: name to append
    :return:
    u.u_{0}._{1}{2}(RRRRARtisdigitR#R!(tsvctprotoR1((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pytsrv_name�s
cC@s@tdtfdtfdtfdtff�}t||d�S(u{
    Validate and parse DNS record data for SRV record(s)
    :param rdata: DNS record data
    :return: dict w/fields
    upriouweightuportuname(RRR#R�R[(R�R�((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR��s			cC@sntj|tjd�}tj|tj�}tj|�}|jtj|��|j	�}t
|||�S(u�
    Generate an SSHFP record
    :param key_t: rsa/dsa/ecdsa/ed25519
    :param hash_t: sha1/sha256
    :param pub: the SSH public key
    uin(RRRRthashlibtnewtupdatetbase64t	b64decodet	hexdigestR\(tkey_tthash_ttpubthashertssh_fp((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt
sshfp_data�scC@s=tdtjfdtjfdd�ff�}t||�S(u|
    Validate and parse DNS record data for TLSA record(s)
    :param rdata: DNS record data
    :return: dict w/fields
    u	algorithmufp_hashufingerprintcS@s
|j�S(N(tlower(R�((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR��s(RRRRRW(RZR�((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR��s
cC@s�tj|tj�}tj|tj�}tj|tj�}tj|j��}|dkrrtj	|�}n/t
jtj|�}|j|�|j
�}t||||�S(u�
    Generate a TLSA rec
    :param pub: Pub key in PEM format
    :param usage:
    :param selector:
    :param matching:
    :return: TLSA data portion
    i(RRRRRtssltPEM_cert_to_DER_certR]tbinasciitb2a_hexR�R�R�R�R\(R�tusagetselectortmatchingtcert_fpR�((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt	tlsa_data�s	cC@sFtdtjfdtjfdtjfdtff�}t||�S(u|
    Validate and parse DNS record data for TLSA record(s)
    :param rdata: DNS record data
    :return: dict w/fields
    uusageuselectorumatchingupub(RRRRRR�RW(RZR�((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR��sc	C@sktt|||�dd|d|�}|s1tSg}x-|j�D]\}}|jt|��qDW|S(u�
    Find an SRV service in a domain or it's parents
    :param svc: service to find (ldap, 389, etc)
    :param proto: protocol the service talks (tcp, udp, etc)
    :param domain: domain to start search in
    :param walk: walk the parents if domain doesn't provide the service
    :param secure: only return DNSSEC-validated results
    :return: [
        [ prio1server1, prio1server2 ],
        [ prio2server1, prio2server2 ],
    ] (the servers will already be weighted according to the SRV rules)
    uSRVR�Ro(R�R�RiRR0R@(	R�R�R1R�RoR�R3RtR:((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pytservice	s'u
/etc/servicescC@sZi}tjjj|d���}x�|j�D]�}tjjj|j��}t|�s.|j	d�rqq.n9d|kr�|j
dd�\}}|j�}nd	}|j
�}|jd�j
d�\}}t
|�}x|D]}|j|i�}|j|t�}	|	sKi|d6|d6}
|r>||
d<n|
||<n�|	d}t|ttf�rz|j|�n||g|	d<|	jdt�}|r�|s�||	d<q�||kr�dj||�|	d<q�n|||<q�Wq.WWd	QXx^|j�D]P\}
}
t|
�dkr<|
j�j�||
<qqt|
j��||
<qW|S(
u�
    Parse through system-known services
    :return: {
        'svc': [
          {  'port': port
             'proto': proto,
             'desc': comment
          },
        ],
    }
    uru#iu/uportuprotoudescu{0}, {1}N(tsalttutilstfilestfopent	readlineststringutilst
to_unicodeR]RMR`RLRR9RR�RiRARDRER0R!RR
(t
services_fileR3tsvc_defstsvc_deftcommentR"R�Rtsvc_restpp_resR�t
curr_protot	curr_descRb((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pytservices'sP





u/etc/resolv.confcC@s|g}g}g}g}g}d}g}y9tjjj|���}x�|D]�}	tjjj|	�j�j�}	yd|	dj�|	d}
}t	t
jd�|��}|
dkr�|d}y�tj
|�}
|
j}t|
�}
|
|kr|j|
�n|dkr-|
|kr-|j|
�n(|dkrU|
|krU|j|
�nWq�tk
r~}tjd||�q�XnT|
d	kr�|d}n;|
d
kr�|}n&|
dkr�x|D]�}ytj|�}Wn&tk
r}tjd||�q�Xd|kr�|jdkrktj|j�}
tjjj|
�}tjd
j|
|�dt�}n|jdkr�q�n||kr�|j|�q�q�Wn3|
dkr�|d|kr�|j|d�q�nWqLtk
r�qLqLXqLWWdQX|r|rtjd|�ni|d6|d6|d6g|D]}|j^q6d6|d	6|d
6|d6SWntk
rwiSXdS(uN
    Parse a resolver configuration file (traditionally /etc/resolv.conf)
    uiicS@s|ddkS(Niu#u;(u#u;((tx((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyR�}su
nameserveriiu%s: %sudomainusearchusortlistu/u{0}{1}tstrictuoptionsNu:%s: The domain and search keywords are mutually exclusive.unameserversuip4_nameserversuip6_nameservers( RRRRRR	R]RLR�RDt	itertoolst	takewhileRR�R�R�R0R R,R�t
ip_networkRt	text_typetnetwork_addresstnetworktnatural_ipv4_netmaskR!Rit
IndexErrortdebugtwith_netmasktIOError(tsrcR�tip4_nameserverstip6_nameserversR*tsortlistR1toptionstsrc_fileRst	directivetargtaddrtip_addrR�texctip_rawtip_nettmasktip((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pytparse_resolvgs�
!
	
	



(\Rt
__future__RRRR�R�R�RtloggingR6R)R�R|R�R^R�tsalt.utils.filesRtsalt.utils.networktsalt.utils.pathtsalt.utils.stringutilstsalt.modules.cmdmodtsalt._compatRtsalt.utils.odictRtsalt.extRtsalt.ext.six.movesRtdns.resolverR�R.R�tImportErrorRiR&R%RtpathtwhichRR�RfR�R�R�tmodulestcmdmodtrun_allRht	getLoggerRR,tobjectRR#R5R@RHRWR[R\RcRvR{R�R�R�R�RR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�RR�RRR/(((s2/usr/lib/python2.7/site-packages/salt/utils/dns.pyt<module>s�





<		"			$			38*Hj=			
	
			7					@

Zerion Mini Shell 1.0