URI: 
       tdon't use large and silent try..except block. print more error messages - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit dfc3b64395a3fd9e675db2d44890c279554b1b39
   DIR parent 2f1c597e8f5cd5b3799920a64a6601aaee3673f2
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Tue, 31 Mar 2015 10:04:31 +0200
       
       don't use large and silent try..except block. print more error messages
       
       Diffstat:
         M plugins/openalias.py                |      97 +++++++++++++++----------------
       
       1 file changed, 47 insertions(+), 50 deletions(-)
       ---
   DIR diff --git a/plugins/openalias.py b/plugins/openalias.py
       t@@ -64,9 +64,9 @@ class Plugin(BasePlugin):
                return OA_READY
        
            def __init__(self, gui, name):
       -        print_error('[OA] Initialiasing OpenAlias plugin, OA_READY is ' + str(OA_READY))
                BasePlugin.__init__(self, gui, name)
                self._is_available = OA_READY
       +        self.print_error('OA_READY is ' + str(OA_READY))
        
            @hook
            def init_qt(self, gui):
       t@@ -175,7 +175,7 @@ class Plugin(BasePlugin):
        
            def resolve(self, url):
                '''Resolve OpenAlias address using url.'''
       -        print_error('[OA] Attempting to resolve OpenAlias data for ' + url)
       +        self.print_error('[OA] Attempting to resolve OpenAlias data for ' + url)
        
                prefix = 'btc'
                retries = 3
       t@@ -223,53 +223,50 @@ class Plugin(BasePlugin):
                    return None
        
            def validate_dnssec(self, url):
       -        print_error('[OA] Checking DNSSEC trust chain for ' + url)
       +        self.print_error('Checking DNSSEC trust chain for ' + url)
       +        default = dns.resolver.get_default_resolver()
       +        ns = default.nameservers[0]
       +        parts = url.split('.')
       +
       +        for i in xrange(len(parts), 0, -1):
       +            sub = '.'.join(parts[i - 1:])
       +            query = dns.message.make_query(sub, dns.rdatatype.NS)
       +            response = dns.query.udp(query, ns, 1)
       +            if response.rcode() != dns.rcode.NOERROR:
       +                self.print_error("query error")
       +                return 0
       +
       +            if len(response.authority) > 0:
       +                rrset = response.authority[0]
       +            else:
       +                rrset = response.answer[0]
       +
       +            rr = rrset[0]
       +            if rr.rdtype == dns.rdatatype.SOA:
       +                #Same server is authoritative, don't check again
       +                continue
       +
       +            query = dns.message.make_query(sub,
       +                                           dns.rdatatype.DNSKEY,
       +                                           want_dnssec=True)
       +            response = dns.query.udp(query, ns, 1)
       +            if response.rcode() != 0:
       +                self.print_error("query error")
       +                return 0
       +                # HANDLE QUERY FAILED (SERVER ERROR OR NO DNSKEY RECORD)
       +
       +            # answer should contain two RRSET: DNSKEY and RRSIG(DNSKEY)
       +            answer = response.answer
       +            if len(answer) != 2:
       +                self.print_error("answer error")
       +                return 0
       +
       +            # the DNSKEY should be self signed, validate it
       +            name = dns.name.from_text(sub)
       +            try:
       +                dns.dnssec.validate(answer[0], answer[1], {name: answer[0]})
       +            except dns.dnssec.ValidationFailure:
       +                self.print_error("validation error")
       +                return 0
        
       -        try:
       -            default = dns.resolver.get_default_resolver()
       -            ns = default.nameservers[0]
       -
       -            parts = url.split('.')
       -
       -            for i in xrange(len(parts), 0, -1):
       -                sub = '.'.join(parts[i - 1:])
       -
       -                query = dns.message.make_query(sub, dns.rdatatype.NS)
       -                response = dns.query.udp(query, ns, 1)
       -
       -                if response.rcode() != dns.rcode.NOERROR:
       -                    return 0
       -
       -                if len(response.authority) > 0:
       -                    rrset = response.authority[0]
       -                else:
       -                    rrset = response.answer[0]
       -
       -                rr = rrset[0]
       -                if rr.rdtype == dns.rdatatype.SOA:
       -                    #Same server is authoritative, don't check again
       -                    continue
       -
       -                query = dns.message.make_query(sub,
       -                                            dns.rdatatype.DNSKEY,
       -                                            want_dnssec=True)
       -                response = dns.query.udp(query, ns, 1)
       -
       -                if response.rcode() != 0:
       -                    return 0
       -                    # HANDLE QUERY FAILED (SERVER ERROR OR NO DNSKEY RECORD)
       -
       -                # answer should contain two RRSET: DNSKEY and RRSIG(DNSKEY)
       -                answer = response.answer
       -                if len(answer) != 2:
       -                    return 0
       -
       -                # the DNSKEY should be self signed, validate it
       -                name = dns.name.from_text(sub)
       -                try:
       -                    dns.dnssec.validate(answer[0], answer[1], {name: answer[0]})
       -                except dns.dnssec.ValidationFailure:
       -                    return 0
       -        except Exception, e:
       -            return 0
                return 1