gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [ascension] branch master updated: destroying Ascension


From: gnunet
Subject: [GNUnet-SVN] [ascension] branch master updated: destroying Ascension
Date: Wed, 08 May 2019 14:31:31 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository ascension.

The following commit(s) were added to refs/heads/master by this push:
     new 437a1cd  destroying Ascension
437a1cd is described below

commit 437a1cd8cad23b5fb09100f423cccc1ab302e081
Author: Christian Grothoff <address@hidden>
AuthorDate: Wed May 8 14:31:10 2019 +0200

    destroying Ascension
---
 ascension/ascension.py | 87 +++++++++++++++++++++++++-------------------------
 1 file changed, 43 insertions(+), 44 deletions(-)

diff --git a/ascension/ascension.py b/ascension/ascension.py
index f5ad4c0..e6b6d93 100644
--- a/ascension/ascension.py
+++ b/ascension/ascension.py
@@ -97,7 +97,6 @@ class Ascender():
         self.tld = self.domain.split(".")[::-1][0]
         self.zone = None
         self.zonegenerator = None
-        self.nscache = dict()
         self.flags = flags
         self.minimum = int(minimum)
         self.subzonedict = dict()
@@ -267,8 +266,10 @@ class Ascender():
                                               label)
 
                 taskqueue.task_done()
+        # End of worker
+        
 
-        # Check if there is zone has already been migrated
+        # Check if a delegated zone is available in GNS as per NS record
         nsrecords = self.zone.iterate_rdatas(dns.rdatatype.NS)
 
         # This is broken if your NS is for ns.foo.YOURZONE as you add
@@ -282,35 +283,31 @@ class Ascender():
         # foo.bar A IN 1.2.3.4
         # => bar PKEY GNS $NEWKEY     + mapping: bar => $NEWKEY
         # => foo[.bar] A GNS 1.2.3.4
-        gnspkey = list(filter(lambda record: 
str(record[2]).startswith('gns--pkey--'), nsrecords))
-        if gnspkey:
-            label = str(gnspkey[0][0])
-            ttl = gnspkey[0][1]
-            pkey = str(gnspkey[0][2])
-            # TODO Check this check
-            if not self.transferns in ['127.0.0.1', '::1', 'localhost']:
-                logging.warning("zone exists in GNS, adding it to local store")
-                self.add_pkey_record_to_zone(pkey[11:], self.domain,
-                                            label, ttl)
-                return
-
-        # Unify all records under same label into datastructure
+        gnspkey = list(filter(lambda record: for rec in record[2]: if 
str(rec).startswith('gns--pkey--'): return true; return false, nsrecords))
+        for nsrecord in nsrecords:
+            name = str(nsrecord[0])
+            ttl = nsrecord[1]
+            values = nsrecord[2]
+            gnspkeys = list(filter(lambda record: 
str(record).startswith('gns--pkey--'), values))
+            if len(gnspkeys) > 1:
+                logging.critical("Detected ambiguous PKEY records for label %s 
(not generating PKEY record)", name)
+                continue
+            gnspkey = gnspkeys[0]
+            # FIXME: check that this is actucally a well-formed PKEY string! 
(Crockford base32, sufficient length)
+            self.add_pkey_record_to_zone(pkey[11:], self.domain, name, ttl)
+            # FIXME: drop all NS records under this name later! => new map, if 
entry present during NS processing, skip!
+            
+        # Unify all records under same label into a record set
         customrdataset = dict()
-        for remaining in self.zone.iterate_rdatasets():
+        for name, rdset in self.zone.iterate_rdatasets():
             # build lookup table for later GNS2DNS records
-            domain = "%s.%s" % (str(remaining[0]), self.domain)
-            elementlist = []
-            for element in remaining[1]:
-                if dns.rdatatype.to_text(element.rdtype) in ['A', 'AAAA']:
-                    elementlist.append(str(element))
-            self.nscache[str(domain)] = elementlist
-            rdataset = remaining[1]
-            if customrdataset.get(str(remaining[0])) is None:
+            name = str(name) # Name could be str or DNS.name.Name
+            if customrdataset.get(name)) is None:
                 work = list()
-                work.append(rdataset)
-                customrdataset[str(remaining[0])] = work
+                work.append(rdset)
+                customrdataset[name] = work
             else:
-                customrdataset[str(remaining[0])].append(rdataset)
+                customrdataset[name].append(rdset)
 
         for label, value in customrdataset.items():
             if value is None:
@@ -387,6 +384,15 @@ class Ascender():
             logging.info("successfully added record with command %s",
                          ' '.join(ret.args))
 
+    def resolve_glue(self,
+                     authorityname: str) -> list:
+        rdsets = self.zone[dnsresolver].rdatasets
+        value = []
+        for rdataset in rdsets:
+            if rdataset.rdtype in [dns.rdatatype.A, dns.rdatatype.AAAA]:
+                value.append("address@hidden" % (zonename, str(rdataset)))
+        return value
+            
     def transform_to_gns_format(self,
                                 record: dns.rdata.Rdata,
                                 rdtype: dns.rdata.Rdata,
@@ -424,25 +430,18 @@ class Ascender():
             else:
                 value = "%s.%s" % (value, zonename)
         elif rdtype == 'NS':
-            nameserver = str(record)
+            nameserver = str(record)                   
             if value[-1] == ".":
-                value = value[:-1]
-            else:
-                value = "%s.%s" % (value, zonename)
-            if zonename[-1] == ".":
-                zonename = zonename[:-1]
-            if nameserver[-1] == ".":
-                dnsresolver = nameserver[:-1]
-                dnsresolver = self.nscache.get(dnsresolver, dnsresolver)
-            else:
-                dnsresolver = "%s.%s" % (nameserver, zonename)
-                dnsresolver = self.nscache.get(dnsresolver, dnsresolver)
-            if isinstance(dnsresolver, list):
-                value = []
-                for nsip in dnsresolver:
-                    value.append("address@hidden" % (zonename, nsip))
+                # FQDN provided
+                if value.endswith("." + zonename):
+                     # in bailiwick
+                     value = resolve_glue (self, nameserver)
+                else:
+                     # out of bailiwick
+                    value = 'address@hidden' % (str(label), zonename, 
dnsresolver)
             else:
-                value = 'address@hidden' % (str(label), zonename, dnsresolver)
+                # Name is relative to zone, must be in bailiwick
+                value = resolve_glue (self, nameserver)
 
             logging.info("transformed %s record to GNS2DNS format", rdtype)
             rdtype = 'GNS2DNS'

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]