gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [ascension] 03/03: fixed bugs, updated create and get pkey


From: gnunet
Subject: [GNUnet-SVN] [ascension] 03/03: fixed bugs, updated create and get pkey
Date: Thu, 09 May 2019 00:37:07 +0200

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

rexxnor pushed a commit to branch master
in repository ascension.

commit 523342ba45f078b64a4d10badb7df4e51f5145c1
Author: rexxnor <address@hidden>
AuthorDate: Thu May 9 00:36:20 2019 +0200

    fixed bugs, updated create and get pkey
---
 ascension/ascension.py          | 93 +++++++++++++++++++++++++----------------
 ascension/test/basic_named.conf |  1 +
 2 files changed, 58 insertions(+), 36 deletions(-)

diff --git a/ascension/ascension.py b/ascension/ascension.py
index e6b6d93..63b2680 100644
--- a/ascension/ascension.py
+++ b/ascension/ascension.py
@@ -267,10 +267,10 @@ class Ascender():
 
                 taskqueue.task_done()
         # End of worker
-        
+
 
         # Check if a delegated zone is available in GNS as per NS record
-        nsrecords = self.zone.iterate_rdatas(dns.rdatatype.NS)
+        nsrecords = self.zone.iterate_rdatasets(dns.rdatatype.NS)
 
         # This is broken if your NS is for ns.foo.YOURZONE as you add
         # the PKEY to YOURZONE instead of to the foo.YOURZONE subzone.
@@ -283,26 +283,35 @@ 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: for rec in record[2]: if 
str(rec).startswith('gns--pkey--'): return true; return false, nsrecords))
+        #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]
+            values = nsrecord[1]
+            ttl = values.ttl
+            #if values.startswith('gns--pkey--'):
+            #    gnspkeys.add()
             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)
+
+            num_gnspkeys = len(gnspkeys)
+            if not num_gnspkeys:
+                # skip empty values
+                continue
+            if num_gnspkeys > 1:
+                logging.critical("Detected ambiguous PKEY records for label \
+                                  %s (not generating PKEY record)", name)
                 continue
-            gnspkey = gnspkeys[0]
+
+            gnspkey = str(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)
+            self.add_pkey_record_to_zone(gnspkey[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 name, rdset in self.zone.iterate_rdatasets():
             # build lookup table for later GNS2DNS records
             name = str(name) # Name could be str or DNS.name.Name
-            if customrdataset.get(name)) is None:
+            if customrdataset.get(name) is None:
                 work = list()
                 work.append(rdset)
                 customrdataset[name] = work
@@ -386,13 +395,23 @@ class Ascender():
 
     def resolve_glue(self,
                      authorityname: str) -> list:
-        rdsets = self.zone[dnsresolver].rdatasets
+        """
+        Resolves IP Adresses within zone
+        :param authorityname:
+        """
+        try:
+            rdsets = self.zone[authorityname].rdatasets
+        except KeyError:
+            return []
         value = []
         for rdataset in rdsets:
             if rdataset.rdtype in [dns.rdatatype.A, dns.rdatatype.AAAA]:
-                value.append("address@hidden" % (zonename, str(rdataset)))
+                for rdata in rdataset:
+                    value.append("address@hidden" % (authorityname,
+                                               self.domain,
+                                               str(rdata)))
         return value
-            
+
     def transform_to_gns_format(self,
                                 record: dns.rdata.Rdata,
                                 rdtype: dns.rdata.Rdata,
@@ -430,18 +449,28 @@ class Ascender():
             else:
                 value = "%s.%s" % (value, zonename)
         elif rdtype == 'NS':
-            nameserver = str(record)                   
+            nameserver = str(record.target)
+            if nameserver[-1] == ".":
+                nameserver = nameserver[:-1]
             if value[-1] == ".":
                 # FQDN provided
-                if value.endswith("." + zonename):
-                     # in bailiwick
-                     value = resolve_glue (self, nameserver)
+                if value.endswith(".%s." % zonename):
+                    # in bailiwick
+                    value = self.resolve_glue(record.target)
                 else:
                      # out of bailiwick
-                    value = 'address@hidden' % (str(label), zonename, 
dnsresolver)
+                    if label.startswith("@"):
+                        value = 'address@hidden' % (zonename, nameserver)
+                    else:
+                        value = 'address@hidden' % (str(label), zonename, 
nameserver)
             else:
                 # Name is relative to zone, must be in bailiwick
-                value = resolve_glue (self, nameserver)
+                value = self.resolve_glue(record.target)
+                if not value:
+                    if label.startswith("@"):
+                        value = 'address@hidden' % (self.domain, 
record.target, self.domain)
+                    else:
+                        value = 'address@hidden' % (str(label), self.domain, 
record.target, self.domain)
 
             logging.info("transformed %s record to GNS2DNS format", rdtype)
             rdtype = 'GNS2DNS'
@@ -559,26 +588,14 @@ class Ascender():
         """
         try:
             ret = sp.run([GNUNET_ZONE_CREATION_COMMAND,
-                          '-C', zonestring],
-                         stdout=sp.DEVNULL,
+                          '-C', zonestring,
+                          '-V'],
+                         stdout=sp.PIPE,
                          stderr=sp.DEVNULL)
             logging.info("executed command: %s", " ".join(ret.args))
+            pkey_zone = ret.stdout.decode().strip()
         except sp.CalledProcessError:
             logging.info("Zone %s already exists!", zonestring)
-
-        # This is the most inefficient part of the zone hierarchy building
-        pkey_lookup = sp.Popen([GNUNET_ZONE_CREATION_COMMAND,
-                                '-d'],
-                               stdout=sp.PIPE)
-        pkey_line = sp.Popen(['grep', '^' + zonestring],
-                             stdin=pkey_lookup.stdout,
-                             stdout=sp.PIPE)
-        pkey_zone = sp.check_output(['cut', '-d',
-                                     ' ', '-f3'],
-                                    stdin=pkey_line.stdout)
-        pkey_zone = pkey_zone.decode().strip()
-        pkey_lookup.stdout.close()
-        pkey_line.stdout.close()
         return pkey_zone
 
     @staticmethod
@@ -675,6 +692,7 @@ def main():
     # Set to defaults to use before we get a SOA for the first time
     retry = 300
     refresh = 300
+
     # Main loop for actual daemon
     while True:
         gns_zone_serial = ascender.get_gns_zone_serial()
@@ -698,9 +716,11 @@ def main():
             continue
         if not gns_zone_serial:
             logging.info("GNS zone does not exist yet, performing full 
transfer.")
+            print("GNS zone does not exist yet, performing full transfer.")
             ascender.bootstrap_zone()
         elif gns_zone_serial == dns_zone_serial:
             logging.info("GNS zone is up to date.")
+            print("GNS zone is up to date.")
             if standalone:
                 return 0
             time.sleep(refresh)
@@ -714,6 +734,7 @@ def main():
             continue
         else:
             logging.info("GNS zone is out of date, performing incremental 
transfer.")
+            print("GNS zone is out of date, performing incremental transfer.")
 
         try:
             ascender.zone = dns.zone.from_xfr(ascender.zonegenerator,
diff --git a/ascension/test/basic_named.conf b/ascension/test/basic_named.conf
index 932ca4d..eb66bba 100644
--- a/ascension/test/basic_named.conf
+++ b/ascension/test/basic_named.conf
@@ -1,4 +1,5 @@
 options {
+    port 5000;
     directory ".";
     pid-file "/run/named/named.pid";
 

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



reply via email to

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