[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [ascension] 05/09: ascension dry-run fixes, packaging, asce
From: |
gnunet |
Subject: |
[GNUnet-SVN] [ascension] 05/09: ascension dry-run fixes, packaging, ascension-bind |
Date: |
Fri, 10 May 2019 15:24:25 +0200 |
This is an automated email from the git hooks/post-receive script.
rexxnor pushed a commit to branch master
in repository ascension.
commit b15fbf76712439230882deb1d739e6fe6d1d23dd
Author: rexxnor <address@hidden>
AuthorDate: Fri May 10 10:12:01 2019 +0200
ascension dry-run fixes, packaging, ascension-bind
---
ascension/ascension.py | 21 +-
deb_dist/ascension-0.5.0/.pc/.quilt_patches | 1 +
deb_dist/ascension-0.5.0/.pc/.quilt_series | 1 +
deb_dist/ascension-0.5.0/.pc/.version | 1 +
deb_dist/ascension-0.5.0/.pc/applied-patches | 0
.../.pybuild/pythonX.Y_3.5/.pydistutils.cfg | 11 +
deb_dist/ascension-0.5.0/PKG-INFO | 76 +++
deb_dist/ascension-0.5.0/README | 65 +++
deb_dist/ascension-0.5.0/ascension.1 | 108 ++++
deb_dist/ascension-0.5.0/ascension/__init__.py | 0
.../ascension-0.5.0/ascension}/ascension.py | 590 ++++++++++-----------
deb_dist/ascension-0.5.0/debian/ascension.1 | 45 ++
deb_dist/ascension-0.5.0/debian/changelog | 5 +
deb_dist/ascension-0.5.0/debian/compat | 1 +
deb_dist/ascension-0.5.0/debian/control | 33 ++
deb_dist/ascension-0.5.0/debian/copyright | 21 +
.../ascension-0.5.0/debian/debhelper-build-stamp | 1 +
deb_dist/ascension-0.5.0/debian/files | 2 +
.../debian/python3-ascension.manpages | 1 +
.../debian/python3-ascension.postinst | 41 ++
.../debian/python3-ascension.postinst.debhelper | 7 +
.../debian/python3-ascension.prerm.debhelper | 10 +
.../debian/python3-ascension.substvars | 3 +
.../debian/python3-ascension/DEBIAN/control | 31 ++
.../debian/python3-ascension/DEBIAN/md5sums | 12 +
.../debian/python3-ascension/DEBIAN/postinst | 3 +
.../debian/python3-ascension/DEBIAN/prerm | 12 +
.../debian/python3-ascension/usr/bin/ascension | 12 +
.../python3-ascension/usr/man/man1/ascension.1 | 103 ++++
.../doc/python3-ascension/changelog.Debian.gz | Bin 0 -> 161 bytes
.../usr/share/doc/python3-ascension/copyright | 21 +
.../usr/share/man/man1/ascension.1.gz | Bin 0 -> 390 bytes
deb_dist/ascension-0.5.0/debian/rules | 8 +
deb_dist/ascension-0.5.0/debian/source/format | 1 +
deb_dist/ascension-0.5.0/debian/watch | 4 +
deb_dist/ascension-0.5.0/setup.cfg | 4 +
deb_dist/ascension-0.5.0/setup.py | 55 ++
deb_dist/ascension-0.6.1/.pc/.quilt_patches | 1 +
deb_dist/ascension-0.6.1/.pc/.quilt_series | 1 +
deb_dist/ascension-0.6.1/.pc/.version | 1 +
deb_dist/ascension-0.6.1/.pc/applied-patches | 0
deb_dist/ascension-0.6.1/PKG-INFO | 81 +++
deb_dist/ascension-0.6.1/README | 70 +++
deb_dist/ascension-0.6.1/ascension.1 | 108 ++++
deb_dist/ascension-0.6.1/ascension/__init__.py | 0
.../ascension-0.6.1/ascension}/ascension.py | 21 +-
.../python3-ascension/installed-by-dh_installdocs | 0
deb_dist/ascension-0.6.1/debian/changelog | 5 +
deb_dist/ascension-0.6.1/debian/compat | 1 +
deb_dist/ascension-0.6.1/debian/control | 36 ++
deb_dist/ascension-0.6.1/debian/files | 2 +
.../debian/python3-ascension.postinst.debhelper | 7 +
.../debian/python3-ascension.prerm.debhelper | 10 +
.../debian/python3-ascension.substvars | 3 +
.../debian/python3-ascension/DEBIAN/control | 30 ++
.../debian/python3-ascension/DEBIAN/md5sums | 10 +
.../debian/python3-ascension/DEBIAN/postinst | 9 +
.../debian/python3-ascension/DEBIAN/prerm | 12 +
.../debian/python3-ascension/usr/bin/ascension | 12 +
.../python3-ascension/usr/man/man1/ascension.1 | 108 ++++
.../doc/python3-ascension/changelog.Debian.gz | Bin 0 -> 162 bytes
deb_dist/ascension-0.6.1/debian/rules | 31 ++
deb_dist/ascension-0.6.1/debian/source/format | 1 +
deb_dist/ascension-0.6.1/debian/source/options | 1 +
deb_dist/ascension-0.6.1/setup.cfg | 4 +
deb_dist/ascension-0.6.1/setup.py | 55 ++
deb_dist/python3-ascension_0.5.0-1_all.deb | Bin 0 -> 11380 bytes
deb_dist/python3-ascension_0.6.1-1_all.deb | Bin 0 -> 11316 bytes
.../debian/ascension-bind.config | 32 +-
.../debian/ascension-bind/DEBIAN/config | 32 +-
.../debian/ascension-bind/DEBIAN/control | 2 +-
helpers/python3-ascension.postinst | 46 ++
helpers/python3-ascension.prerm | 22 +
73 files changed, 1702 insertions(+), 362 deletions(-)
diff --git a/ascension/ascension.py b/ascension/ascension.py
index cf8d7b4..cc83964 100644
--- a/ascension/ascension.py
+++ b/ascension/ascension.py
@@ -702,6 +702,18 @@ def main():
if debug:
logging.basicConfig(level=logging.DEBUG)
+ # Initialize class instance
+ ascender = Ascender(domain, transferns, port, flags, minimum)
+
+ # Do dey run before GNUnet check
+ if dryrun:
+ dns_zone_serial = ascender.get_dns_zone_serial(ascender.domain,
+ ascender.transferns)
+ if not dns_zone_serial:
+ return 1
+ else:
+ return 0
+
# Checks if GNUnet services are running
try:
sp.check_output([GNUNET_ARM_COMMAND, '-I'], timeout=1)
@@ -709,9 +721,6 @@ def main():
logging.critical('GNUnet services are not running!')
sys.exit(1)
- # Initialize class instance
- ascender = Ascender(domain, transferns, port, flags, minimum)
-
# Set to defaults to use before we get a SOA for the first time
retry = 300
refresh = 300
@@ -732,12 +741,6 @@ def main():
dns_zone_serial = ascender.get_dns_zone_serial(ascender.domain,
ascender.transferns)
- if dryrun:
- if not dns_zone_serial:
- return 1
- else:
- return 0
-
if not dns_zone_serial:
logging.error("Could not get DNS zone serial")
if standalone:
diff --git a/deb_dist/ascension-0.5.0/.pc/.quilt_patches
b/deb_dist/ascension-0.5.0/.pc/.quilt_patches
new file mode 100644
index 0000000..6857a8d
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/.pc/.quilt_patches
@@ -0,0 +1 @@
+debian/patches
diff --git a/deb_dist/ascension-0.5.0/.pc/.quilt_series
b/deb_dist/ascension-0.5.0/.pc/.quilt_series
new file mode 100644
index 0000000..c206706
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/.pc/.quilt_series
@@ -0,0 +1 @@
+series
diff --git a/deb_dist/ascension-0.5.0/.pc/.version
b/deb_dist/ascension-0.5.0/.pc/.version
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/.pc/.version
@@ -0,0 +1 @@
+2
diff --git a/deb_dist/ascension-0.5.0/.pc/applied-patches
b/deb_dist/ascension-0.5.0/.pc/applied-patches
new file mode 100644
index 0000000..e69de29
diff --git a/deb_dist/ascension-0.5.0/.pybuild/pythonX.Y_3.5/.pydistutils.cfg
b/deb_dist/ascension-0.5.0/.pybuild/pythonX.Y_3.5/.pydistutils.cfg
new file mode 100644
index 0000000..b198fd8
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/.pybuild/pythonX.Y_3.5/.pydistutils.cfg
@@ -0,0 +1,11 @@
+[clean]
+all=1
+[build]
+build-lib=/mnt/ascension/deb_dist/ascension-0.5.0/.pybuild/pythonX.Y_3.5/build
+[install]
+force=1
+install-layout=deb
+install-scripts=/usr/bin
+install-lib=/usr/lib/python3.5/dist-packages
+[easy_install]
+allow_hosts=None
diff --git a/deb_dist/ascension-0.5.0/PKG-INFO
b/deb_dist/ascension-0.5.0/PKG-INFO
new file mode 100644
index 0000000..a9f80de
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/PKG-INFO
@@ -0,0 +1,76 @@
+Metadata-Version: 1.1
+Name: ascension
+Version: 0.5.0
+Summary: Tool to migrate DNS Zones to the GNU Name System
+Home-page: https://gnunet.org/git/ascension.git/
+Author: rexxnor
+Author-email: address@hidden
+License: UNKNOWN
+Description: # Ascension
+
+ Tool to easily migrate existing DNS Zones into the GNU Name System
using
+ incremental zone transfers (AXFR/IXFR).
+
+ ## How to install
+ To install the ascension simply execute one of the following commands
in the
+ freshly cloned directory:
+
+ ```bash
+ # System wide installation
+ sudo python3 setup.py install
+
+ # Local installation through virtualenv
+ python3 -m venv .venv
+ source .venv/bin/activate
+ python3 setup.py install
+ ```
+
+ ## How to install (Developer)
+ A developer installation is very handy when you are making changes to
the source
+ code as this way you don't need to re-run the installation procedure
every time
+ you make a change.
+
+ ```bash
+ # installation through virtualenv
+ python3 -m venv .venv
+ source .venv/bin/activate
+ python3 setup.py develop
+ ```
+
+ ## How to use
+ If you have installed it, simply execute ascension with one of several
options.
+ You can also just run the file ascension.py itself directly.
+
+ Taken from the docstring of the ascension.py file:
+ ```
+ Ascension
+
+ Usage:
+ ascension <domain> [-d] [-p]
+ ascension <domain> <port> [-d] [-p]
+ ascension <domain> -n <transferns> [-d] [-p]
+ ascension <domain> -n <transferns> <port> [-d] [-p]
+ ascension -p | --public
+ ascension -h | --help
+ ascension -v | --version
+
+ Options:
+ <domain> Domain to migrate
+ <port> Port for zone transfer
+ <transferns> DNS Server that does the zone transfer
+ -p --public Make records public on the DHT
+ -d --debug Enable debugging
+ -h --help Show this screen.
+ -v --version Show version.
+ ```
+
+ Example use:
+ ```
+ # Transfers the sy TLD from ns1.tld.sy.
+ ascension sy -n ns1.tld.sy.
+ # Transfers the nu TLD from zonedata.iis.se with debug options enabled
+ ascension nu -n zonedata.iis.se. -d
+ ```
+
+Platform: UNKNOWN
+Classifier: Programming Language :: Python :: 3
diff --git a/deb_dist/ascension-0.5.0/README b/deb_dist/ascension-0.5.0/README
new file mode 100644
index 0000000..784536f
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/README
@@ -0,0 +1,65 @@
+# Ascension
+
+Tool to easily migrate existing DNS Zones into the GNU Name System using
+incremental zone transfers (AXFR/IXFR).
+
+## How to install
+To install the ascension simply execute one of the following commands in the
+freshly cloned directory:
+
+```bash
+# System wide installation
+sudo python3 setup.py install
+
+# Local installation through virtualenv
+python3 -m venv .venv
+source .venv/bin/activate
+python3 setup.py install
+```
+
+## How to install (Developer)
+A developer installation is very handy when you are making changes to the
source
+code as this way you don't need to re-run the installation procedure every time
+you make a change.
+
+```bash
+# installation through virtualenv
+python3 -m venv .venv
+source .venv/bin/activate
+python3 setup.py develop
+```
+
+## How to use
+If you have installed it, simply execute ascension with one of several options.
+You can also just run the file ascension.py itself directly.
+
+Taken from the docstring of the ascension.py file:
+```
+Ascension
+
+Usage:
+ ascension <domain> [-d] [-p]
+ ascension <domain> <port> [-d] [-p]
+ ascension <domain> -n <transferns> [-d] [-p]
+ ascension <domain> -n <transferns> <port> [-d] [-p]
+ ascension -p | --public
+ ascension -h | --help
+ ascension -v | --version
+
+Options:
+ <domain> Domain to migrate
+ <port> Port for zone transfer
+ <transferns> DNS Server that does the zone transfer
+ -p --public Make records public on the DHT
+ -d --debug Enable debugging
+ -h --help Show this screen.
+ -v --version Show version.
+```
+
+Example use:
+```
+# Transfers the sy TLD from ns1.tld.sy.
+ascension sy -n ns1.tld.sy.
+# Transfers the nu TLD from zonedata.iis.se with debug options enabled
+ascension nu -n zonedata.iis.se. -d
+```
diff --git a/deb_dist/ascension-0.5.0/ascension.1
b/deb_dist/ascension-0.5.0/ascension.1
new file mode 100644
index 0000000..1cd6f1e
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/ascension.1
@@ -0,0 +1,108 @@
+.\" This file is part of Ascension.
+.\" Copyright (C) 2018,2019 GNUnet e.V.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this document
+.\" under the terms of the GNU Free Documentation License, Version 1.3 or
+.\" any later version published by the Free Software Foundation; with no
+.\" Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
+.\" copy of the license is included in the file
+.\" ``FDL-1.3''.
+.\"
+.\" A copy of the license is also available from the Free Software
+.\" Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+.\"
+.\" Alternately, this document is also available under the General
+.\" Public License, version 3 or later, as published by the Free Software
+.\" Foundation. A copy of the license is included in the file
+.\" ``GPL3''.
+.\"
+.\" A copy of the license is also available from the Free Software
+.\" Foundation Web site at http://www.gnu.org/licenses/gpl.html.
+.\"
+.\" SPDX-License-Identifier: GPL3.0-or-later OR FDL1.3-or-later
+.\"
+.Dd May 1, 2019
+.Dt ASCENSION 1
+.Os
+.Sh NAME
+.Nm ascension
+.Nd migrate existing DNS zones into the GNU Name System
+.Sh SYNOPSIS
+.Nm
+.Op Ar domain Fl d Fl p Fl s \- minimum-ttl=<ttl> \- dry-run
+.Op Ar domain port Fl d Fl p Fl s \- minimum-ttl=<ttl> \- dry-run
+.Op Ar domain Fl n Ar transferns Fl d Fl p Fl s Fl \- minimum-ttl=<ttl> \-
dry-run
+.Op Ar domain Fl n Ar transferns Ar port Fl d Fl p Fl s \- minimum-ttl=<ttl>
\- dry-run
+.Op Fl d | \-debug
+.Op Fl h | \-help
+.Op Fl p | \-public
+.Op Fl v | \-version
+.Op Fl s | \-standalone
+.Sh DESCRIPTION
+.Nm
+is a tool to migrate existing DNS Zones into the GNU Name System (GNS) using
incremental zone transfers (AXFR/IXFR).
+To achieve this it uses
+.Xr gnunet-identity 1 ,
+.Xr gnunet-namestore 1 ,
+.Xr gnunet-gns 1 .
+As
+.Nm
+relies on these 3 GNUnet services,
+.Xr gnunet-arm 1
+must be installed and running.
+.Bl -tag -width Ds
+.It Ar domain Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN passed as domain.
+The debug, public and standalone options are optional.
+.It Ar domain port Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain, using port for zone transfer.
+The debug, public and standalone options are optional.
+.It Ar domain Fl n Ar transferns Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain from the DNS server transferns.
+The debug, public and standalone options are optional.
+.It Ar domain Fl n Ar transferns Ar port Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain from the DNS server transferns using port for the
zone transfer.
+The debug, public and standalone options are optional.
+.It Fl s | \-standalone
+Run Ascension once
+.It Fl d | \-debug
+Enable debugging
+.It Fl h | \-help
+Print short help on options
+.It Fl p | \-public
+Make records public on the DHT
+.It Fl v | \-version
+Print ascension version number
+.El
+.\" .Sh FILES
+.Sh EXAMPLES
+To transfer the sy TLD from ns1.tld.sy:
+.Pp
+.Dl $ ascension sy -n ns1.tld.sy.
+.Pp
+To transfer the nu TLD from zonedata.iis.se with debug options enabled:
+.Pp
+.Dl $ ascension nu -n zonedata.iis.se. -d
+.Sh SEE ALSO
+.Xr gnunet-arm 1 ,
+.Xr gnunet-gns 1 ,
+.Xr gnunet-identity 1 ,
+.Xr gnunet-namestore 1
+.Sh HISTORY
+The
+.Nm
+tool was designed and written in 2018 by
+.An rexxnor Aq Mt address@hidden .
+.Sh AUTHORS
+This man page was written by
+.An ng0 Aq Mt address@hidden
+and updated by
+.An rexxnor Aq Mt address@hidden
+it first appeared in
+.Nm
+0.5.1.
+.Sh BUGS
+Report bugs by using
+.Lk https://bugs.gnunet.org
+or by sending electronic mail to
+.Aq Mt address@hidden .
diff --git a/deb_dist/ascension-0.5.0/ascension/__init__.py
b/deb_dist/ascension-0.5.0/ascension/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/ascension/ascension.py
b/deb_dist/ascension-0.5.0/ascension/ascension.py
similarity index 55%
copy from ascension/ascension.py
copy to deb_dist/ascension-0.5.0/ascension/ascension.py
index cf8d7b4..180b6ce 100644
--- a/ascension/ascension.py
+++ b/deb_dist/ascension-0.5.0/ascension/ascension.py
@@ -20,12 +20,11 @@
# Author rexxnor
"""
Usage:
- ascension <domain> [-d] [-p] [-s] [--minimum-ttl=<ttl>] [--dry-run]
+ ascension <domain> [-d] [-p] [-s] [--minimum-ttl=<ttl>]
ascension <domain> <port> [-d] [-p] [-s] [--minimum-ttl=<ttl>]
- ascension <domain> -n <transferns> [-d] [-p] [-s] [--minimum-ttl=<ttl>]
[--dry-run]
- ascension <domain> -n <transferns> <port> [-d] [-p] [-s]
[--minimum-ttl=<ttl>] [--dry-run]
+ ascension <domain> -n <transferns> [-d] [-p] [-s] [--minimum-ttl=<ttl>]
+ ascension <domain> -n <transferns> <port> [-d] [-p] [-s]
[--minimum-ttl=<ttl>]
ascension -p | --public
- ascension -s | --debug
ascension -s | --standalone
ascension -h | --help
ascension -v | --version
@@ -35,7 +34,6 @@ Options:
<port> Port for zone transfer
<transferns> DNS Server that does the zone transfer
--minimum-ttl=<ttl> Minimum TTL for records to migrate [default: 3600]
- --dry-run Only try if a zone transfer is allowed
-p --public Make records public on the DHT
-s --standalone Run ascension once
-d --debug Enable debugging
@@ -62,61 +60,62 @@ GNUNET_ZONE_CREATION_COMMAND = 'gnunet-identity'
GNUNET_NAMESTORE_COMMAND = 'gnunet-namestore'
GNUNET_GNS_COMMAND = 'gnunet-gns'
GNUNET_ARM_COMMAND = 'gnunet-arm'
-# This is the list of record types Ascension (and GNS) currently
-# explicitly supports. Record types we encounter that are not
-# in this list and not in the OBSOLETE_RECORD_TYPES list will
-# create a warning (information loss during migration).
+# TODO find better solution for ignoring DNSSEC record types
SUPPORTED_RECORD_TYPES = [
- "A", "AAAA", "NS", "MX", "SRV", "TXT", "CNAME",
-]
-# Record types that exist in DNS but that won't ever exist in GNS
-# as they are not needed anymore (so we should not create a warning
-# if we drop one of these).
-OBSOLETE_RECORD_TYPES = [
- "PTR",
- "SIG", "KEY",
- "RRSIG", "NSEC", "DNSKEY", "NSEC3", "NSEC3PARAM", "CDNSKEY",
- "TKEY", "TSIG",
- "TA", "DLV",
+ "A", "AAAA", "NS", "MX", "SRV", "TXT", "CNAME"
]
class Ascender():
"""
Class that provides migration for any given domain
"""
- def __init__(self,
- domain: str,
- transferns: str,
- port: str,
- flags: str,
- minimum: str) -> None:
- self.domain = domain
+ @classmethod
+ def __init__(cls, domain, transferns, port, flags, minimum):
+ cls.domain = domain
if domain[-1] == '.':
- self.domain = self.domain[:-1]
- self.port = int(port)
- self.transferns = transferns
- self.soa = None
- self.tld = self.domain.split(".")[::-1][0]
- self.zone = None
- self.zonegenerator = None
- self.flags = flags
- self.minimum = int(minimum)
- self.subzonedict = dict()
-
- def bootstrap_zone(self) -> None:
+ cls.domain = cls.domain[:-1]
+ cls.port = int(port)
+ cls.transferns = transferns
+ cls.soa = None
+ cls.tld = cls.domain.split(".")[::-1][0]
+ cls.zone = None
+ cls.zonegenerator = None
+ cls.nscache = dict()
+ cls.flags = flags
+ cls.minimum = int(minimum)
+ cls.subzonedict = dict()
+
+ @classmethod
+ def initial_zone_transfer(cls, serial=None):
+ """
+ Initialize the zone transfer generator
+ :param serial: The serial to base the transfer on
+ """
+ if serial:
+ cls.zonegenerator = dns.query.xfr(cls.transferns,
+ cls.domain,
+ rdtype=dns.rdatatype.IXFR,
+ serial=serial,
+ port=cls.port)
+ else:
+ cls.zonegenerator = dns.query.xfr(cls.transferns,
+ cls.domain,
+ port=cls.port)
+
+ @classmethod
+ def bootstrap_zone(cls):
"""
Creates the zone in gnunet
"""
try:
ret = sp.run([GNUNET_ZONE_CREATION_COMMAND,
- '-C', self.domain])
+ '-C', cls.domain])
logging.info("executed command: %s", " ".join(ret.args))
except sp.CalledProcessError:
- logging.info("Zone %s already exists!", self.domain)
+ logging.info("Zone %s already exists!", cls.domain)
- def get_dns_zone_serial(self,
- domain: str,
- resolver=None) -> int:
+ @classmethod
+ def get_current_serial(cls, domain, resolver=None):
"""
Gets the current serial for a given zone
:param domain: Domain to query for in DNS
@@ -129,51 +128,72 @@ class Ascender():
# compared to AXFR/IXFR - changed to respect this
try:
soa_answer = dns.resolver.query(domain, 'SOA')
- master_answer = dns.resolver.query(soa_answer[0].mname, 'A')
except dns.resolver.NoAnswer:
- logging.warning("The domain '%s' is not publicly resolvable.",
- domain)
+ logging.critical("the domain '%s' does not exist", domain)
+ sys.exit(1)
except dns.resolver.NXDOMAIN:
- logging.warning("The domain '%s' is not publicly resolvable.",
- domain)
- except Exception:
- logging.warning("The domain '%s' is not publicly resolvable.",
- domain)
-
+ logging.critical("the domain '%s' is invalid", domain)
+ sys.exit(1)
+ master_answer = dns.resolver.query(soa_answer[0].mname, 'A')
try:
if resolver:
zone = dns.zone.from_xfr(dns.query.xfr(
- resolver, domain, port=self.port))
+ resolver, domain, port=cls.port))
else:
zone = dns.zone.from_xfr(dns.query.xfr(
master_answer[0].address, domain,
- port=self.port))
+ port=cls.port))
except dns.resolver.NoAnswer:
- logging.critical("Nameserver for '%s' did not answer.", domain)
- return None
+ logging.error("nameserver for '%s' did not answer", domain)
except dns.exception.FormError:
- logging.critical("Domain '%s' does not allow xfr requests.",
- domain)
- return None
+ logging.critical("domain '%s' does not allow xfr requests", domain)
+ sys.exit(1)
except dns.query.TransferError:
- logging.critical("Domain '%s' does not allow xfr requests.",
- domain)
- return None
- except Exception:
- logging.error("Unexpected error while transfering domain '%s'",
- domain)
- return None
-
+ logging.critical("domain '%s' does not allow xfr requests", domain)
+ sys.exit(1)
for soa_record in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA):
- if not self.transferns:
+ if not cls.transferns:
mname = soa_record[2].mname
- if self.domain not in mname:
- self.transferns = str(soa_record[2].mname) + "." + domain
+ if cls.domain not in mname:
+ cls.transferns = str(soa_record[2].mname) + "." + domain
else:
- self.transferns = str(soa_record[2].mname)
- return int(soa_record[2].serial)
+ cls.transferns = str(soa_record[2].mname)
+ return soa_record[2].serial
- def add_records_to_gns(self) -> None:
+ @classmethod
+ def mirror_zone(cls):
+ """
+ Extract necessary information from Generator
+ """
+ currentserial = int(cls.get_current_serial(cls.domain, cls.transferns))
+ zoneserial = int(cls.get_zone_serial())
+ if zoneserial == 0:
+ logging.info("zone does not exist yet")
+ cls.initial_zone_transfer()
+ try:
+ cls.zone = dns.zone.from_xfr(cls.zonegenerator,
+ check_origin=False)
+ except dns.zone.BadZone:
+ logging.critical("Malformed DNS Zone '%s'", cls.domain)
+ cls.soa = cls.get_zone_soa(cls.zone)
+ elif zoneserial < currentserial:
+ logging.info("zone is out of date")
+ cls.initial_zone_transfer(serial=zoneserial)
+ try:
+ cls.zone = dns.zone.from_xfr(cls.zonegenerator)
+ except dns.zone.BadZone:
+ logging.critical("Malformed DNS Zone '%s'", cls.domain)
+ cls.soa = cls.get_zone_soa(cls.zone)
+ elif zoneserial == currentserial:
+ logging.info("zone is up to date")
+ # should be unnecessary but AXFR SOA might not be equal to direct SOA
+ else:
+ # because it runs as a daemon, ignore this case but log it
+ logging.warning("SOA serial is bigger than zone serial?")
+ logging.warning("zone: %s, current: %s", zoneserial, currentserial)
+
+ @classmethod
+ def add_records_to_gns(cls):
"""
Extracts records from zone and adds them to GNS
:raises AttributeError: When getting incomplete data
@@ -199,17 +219,18 @@ class Ascender():
# execute thing to run on item
label, listofrdatasets = labelrecords
subzones = label.split('.')
- domain = self.domain
+ domain = cls.domain
if len(subzones) > 1:
+ ttl = cls.get_zone_refresh_time()
label = subzones[0]
subdomains = ".".join(subzones[1:])
subzone = "%s.%s" % (subdomains, domain)
fqdn = "%s.%s.%s" % (label, subdomains, domain)
- if fqdn in self.subzonedict.keys():
+ if fqdn in cls.subzonedict.keys():
label = "@"
domain = fqdn
- elif subzone in self.subzonedict.keys():
+ elif subzone in cls.subzonedict.keys():
domain = subzone
for rdataset in listofrdatasets:
@@ -219,12 +240,12 @@ class Ascender():
continue
try:
- if rdataset.ttl <= self.minimum:
- ttl = self.minimum
+ if rdataset.ttl <= cls.minimum:
+ ttl = cls.minimum
else:
ttl = rdataset.ttl
except AttributeError:
- ttl = self.minimum
+ ttl = cls.minimum
value = str(record)
@@ -234,7 +255,7 @@ class Ascender():
# modify value to fit gns syntax
rdtype, value, label = \
- self.transform_to_gns_format(record,
+ cls.transform_to_gns_format(record,
rdtype,
domain,
label)
@@ -249,7 +270,7 @@ class Ascender():
recordline.append('%d %s %s %s' %
(int(ttl),
rdtype,
- self.flags,
+ cls.flags,
element))
else:
# build recordline
@@ -261,73 +282,49 @@ class Ascender():
recordline.append('%d %s %s %s' %
(int(ttl),
rdtype,
- self.flags,
+ cls.flags,
value))
# add recordline to gns and filter out empty lines
if len(recordline) > 1:
- self.add_recordline_to_gns(recordline,
+ cls.add_recordline_to_gns(recordline,
domain,
label)
taskqueue.task_done()
- # End of worker
-
-
- # Check if a delegated zone is available in GNS as per NS record
- 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.
- # alice NS IN ns.alice
- # bob NS IN ns.bob
- # carol NS IN ns.alice
- # => carol GNS2DNS GNS address@hidden
- # dave.foo NS IN gns--pkey--$KEY.bob
- # => dave.foo PKEY GNS $KEY
- # 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))
- illegalchars = ["I", "L", "O", "U", "i", "l", "o", "u"]
- for nsrecord in nsrecords:
- name = str(nsrecord[0])
- values = nsrecord[1]
- ttl = values.ttl
-
- gnspkeys = list(filter(lambda record:
- str(record).startswith('gns--pkey--'),
- values))
-
- 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 = str(gnspkeys[0])
- # FIXME: drop all NS records under this name later!
- # => new map, if entry present during NS processing, skip!
- if not any(illegal in gnspkey for illegal in illegalchars):
- self.add_pkey_record_to_zone(gnspkey[11:],
- self.domain,
- name,
- ttl)
-
- # Unify all records under same label into a record set
+ # Check if there is zone has already been migrated
+ nsrecords = cls.zone.iterate_rdatas(dns.rdatatype.NS)
+
+ 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 cls.transferns in ['127.0.0.1', '::1', 'localhost']:
+ logging.warning("zone exists in GNS, adding it to local store")
+ cls.add_pkey_record_to_zone(pkey[11:], cls.domain,
+ label, ttl)
+ return
+
+ # Unify all records under same label into datastructure
customrdataset = dict()
- for name, rdset in self.zone.iterate_rdatasets():
+ for remaining in cls.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:
+ domain = "%s.%s" % (str(remaining[0]), cls.domain)
+ elementlist = []
+ for element in remaining[1]:
+ if dns.rdatatype.to_text(element.rdtype) in ['A', 'AAAA']:
+ elementlist.append(str(element))
+ cls.nscache[str(domain)] = elementlist
+ rdataset = remaining[1]
+ if customrdataset.get(str(remaining[0])) is None:
work = list()
- work.append(rdset)
- customrdataset[name] = work
+ work.append(rdataset)
+ customrdataset[str(remaining[0])] = work
else:
- customrdataset[name].append(rdset)
+ customrdataset[str(remaining[0])].append(rdataset)
for label, value in customrdataset.items():
if value is None:
@@ -336,23 +333,21 @@ class Ascender():
subzones = label.split('.')
label = subzones[0]
subdomain = ".".join(subzones[1:])
- zonename = "%s.%s" % (subdomain, self.domain)
+ zonename = "%s.%s" % (subdomain, cls.domain)
- try:
- if value.ttl <= self.minimum:
- ttl = self.minimum
- else:
- ttl = value.ttl
- except AttributeError:
- ttl = self.minimum
+ refresh = cls.get_zone_refresh_time()
+ if refresh <= cls.minimum:
+ ttl = cls.minimum
+ else:
+ ttl = refresh
if len(subzones) > 1:
- if self.subzonedict.get(zonename):
+ if cls.subzonedict.get(zonename):
continue
else:
- self.subzonedict[zonename] = (False, ttl)
+ cls.subzonedict[zonename] = (False, ttl)
- self.create_zone_hierarchy()
+ cls.create_zone_hierarchy()
# Create one thread
thread = threading.Thread(target=worker)
@@ -374,14 +369,12 @@ class Ascender():
logging.critical("thread join timed out, still running")
# Add soa record to GNS once completed (updates the previous one)
- self.add_soa_record_to_gns(self.soa)
-
+ soa = cls.get_zone_soa(cls.zone)
+ cls.add_soa_record_to_gns(soa)
logging.info("All records have been added!")
@staticmethod
- def add_recordline_to_gns(recordline: list,
- zonename: str,
- label: str) -> None:
+ def add_recordline_to_gns(recordline, zonename, label):
"""
Replaces records in zone or adds them if not
:param recordline: records to replace as list in form
@@ -404,30 +397,8 @@ class Ascender():
logging.info("successfully added record with command %s",
' '.join(ret.args))
- def resolve_glue(self,
- authorityname: str) -> list:
- """
- 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]:
- 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,
- zonename: str,
- label: str) -> tuple:
+ @classmethod
+ def transform_to_gns_format(cls, record, rdtype, zonename, label):
"""
Transforms value of record to GNS compatible format
:param record: record to transform
@@ -447,8 +418,8 @@ class Ascender():
if owner[-1] == '.':
owner = owner[:-1]
# hacky and might cause bugs
- authns += self.tld
- owner += self.tld
+ authns += cls.tld
+ owner += cls.tld
value = "rname=%s.%s mname=%s.%s %d,%d,%d,%d,%d" % (
authns, zonename, owner, zonename,
int(serial), int(refresh), int(retry),
@@ -460,33 +431,25 @@ class Ascender():
else:
value = "%s.%s" % (value, zonename)
elif rdtype == 'NS':
- nameserver = str(record.target)
- if nameserver[-1] == ".":
- nameserver = nameserver[:-1]
+ nameserver = str(record)
if value[-1] == ".":
- # FQDN provided
- if value.endswith(".%s." % zonename):
- # in bailiwick
- value = self.resolve_glue(record.target)
- else:
- # out of bailiwick
- if label.startswith("@"):
- value = 'address@hidden' % (zonename, nameserver)
- else:
- value = 'address@hidden' % (str(label),
- zonename,
- nameserver)
+ value = value[:-1]
else:
- # Name is relative to zone, must be in bailiwick
- 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)
+ value = "%s.%s" % (value, zonename)
+ if zonename[-1] == ".":
+ zonename = zonename[:-1]
+ if nameserver[-1] == ".":
+ dnsresolver = nameserver[:-1]
+ dnsresolver = cls.nscache.get(dnsresolver, dnsresolver)
+ else:
+ dnsresolver = "%s.%s" % (nameserver, zonename)
+ dnsresolver = cls.nscache.get(dnsresolver, dnsresolver)
+ if isinstance(dnsresolver, list):
+ value = []
+ for nsip in dnsresolver:
+ value.append("address@hidden" % (zonename, nsip))
+ else:
+ value = 'address@hidden' % (str(label), zonename, dnsresolver)
logging.info("transformed %s record to GNS2DNS format", rdtype)
rdtype = 'GNS2DNS'
@@ -534,7 +497,8 @@ class Ascender():
logging.info("Did not transform record of type: %s", rdtype)
return (rdtype, value, label)
- def get_gns_zone_serial(self) -> int:
+ @classmethod
+ def get_zone_serial(cls):
"""
Fetches the zones serial from GNS
:returns: serial of the SOA record in GNS
@@ -542,7 +506,7 @@ class Ascender():
try:
serial = sp.check_output([GNUNET_GNS_COMMAND,
'-t', 'SOA',
- '-u', '%s' % self.domain,])
+ '-u', '@.%s' % cls.domain,])
serial = serial.decode()
except sp.CalledProcessError:
serial = ""
@@ -552,10 +516,61 @@ class Ascender():
soa_serial = re.findall(soapattern, serial)[0]
else:
soa_serial = 0
- return int(soa_serial)
+ return soa_serial
+
+ @classmethod
+ def get_zone_soa_expiry(cls):
+ """
+ Extracts the current serial from the class SOA
+ :returns: refresh time of the current SOA record
+ """
+ ttlpattern = re.compile(r'.+\s\d+\s(\d+)\s\d+\s\d+\s\d+', re.M)
+ return re.findall(ttlpattern, str(cls.soa[2]))
+
+ @classmethod
+ def get_zone_refresh_time(cls):
+ """
+ Extracts the current refresh time of the zone from GNS
+ :returns: refresh time of the current SOA record
+ """
+ try:
+ serial = sp.check_output([GNUNET_GNS_COMMAND,
+ '-t', 'SOA',
+ '-u', '@.%s' % cls.domain])
+ serial = serial.decode()
+ except sp.CalledProcessError:
+ serial = ""
+ refresh = 0
+ soapattern = re.compile(r'.+\s\d+,(\d+),\d+,\d+,\d+', re.M)
+ if re.findall(soapattern, serial):
+ refresh = re.findall(soapattern, serial)[0]
+ else:
+ refresh = 0
+ return refresh
+
+ @classmethod
+ def get_zone_retry_time(cls):
+ """
+ Extracts the current retry time of the zone from GNS
+ :returns: retry time of the current SOA record
+ """
+ try:
+ serial = sp.check_output([GNUNET_GNS_COMMAND,
+ '-t', 'SOA',
+ '-u', '@.%s' % cls.domain])
+ serial = serial.decode()
+ except sp.CalledProcessError:
+ serial = ""
+ retry = 300
+ soapattern = re.compile(r'.+\s\d+,\d+,(\d+),\d+,\d+', re.M)
+ if re.findall(soapattern, serial):
+ retry = re.findall(soapattern, serial)[0]
+ else:
+ retry = 300
+ return retry
@staticmethod
- def get_zone_soa(zone) -> dns.rdatatype.SOA:
+ def get_zone_soa(zone):
"""
Fetches soa record from zone a given zone
:param zone: A dnspython zone
@@ -567,7 +582,8 @@ class Ascender():
soa = soarecord
return soa
- def add_soa_record_to_gns(self, record) -> None:
+ @classmethod
+ def add_soa_record_to_gns(cls, record):
"""
Adds a SOA record to GNS
:param record: The record to add
@@ -578,11 +594,11 @@ class Ascender():
if authns[-1] == '.':
authns = authns[:-1]
else:
- authns = "%s.%s" % (authns, self.domain)
+ authns = "%s.%s" % (authns, cls.domain)
if owner[-1] == '.':
owner = owner[:-1]
else:
- owner = "%s.%s" % (owner, self.domain)
+ owner = "%s.%s" % (owner, cls.domain)
value = "rname=%s mname=%s %s,%s,%s,%s,%s" % (authns,
owner,
@@ -591,12 +607,12 @@ class Ascender():
retry,
expiry,
irefresh)
- recordval = '%s %s %s %s' % (ttl, "SOA", self.flags, str(value))
+ recordval = '%s %s %s %s' % (ttl, "SOA", cls.flags, str(value))
recordline = ['-R', recordval]
- self.add_recordline_to_gns(recordline, self.domain, str(label))
+ cls.add_recordline_to_gns(recordline, cls.domain, str(label))
@staticmethod
- def create_zone_and_get_pkey(zonestring: str) -> str:
+ def create_zone_and_get_pkey(zonestring):
"""
Creates the zone in zonestring and returns pkey
:param zonestring: The label name of the zone
@@ -604,27 +620,29 @@ class Ascender():
"""
try:
ret = sp.run([GNUNET_ZONE_CREATION_COMMAND,
- '-C', zonestring,
- '-V'],
- stdout=sp.PIPE,
- stderr=sp.DEVNULL,
- check=True)
+ '-C', zonestring],
+ stdout=sp.DEVNULL,
+ stderr=sp.DEVNULL)
logging.info("executed command: %s", " ".join(ret.args))
- pkey_zone = ret.stdout.decode().strip()
except sp.CalledProcessError:
- ret = sp.run([GNUNET_ZONE_CREATION_COMMAND,
- '-dq',
- '-e', zonestring],
- stdout=sp.PIPE)
- logging.info("executed command: %s", " ".join(ret.args))
- pkey_zone = ret.stdout.decode().strip()
+ logging.info("Zone %s already exists!", zonestring)
+
+ 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
- def add_pkey_record_to_zone(pkey: str,
- domain: str,
- label: str,
- ttl: str) -> None:
+ def add_pkey_record_to_zone(pkey, domain, label, ttl):
"""
Adds the pkey of the subzone to the parent zone
:param pkey: the public key of the child zone
@@ -655,47 +673,40 @@ class Ascender():
label, domain)
#logging.warning("PKEY record %s already exists in %s", label, domain)
- def create_zone_hierarchy(self) -> None:
+ @classmethod
+ def create_zone_hierarchy(cls):
"""
Creates the zone hierarchy in GNS for label
+ :param label: the split record to create zones for
"""
- domain = self.domain
+ domain = cls.domain
- # Build Dictionary from GNS identities
- ids = sp.run([GNUNET_ZONE_CREATION_COMMAND, '-d'], stdout=sp.PIPE)
- domainlist = ''.join(col for col in ids.stdout.decode()).split('\n')
- altdomainlist = [e for e in domainlist if domain + " " in e]
- for zone in altdomainlist:
- zonename, _, pkey = zone.split(" ")
- self.subzonedict[zonename] = (pkey, self.minimum)
-
- zonelist = self.subzonedict.items()
+ zonelist = cls.subzonedict.items()
sortedlist = sorted(zonelist, key=lambda s: len(str(s).split('.')))
for zone, pkeyttltuple in sortedlist:
pkey, ttl = pkeyttltuple
if not pkey:
domain = ".".join(zone.split('.')[1::])
label = zone.split('.')[0]
- pkey = self.create_zone_and_get_pkey(zone)
+ pkey = cls.create_zone_and_get_pkey(zone)
logging.info("adding zone %s with %s pkey into %s", zone,
pkey, domain)
- self.add_pkey_record_to_zone(pkey, domain, label,
pkeyttltuple[1])
- self.subzonedict[zone] = (pkey, ttl)
+ cls.add_pkey_record_to_zone(pkey, domain, label,
pkeyttltuple[1])
+ cls.subzonedict[zone] = (pkey, ttl)
def main():
"""
Initializes object and handles arguments
"""
# argument parsing from docstring definition
- args = docopt.docopt(__doc__, version='Ascension 0.6.1')
+ args = docopt.docopt(__doc__, version='Ascension 0.5.0')
# argument parsing
debug = args['--debug']
domain = args.get('<domain>', None)
transferns = args['<transferns>'] if args['<transferns>'] else None
- port = args['<port>'] if args['<port>'] else "53"
+ port = args['<port>'] if args['<port>'] else 53
flags = "p" if args.get('--public') else "n"
standalone = bool(args.get('--standalone'))
- dryrun = bool(args.get('--dry-run'))
minimum = args['--minimum-ttl']
# Change logging severity to debug
@@ -706,81 +717,34 @@ def main():
try:
sp.check_output([GNUNET_ARM_COMMAND, '-I'], timeout=1)
except sp.TimeoutExpired:
- logging.critical('GNUnet services are not running!')
+ logging.critical('GNUnet Services are not running!')
sys.exit(1)
# Initialize class instance
ascender = Ascender(domain, transferns, port, flags, minimum)
- # 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()
- if gns_zone_serial:
- ascender.zonegenerator = dns.query.xfr(ascender.transferns,
- ascender.domain,
- rdtype=dns.rdatatype.IXFR,
- serial=gns_zone_serial,
- port=ascender.port)
+ # Event loop for actual daemon
+ while 1:
+ serial = ascender.get_zone_serial()
+ ascender.initial_zone_transfer(serial)
+ ascender.mirror_zone()
+ ascender.bootstrap_zone()
+ if ascender.zone is not None:
+ ascender.add_records_to_gns()
+ logging.info("Finished migration of the zone %s", ascender.domain)
else:
- ascender.zonegenerator = dns.query.xfr(ascender.transferns,
- ascender.domain,
- port=ascender.port)
- dns_zone_serial = ascender.get_dns_zone_serial(ascender.domain,
- ascender.transferns)
-
- if dryrun:
- if not dns_zone_serial:
- return 1
- else:
- return 0
-
- if not dns_zone_serial:
- logging.error("Could not get DNS zone serial")
- if standalone:
- return 1
- time.sleep(retry)
- 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)
- continue
- elif gns_zone_serial > dns_zone_serial:
- logging.critical("SOA serial in GNS is bigger than SOA serial in
DNS?")
- logging.critical("GNS zone: %s, DNS zone: %s", gns_zone_serial,
dns_zone_serial)
- if standalone:
- return 1
+ logging.info("Zone %s already up to date", ascender.domain)
+ refresh = int(ascender.get_zone_refresh_time())
+ retry = int(ascender.get_zone_retry_time())
+ if standalone:
+ return 0
+ if refresh == 0:
+ logging.info("unable to refresh zone, retrying in %ds", retry)
time.sleep(retry)
- 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,
- check_origin=False)
- ascender.soa = ascender.get_zone_soa(ascender.zone)
- refresh = int(str(ascender.soa[2]).split(" ")[3])
- retry = int(str(ascender.soa[2]).split(" ")[4])
- except dns.zone.BadZone:
- logging.critical("Malformed DNS Zone '%s'", ascender.domain)
- if standalone:
- return 2
- time.sleep(retry)
- continue
-
- ascender.add_records_to_gns()
- logging.info("Finished migration of the zone %s", ascender.domain)
+ logging.info("refreshing zone in %ds", refresh)
+ print("refreshing zone in %ds" % refresh)
+ time.sleep(refresh)
if __name__ == '__main__':
main()
diff --git a/deb_dist/ascension-0.5.0/debian/ascension.1
b/deb_dist/ascension-0.5.0/debian/ascension.1
new file mode 100644
index 0000000..17fc0c1
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/ascension.1
@@ -0,0 +1,45 @@
+.TH ASCENSION "1" "February 2019" "Ascension 0.5.0" "User Commands"
+.SH NAME
+Ascension \- continuous migration of DNS zones to GNS
+.SH USAGE
+.IP
+ascension <domain> [\-d] [\-p] [\-s]
+.IP
+ascension <domain> <port> [\-d] [\-p] [\-s]
+.IP
+ascension <domain> \fB\-n\fR <transferns> [\-d] [\-p] [\-s]
+.IP
+ascension <domain> \fB\-n\fR <transferns> <port> [\-d] [\-p] [\-s]
+.IP
+ascension \fB\-p\fR | \fB\-\-public\fR
+.IP
+ascension \fB\-s\fR | \fB\-\-standalone\fR
+.IP
+ascension \fB\-h\fR | \fB\-\-help\fR
+.IP
+ascension \fB\-v\fR | \fB\-\-version\fR
+.SH OPTIONS
+.TP
+<domain>
+Domain to migrate
+.TP
+<port>
+Port for zone transfer
+.TP
+<transferns>
+DNS Server that does the zone transfer
+.TP
+\fB\-p\fR \fB\-\-public\fR
+Make records public on the DHT
+.TP
+\fB\-s\fR \fB\-\-standalone\fR
+Run ascension once
+.TP
+\fB\-d\fR \fB\-\-debug\fR
+Enable debugging
+.TP
+\fB\-h\fR \fB\-\-help\fR
+Show this screen.
+.TP
+\fB\-v\fR \fB\-\-version\fR
+Show version.
diff --git a/deb_dist/ascension-0.5.0/debian/changelog
b/deb_dist/ascension-0.5.0/debian/changelog
new file mode 100644
index 0000000..9c857b3
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/changelog
@@ -0,0 +1,5 @@
+ascension (0.5.0-1) unstable; urgency=low
+
+ * source package automatically created by stdeb 0.8.5
+
+ -- rexxnor <address@hidden> Tue, 30 Apr 2019 19:01:03 +0000
diff --git a/deb_dist/ascension-0.5.0/debian/compat
b/deb_dist/ascension-0.5.0/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/deb_dist/ascension-0.5.0/debian/control
b/deb_dist/ascension-0.5.0/debian/control
new file mode 100644
index 0000000..d42e205
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/control
@@ -0,0 +1,33 @@
+Source: ascension
+Maintainer: rexxnor <address@hidden>
+Section: python
+Priority: optional
+Build-Depends: dh-python, python3-setuptools, python3-all, debhelper (>= 9)
+Standards-Version: 3.9.6
+Homepage: https://gnunet.org/git/ascension.git/
+
+Package: python3-ascension
+Architecture: all
+Depends: ${misc:Depends}, ${python3:Depends}
+Description: Tool to migrate DNS Zones to the GNU Name System
+ # Ascension
+ .
+ Tool to easily migrate existing DNS Zones into the GNU Name System using
+ incremental zone transfers (AXFR/IXFR).
+ .
+ ## How to install
+ To install the ascension simply execute one of the following commands in the
+ freshly cloned directory:
+ .
+ ```bash
+ # System wide installation
+ sudo python3 setup.py install
+ .
+ # Local installation through virtualenv
+ python3 -m venv .venv
+ source .venv/bin/activate
+ python3 setup.py install
+ ```
+ .
+ ## How to install (Developer)
+
diff --git a/deb_dist/ascension-0.5.0/debian/copyright
b/deb_dist/ascension-0.5.0/debian/copyright
new file mode 100644
index 0000000..e02fffd
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/copyright
@@ -0,0 +1,21 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: python3-ascension
+Source: <https://git.gnunet.org/ascension.git/>
+
+Files: *
+Copyright: 2019 GNUnet e.V.
+License: AGPL-3.0
+ Source: python3-ascension
+ Section: contrib
+ Priority: optional
+ Maintainer: rexxnor <address@hidden>
+ Build-Depends: debhelper (>= 9), python3-ascension, bind9
+ Standards-Version: 3.9.8
+ Homepage: https://git.gnunet.org/ascension.git/
+
+ Package: ascension-bind
+ Architecture: any
+ Depends: ${shlibs:Depends}, ${misc:Depends}
+ Description: Tool to migrate DNS Zones to the GNU Name System
+ Tool to easily migrate existing DNS Zones into the GNU Name System using
+ incremental zone transfers (AXFR/IXFR).
diff --git a/deb_dist/ascension-0.5.0/debian/debhelper-build-stamp
b/deb_dist/ascension-0.5.0/debian/debhelper-build-stamp
new file mode 100644
index 0000000..7c43134
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/debhelper-build-stamp
@@ -0,0 +1 @@
+python3-ascension
diff --git a/deb_dist/ascension-0.5.0/debian/files
b/deb_dist/ascension-0.5.0/debian/files
new file mode 100644
index 0000000..0e62119
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/files
@@ -0,0 +1,2 @@
+ascension_0.5.0-1_amd64.buildinfo python optional
+python3-ascension_0.5.0-1_all.deb python optional
diff --git a/deb_dist/ascension-0.5.0/debian/python3-ascension.manpages
b/deb_dist/ascension-0.5.0/debian/python3-ascension.manpages
new file mode 100644
index 0000000..d424cf6
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension.manpages
@@ -0,0 +1 @@
+debian/ascension.1
diff --git a/deb_dist/ascension-0.5.0/debian/python3-ascension.postinst
b/deb_dist/ascension-0.5.0/debian/python3-ascension.postinst
new file mode 100644
index 0000000..3bfb0d2
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension.postinst
@@ -0,0 +1,41 @@
+#!/bin/sh
+# postinst script for ascension-bind
+#
+# see: dh_installdeb(1)
+# load debconf library
+set -e
+
+adduser --system ascension
+# ok if this fails as gnunet is not yet a dependency
+addgroup --system gnunet
+adduser ascension gnunet || true
+
+mkdir -p /etc/ascension.d/
+
+# add systemd unit file
+ cat > "/etc/ascension.d/gnunet-ascension.service" << EOF
+[Unit]
+Description=Starting GNUnet peer for ascension
+After=network.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+User=ascension
+ExecStart=/usr/bin/gnunet-arm -s
+ExecStop=/usr/bin/gnunet-arm -e
+ExecReload=/usr/bin/gnunet-arm -r
+
+[Install]
+WantedBy=multi-user.target
+EOF
+
+# link the systemd unit file
+ln -sf "/etc/ascension.d/gnunet-ascension.service"
"/lib/systemd/system/gnunet-ascension.service"
+
+# start and enable service
+systemctl start gnunet-ascension
+systemctl enable gnunet-ascension
+
+exit 0
+#DEBHELPER#
diff --git
a/deb_dist/ascension-0.5.0/debian/python3-ascension.postinst.debhelper
b/deb_dist/ascension-0.5.0/debian/python3-ascension.postinst.debhelper
new file mode 100644
index 0000000..c132d8d
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension.postinst.debhelper
@@ -0,0 +1,7 @@
+
+# Automatically added by dh_python3:
+if which py3compile >/dev/null 2>&1; then
+ py3compile -p python3-ascension
+fi
+
+# End automatically added section
diff --git a/deb_dist/ascension-0.5.0/debian/python3-ascension.prerm.debhelper
b/deb_dist/ascension-0.5.0/debian/python3-ascension.prerm.debhelper
new file mode 100644
index 0000000..98de74e
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension.prerm.debhelper
@@ -0,0 +1,10 @@
+
+# Automatically added by dh_python3:
+if which py3clean >/dev/null 2>&1; then
+ py3clean -p python3-ascension
+else
+ dpkg -L python3-ascension | perl -ne
's,/([^/]*)\.py$,/__pycache__/\1.*, or next; unlink $_ or die $! foreach
glob($_)'
+ find /usr/lib/python3/dist-packages/ -type d -name __pycache__ -empty
-print0 | xargs --null --no-run-if-empty rmdir
+fi
+
+# End automatically added section
diff --git a/deb_dist/ascension-0.5.0/debian/python3-ascension.substvars
b/deb_dist/ascension-0.5.0/debian/python3-ascension.substvars
new file mode 100644
index 0000000..039c7ae
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension.substvars
@@ -0,0 +1,3 @@
+python3:Depends=python3-coverage, python3-dnspython, python3-docopt,
python3-mock, python3-pbr, python3-six, python3:any, python3:any (>= 3.3.2-2~)
+misc:Depends=
+misc:Pre-Depends=
diff --git a/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/control
b/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/control
new file mode 100644
index 0000000..49b21fa
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/control
@@ -0,0 +1,31 @@
+Package: python3-ascension
+Source: ascension
+Version: 0.5.0-1
+Architecture: all
+Maintainer: rexxnor <address@hidden>
+Installed-Size: 61
+Depends: python3-coverage, python3-dnspython, python3-docopt, python3-mock,
python3-pbr, python3-six, python3:any (>= 3.3.2-2~)
+Section: python
+Priority: optional
+Homepage: https://gnunet.org/git/ascension.git/
+Description: Tool to migrate DNS Zones to the GNU Name System
+ # Ascension
+ .
+ Tool to easily migrate existing DNS Zones into the GNU Name System using
+ incremental zone transfers (AXFR/IXFR).
+ .
+ ## How to install
+ To install the ascension simply execute one of the following commands in the
+ freshly cloned directory:
+ .
+ ```bash
+ # System wide installation
+ sudo python3 setup.py install
+ .
+ # Local installation through virtualenv
+ python3 -m venv .venv
+ source .venv/bin/activate
+ python3 setup.py install
+ ```
+ .
+ ## How to install (Developer)
diff --git a/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/md5sums
b/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/md5sums
new file mode 100644
index 0000000..5aa6670
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/md5sums
@@ -0,0 +1,12 @@
+a0f759101bdbf91192e01e4aa7fc735a usr/bin/ascension
+bc657ea500b7eb1aaaed030b6825fa0f
usr/lib/python3/dist-packages/ascension-0.5.0.egg-info/PKG-INFO
+68b329da9893e34099c7d8ad5cb9c940
usr/lib/python3/dist-packages/ascension-0.5.0.egg-info/dependency_links.txt
+9cda1022e5fc72a3762b4bc09ee0ddb5
usr/lib/python3/dist-packages/ascension-0.5.0.egg-info/entry_points.txt
+d41d8cd98f00b204e9800998ecf8427e
usr/lib/python3/dist-packages/ascension-0.5.0.egg-info/requires.txt
+e616e4373e7b199db038fd8e938a3188
usr/lib/python3/dist-packages/ascension-0.5.0.egg-info/top_level.txt
+d41d8cd98f00b204e9800998ecf8427e
usr/lib/python3/dist-packages/ascension/__init__.py
+b8e868d3010eb44c1dd5d13fb4a17013
usr/lib/python3/dist-packages/ascension/ascension.py
+46ed4cd14add4c87e480fd2f30f72fbd usr/man/man1/ascension.1
+7190029e7e99c1b73c2018382db26093
usr/share/doc/python3-ascension/changelog.Debian.gz
+42cbfd228642e598041a4f8583b17259 usr/share/doc/python3-ascension/copyright
+5139d8621867d59e7b2ce8dcb06d974d usr/share/man/man1/ascension.1.gz
diff --git a/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/postinst
b/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/postinst
new file mode 100755
index 0000000..60549a6
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/postinst
@@ -0,0 +1,3 @@
+adduser --system ascension
+# ok if this fails as gnunet is not yet a dependency
+adduser ascension gnunet || true
diff --git a/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/prerm
b/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/prerm
new file mode 100755
index 0000000..0f8785b
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension/DEBIAN/prerm
@@ -0,0 +1,12 @@
+#!/bin/sh
+set -e
+
+# Automatically added by dh_python3:
+if which py3clean >/dev/null 2>&1; then
+ py3clean -p python3-ascension
+else
+ dpkg -L python3-ascension | perl -ne
's,/([^/]*)\.py$,/__pycache__/\1.*, or next; unlink $_ or die $! foreach
glob($_)'
+ find /usr/lib/python3/dist-packages/ -type d -name __pycache__ -empty
-print0 | xargs --null --no-run-if-empty rmdir
+fi
+
+# End automatically added section
diff --git
a/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/bin/ascension
b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/bin/ascension
new file mode 100755
index 0000000..69f2586
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/bin/ascension
@@ -0,0 +1,12 @@
+#!/usr/bin/python3
+# EASY-INSTALL-ENTRY-SCRIPT: 'ascension==0.5.0','console_scripts','ascension'
+__requires__ = 'ascension==0.5.0'
+import re
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+ sys.exit(
+ load_entry_point('ascension==0.5.0', 'console_scripts', 'ascension')()
+ )
diff --git
a/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/man/man1/ascension.1
b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/man/man1/ascension.1
new file mode 100644
index 0000000..c3b7f73
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/man/man1/ascension.1
@@ -0,0 +1,103 @@
+.\" This file is part of Ascension.
+.\" Copyright (C) 2018,2019 GNUnet e.V.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this document
+.\" under the terms of the GNU Free Documentation License, Version 1.3 or
+.\" any later version published by the Free Software Foundation; with no
+.\" Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
+.\" copy of the license is included in the file
+.\" ``FDL-1.3''.
+.\"
+.\" A copy of the license is also available from the Free Software
+.\" Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+.\"
+.\" Alternately, this document is also available under the General
+.\" Public License, version 3 or later, as published by the Free Software
+.\" Foundation. A copy of the license is included in the file
+.\" ``GPL3''.
+.\"
+.\" A copy of the license is also available from the Free Software
+.\" Foundation Web site at http://www.gnu.org/licenses/gpl.html.
+.\"
+.\" SPDX-License-Identifier: GPL3.0-or-later OR FDL1.3-or-later
+.\"
+.Dd March 7, 2019
+.Dt ASCENSION 1
+.Os
+.Sh NAME
+.Nm ascension
+.Nd migrate existing DNS zones into the GNU Name System
+.Sh SYNOPSIS
+.Nm
+.Op Ar domain Fl d Fl p
+.Op Ar domain port Fl d Fl p
+.Op Ar domain Fl n Ar transferns Fl d Fl p
+.Op Ar domain Fl n Ar transferns Ar port Fl d Fl p
+.Op Fl d | \-debug
+.Op Fl h | \-help
+.Op Fl p | \-public
+.Op Fl v | \-version
+.Sh DESCRIPTION
+.Nm
+is a tool to migrate existing DNS Zones into the GNU Name System (GNS) using
incremental zone transfers (AXFR/IXFR).
+To achieve this it uses
+.Xr gnunet-identity 1 ,
+.Xr gnunet-namestore 1 ,
+.Xr gnunet-gns 1 .
+As
+.Nm
+relies on these 3 GNUnet services,
+.Xr gnunet-arm 1
+must be installed and running.
+.Bl -tag -width Ds
+.It Ar domain Fl d Fl p
+Migrate the DOMAIN passed as domain.
+The debug and public options are optional.
+.It Ar domain port Fl d Fl p
+Migrate the DOMAIN domain, using port for zone transfer.
+The debug and public options are optional.
+.It Ar domain Fl n Ar transferns Fl d Fl p
+Migrate the DOMAIN domain from the DNS server transferns.
+The debug and public options are optional.
+.It Ar domain Fl n Ar transferns Ar port Fl d Fl p
+Migrate the DOMAIN domain from the DNS server transferns using port for the
zone transfer.
+The debug and public options are optional.
+.It Fl d | \-debug
+Enable debugging
+.It Fl h | \-help
+Print short help on options
+.It Fl p | \-public
+Make records public on the DHT
+.It Fl v | \-version
+Print ascension version number
+.El
+.\" .Sh FILES
+.Sh EXAMPLES
+To transfer the sy TLD from ns1.tld.sy:
+.Pp
+.Dl $ ascension sy -n ns1.tld.sy.
+.Pp
+To transfer the nu TLD from zonedata.iis.se with debug options enabled:
+.Pp
+.Dl $ ascension nu -n zonedata.iis.se. -d
+.Sh SEE ALSO
+.Xr gnunet-arm 1 ,
+.Xr gnunet-gns 1 ,
+.Xr gnunet-identity 1 ,
+.Xr gnunet-namestore 1
+.Sh HISTORY
+The
+.Nm
+tool was designed and written in 2018 by
+.An rexxnor Aq Mt address@hidden .
+.Sh AUTHORS
+This man page was written by
+.An ng0 Aq Mt address@hidden ,
+it first appeared in
+.Nm
+0.5.1.
+.Sh BUGS
+Report bugs by using
+.Lk https://bugs.gnunet.org
+or by sending electronic mail to
+.Aq Mt address@hidden .
diff --git
a/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/doc/python3-ascension/changelog.Debian.gz
b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/doc/python3-ascension/changelog.Debian.gz
new file mode 100644
index 0000000..721261b
Binary files /dev/null and
b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/doc/python3-ascension/changelog.Debian.gz
differ
diff --git
a/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/doc/python3-ascension/copyright
b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/doc/python3-ascension/copyright
new file mode 100644
index 0000000..e02fffd
--- /dev/null
+++
b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/doc/python3-ascension/copyright
@@ -0,0 +1,21 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: python3-ascension
+Source: <https://git.gnunet.org/ascension.git/>
+
+Files: *
+Copyright: 2019 GNUnet e.V.
+License: AGPL-3.0
+ Source: python3-ascension
+ Section: contrib
+ Priority: optional
+ Maintainer: rexxnor <address@hidden>
+ Build-Depends: debhelper (>= 9), python3-ascension, bind9
+ Standards-Version: 3.9.8
+ Homepage: https://git.gnunet.org/ascension.git/
+
+ Package: ascension-bind
+ Architecture: any
+ Depends: ${shlibs:Depends}, ${misc:Depends}
+ Description: Tool to migrate DNS Zones to the GNU Name System
+ Tool to easily migrate existing DNS Zones into the GNU Name System using
+ incremental zone transfers (AXFR/IXFR).
diff --git
a/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/man/man1/ascension.1.gz
b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/man/man1/ascension.1.gz
new file mode 100644
index 0000000..fdd5a0b
Binary files /dev/null and
b/deb_dist/ascension-0.5.0/debian/python3-ascension/usr/share/man/man1/ascension.1.gz
differ
diff --git a/deb_dist/ascension-0.5.0/debian/rules
b/deb_dist/ascension-0.5.0/debian/rules
new file mode 100755
index 0000000..403000d
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/rules
@@ -0,0 +1,8 @@
+#!/usr/bin/make -f
+
+# This file was automatically generated by stdeb 0.8.5 at
+# Tue, 30 Apr 2019 19:01:03 +0000
+export PYBUILD_NAME=ascension
+%:
+ dh $@ --with python3 --buildsystem=pybuild
+
diff --git a/deb_dist/ascension-0.5.0/debian/source/format
b/deb_dist/ascension-0.5.0/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/deb_dist/ascension-0.5.0/debian/watch
b/deb_dist/ascension-0.5.0/debian/watch
new file mode 100644
index 0000000..f9c8e3b
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/debian/watch
@@ -0,0 +1,4 @@
+# please also check http://pypi.debian.net/ascension/watch
+version=3
+opts=uversionmangle=s/(rc|a|b|c)/~$1/ \
+http://pypi.debian.net/ascension/ascension-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
\ No newline at end of file
diff --git a/deb_dist/ascension-0.5.0/setup.cfg
b/deb_dist/ascension-0.5.0/setup.cfg
new file mode 100644
index 0000000..8bfd5a1
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/setup.cfg
@@ -0,0 +1,4 @@
+[egg_info]
+tag_build =
+tag_date = 0
+
diff --git a/deb_dist/ascension-0.5.0/setup.py
b/deb_dist/ascension-0.5.0/setup.py
new file mode 100644
index 0000000..cd0b403
--- /dev/null
+++ b/deb_dist/ascension-0.5.0/setup.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+"""
+This file is part of Ascension.
+Copyright (C) 2019 GNUnet e.V.
+
+Ascension is free software: you can redistribute it and/or modify it
+under the terms of the GNU Affero General Public License as published
+by the Free Software Foundation, either version 3 of the License,
+or (at your option) any later version.
+
+Ascension is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+SPDX-License-Identifier: AGPL3.0-or-later
+
+Author rexxnor
+"""
+
+import setuptools
+
+with open("README", "r") as fh:
+ long_description = fh.read()
+
+setuptools.setup(
+ name="ascension",
+ version="0.5.0",
+ author="rexxnor",
+ author_email="address@hidden",
+ description="Tool to migrate DNS Zones to the GNU Name System",
+ long_description=long_description,
+ url="https://gnunet.org/git/ascension.git/",
+ packages=['ascension'],
+ data_files=[('man/man1', ['ascension.1'])],
+ classifiers=[
+ "Programming Language :: Python :: 3",
+ ],
+ entry_points={
+ 'console_scripts': [
+ 'ascension=ascension.ascension:main',
+ ],
+ },
+ install_requires=[
+ 'coverage',
+ 'dnspython',
+ 'docopt',
+ 'mock',
+ 'pbr',
+ 'six',
+ ],
+)
diff --git a/deb_dist/ascension-0.6.1/.pc/.quilt_patches
b/deb_dist/ascension-0.6.1/.pc/.quilt_patches
new file mode 100644
index 0000000..6857a8d
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/.pc/.quilt_patches
@@ -0,0 +1 @@
+debian/patches
diff --git a/deb_dist/ascension-0.6.1/.pc/.quilt_series
b/deb_dist/ascension-0.6.1/.pc/.quilt_series
new file mode 100644
index 0000000..c206706
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/.pc/.quilt_series
@@ -0,0 +1 @@
+series
diff --git a/deb_dist/ascension-0.6.1/.pc/.version
b/deb_dist/ascension-0.6.1/.pc/.version
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/.pc/.version
@@ -0,0 +1 @@
+2
diff --git a/deb_dist/ascension-0.6.1/.pc/applied-patches
b/deb_dist/ascension-0.6.1/.pc/applied-patches
new file mode 100644
index 0000000..e69de29
diff --git a/deb_dist/ascension-0.6.1/PKG-INFO
b/deb_dist/ascension-0.6.1/PKG-INFO
new file mode 100644
index 0000000..717ffbb
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/PKG-INFO
@@ -0,0 +1,81 @@
+Metadata-Version: 1.1
+Name: ascension
+Version: 0.6.1
+Summary: Tool to migrate DNS Zones to the GNU Name System
+Home-page: https://gnunet.org/git/ascension.git/
+Author: rexxnor
+Author-email: address@hidden
+License: UNKNOWN
+Description: # Ascension
+
+ Tool to easily migrate existing DNS Zones into the GNU Name System
using
+ incremental zone transfers (AXFR/IXFR).
+
+ ## How to install
+ To install the ascension simply execute one of the following commands
in the
+ freshly cloned directory:
+
+ ```bash
+ # System wide installation
+ sudo python3 setup.py install
+
+ # Local installation through virtualenv
+ python3 -m venv .venv
+ source .venv/bin/activate
+ python3 setup.py install
+ ```
+
+ ## How to install (Developer)
+ A developer installation is very handy when you are making changes to
the source
+ code as this way you don't need to re-run the installation procedure
every time
+ you make a change.
+
+ ```bash
+ # installation through virtualenv
+ python3 -m venv .venv
+ source .venv/bin/activate
+ python3 setup.py develop
+ ```
+
+ ## How to use
+ If you have installed it, simply execute ascension with one of several
options.
+ You can also just run the file ascension.py itself directly.
+
+ Taken from the docstring of the ascension.py file:
+ ```
+ Ascension
+
+ Usage:
+ ascension <domain> [-d] [-p] [-s] [--minimum-ttl=<ttl>] [--dry-run]
+ ascension <domain> <port> [-d] [-p] [-s] [--minimum-ttl=<ttl>]
+ ascension <domain> -n <transferns> [-d] [-p] [-s]
[--minimum-ttl=<ttl>] [--dry-run]
+ ascension <domain> -n <transferns> <port> [-d] [-p] [-s]
[--minimum-ttl=<ttl>] [--dry-run]
+ ascension -p | --public
+ ascension -s | --debug
+ ascension -s | --standalone
+ ascension -h | --help
+ ascension -v | --version
+
+ Options:
+ <domain> Domain to migrate
+ <port> Port for zone transfer
+ <transferns> DNS Server that does the zone transfer
+ --minimum-ttl=<ttl> Minimum TTL for records to migrate [default:
3600]
+ --dry-run Only try if a zone transfer is allowed
+ -p --public Make records public on the DHT
+ -s --standalone Run ascension once
+ -d --debug Enable debugging
+ -h --help Show this screen.
+ -v --version Show version.
+ ```
+
+ Example use:
+ ```
+ # Transfers the sy TLD from ns1.tld.sy.
+ ascension sy -n ns1.tld.sy.
+ # Transfers the nu TLD from zonedata.iis.se with debug options enabled
+ ascension nu -n zonedata.iis.se. -d
+ ```
+
+Platform: UNKNOWN
+Classifier: Programming Language :: Python :: 3
diff --git a/deb_dist/ascension-0.6.1/README b/deb_dist/ascension-0.6.1/README
new file mode 100644
index 0000000..d201db0
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/README
@@ -0,0 +1,70 @@
+# Ascension
+
+Tool to easily migrate existing DNS Zones into the GNU Name System using
+incremental zone transfers (AXFR/IXFR).
+
+## How to install
+To install the ascension simply execute one of the following commands in the
+freshly cloned directory:
+
+```bash
+# System wide installation
+sudo python3 setup.py install
+
+# Local installation through virtualenv
+python3 -m venv .venv
+source .venv/bin/activate
+python3 setup.py install
+```
+
+## How to install (Developer)
+A developer installation is very handy when you are making changes to the
source
+code as this way you don't need to re-run the installation procedure every time
+you make a change.
+
+```bash
+# installation through virtualenv
+python3 -m venv .venv
+source .venv/bin/activate
+python3 setup.py develop
+```
+
+## How to use
+If you have installed it, simply execute ascension with one of several options.
+You can also just run the file ascension.py itself directly.
+
+Taken from the docstring of the ascension.py file:
+```
+Ascension
+
+Usage:
+ ascension <domain> [-d] [-p] [-s] [--minimum-ttl=<ttl>] [--dry-run]
+ ascension <domain> <port> [-d] [-p] [-s] [--minimum-ttl=<ttl>]
+ ascension <domain> -n <transferns> [-d] [-p] [-s] [--minimum-ttl=<ttl>]
[--dry-run]
+ ascension <domain> -n <transferns> <port> [-d] [-p] [-s]
[--minimum-ttl=<ttl>] [--dry-run]
+ ascension -p | --public
+ ascension -s | --debug
+ ascension -s | --standalone
+ ascension -h | --help
+ ascension -v | --version
+
+Options:
+ <domain> Domain to migrate
+ <port> Port for zone transfer
+ <transferns> DNS Server that does the zone transfer
+ --minimum-ttl=<ttl> Minimum TTL for records to migrate [default: 3600]
+ --dry-run Only try if a zone transfer is allowed
+ -p --public Make records public on the DHT
+ -s --standalone Run ascension once
+ -d --debug Enable debugging
+ -h --help Show this screen.
+ -v --version Show version.
+```
+
+Example use:
+```
+# Transfers the sy TLD from ns1.tld.sy.
+ascension sy -n ns1.tld.sy.
+# Transfers the nu TLD from zonedata.iis.se with debug options enabled
+ascension nu -n zonedata.iis.se. -d
+```
diff --git a/deb_dist/ascension-0.6.1/ascension.1
b/deb_dist/ascension-0.6.1/ascension.1
new file mode 100644
index 0000000..93810c6
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/ascension.1
@@ -0,0 +1,108 @@
+.\" This file is part of Ascension.
+.\" Copyright (C) 2018,2019 GNUnet e.V.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this document
+.\" under the terms of the GNU Free Documentation License, Version 1.3 or
+.\" any later version published by the Free Software Foundation; with no
+.\" Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
+.\" copy of the license is included in the file
+.\" ``FDL-1.3''.
+.\"
+.\" A copy of the license is also available from the Free Software
+.\" Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+.\"
+.\" Alternately, this document is also available under the General
+.\" Public License, version 3 or later, as published by the Free Software
+.\" Foundation. A copy of the license is included in the file
+.\" ``GPL3''.
+.\"
+.\" A copy of the license is also available from the Free Software
+.\" Foundation Web site at http://www.gnu.org/licenses/gpl.html.
+.\"
+.\" SPDX-License-Identifier: GPL3.0-or-later OR FDL1.3-or-later
+.\"
+.Dd May 9, 2019
+.Dt ASCENSION 1
+.Os
+.Sh NAME
+.Nm ascension
+.Nd migrate existing DNS zones into the GNU Name System
+.Sh SYNOPSIS
+.Nm
+.Op Ar domain Fl d Fl p Fl s \- minimum-ttl=<ttl> \- dry-run
+.Op Ar domain port Fl d Fl p Fl s \- minimum-ttl=<ttl> \- dry-run
+.Op Ar domain Fl n Ar transferns Fl d Fl p Fl s Fl \- minimum-ttl=<ttl> \-
dry-run
+.Op Ar domain Fl n Ar transferns Ar port Fl d Fl p Fl s \- minimum-ttl=<ttl>
\- dry-run
+.Op Fl d | \-debug
+.Op Fl h | \-help
+.Op Fl p | \-public
+.Op Fl v | \-version
+.Op Fl s | \-standalone
+.Sh DESCRIPTION
+.Nm
+is a tool to migrate existing DNS Zones into the GNU Name System (GNS) using
incremental zone transfers (AXFR/IXFR).
+To achieve this it uses
+.Xr gnunet-identity 1 ,
+.Xr gnunet-namestore 1 ,
+.Xr gnunet-gns 1 .
+As
+.Nm
+relies on these 3 GNUnet services,
+.Xr gnunet-arm 1
+must be installed and running.
+.Bl -tag -width Ds
+.It Ar domain Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN passed as domain.
+The debug, public and standalone options are optional.
+.It Ar domain port Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain, using port for zone transfer.
+The debug, public and standalone options are optional.
+.It Ar domain Fl n Ar transferns Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain from the DNS server transferns.
+The debug, public and standalone options are optional.
+.It Ar domain Fl n Ar transferns Ar port Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain from the DNS server transferns using port for the
zone transfer.
+The debug, public and standalone options are optional.
+.It Fl s | \-standalone
+Run Ascension once
+.It Fl d | \-debug
+Enable debugging
+.It Fl h | \-help
+Print short help on options
+.It Fl p | \-public
+Make records public on the DHT
+.It Fl v | \-version
+Print ascension version number
+.El
+.\" .Sh FILES
+.Sh EXAMPLES
+To transfer the sy TLD from ns1.tld.sy:
+.Pp
+.Dl $ ascension sy -n ns1.tld.sy.
+.Pp
+To transfer the nu TLD from zonedata.iis.se with debug options enabled:
+.Pp
+.Dl $ ascension nu -n zonedata.iis.se. -d
+.Sh SEE ALSO
+.Xr gnunet-arm 1 ,
+.Xr gnunet-gns 1 ,
+.Xr gnunet-identity 1 ,
+.Xr gnunet-namestore 1
+.Sh HISTORY
+The
+.Nm
+tool was designed and written in 2018 by
+.An rexxnor Aq Mt address@hidden .
+.Sh AUTHORS
+This man page was written by
+.An ng0 Aq Mt address@hidden
+and updated by
+.An rexxnor Aq Mt address@hidden
+it first appeared in
+.Nm
+0.5.1.
+.Sh BUGS
+Report bugs by using
+.Lk https://bugs.gnunet.org
+or by sending electronic mail to
+.Aq Mt address@hidden .
diff --git a/deb_dist/ascension-0.6.1/ascension/__init__.py
b/deb_dist/ascension-0.6.1/ascension/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/ascension/ascension.py
b/deb_dist/ascension-0.6.1/ascension/ascension.py
similarity index 99%
copy from ascension/ascension.py
copy to deb_dist/ascension-0.6.1/ascension/ascension.py
index cf8d7b4..cc83964 100644
--- a/ascension/ascension.py
+++ b/deb_dist/ascension-0.6.1/ascension/ascension.py
@@ -702,6 +702,18 @@ def main():
if debug:
logging.basicConfig(level=logging.DEBUG)
+ # Initialize class instance
+ ascender = Ascender(domain, transferns, port, flags, minimum)
+
+ # Do dey run before GNUnet check
+ if dryrun:
+ dns_zone_serial = ascender.get_dns_zone_serial(ascender.domain,
+ ascender.transferns)
+ if not dns_zone_serial:
+ return 1
+ else:
+ return 0
+
# Checks if GNUnet services are running
try:
sp.check_output([GNUNET_ARM_COMMAND, '-I'], timeout=1)
@@ -709,9 +721,6 @@ def main():
logging.critical('GNUnet services are not running!')
sys.exit(1)
- # Initialize class instance
- ascender = Ascender(domain, transferns, port, flags, minimum)
-
# Set to defaults to use before we get a SOA for the first time
retry = 300
refresh = 300
@@ -732,12 +741,6 @@ def main():
dns_zone_serial = ascender.get_dns_zone_serial(ascender.domain,
ascender.transferns)
- if dryrun:
- if not dns_zone_serial:
- return 1
- else:
- return 0
-
if not dns_zone_serial:
logging.error("Could not get DNS zone serial")
if standalone:
diff --git
a/deb_dist/ascension-0.6.1/debian/.debhelper/generated/python3-ascension/installed-by-dh_installdocs
b/deb_dist/ascension-0.6.1/debian/.debhelper/generated/python3-ascension/installed-by-dh_installdocs
new file mode 100644
index 0000000..e69de29
diff --git a/deb_dist/ascension-0.6.1/debian/changelog
b/deb_dist/ascension-0.6.1/debian/changelog
new file mode 100644
index 0000000..507dced
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/changelog
@@ -0,0 +1,5 @@
+ascension (0.6.1-1) unstable; urgency=low
+
+ * source package automatically created by stdeb 0.8.5
+
+ -- rexxnor <address@hidden> Fri, 10 May 2019 07:37:51 +0000
diff --git a/deb_dist/ascension-0.6.1/debian/compat
b/deb_dist/ascension-0.6.1/debian/compat
new file mode 100644
index 0000000..7f8f011
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/deb_dist/ascension-0.6.1/debian/control
b/deb_dist/ascension-0.6.1/debian/control
new file mode 100644
index 0000000..88e735b
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/control
@@ -0,0 +1,36 @@
+Source: ascension
+Maintainer: rexxnor <address@hidden>
+Section: python
+Priority: optional
+Build-Depends: python3-setuptools, python3-all, debhelper (>= 7.4.3)
+Standards-Version: 3.9.1
+
+
+
+
+
+Package: python3-ascension
+Architecture: all
+Depends: ${misc:Depends}, ${python3:Depends}
+Description: Tool to migrate DNS Zones to the GNU Name System
+ # Ascension
+ .
+ Tool to easily migrate existing DNS Zones into the GNU Name System using
+ incremental zone transfers (AXFR/IXFR).
+ .
+ ## How to install
+ To install the ascension simply execute one of the following commands in the
+ freshly cloned directory:
+ .
+ ```bash
+ # System wide installation
+ sudo python3 setup.py install
+ .
+ # Local installation through virtualenv
+ python3 -m venv .venv
+ source .venv/bin/activate
+ python3 setup.py install
+ ```
+ .
+ ## How to install (Developer)
+
diff --git a/deb_dist/ascension-0.6.1/debian/files
b/deb_dist/ascension-0.6.1/debian/files
new file mode 100644
index 0000000..8be8597
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/files
@@ -0,0 +1,2 @@
+ascension_0.6.1-1_amd64.buildinfo python optional
+python3-ascension_0.6.1-1_all.deb python optional
diff --git
a/deb_dist/ascension-0.6.1/debian/python3-ascension.postinst.debhelper
b/deb_dist/ascension-0.6.1/debian/python3-ascension.postinst.debhelper
new file mode 100644
index 0000000..c132d8d
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension.postinst.debhelper
@@ -0,0 +1,7 @@
+
+# Automatically added by dh_python3:
+if which py3compile >/dev/null 2>&1; then
+ py3compile -p python3-ascension
+fi
+
+# End automatically added section
diff --git a/deb_dist/ascension-0.6.1/debian/python3-ascension.prerm.debhelper
b/deb_dist/ascension-0.6.1/debian/python3-ascension.prerm.debhelper
new file mode 100644
index 0000000..98de74e
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension.prerm.debhelper
@@ -0,0 +1,10 @@
+
+# Automatically added by dh_python3:
+if which py3clean >/dev/null 2>&1; then
+ py3clean -p python3-ascension
+else
+ dpkg -L python3-ascension | perl -ne
's,/([^/]*)\.py$,/__pycache__/\1.*, or next; unlink $_ or die $! foreach
glob($_)'
+ find /usr/lib/python3/dist-packages/ -type d -name __pycache__ -empty
-print0 | xargs --null --no-run-if-empty rmdir
+fi
+
+# End automatically added section
diff --git a/deb_dist/ascension-0.6.1/debian/python3-ascension.substvars
b/deb_dist/ascension-0.6.1/debian/python3-ascension.substvars
new file mode 100644
index 0000000..039c7ae
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension.substvars
@@ -0,0 +1,3 @@
+python3:Depends=python3-coverage, python3-dnspython, python3-docopt,
python3-mock, python3-pbr, python3-six, python3:any, python3:any (>= 3.3.2-2~)
+misc:Depends=
+misc:Pre-Depends=
diff --git a/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/control
b/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/control
new file mode 100644
index 0000000..d799377
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/control
@@ -0,0 +1,30 @@
+Package: python3-ascension
+Source: ascension
+Version: 0.6.1-1
+Architecture: all
+Maintainer: rexxnor <address@hidden>
+Installed-Size: 59
+Depends: python3-coverage, python3-dnspython, python3-docopt, python3-mock,
python3-pbr, python3-six, python3:any (>= 3.3.2-2~)
+Section: python
+Priority: optional
+Description: Tool to migrate DNS Zones to the GNU Name System
+ # Ascension
+ .
+ Tool to easily migrate existing DNS Zones into the GNU Name System using
+ incremental zone transfers (AXFR/IXFR).
+ .
+ ## How to install
+ To install the ascension simply execute one of the following commands in the
+ freshly cloned directory:
+ .
+ ```bash
+ # System wide installation
+ sudo python3 setup.py install
+ .
+ # Local installation through virtualenv
+ python3 -m venv .venv
+ source .venv/bin/activate
+ python3 setup.py install
+ ```
+ .
+ ## How to install (Developer)
diff --git a/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/md5sums
b/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/md5sums
new file mode 100644
index 0000000..7e8274a
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/md5sums
@@ -0,0 +1,10 @@
+e39447d26076db60f6e3af5fcc58d379 usr/bin/ascension
+9a1cca110e94552f9190fb1b0e3e5dad
usr/lib/python3/dist-packages/ascension-0.6.1.egg-info/PKG-INFO
+68b329da9893e34099c7d8ad5cb9c940
usr/lib/python3/dist-packages/ascension-0.6.1.egg-info/dependency_links.txt
+9cda1022e5fc72a3762b4bc09ee0ddb5
usr/lib/python3/dist-packages/ascension-0.6.1.egg-info/entry_points.txt
+d41d8cd98f00b204e9800998ecf8427e
usr/lib/python3/dist-packages/ascension-0.6.1.egg-info/requires.txt
+e616e4373e7b199db038fd8e938a3188
usr/lib/python3/dist-packages/ascension-0.6.1.egg-info/top_level.txt
+d41d8cd98f00b204e9800998ecf8427e
usr/lib/python3/dist-packages/ascension/__init__.py
+60473b52ad93a5a6dcbcfd6b57ac0f00
usr/lib/python3/dist-packages/ascension/ascension.py
+3211ad0ee8099a5512e496e8a4a39816 usr/man/man1/ascension.1
+18141e8fa1722169f414faf3c57b780a
usr/share/doc/python3-ascension/changelog.Debian.gz
diff --git a/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/postinst
b/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/postinst
new file mode 100755
index 0000000..c9ab70b
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/postinst
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -e
+
+# Automatically added by dh_python3:
+if which py3compile >/dev/null 2>&1; then
+ py3compile -p python3-ascension
+fi
+
+# End automatically added section
diff --git a/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/prerm
b/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/prerm
new file mode 100755
index 0000000..0f8785b
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension/DEBIAN/prerm
@@ -0,0 +1,12 @@
+#!/bin/sh
+set -e
+
+# Automatically added by dh_python3:
+if which py3clean >/dev/null 2>&1; then
+ py3clean -p python3-ascension
+else
+ dpkg -L python3-ascension | perl -ne
's,/([^/]*)\.py$,/__pycache__/\1.*, or next; unlink $_ or die $! foreach
glob($_)'
+ find /usr/lib/python3/dist-packages/ -type d -name __pycache__ -empty
-print0 | xargs --null --no-run-if-empty rmdir
+fi
+
+# End automatically added section
diff --git
a/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/bin/ascension
b/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/bin/ascension
new file mode 100755
index 0000000..91dcb61
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/bin/ascension
@@ -0,0 +1,12 @@
+#! /usr/bin/python3
+# EASY-INSTALL-ENTRY-SCRIPT: 'ascension==0.6.1','console_scripts','ascension'
+__requires__ = 'ascension==0.6.1'
+import re
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+ sys.exit(
+ load_entry_point('ascension==0.6.1', 'console_scripts', 'ascension')()
+ )
diff --git
a/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/man/man1/ascension.1
b/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/man/man1/ascension.1
new file mode 100644
index 0000000..93810c6
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/man/man1/ascension.1
@@ -0,0 +1,108 @@
+.\" This file is part of Ascension.
+.\" Copyright (C) 2018,2019 GNUnet e.V.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this document
+.\" under the terms of the GNU Free Documentation License, Version 1.3 or
+.\" any later version published by the Free Software Foundation; with no
+.\" Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
+.\" copy of the license is included in the file
+.\" ``FDL-1.3''.
+.\"
+.\" A copy of the license is also available from the Free Software
+.\" Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+.\"
+.\" Alternately, this document is also available under the General
+.\" Public License, version 3 or later, as published by the Free Software
+.\" Foundation. A copy of the license is included in the file
+.\" ``GPL3''.
+.\"
+.\" A copy of the license is also available from the Free Software
+.\" Foundation Web site at http://www.gnu.org/licenses/gpl.html.
+.\"
+.\" SPDX-License-Identifier: GPL3.0-or-later OR FDL1.3-or-later
+.\"
+.Dd May 9, 2019
+.Dt ASCENSION 1
+.Os
+.Sh NAME
+.Nm ascension
+.Nd migrate existing DNS zones into the GNU Name System
+.Sh SYNOPSIS
+.Nm
+.Op Ar domain Fl d Fl p Fl s \- minimum-ttl=<ttl> \- dry-run
+.Op Ar domain port Fl d Fl p Fl s \- minimum-ttl=<ttl> \- dry-run
+.Op Ar domain Fl n Ar transferns Fl d Fl p Fl s Fl \- minimum-ttl=<ttl> \-
dry-run
+.Op Ar domain Fl n Ar transferns Ar port Fl d Fl p Fl s \- minimum-ttl=<ttl>
\- dry-run
+.Op Fl d | \-debug
+.Op Fl h | \-help
+.Op Fl p | \-public
+.Op Fl v | \-version
+.Op Fl s | \-standalone
+.Sh DESCRIPTION
+.Nm
+is a tool to migrate existing DNS Zones into the GNU Name System (GNS) using
incremental zone transfers (AXFR/IXFR).
+To achieve this it uses
+.Xr gnunet-identity 1 ,
+.Xr gnunet-namestore 1 ,
+.Xr gnunet-gns 1 .
+As
+.Nm
+relies on these 3 GNUnet services,
+.Xr gnunet-arm 1
+must be installed and running.
+.Bl -tag -width Ds
+.It Ar domain Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN passed as domain.
+The debug, public and standalone options are optional.
+.It Ar domain port Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain, using port for zone transfer.
+The debug, public and standalone options are optional.
+.It Ar domain Fl n Ar transferns Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain from the DNS server transferns.
+The debug, public and standalone options are optional.
+.It Ar domain Fl n Ar transferns Ar port Fl d Fl p Fl s Fl minimum-ttl=<ttl>
+Migrate the DOMAIN domain from the DNS server transferns using port for the
zone transfer.
+The debug, public and standalone options are optional.
+.It Fl s | \-standalone
+Run Ascension once
+.It Fl d | \-debug
+Enable debugging
+.It Fl h | \-help
+Print short help on options
+.It Fl p | \-public
+Make records public on the DHT
+.It Fl v | \-version
+Print ascension version number
+.El
+.\" .Sh FILES
+.Sh EXAMPLES
+To transfer the sy TLD from ns1.tld.sy:
+.Pp
+.Dl $ ascension sy -n ns1.tld.sy.
+.Pp
+To transfer the nu TLD from zonedata.iis.se with debug options enabled:
+.Pp
+.Dl $ ascension nu -n zonedata.iis.se. -d
+.Sh SEE ALSO
+.Xr gnunet-arm 1 ,
+.Xr gnunet-gns 1 ,
+.Xr gnunet-identity 1 ,
+.Xr gnunet-namestore 1
+.Sh HISTORY
+The
+.Nm
+tool was designed and written in 2018 by
+.An rexxnor Aq Mt address@hidden .
+.Sh AUTHORS
+This man page was written by
+.An ng0 Aq Mt address@hidden
+and updated by
+.An rexxnor Aq Mt address@hidden
+it first appeared in
+.Nm
+0.5.1.
+.Sh BUGS
+Report bugs by using
+.Lk https://bugs.gnunet.org
+or by sending electronic mail to
+.Aq Mt address@hidden .
diff --git
a/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/share/doc/python3-ascension/changelog.Debian.gz
b/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/share/doc/python3-ascension/changelog.Debian.gz
new file mode 100644
index 0000000..09610dd
Binary files /dev/null and
b/deb_dist/ascension-0.6.1/debian/python3-ascension/usr/share/doc/python3-ascension/changelog.Debian.gz
differ
diff --git a/deb_dist/ascension-0.6.1/debian/rules
b/deb_dist/ascension-0.6.1/debian/rules
new file mode 100755
index 0000000..7b0f463
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/rules
@@ -0,0 +1,31 @@
+#!/usr/bin/make -f
+
+# This file was automatically generated by stdeb 0.8.5 at
+# Fri, 10 May 2019 07:37:51 +0000
+
+%:
+ dh $@ --with python3 --buildsystem=python_distutils
+
+
+override_dh_auto_clean:
+ python3 setup.py clean -a
+ find . -name \*.pyc -exec rm {} \;
+
+
+
+override_dh_auto_build:
+ python3 setup.py build --force
+
+
+
+override_dh_auto_install:
+ python3 setup.py install --force --root=debian/python3-ascension
--no-compile -O0 --install-layout=deb --prefix=/usr
+
+
+
+override_dh_python2:
+ dh_python2 --no-guessing-versions
+
+
+
+
diff --git a/deb_dist/ascension-0.6.1/debian/source/format
b/deb_dist/ascension-0.6.1/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/deb_dist/ascension-0.6.1/debian/source/options
b/deb_dist/ascension-0.6.1/debian/source/options
new file mode 100644
index 0000000..bcc4bbb
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/debian/source/options
@@ -0,0 +1 @@
+extend-diff-ignore="\.egg-info$"
\ No newline at end of file
diff --git a/deb_dist/ascension-0.6.1/setup.cfg
b/deb_dist/ascension-0.6.1/setup.cfg
new file mode 100644
index 0000000..8bfd5a1
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/setup.cfg
@@ -0,0 +1,4 @@
+[egg_info]
+tag_build =
+tag_date = 0
+
diff --git a/deb_dist/ascension-0.6.1/setup.py
b/deb_dist/ascension-0.6.1/setup.py
new file mode 100644
index 0000000..7afc1b9
--- /dev/null
+++ b/deb_dist/ascension-0.6.1/setup.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+"""
+This file is part of Ascension.
+Copyright (C) 2019 GNUnet e.V.
+
+Ascension is free software: you can redistribute it and/or modify it
+under the terms of the GNU Affero General Public License as published
+by the Free Software Foundation, either version 3 of the License,
+or (at your option) any later version.
+
+Ascension is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+SPDX-License-Identifier: AGPL3.0-or-later
+
+Author rexxnor
+"""
+
+import setuptools
+
+with open("README", "r") as fh:
+ long_description = fh.read()
+
+setuptools.setup(
+ name="ascension",
+ version="0.6.1",
+ author="rexxnor",
+ author_email="address@hidden",
+ description="Tool to migrate DNS Zones to the GNU Name System",
+ long_description=long_description,
+ url="https://gnunet.org/git/ascension.git/",
+ packages=['ascension'],
+ data_files=[('man/man1', ['ascension.1'])],
+ classifiers=[
+ "Programming Language :: Python :: 3",
+ ],
+ entry_points={
+ 'console_scripts': [
+ 'ascension=ascension.ascension:main',
+ ],
+ },
+ install_requires=[
+ 'coverage',
+ 'dnspython',
+ 'docopt',
+ 'mock',
+ 'pbr',
+ 'six',
+ ],
+)
diff --git a/deb_dist/python3-ascension_0.5.0-1_all.deb
b/deb_dist/python3-ascension_0.5.0-1_all.deb
new file mode 100644
index 0000000..3a53dc2
Binary files /dev/null and b/deb_dist/python3-ascension_0.5.0-1_all.deb differ
diff --git a/deb_dist/python3-ascension_0.6.1-1_all.deb
b/deb_dist/python3-ascension_0.6.1-1_all.deb
new file mode 100644
index 0000000..e80b4d8
Binary files /dev/null and b/deb_dist/python3-ascension_0.6.1-1_all.deb differ
diff --git a/debian/ascension-bind-0.0.1/debian/ascension-bind.config
b/debian/ascension-bind-0.0.1/debian/ascension-bind.config
index d178dee..cab7306 100644
--- a/debian/ascension-bind-0.0.1/debian/ascension-bind.config
+++ b/debian/ascension-bind-0.0.1/debian/ascension-bind.config
@@ -5,7 +5,7 @@
# load debconf library
. /usr/share/debconf/confmodule
-set -e
+#set -e
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*" 1>&2 }
@@ -48,16 +48,15 @@ db_input medium ascension-bind/publishing || true
db_go || true
PUBLIC=$RET
+echo "Zonestatus check"
zonestatus=true
for ZONE in "address@hidden"
do
- echo "$ZONE" | hexdump -C
- ZONE=echo "$ZONE" | tr -d '\n'
- echo "$ZONE" | hexdump -C
- exit 1
- zonestatus=zonestatus && ascension "$ZONE" -n localhost
+ ZONE=$( echo "$ZONE" | tr -d '\n')
+ zonestatus=zonestatus && ascension "$ZONE" -n localhost --dry-run
done
+echo "After Dry Runs"
if [ -z $zonestatus ]; then
echo "Some zones don't allow zone transfer"
if grep allow-transfer /etc/bind/named.conf* &> /dev/null; then
@@ -72,7 +71,7 @@ if [ -z $zonestatus ]; then
zonestatus=true
for ZONE in "address@hidden"
do
- ZONE=${ZONE} | tr -d '\n'
+ ZONE=$( echo "$ZONE" | tr -d '\n')
zonestatus=zonestatus && ascension "$ZONE" -n localhost
done
if [ -z $zonestatus ]; then
@@ -85,12 +84,14 @@ if [ -z $zonestatus ]; then
fi
fi
+echo "Everything okay, templating files"
mkdir -p /etc/ascension.d/
for ZONE in "address@hidden"
do
- ZONE=${ZONE} | tr -d '\n'
+ ZONE=$( echo "$ZONE" | tr -d '\n')
+ FILECONV=$( echo "$ZONE" | tr '.' '_')
echo "Creating ascension import config files for $ZONE"
- cat > "/etc/ascension.d/bind-import-$ZONE.conf" << EOF
+ cat > "/etc/ascension.d/bind-import-$FILE.conf" << EOF
[ascension]
ZONE = $ZONE
TRANSFERNS = localhost
@@ -99,7 +100,7 @@ PUBLIC = $PUBLIC
EOF
touch "/etc/ascension.d/bind-import-$ZONE.conf"
echo "Creating systemd unit file."
- cat > "/etc/ascension.d/ascension-bind-$ZONE.service" << EOF
+ cat > "/etc/ascension.d/ascension-bind-$FILECONV.service" << EOF
[Unit]
Description=Ascension-bind for $ZONE
After=gnunet-ascension.service
@@ -112,15 +113,16 @@ ExecStart=/usr/bin/ascension $ZONE -n localhost
[Install]
WantedBy=multi-user.target
EOF
- ln -sf "/etc/ascension.d/ascension-bind-$ZONE.service"
"/lib/systemd/system/ascension-bind-$ZONE.service"
+ ln -sf "/etc/ascension.d/ascension-bind-$FILECONV.service"
"/lib/systemd/system/ascension-bind-$FILECONV.service"
done
for ZONE in "address@hidden"
do
- ZONE=${ZONE} | tr -d '\n'
- echo "Starting and enabling ascension-bind-$ZONE"
- systemctl start "ascension-bind-$ZONE"
- systemctl enable "ascension-bind-$ZONE"
+ ZONE=$( echo "$ZONE" | tr -d '\n')
+ ZONE=$( echo "$ZONE" | tr '.' '_')
+ echo "Starting and enabling ascension-bind-$FILECONV"
+ systemctl start "ascension-bind-$FILECONV"
+ systemctl enable "ascension-bind-$FILECONV"
#deb-systemd-invoke start "ascension-bind-$ZONE"
#deb-systemd-invoke enable "ascension-bind-$ZONE"
done
diff --git a/debian/ascension-bind-0.0.1/debian/ascension-bind/DEBIAN/config
b/debian/ascension-bind-0.0.1/debian/ascension-bind/DEBIAN/config
index 656fc39..4f4d246 100755
--- a/debian/ascension-bind-0.0.1/debian/ascension-bind/DEBIAN/config
+++ b/debian/ascension-bind-0.0.1/debian/ascension-bind/DEBIAN/config
@@ -5,7 +5,7 @@
# load debconf library
. /usr/share/debconf/confmodule
-set -e
+#set -e
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*" 1>&2 }
@@ -48,16 +48,15 @@ db_input medium ascension-bind/publishing || true
db_go || true
PUBLIC=$RET
+echo "Zonestatus check"
zonestatus=true
for ZONE in "address@hidden"
do
- echo "$ZONE" | hexdump -C
- ZONE=echo "$ZONE" | tr -d '\n'
- echo "$ZONE" | hexdump -C
- exit 1
- zonestatus=zonestatus && ascension "$ZONE" -n localhost
+ ZONE=$( echo "$ZONE" | tr -d '\n')
+ zonestatus=zonestatus && ascension "$ZONE" -n localhost --dry-run
done
+echo "After Dry Runs"
if [ -z $zonestatus ]; then
echo "Some zones don't allow zone transfer"
if grep allow-transfer /etc/bind/named.conf* &> /dev/null; then
@@ -72,7 +71,7 @@ if [ -z $zonestatus ]; then
zonestatus=true
for ZONE in "address@hidden"
do
- ZONE=${ZONE} | tr -d '\n'
+ ZONE=$( echo "$ZONE" | tr -d '\n')
zonestatus=zonestatus && ascension "$ZONE" -n localhost
done
if [ -z $zonestatus ]; then
@@ -85,12 +84,14 @@ if [ -z $zonestatus ]; then
fi
fi
+echo "Everything okay, templating files"
mkdir -p /etc/ascension.d/
for ZONE in "address@hidden"
do
- ZONE=${ZONE} | tr -d '\n'
+ ZONE=$( echo "$ZONE" | tr -d '\n')
+ FILECONV=$( echo "$ZONE" | tr '.' '_')
echo "Creating ascension import config files for $ZONE"
- cat > "/etc/ascension.d/bind-import-$ZONE.conf" << EOF
+ cat > "/etc/ascension.d/bind-import-$FILE.conf" << EOF
[ascension]
ZONE = $ZONE
TRANSFERNS = localhost
@@ -99,7 +100,7 @@ PUBLIC = $PUBLIC
EOF
touch "/etc/ascension.d/bind-import-$ZONE.conf"
echo "Creating systemd unit file."
- cat > "/etc/ascension.d/ascension-bind-$ZONE.service" << EOF
+ cat > "/etc/ascension.d/ascension-bind-$FILECONV.service" << EOF
[Unit]
Description=Ascension-bind for $ZONE
After=gnunet-ascension.service
@@ -112,15 +113,16 @@ ExecStart=/usr/bin/ascension $ZONE -n localhost
[Install]
WantedBy=multi-user.target
EOF
- ln -sf "/etc/ascension.d/ascension-bind-$ZONE.service"
"/lib/systemd/system/ascension-bind-$ZONE.service"
+ ln -sf "/etc/ascension.d/ascension-bind-$FILECONV.service"
"/lib/systemd/system/ascension-bind-$FILECONV.service"
done
for ZONE in "address@hidden"
do
- ZONE=${ZONE} | tr -d '\n'
- echo "Starting and enabling ascension-bind-$ZONE"
- systemctl start "ascension-bind-$ZONE"
- systemctl enable "ascension-bind-$ZONE"
+ ZONE=$( echo "$ZONE" | tr -d '\n')
+ ZONE=$( echo "$ZONE" | tr '.' '_')
+ echo "Starting and enabling ascension-bind-$FILECONV"
+ systemctl start "ascension-bind-$FILECONV"
+ systemctl enable "ascension-bind-$FILECONV"
#deb-systemd-invoke start "ascension-bind-$ZONE"
#deb-systemd-invoke enable "ascension-bind-$ZONE"
done
diff --git a/debian/ascension-bind-0.0.1/debian/ascension-bind/DEBIAN/control
b/debian/ascension-bind-0.0.1/debian/ascension-bind/DEBIAN/control
index ddd8c9e..5361a6d 100644
--- a/debian/ascension-bind-0.0.1/debian/ascension-bind/DEBIAN/control
+++ b/debian/ascension-bind-0.0.1/debian/ascension-bind/DEBIAN/control
@@ -2,7 +2,7 @@ Package: ascension-bind
Version: 0.0.1-1
Architecture: amd64
Maintainer: rexxnor <address@hidden>
-Installed-Size: 16
+Installed-Size: 17
Depends: debconf (>= 0.5) | debconf-2.0
Section: net
Priority: optional
diff --git a/helpers/python3-ascension.postinst
b/helpers/python3-ascension.postinst
new file mode 100644
index 0000000..0921bcf
--- /dev/null
+++ b/helpers/python3-ascension.postinst
@@ -0,0 +1,46 @@
+#!/bin/sh
+# postinst script for ascension-bind
+#
+# see: dh_installdeb(1)
+# load debconf library
+set -e
+
+if ! id ascension; then
+ adduser --system ascension
+fi
+# ok if this fails as gnunet is not yet a dependency
+if ! id gnunet; then
+ addgroup --system gnunet
+ adduser ascension gnunet
+fi
+
+mkdir -p /etc/ascension.d/
+
+# add systemd unit file
+ cat > "/etc/ascension.d/gnunet-ascension.service" << EOF
+[Unit]
+Description=Starting GNUnet peer for ascension
+After=network.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+User=ascension
+ExecStart=/usr/bin/gnunet-arm -s
+ExecStop=/usr/bin/gnunet-arm -e
+ExecReload=/usr/bin/gnunet-arm -r
+
+[Install]
+WantedBy=multi-user.target
+EOF
+
+# link the systemd unit file
+ln -sf "/etc/ascension.d/gnunet-ascension.service"
"/lib/systemd/system/gnunet-ascension.service"
+systemctl daemon-reload
+
+# start and enable service
+systemctl start gnunet-ascension
+systemctl enable gnunet-ascension
+
+exit 0
+#DEBHELPER#
diff --git a/helpers/python3-ascension.prerm b/helpers/python3-ascension.prerm
new file mode 100644
index 0000000..e0dce86
--- /dev/null
+++ b/helpers/python3-ascension.prerm
@@ -0,0 +1,22 @@
+#!/bin/sh
+# prerm script for ascension-bind
+#
+# see: dh_installdeb(1)
+# load debconf library
+set -e
+
+mkdir -p /etc/ascension.d/
+
+# remove systemd stuff
+systemctl disable gnunet-ascension
+systemctl stop gnunet-ascension
+
+# remove the systemd files
+unlink /lib/systemd/system/gnunet-ascension.service
+rm /etc/ascension.d/gnunet-ascension.service
+
+# link the systemd unit file
+systemctl daemon-reload
+
+exit 0
+#DEBHELPER#
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [ascension] branch master updated (7e1e8df -> 5dc85dc), gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 01/09: fixed a double implemented issue, gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 03/09: fixed exception not catching all, gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 02/09: updated config file for ascension-bind, gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 07/09: fixed up gitlabci, gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 09/09: updated gitlabci to include correct postinst and prerm files, gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 04/09: bugfixes, improved config file, gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 06/09: first working version of ascension-bind, gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 08/09: make linter and lintian happier, fixed logic errors, gnunet, 2019/05/10
- [GNUnet-SVN] [ascension] 05/09: ascension dry-run fixes, packaging, ascension-bind,
gnunet <=