Codebase list dnsviz / 8ed304d
New upstream version 0.9.4 Ondřej Surý 1 year, 3 months ago
16 changed file(s) with 42 addition(s) and 35 deletion(s). Raw diff Collapse all Expand all
00 Metadata-Version: 1.1
11 Name: dnsviz
2 Version: 0.9.3
2 Version: 0.9.4
33 Summary: DNS analysis and visualization tool suite
44 Home-page: https://github.com/dnsviz/dnsviz/
55 Author: Casey Deccio
5757 %{_mandir}/man1/%{name}-query.1*
5858
5959 %changelog
60 * Mon Sep 27 2021 Casey Deccio
61 0.9.4 release
6062 * Thu Mar 11 2021 Casey Deccio
6163 0.9.3 release
6264 * Fri Feb 5 2021 Casey Deccio
16281628 required_params = []
16291629
16301630 class MissingRRSIGForAlg(ResponseError):
1631 description_template = 'The %(source)s RRset for the zone included algorithm %(algorithm)s (%(algorithm_text)s), but no RRSIG with algorithm %(algorithm)d covering the RRset was returned in the response.'
1631 description_template = 'The %(source)s RRset for the zone included algorithm %(algorithm)d (%(algorithm_text)s), but no RRSIG with algorithm %(algorithm)d covering the RRset was returned in the response.'
16321632 references = ['RFC 4035, Sec. 2.2', 'RFC 6840, Sec. 5.11']
16331633 required_params = ['algorithm']
16341634 source = None
19021902
19031903 _abstract = False
19041904 code = 'MISSING_SEP_FOR_ALG'
1905 description_template = "The %(source)s RRset for the zone included algorithm %(algorithm)s (%(algorithm_text)s), but no %(source)s RR matched a DNSKEY with algorithm %(algorithm)d that signs the zone's DNSKEY RRset."
1905 description_template = "The %(source)s RRset for the zone included algorithm %(algorithm)d (%(algorithm_text)s), but no %(source)s RR matched a DNSKEY with algorithm %(algorithm)d that signs the zone's DNSKEY RRset."
19061906 references = ['RFC 4035, Sec. 2.2', 'RFC 6840, Sec. 5.11']
19071907 required_params = ['algorithm']
19081908
15741574 rrset_info.rrset.rdtype != dns.rdatatype.DS and \
15751575 rrsig_status.dnskey is not None:
15761576 if rrset_info.rrset.rdtype == dns.rdatatype.DNSKEY:
1577 self.ksks.add(rrsig_status.dnskey)
1577 if self.ksks is not None:
1578 self.ksks.add(rrsig_status.dnskey)
15781579 else:
1579 self.zsks.add(rrsig_status.dnskey)
1580 if self.zsks is not None:
1581 self.zsks.add(rrsig_status.dnskey)
15801582
15811583 key = rrsig_status.rrset, rrsig_status.rrsig
15821584 break
16841686 self.response_errors = {}
16851687 self.response_warnings = {}
16861688
1687 if self.is_zone():
1689 if (self.name, dns.rdatatype.DNSKEY) in self.queries:
16881690 self.zsks = set()
16891691 self.ksks = set()
16901692
17131715 self._populate_invalid_response_status(query)
17141716
17151717 def _finalize_key_roles(self):
1716 if self.is_zone():
1718 if (self.name, dns.rdatatype.DNSKEY) in self.queries:
17171719 self.published_keys = set(self.get_dnskeys()).difference(self.zsks.union(self.ksks))
17181720 self.revoked_keys = set([x for x in self.get_dnskeys() if x.rdata.flags & fmt.DNSKEY_FLAGS['revoke']])
17191721
10301030 for cname in self.cname_targets:
10311031 for target in self.cname_targets[cname]:
10321032 self.cname_targets[cname][target] = self.__class__.deserialize(target, d, cache=cache)
1033 # these are optional
10331034 for signer in self.external_signers:
1034 self.external_signers[signer] = self.__class__.deserialize(signer, d, cache=cache)
1035
1036 # these two are optional
1035 if lb2s(signer.canonicalize().to_text()) in d:
1036 self.external_signers[signer] = self.__class__.deserialize(signer, d, cache=cache)
10371037 for target in self.ns_dependencies:
10381038 if lb2s(target.canonicalize().to_text()) in d:
10391039 self.ns_dependencies[target] = self.__class__.deserialize(target, d, cache=cache)
15411541 # If this was a network error, determine if it was a binding
15421542 # error
15431543 if err == RESPONSE_ERROR_NETWORK_ERROR:
1544 if errno1 == errno.EADDRNOTAVAIL:
1545 # Address not unavailable
1546 if qh._client is not None:
1547 raise SourceAddressBindError('Unable to bind to local address %s (%s)' % (qh._client, errno.errorcode[errno1]))
1548 else:
1549 raise SourceAddressBindError('Unable to bind to local address (%s)' % (errno.errorcode[errno1]))
1544 if errno1 == errno.EADDRNOTAVAIL and qh._client is not None:
1545 raise SourceAddressBindError('Unable to bind to local address %s (%s)' % (qh._client, errno.errorcode[errno1]))
15501546 elif errno1 == errno.EADDRINUSE or \
15511547 (errno1 == errno.EACCES and qtm.src is None):
15521548 # Address/port in use (EADDRINUSE) or insufficient
15551551 raise PortBindError('Unable to bind to local port %d (%s)' % (qh.params['sport'], errno.errorcode[errno1]))
15561552 else:
15571553 raise PortBindError('Unable to bind to local port (%s)' % (errno.errorcode[errno1]))
1558 elif qtm.src is None and errno1 not in (errno.EHOSTUNREACH, errno.ENETUNREACH, errno.EAFNOSUPPORT):
1559 # If source is None it didn't bind properly. If the
1560 # errno1 value after bind() is EHOSTUNREACH or
1561 # ENETUNREACH, it is because there was no proper IPv4
1562 # or IPv6 connectivity (which is handled elsewhere).
1563 # If socket() failed and resulted in an errno value of
1564 # EAFNOSUPPORT, then likewise there is not IPv6
1565 # support. In other cases, it was something unknown, so
1554 elif qtm.src is None and errno1 not in (errno.EHOSTUNREACH, errno.ENETUNREACH, errno.EAFNOSUPPORT, errno.EADDRNOTAVAIL):
1555 # If source is None it didn't bind properly. There are several sub-cases:
1556 # 1. If the bind() failed and resulted in an errno
1557 # value of EHOSTUNREACH, it is because there was no
1558 # proper IPv4 or IPv6 connectivity; the error for
1559 # this is handled elsewhere).
1560 # 2. If socket() failed and resulted in an errno value
1561 # of EAFNOSUPPORT, then there is no IPv6 support.
1562 # 3. If connect() failed and resulted in an errno value
1563 # of EADDRNOTAVAIL, then there is no IPv6 support.
1564 # In other cases, it was something unknown, so
15661565 # raise an error.
15671566 raise BindError('Unable to bind to local address (%s)' % (errno.errorcode.get(errno1, "unknown")))
15681567
811811
812812 def init_req(self):
813813 data = self._post_data()
814 self.msg_send = codecs.encode('POST %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: DNSViz/0.9.3\r\nAccept: application/json\r\n%sContent-Length: %d\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n%s' % (self.path, self.host, self._authentication_header(), len(data), data), 'latin1')
814 self.msg_send = codecs.encode('POST %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: DNSViz/0.9.4\r\nAccept: application/json\r\n%sContent-Length: %d\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n%s' % (self.path, self.host, self._authentication_header(), len(data), data), 'latin1')
815815 self.msg_send_len = len(self.msg_send)
816816 self.msg_send_index = 0
817817
12951295 for signed_keys, rrset_info in name_obj.get_dnskey_sets():
12961296 for rrsig in name_obj.rrsig_status[rrset_info]:
12971297 signer_obj = name_obj.get_name(rrsig.signer)
1298 if rrsig.signer != name_obj.name and not is_dlv:
1299 self.graph_zone_auth(signer_obj, False)
1298 if signer_obj is not None:
1299 # if we have the analysis corresponding to the signer, then
1300 # graph it too, if it was different from what we were
1301 # expecting
1302 if rrsig.signer != name_obj.name and not is_dlv:
1303 self.graph_zone_auth(signer_obj, False)
13001304 for dnskey in name_obj.rrsig_status[rrset_info][rrsig]:
13011305 rrsig_status = name_obj.rrsig_status[rrset_info][rrsig][dnskey]
13021306 if dnskey is None:
00 Metadata-Version: 1.1
11 Name: dnsviz
2 Version: 0.9.3
2 Version: 0.9.4
33 Summary: DNS analysis and visualization tool suite
44 Home-page: https://github.com/dnsviz/dnsviz/
55 Author: Casey Deccio
1919 .\" You should have received a copy of the GNU General Public License along
2020 .\" with DNSViz. If not, see <http://www.gnu.org/licenses/>.
2121 .\"
22 .TH dnsviz-probe 1 "11 Mar 2021" "0.9.3"
22 .TH dnsviz-probe 1 "27 Sep 2021" "0.9.4"
2323 .SH NAME
2424 dnsviz-graph \- graph the assessment of diagnostic DNS queries
2525 .SH SYNOPSIS
1919 .\" You should have received a copy of the GNU General Public License along
2020 .\" with DNSViz. If not, see <http://www.gnu.org/licenses/>.
2121 .\"
22 .TH dnsviz-grok 1 "11 Mar 2021" "0.9.3"
22 .TH dnsviz-grok 1 "27 Sep 2021" "0.9.4"
2323 .SH NAME
2424 dnsviz-grok \- assess diagnostic DNS queries
2525 .SH SYNOPSIS
1919 .\" You should have received a copy of the GNU General Public License along
2020 .\" with DNSViz. If not, see <http://www.gnu.org/licenses/>.
2121 .\"
22 .TH dnsviz-print 1 "11 Mar 2021" "0.9.3"
22 .TH dnsviz-print 1 "27 Sep 2021" "0.9.4"
2323 .SH NAME
2424 dnsviz-print \- print the assessment of diagnostic DNS queries
2525 .SH SYNOPSIS
1919 .\" You should have received a copy of the GNU General Public License along
2020 .\" with DNSViz. If not, see <http://www.gnu.org/licenses/>.
2121 .\"
22 .TH dnsviz-probe 1 "11 Mar 2021" "0.9.3"
22 .TH dnsviz-probe 1 "27 Sep 2021" "0.9.4"
2323 .SH NAME
2424 dnsviz-probe \- issue diagnostic DNS queries
2525 .SH SYNOPSIS
1919 .\" You should have received a copy of the GNU General Public License along
2020 .\" with DNSViz. If not, see <http://www.gnu.org/licenses/>.
2121 .\"
22 .TH dnsviz-query 1 "11 Mar 2021" "0.9.3"
22 .TH dnsviz-query 1 "27 Sep 2021" "0.9.4"
2323 .SH NAME
2424 dnsviz-query \- assess a DNS query
2525 .SH SYNOPSIS
1919 .\" You should have received a copy of the GNU General Public License along
2020 .\" with DNSViz. If not, see <http://www.gnu.org/licenses/>.
2121 .\"
22 .TH dnsviz 1 "11 Mar 2021" "0.9.3"
22 .TH dnsviz 1 "27 Sep 2021" "0.9.4"
2323 .SH NAME
2424 dnsviz \- issue and assess diagnostic DNS queries
2525 .SH SYNOPSIS
119119
120120 create_config('')
121121 setup(name='dnsviz',
122 version='0.9.3',
122 version='0.9.4',
123123 author='Casey Deccio',
124124 author_email='casey@deccio.net',
125125 url='https://github.com/dnsviz/dnsviz/',