Spade
Mini Shell
| Directory:~$ /proc/self/root/usr/lib64/python2.7/site-packages/dns/ |
| [Home] [System Details] [Kill Me] |
�
w�Qc@s�dZddlZddlZddlZddlZddlZddlZdZdZ dZ
dZdefd��YZ
dS( s*Help for building DNS wire format
messagesi����NiiiitRenderercBs�eZdZd
ddd
d�Zd�Zd�Zejj d�Z
d�Zd�Zd
d �Z
ejjd
�Zd�Zd�ZRS(stHelper class for building DNS wire-format
messages.
Most applications can use the higher-level L{dns.message.Message}
class and its to_wire() method to generate wire-format messages.
This class is for those applications which need finer control
over the generation of messages.
Typical use::
r = dns.renderer.Renderer(id=1, flags=0x80, max_size=512)
r.add_question(qname, qtype, qclass)
r.add_rrset(dns.renderer.ANSWER, rrset_1)
r.add_rrset(dns.renderer.ANSWER, rrset_2)
r.add_rrset(dns.renderer.AUTHORITY, ns_rrset)
r.add_edns(0, 0, 4096)
r.add_rrset(dns.renderer.ADDTIONAL, ad_rrset_1)
r.add_rrset(dns.renderer.ADDTIONAL, ad_rrset_2)
r.write_header()
r.add_tsig(keyname, secret, 300, 1, 0, '', request_mac)
wire = r.get_wire()
@ivar output: where rendering is written
@type output: cStringIO.StringIO object
@ivar id: the message id
@type id: int
@ivar flags: the message flags
@type flags: int
@ivar max_size: the maximum size of the message
@type max_size: int
@ivar origin: the origin to use when rendering relative names
@type origin: dns.name.Name object
@ivar compress: the compression table
@type compress: dict
@ivar section: the section currently being rendered
@type section: int (dns.renderer.QUESTION, dns.renderer.ANSWER,
dns.renderer.AUTHORITY, or dns.renderer.ADDITIONAL)
@ivar counts: list of the number of RRs in each section
@type counts: int list of length 4
@ivar mac: the MAC of the rendered message (if TSIG was used)
@type mac: string
ii��cCs�tj�|_|dkr3tjdd�|_n ||_||_||_||_ i|_
t|_ddddg|_
|jjd�d|_dS(s�Initialize a new renderer.
@param id: the message id
@type id: int
@param flags: the DNS message flags
@type flags: int
@param max_size: the maximum message size; the default is 65535.
If rendering results in a message greater than I{max_size},
then L{dns.exception.TooBig} will be raised.
@type max_size: int
@param origin: the origin to use when rendering relative names
@type origin: dns.name.Namem or None.
ii��titNt(t cStringIOtStringIOtoutputtNonetrandomtrandinttidtflagstmax_sizetorigintcompresstQUESTIONtsectiontcountstwritetmac(tselfR
RRR
((s2/usr/lib64/python2.7/site-packages/dns/renderer.pyt__init__Js cCs~|jj|�|jj�g}x9|jj�D](\}}||kr3|j|�q3q3Wx|D]}|j|=qfWdS(s�Truncate
the output buffer at offset I{where}, and remove any
compression table entries that pointed beyond the truncation
point.
@param where: the offset
@type where: int
N(RtseekttruncateRt iteritemstappend(Rtwheretkeys_to_deletetktv((s2/usr/lib64/python2.7/site-packages/dns/renderer.pyt _rollbackgs
cCs=|j|kr9|j|kr-tjj�n||_ndS(sZSet
the renderer's current section.
Sections must be rendered order: QUESTION, ANSWER, AUTHORITY,
ADDITIONAL. Sections may be empty.
@param section: the section
@type section: int
@raises dns.exception.FormError: an attempt was made to set
a section value less than the current section.
N(Rtdnst exceptiont FormError(RR((s2/usr/lib64/python2.7/site-packages/dns/renderer.pyt_set_sectionyscCs�|jt�|jj�}|j|j|j|j�|jjtj d||��|jj�}||j
kr�|j|�tj
j�n|jtcd7<dS(sAdd a question to the
message.
@param qname: the question name
@type qname: dns.name.Name
@param rdtype: the question rdata type
@type rdtype: int
@param rdclass: the question rdata class
@type rdclass: int
s!HHiN(R"RRttelltto_wireRR
RtstructtpackRRRR
tTooBigR(Rtqnametrdtypetrdclasstbeforetafter((s2/usr/lib64/python2.7/site-packages/dns/renderer.pytadd_question�s
cKs�|j|�|jj�}|j|j|j|j|�}|jj�}||jkrw|j|�tj j
�n|j|c|7<dS(sAdd the rrset to the specified section.
Any keyword arguments are passed on to the rdataset's
to_wire()
routine.
@param section: the section
@type section: int
@param rrset: the rrset
@type rrset: dns.rrset.RRset object
N(R"RR#R$RR
RRRR
R'R(RRtrrsettkwR+tnR,((s2/usr/lib64/python2.7/site-packages/dns/renderer.pyt add_rrset�s
!
cKs�|j|�|jj�}|j||j|j|j|�}|jj�}||jkrz|j|�tj j
�n|j|c|7<dS(s�Add the rdataset to the specified section,
using the specified
name as the owner name.
Any keyword arguments are passed on to the rdataset's
to_wire()
routine.
@param section: the section
@type section: int
@param name: the owner name
@type name: dns.name.Name object
@param rdataset: the rdataset
@type rdataset: dns.rdataset.Rdataset object
N(R"RR#R$RR
RRRR
R'R(RRtnametrdatasetR/R+R0R,((s2/usr/lib64/python2.7/site-packages/dns/renderer.pytadd_rdataset�s
c
Cs�|dM}||d>O}|jt�|jj�}|jjtjddtjj ||d��|d k r�|jj�}x�|D]�}tjd|jd�}|jj|�|jj�} |j|j�|jj�}
|jj
| d�tjd|
| �}|jj|�|jj
dd�q�W|jj�}|jj
|d�tjd||�}|jj|�|jj
dd�n|jj�}||jkr�|j|�tjj�n|jtcd7<d S(
s�Add an EDNS OPT record to the message.
@param edns: The EDNS level to use.
@type edns: int
@param ednsflags: EDNS flag values.
@type ednsflags: int
@param payload: The EDNS sender's payload field, which is the
maximum
size of UDP datagram the sender can handle.
@type payload: int
@param options: The EDNS options list
@type options: list of dns.edns.Option instances
@see: RFC 2671
l�~is!BHHIHis!HHis!HiN(R"t
ADDITIONALRR#RR%R&Rt rdatatypetOPTRtotypeR$RRRR
R'R(
Rtednst ednsflagstpayloadtoptionsR+tlstarttopttstufftstarttendtlendR,((s2/usr/lib64/python2.7/site-packages/dns/renderer.pytadd_edns�s8
!
c Cs�|jt�|jj�} |jj�}
tjj|
||tt j ��|||||d|� \}|_
}|j|j|j|j
�|jjtjdtjjtjjdd��|jj�}
|jj|�|jj�}||jkr|j| �tjj�n|jj|
d�|jjtjd||
��|jtcd7<|jjd�|jjtjd|jt��|jjdd�dS( s�Add
a TSIG signature to the message.
@param keyname: the TSIG key name
@type keyname: dns.name.Name object
@param secret: the secret to use
@type secret: string
@param fudge: TSIG time fudge
@type fudge: int
@param id: the message id to encode in the tsig signature
@type id: int
@param tsig_error: TSIG error code; default is 0.
@type tsig_error: int
@param other_data: TSIG other data.
@type other_data: string
@param request_mac: This message is a response to the request which
had the specified MAC.
@type request_mac: string
@param algorithm: the TSIG algorithm to use
@type algorithm: dns.name.Name object
t algorithms!HHIHiis!Hii
N(R"R5RR#tgetvalueRttsigtsigntintttimeRR$RR
RR%R&R6tTSIGt
rdataclasstANYRRR R'RR(RtkeynametsecrettfudgeR
t
tsig_errort
other_datatrequest_macRDR+tst
tsig_rdatatctxtrdata_startR,((s2/usr/lib64/python2.7/site-packages/dns/renderer.pytadd_tsig�s8
#c
Cst|jjd�|jjtjd|j|j|jd|jd|jd|jd��|jjdd�dS(s�Write
the DNS message header.
Writing the DNS message header is done after all sections
have been rendered, but before the optional TSIG signature
is added.
is!HHHHHHiiiN(RRRR%R&R
RR(R((s2/usr/lib64/python2.7/site-packages/dns/renderer.pytwrite_header1s
cCs
|jj�S(s@Return the wire format message.
@rtype: string
(RRE(R((s2/usr/lib64/python2.7/site-packages/dns/renderer.pytget_wire?sN(t__name__t
__module__t__doc__RRRR"RRKtINR-R1R4RCRFtdefault_algorithmRWRXRY(((s2/usr/lib64/python2.7/site-packages/dns/renderer.pyRs) 04 (R\RR%RRIt
dns.exceptionRtdns.tsigRtANSWERt AUTHORITYR5tobjectR(((s2/usr/lib64/python2.7/site-packages/dns/renderer.pyt<module>s