From db8dbc29fcbcbbbb5f20a69041992bd8909929a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= <des@FreeBSD.org>
Date: Sat, 12 May 2018 14:51:53 +0000
Subject: [PATCH] No reason to keep this around.

---
 contrib/unbound/libunbound/python/LICENSE     |  28 -
 contrib/unbound/libunbound/python/Makefile    |  72 --
 .../libunbound/python/doc/_static/readme      |   1 -
 contrib/unbound/libunbound/python/doc/conf.py | 184 ----
 .../python/doc/examples/example1a.rst         |  33 -
 .../python/doc/examples/example1b.rst         |  37 -
 .../python/doc/examples/example2.rst          |  41 -
 .../python/doc/examples/example3.rst          |  39 -
 .../python/doc/examples/example4.rst          |  36 -
 .../python/doc/examples/example5.rst          |  34 -
 .../python/doc/examples/example6-1.py         |  27 -
 .../python/doc/examples/example6.rst          |  13 -
 .../python/doc/examples/example7-1.py         |  17 -
 .../python/doc/examples/example7-2.py         |  16 -
 .../python/doc/examples/example7.rst          |  33 -
 .../python/doc/examples/example8-1.py         |  31 -
 .../python/doc/examples/example8.rst          |  34 -
 .../libunbound/python/doc/examples/index.rst  |  16 -
 .../unbound/libunbound/python/doc/index.rst   |  27 -
 .../unbound/libunbound/python/doc/install.rst |  38 -
 .../unbound/libunbound/python/doc/intro.rst   |  58 --
 .../libunbound/python/doc/modules/unbound.rst | 167 ---
 .../python/examples/async-lookup.py           |  57 --
 .../libunbound/python/examples/dns-lookup.py  |  45 -
 .../python/examples/dnssec-valid.py           |  60 --
 .../libunbound/python/examples/dnssec_test.py |  36 -
 .../libunbound/python/examples/example8-1.py  |  62 --
 .../libunbound/python/examples/idn-lookup.py  |  63 --
 .../libunbound/python/examples/mx-lookup.py   |  54 -
 .../libunbound/python/examples/ns-lookup.py   |  48 -
 .../python/examples/reverse-lookup.py         |  44 -
 contrib/unbound/libunbound/python/file_py3.i  | 155 ---
 .../unbound/libunbound/python/libunbound.i    | 959 ------------------
 33 files changed, 2565 deletions(-)
 delete mode 100644 contrib/unbound/libunbound/python/LICENSE
 delete mode 100644 contrib/unbound/libunbound/python/Makefile
 delete mode 100644 contrib/unbound/libunbound/python/doc/_static/readme
 delete mode 100644 contrib/unbound/libunbound/python/doc/conf.py
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example1a.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example1b.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example2.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example3.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example4.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example5.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example6-1.py
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example6.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example7-1.py
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example7-2.py
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example7.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example8-1.py
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/example8.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/examples/index.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/index.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/install.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/intro.rst
 delete mode 100644 contrib/unbound/libunbound/python/doc/modules/unbound.rst
 delete mode 100644 contrib/unbound/libunbound/python/examples/async-lookup.py
 delete mode 100644 contrib/unbound/libunbound/python/examples/dns-lookup.py
 delete mode 100644 contrib/unbound/libunbound/python/examples/dnssec-valid.py
 delete mode 100644 contrib/unbound/libunbound/python/examples/dnssec_test.py
 delete mode 100644 contrib/unbound/libunbound/python/examples/example8-1.py
 delete mode 100644 contrib/unbound/libunbound/python/examples/idn-lookup.py
 delete mode 100644 contrib/unbound/libunbound/python/examples/mx-lookup.py
 delete mode 100644 contrib/unbound/libunbound/python/examples/ns-lookup.py
 delete mode 100644 contrib/unbound/libunbound/python/examples/reverse-lookup.py
 delete mode 100644 contrib/unbound/libunbound/python/file_py3.i
 delete mode 100644 contrib/unbound/libunbound/python/libunbound.i

diff --git a/contrib/unbound/libunbound/python/LICENSE b/contrib/unbound/libunbound/python/LICENSE
deleted file mode 100644
index 7b769d091201..000000000000
--- a/contrib/unbound/libunbound/python/LICENSE
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-                    Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of the organization nor the names of its
-      contributors may be used to endorse or promote products derived from this
-      software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/contrib/unbound/libunbound/python/Makefile b/contrib/unbound/libunbound/python/Makefile
deleted file mode 100644
index 9a98ef5b5f78..000000000000
--- a/contrib/unbound/libunbound/python/Makefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# Makefile: compilation of pyUnbound and documentation, testing
-#
-# Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-#                     Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-#
-# This software is open source.
-# 
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 
-#    * Redistributions of source code must retain the above copyright notice,
-#      this list of conditions and the following disclaimer.
-# 
-#    * Redistributions in binary form must reproduce the above copyright notice,
-#      this list of conditions and the following disclaimer in the documentation
-#      and/or other materials provided with the distribution.
-# 
-#    * Neither the name of the organization nor the names of its
-#      contributors may be used to endorse or promote products derived from this
-#      software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-help:
-	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  testenv   to make test environment and run bash "
-	@echo "            useful in case you don't want to install unbound but want to test examples"
-	@echo "  doc       to make documentation"
-	@echo "  clean     clean all"
-
-.PHONY: testenv clean doc swig
-
-#_unbound.so:	../../Makefile
-	#$(MAKE) -C ../..
-
-#../../.libs/libunbound.so.0:	../../Makefile
-	#$(MAKE) -C ../..
-
-clean:
-	rm -rdf examples/unbound
-	rm -f _unbound.so libunbound_wrap.o
-	$(MAKE) -C ../.. clean
-
-testenv: ../../.libs/libunbound.so.2 ../../.libs/_unbound.so
-	rm -rdf examples/unbound
-	cd examples && mkdir unbound && ln -s ../../unbound.py unbound/__init__.py && ln -s ../../_unbound.so unbound/_unbound.so && ln -s ../../../../.libs/libunbound.so.2 unbound/libunbound.so.2 && ls -la
-	cd examples && if test -f ../../../.libs/_unbound.so; then cp ../../../.libs/_unbound.so . ; fi
-	@echo "Run a script by typing ./script_name.py"
-	cd examples && LD_LIBRARY_PATH=unbound bash
-	rm -rdf examples/unbound examples/_unbound.so
-
-doc: ../../.libs/libunbound.so.0 _unbound.so
-	$(MAKE) -C docs html
-
-#for development only
-swig: libunbound.i 
-	swig -python -o libunbound_wrap.c -I../.. libunbound.i
-	gcc -c libunbound_wrap.c -O9 -fPIC -I../.. -I/usr/include/python2.5 -I. -o libunbound_wrap.o
-	gcc -shared libunbound_wrap.o -L../../.libs -lunbound -o _unbound.so 
-
diff --git a/contrib/unbound/libunbound/python/doc/_static/readme b/contrib/unbound/libunbound/python/doc/_static/readme
deleted file mode 100644
index db676aebbde9..000000000000
--- a/contrib/unbound/libunbound/python/doc/_static/readme
+++ /dev/null
@@ -1 +0,0 @@
-this directory exists to pacify sphinx-build.
diff --git a/contrib/unbound/libunbound/python/doc/conf.py b/contrib/unbound/libunbound/python/doc/conf.py
deleted file mode 100644
index 1766036b9a1f..000000000000
--- a/contrib/unbound/libunbound/python/doc/conf.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Unbound documentation build configuration file
-#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# The contents of this file are pickled, so don't put values in the namespace
-# that aren't pickleable (module imports are okay, they're removed automatically).
-#
-# All configuration values have a default value; values that are commented out
-# serve to show the default value.
-
-import sys, os
-
-# If your extensions are in another directory, add it here. If the directory
-# is relative to the documentation root, use os.path.abspath to make it
-# absolute, like shown here.
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),'../')))
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),'../../../')))
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),'../../../.libs/')))
-#print sys.path
-
-# General configuration
-# ---------------------
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest']
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General substitutions.
-project = 'pyUnbound'
-copyright = '2009, Zdenek Vasicek, Marek Vavrusa'
-
-# The default replacements for |version| and |release|, also used in various
-# other places throughout the built documents.
-#
-# The short X.Y version.
-version = '1.0'
-# The full version, including alpha/beta/rc tags.
-release = '1.0.0'
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-today_fmt = '%B %d, %Y'
-
-# List of documents that shouldn't be included in the build.
-#unused_docs = []
-
-# List of directories, relative to source directories, that shouldn't be searched
-# for source files.
-#exclude_dirs = []
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-
-# Options for HTML output
-# -----------------------
-
-# The theme that the html output should use.
-html_theme = "classic"
-
-# The style sheet to use for HTML and HTML Help pages. A file of that name
-# must exist either in Sphinx' static/ path, or in one of the custom paths
-# given in html_static_path.
-#html_style = 'default.css'
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (within the static path) to place at the top of
-# the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-html_use_modindex = False
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, the reST sources are included in the HTML build as _sources/<name>.
-html_copy_source = False
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = ''
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'Unbounddoc'
-
-
-# Options for LaTeX output
-# ------------------------
-
-# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
-
-# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, document class [howto/manual]).
-latex_documents = [
-  ('index', 'Unbound.tex', 'Unbound Documentation',
-   'Zdenek Vasicek, Marek Vavrusa', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_use_modindex = True
diff --git a/contrib/unbound/libunbound/python/doc/examples/example1a.rst b/contrib/unbound/libunbound/python/doc/examples/example1a.rst
deleted file mode 100644
index f46cb92f47e8..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example1a.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-.. _example_resolve_name:
-
-Resolve a name
-==============
-
-This basic example shows how to create a context and resolve a host address
-(DNS record of A type).
-
-Source code
------------
-
-::
-
-    #!/usr/bin/python
-    import unbound
-
-    ctx = unbound.ub_ctx()
-    ctx.resolvconf("/etc/resolv.conf")
-
-    status, result = ctx.resolve("www.google.com")
-    if status == 0 and result.havedata:
-        print "Result.data:", result.data.address_list
-    elif status != 0:
-        print "Resolve error:", unbound.ub_strerror(status)
-
-In contrast with the C API, the source code is more compact while the
-performance of C implementation is preserved. 
-The main advantage is that you need not take care about the deallocation and
-allocation of context and result structures; pyUnbound module does it
-automatically for you. 
-
-If only domain name is given, the :meth:`unbound.ub_ctx.resolve` looks for
-A records in IN class.
diff --git a/contrib/unbound/libunbound/python/doc/examples/example1b.rst b/contrib/unbound/libunbound/python/doc/examples/example1b.rst
deleted file mode 100644
index 1adae2cb1298..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example1b.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-.. _example_reverse_lookup:
-
-Reverse DNS lookup
-==================
-
-Reverse DNS lookup involves determining the hostname associated with a given IP
-address.
-This example shows how reverse lookup can be done using unbound module.
-
-For the reverse DNS records, the special domain in-addr.arpa is reserved. 
-For example, a host name for the IP address ``74.125.43.147`` can be obtained
-by issuing a DNS query for the PTR record for address
-``147.43.125.74.in-addr.arpa.``
-
-Source code
------------
-
-::
-
-    #!/usr/bin/python
-    import unbound
-
-    ctx = unbound.ub_ctx()
-    ctx.resolvconf("/etc/resolv.conf")
-
-    status, result = ctx.resolve(unbound.reverse("74.125.43.147") + ".in-addr.arpa.", unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN)
-    if status == 0 and result.havedata:
-        print "Result.data:", result.data.domain_list
-    elif status != 0:
-        print "Resolve error:", unbound.ub_strerror(status)
-
-In order to simplify the python code, unbound module contains the
-:meth:`unbound.reverse` function which reverses the hostname components.
-This function is defined as follows::
-
-    def reverse(domain):
-        return '.'.join([a for a in domain.split(".")][::-1])
diff --git a/contrib/unbound/libunbound/python/doc/examples/example2.rst b/contrib/unbound/libunbound/python/doc/examples/example2.rst
deleted file mode 100644
index a2bf2cbf5199..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example2.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-.. _example_setup_ctx:
-
-Lookup from threads
-===================
-
-This example shows how to use unbound module from a threaded program.
-In this example, three lookup threads are created which work in background.
-Each thread resolves different DNS record.
-
-Source code
------------
-
-::
-
-    #!/usr/bin/python
-    from unbound import ub_ctx, RR_TYPE_A, RR_CLASS_IN
-    from threading import Thread
-
-    ctx = ub_ctx()
-    ctx.resolvconf("/etc/resolv.conf")
-
-    class LookupThread(Thread):
-        def __init__(self,ctx, name):
-            Thread.__init__(self)
-            self.ctx = ctx
-            self.name = name
-
-        def run(self):
-            print "Thread lookup started:",self.name
-            status, result = self.ctx.resolve(self.name, RR_TYPE_A, RR_CLASS_IN)
-            if status == 0 and result.havedata:
-                print "  Result:",self.name,":", result.data.address_list
-
-    threads = []
-    for name in ["www.fit.vutbr.cz","www.vutbr.cz","www.google.com"]:
-        thread = LookupThread(ctx, name)
-        thread.start()
-        threads.append(thread)
-
-    for thread in threads:
-        thread.join()
diff --git a/contrib/unbound/libunbound/python/doc/examples/example3.rst b/contrib/unbound/libunbound/python/doc/examples/example3.rst
deleted file mode 100644
index b0626b55f9c1..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example3.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-.. _example_asynch:
-
-Asynchronous lookup
-===================
-
-This example performs the name lookup in the background. 
-The main program keeps running while the name is resolved. 
-
-Source code
------------
-
-::
-
-	#!/usr/bin/python
-	import time
-	import unbound
-	
-	ctx = unbound.ub_ctx()
-	ctx.resolvconf("/etc/resolv.conf")
-	
-	def call_back(my_data,status,result):
-		print "Call_back:", my_data
-		if status == 0 and result.havedata:
-			print "Result:", result.data.address_list
-			my_data['done_flag'] = True
-	
-	
-	my_data = {'done_flag':False,'arbitrary':"object"}
-	status, async_id = ctx.resolve_async("www.seznam.cz", my_data, call_back, unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
-	        
-	while (status == 0) and (not my_data['done_flag']):
-		status = ctx.process()
-		time.sleep(0.1)
-	
-	if (status != 0):
-		print "Resolve error:", unbound.ub_strerror(status)
-
-The :meth:`unbound.ub_ctx.resolve_async` method is able to pass on any Python
-object. In this example, we used a dictionary object ``my_data``.
diff --git a/contrib/unbound/libunbound/python/doc/examples/example4.rst b/contrib/unbound/libunbound/python/doc/examples/example4.rst
deleted file mode 100644
index 3b43eb85f939..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example4.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-.. _example_examine:
-
-DNSSEC validator
-================
-
-This example program performs DNSSEC validation of a DNS lookup.
-
-Source code
------------
-
-::
-
-    #!/usr/bin/python
-    import os
-    from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN
-
-    ctx = ub_ctx()
-    ctx.resolvconf("/etc/resolv.conf")
-    if (os.path.isfile("keys")):
-        ctx.add_ta_file("keys") #read public keys for DNSSEC verification
-
-    status, result = ctx.resolve("www.nic.cz", RR_TYPE_A, RR_CLASS_IN)
-    if status == 0 and result.havedata:
-
-        print "Result:", result.data.address_list
-
-        if result.secure:
-            print "Result is secure"
-        elif result.bogus:
-            print "Result is bogus"
-        else:
-            print "Result is insecure"
-
-More detailed informations can be seen in libUnbound DNSSEC tutorial `here`_.
-
-.. _here: http://www.unbound.net/documentation/libunbound-tutorial-6.html
diff --git a/contrib/unbound/libunbound/python/doc/examples/example5.rst b/contrib/unbound/libunbound/python/doc/examples/example5.rst
deleted file mode 100644
index 9262014bb7fd..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example5.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-.. _example_resolver_only:
-
-Resolver only
-=============
-
-This example program shows how to perform DNS resolution only.
-Unbound contains two basic modules: resolver and validator.
-In case, the validator is not necessary, the validator module can be turned off
-using "module-config" option.
-This option contains a list of module names separated by the space char. This
-list determined which modules should be employed and in what order.
-
-Source code
------------
-
-::
-
-	#!/usr/bin/python
-	import os
-	from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN
-	
-	ctx = ub_ctx()
-	ctx.set_option("module-config:","iterator")
-	ctx.resolvconf("/etc/resolv.conf")
-	
-	status, result = ctx.resolve("www.google.com", RR_TYPE_A, RR_CLASS_IN)
-	if status == 0 and result.havedata:
-	
-	    print "Result:", result.data.address_list
-
-.. note::
-   The :meth:`unbound.ub_ctx.set_option` method must be used before the first
-   resolution (i.e. before :meth:`unbound.ub_ctx.resolve` or
-   :meth:`unbound.ub_ctx.resolve_async` call).
diff --git a/contrib/unbound/libunbound/python/doc/examples/example6-1.py b/contrib/unbound/libunbound/python/doc/examples/example6-1.py
deleted file mode 100644
index 0f405448c513..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example6-1.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/python
-from unbound import ub_ctx,ub_strerror,RR_TYPE_A,RR_CLASS_IN
-
-ctx = ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-	
-status, result = ctx.resolve("test.record.xxx", RR_TYPE_A, RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print "Result:", result.data.address_list
-else:
-    print "No record found"
-
-#define new local zone
-status = ctx.zone_add("xxx.","static")
-if (status != 0): print "Error zone_add:",status, ub_strerror(status)
-
-#add RR to the zone
-status = ctx.data_add("test.record.xxx. IN A 1.2.3.4")
-if (status != 0): print "Error data_add:",status, ub_strerror(status)
-
-#lookup for an A record
-status, result = ctx.resolve("test.record.xxx", RR_TYPE_A, RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print "Result:", result.data.as_address_list()
-else:
-    print "No record found"
-
diff --git a/contrib/unbound/libunbound/python/doc/examples/example6.rst b/contrib/unbound/libunbound/python/doc/examples/example6.rst
deleted file mode 100644
index 6fde8b25fd8d..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example6.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. _example_localzone:
-
-Local zone manipulation
-=======================
-
-This example program shows how to define local zone containing custom DNS
-records.
-
-Source code
------------
-
-.. literalinclude:: example6-1.py
-    :language: python
diff --git a/contrib/unbound/libunbound/python/doc/examples/example7-1.py b/contrib/unbound/libunbound/python/doc/examples/example7-1.py
deleted file mode 100644
index 802bd1c35baf..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example7-1.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/python
-# vim:fileencoding=utf-8
-#
-# IDN (Internationalized Domain Name) lookup support
-#
-import unbound
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-status, result = ctx.resolve(u"www.háčkyčárky.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print "Result:"
-    print "      raw data:", result.data
-    for k in result.data.address_list:
-        print "      address:%s" % k
-
diff --git a/contrib/unbound/libunbound/python/doc/examples/example7-2.py b/contrib/unbound/libunbound/python/doc/examples/example7-2.py
deleted file mode 100644
index 5a41f8dc9333..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example7-2.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/python
-# vim:fileencoding=utf-8
-#
-# IDN (Internationalized Domain Name) lookup support (lookup for MX)
-#
-import unbound
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-status, result = ctx.resolve(u"háčkyčárky.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print "Result:"
-    print "      raw data:", result.data
-    for k in result.data.mx_list_idn:
-        print "      priority:%d address:%s" % k
diff --git a/contrib/unbound/libunbound/python/doc/examples/example7.rst b/contrib/unbound/libunbound/python/doc/examples/example7.rst
deleted file mode 100644
index 5fde18e05488..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example7.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-.. _example_idna:
-
-Internationalized domain name support
-=====================================
-
-Unlike the libUnbound, pyUnbound is able to handle IDN queries.
-
-Automatic IDN DNAME conversion
--------------------------------
-
-If we use unicode string in :meth:`unbound.ub_ctx.resolve` method,
-the IDN DNAME conversion (if it is necessary) is performed on background.
-
-Source code
-...........
-
-.. literalinclude:: example7-1.py
-    :language: python
-
-IDN converted attributes
-------------------------
-
-The :class:`unbound.ub_data` class contains attributes suffix which converts
-the dname to UTF string. These attributes have the ``_idn`` suffix.
-
-Apart from this approach, two conversion functions exist
-(:func:`unbound.idn2dname` and :func:`unbound.dname2idn`).
-
-Source code
-...........
-
-.. literalinclude:: example7-2.py
-    :language: python
diff --git a/contrib/unbound/libunbound/python/doc/examples/example8-1.py b/contrib/unbound/libunbound/python/doc/examples/example8-1.py
deleted file mode 100644
index 79060167d83c..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example8-1.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/python
-# vim:fileencoding=utf-8
-#
-# Lookup for MX and NS records
-#
-import unbound
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print "Result:"
-    print "      raw data:", result.data
-    for k in result.data.mx_list:
-        print "      priority:%d address:%s" % k
-
-status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print "Result:"
-    print "      raw data:", result.data
-    for k in result.data.address_list:
-        print "      address:%s" % k
-
-status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_NS, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print "Result:"
-    print "      raw data:", result.data
-    for k in result.data.domain_list:
-        print "      host: %s" % k
-
diff --git a/contrib/unbound/libunbound/python/doc/examples/example8.rst b/contrib/unbound/libunbound/python/doc/examples/example8.rst
deleted file mode 100644
index 16c14047576b..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/example8.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-.. _example_mxlookup:
-
-Lookup for MX and NS records
-============================
-
-The pyUnbound extension provides functions which are able to encode RAW RDATA
-produces by unbound resolver (see :class:`unbound.ub_data`).
-
-Source code
------------
-
-.. literalinclude:: example8-1.py
-    :language: python
-
-Output
-------
-
-The previous example produces the following output::
-
-    Result:
-        raw data: 00 0F 05 6D 61 69 6C 34 03 6E 69 63 02 63 7A 00;00 14 02 6D 78 05 63 7A 6E 69 63 03 6F 72 67 00;00 0A 04 6D 61 69 6C 03 6E 69 63 02 63 7A 00
-        priority:15 address: mail4.nic.cz.
-        priority:20 address: mx.cznic.org.
-        priority:10 address: mail.nic.cz.
-
-    Result:
-        raw data: D9 1F CD 32
-        address: 217.31.205.50
-
-    Result:
-        raw data: 01 61 02 6E 73 03 6E 69 63 02 63 7A 00;01 65 02 6E 73 03 6E 69 63 02 63 7A 00;01 63 02 6E 73 03 6E 69 63 02 63 7A 00
-        host: a.ns.nic.cz.
-        host: e.ns.nic.cz.
-        host: c.ns.nic.cz.
diff --git a/contrib/unbound/libunbound/python/doc/examples/index.rst b/contrib/unbound/libunbound/python/doc/examples/index.rst
deleted file mode 100644
index 283261652dc0..000000000000
--- a/contrib/unbound/libunbound/python/doc/examples/index.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-Examples
-========
-
-Here you can find several examples which utilizes the unbound library in Python
-environment. Unbound is a caching validator and resolver and can be linked into
-an application, as a library where can answer DNS queries for the application.
-This set of examples shows how to use the functions from Python environment.
-
-Tutorials
----------
-
-.. toctree::
-    :maxdepth: 1
-    :glob:
-
-    example*
diff --git a/contrib/unbound/libunbound/python/doc/index.rst b/contrib/unbound/libunbound/python/doc/index.rst
deleted file mode 100644
index b42e05262237..000000000000
--- a/contrib/unbound/libunbound/python/doc/index.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-PyUnbound documentation
-=======================================
-
-This project contains an Unbound wrapper providing the thinnest layer over the library possible. 
-Everything you can do from the libUnbound C API, you can do from Python, even more. 
-
-Contents
-----------
-.. toctree::
-	:maxdepth: 2
-
-	intro.rst
-	install.rst
-	examples/index.rst
-	modules/unbound
-
-Module Documentation
------------------------
-
-* Module :mod:`unbound`
-
-Indices and tables
--------------------
-
-* :ref:`genindex`
-* :ref:`search`
-
diff --git a/contrib/unbound/libunbound/python/doc/install.rst b/contrib/unbound/libunbound/python/doc/install.rst
deleted file mode 100644
index bb3118984de3..000000000000
--- a/contrib/unbound/libunbound/python/doc/install.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-Installation
-============
-
-Prerequisites
--------------
-
-Python 2.4 or higher, SWIG 1.3 or higher, GNU make
-
-Compiling
----------
-
-After downloading, you can compile the pyUnbound library by doing::
-
-    > tar -xzf unbound-x.x.x-py.tar.gz
-    > cd unbound-x.x.x
-    > ./configure --with-pyunbound
-    > make
-
-You may want to enable ``--with-pythonmodule`` as well if you want to use
-python as a module in the resolver.
-
-You need ``GNU make`` to compile sources; ``SWIG`` and ``Python devel``
-libraries to compile extension module. 
-
-
-Testing
--------
-
-If the compilation is successful, you can test the python LDNS extension module
-by::
-
-    > cd contrib/python
-    > make testenv
-    > ./dns-lookup.py
-
-You may want to ``make install`` in the main directory since ``make testenv``
-is for debugging.  In contrib/examples you can find simple applications written
-in Python using the Unbound extension.
diff --git a/contrib/unbound/libunbound/python/doc/intro.rst b/contrib/unbound/libunbound/python/doc/intro.rst
deleted file mode 100644
index e490d2c6f508..000000000000
--- a/contrib/unbound/libunbound/python/doc/intro.rst
+++ /dev/null
@@ -1,58 +0,0 @@
-Introduction
-============
-
-Unbound
--------
-
-`Unbound`_  is  an implementation of a DNS resolver, that performs caching and
-DNSSEC validation.
-Together with unbound, the libunbound library is provided.
-This library can be used to convert hostnames to ip addresses, and back, as
-well as obtain other information.
-Since the resolver allows to specify the class and type of a query (A record,
-NS, MX, ...), this library offers powerful resolving tool.
-The library also performs public-key validation of results with DNSSEC.
-
-.. _Unbound: http://www.unbound.net/documentation
-
-pyUnbound
----------
-
-The pyUnbound is an extension module for Python which provides an
-object-oriented interface to libunbound. 
-It is the first Python module which offers thread-safe caching resolver.
-
-The interface was designed with the emphasis on the simplicity of use.
-There are two main classes :class:`unbound.ub_ctx` (a validation and resolution
-context) and :class:`unbound.ub_result` which contains the validation and
-resolution results.
-The objects are thread-safe, and a context can be used in non-threaded as well
-as threaded environment.
-Resolution can be performed blocking and non-blocking (i.e. asynchronous).
-The asynchronous method returns from the call immediately, so that processing
-can go on, while the results become available later.
-
-Features
---------
-
-* Customizable caching validation resolver for synchronous and asynchronous
-  lookups
-* Easy to use object interface
-* Easy to integrate extension module
-* Designed for thread environment (i.e. thread-safe)
-* Allows define and customize of local zone and its RR's during the operation
-  (i.e. without restart)
-* Includes encoding functions to simplify the results retrieval
-* Internationalized domain name (`IDN`_) support
-
-.. _IDN: http://en.wikipedia.org/wiki/Internationalized_domain_name
-
-Application area
-----------------
-
-* DNS-based applications performing DNS lookups; the caching resolver can
-  reduce overhead
-* Applications where the validation of DNS records is required
-* Great solution for customizable and dynamic DNS-based white/blacklists (spam
-  rejection, connection rejection, ...) using the dynamic local zone
-  manipulation
diff --git a/contrib/unbound/libunbound/python/doc/modules/unbound.rst b/contrib/unbound/libunbound/python/doc/modules/unbound.rst
deleted file mode 100644
index 77e4cd1a1751..000000000000
--- a/contrib/unbound/libunbound/python/doc/modules/unbound.rst
+++ /dev/null
@@ -1,167 +0,0 @@
-Unbound module documentation
-================================
-
-.. automodule:: unbound
-
-Class ub_ctx
---------------
-.. autoclass:: ub_ctx
-	:members:
-	:undoc-members:
-	
-	.. automethod:: __init__ 
-
-Class ub_result
-----------------------
-.. autoclass:: ub_result
-	:members:
-
-	.. attribute:: qname
-
-		The original question, name text string.
-
-	.. attribute:: qtype
-
-		The class asked for.
-
-	.. attribute:: canonname
-
-		Canonical name for the result (the final cname). May be empty if no canonical name exists.
-
-	.. attribute:: answer_packet
-		
-		The DNS answer packet. Network formatted. Can contain DNSSEC types.
-
-	.. attribute:: havedata
-		
-		If there is any data, this property is true. If false, there was no data (nxdomain may be true, rcode can be set).
-
-	.. attribute:: secure
-		
-		True, if the result is validated securely.
-	 	False, if validation failed or domain queried has no security info.
-	 
-	  	It is possible to get a result with no data (havedata is false),
-	  	and secure is true. This means that the non-existence of the data
-	  	was cryptographically proven (with signatures).
-
-	.. attribute:: bogus
-		
-		If the result was not secure (secure==0), and this result is due  to a security failure, bogus is true.
-	 	This means the data has been actively tampered with, signatures
-	 	failed, expected signatures were not present, timestamps on 
-	 	signatures were out of date and so on.
-	 
-	 	If secure==0 and bogus==0, this can happen if the data is not secure 
-	 	because security is disabled for that domain name. 
-	 	This means the data is from a domain where data is not signed.
-
-	.. attribute:: nxdomain
-
-		If there was no data, and the domain did not exist, this is true. 
-		If it is false, and there was no data, then the domain name is purported to exist, but the requested data type is not available.
-
-	.. attribute:: rcode
-		
-		DNS RCODE for the result. May contain additional error code if there was no data due to an error. 
-		0 (RCODE_NOERROR) if okay. See predefined `RCODE_` constants.
-	
-		RCODE can be represented in display representation form (string) using :attr:`rcode_str` attribute.
-
-Class ub_data
-----------------------
-.. autoclass:: ub_data
-	:members:
-
-Functions
-----------------------
-.. autofunction:: reverse
-.. autofunction:: idn2dname
-.. autofunction:: dname2idn
-
-Predefined constants
------------------------
-
-**RCODE**
-	* RCODE_FORMERR = 1
-	* RCODE_NOERROR = 0
-	* RCODE_NOTAUTH = 9
-	* RCODE_NOTIMPL = 4
-	* RCODE_NOTZONE = 10
-	* RCODE_NXDOMAIN = 3
-	* RCODE_NXRRSET = 8
-	* RCODE_REFUSED = 5
-	* RCODE_SERVFAIL = 2
-	* RCODE_YXDOMAIN = 6
-	* RCODE_YXRRSET = 7
-
-**RR_CLASS**
-	* RR_CLASS_ANY = 255
-	* RR_CLASS_CH = 3
-	* RR_CLASS_HS = 4
-	* RR_CLASS_IN = 1
-	* RR_CLASS_NONE = 254
-
-**RR_TYPE**
-	* RR_TYPE_A = 1
-	* RR_TYPE_A6 = 38
-	* RR_TYPE_AAAA = 28
-	* RR_TYPE_AFSDB = 18
-	* RR_TYPE_ANY = 255
-	* RR_TYPE_APL = 42
-	* RR_TYPE_ATMA = 34
-	* RR_TYPE_AXFR = 252
-	* RR_TYPE_CERT = 37
-	* RR_TYPE_CNAME = 5
-	* RR_TYPE_DHCID = 49
-	* RR_TYPE_DLV = 32769
-	* RR_TYPE_DNAME = 39
-	* RR_TYPE_DNSKEY = 48
-	* RR_TYPE_DS = 43
-	* RR_TYPE_EID = 31
-	* RR_TYPE_GID = 102
-	* RR_TYPE_GPOS = 27
-	* RR_TYPE_HINFO = 13
-	* RR_TYPE_IPSECKEY = 45
-	* RR_TYPE_ISDN = 20
-	* RR_TYPE_IXFR = 251
-	* RR_TYPE_KEY = 25
-	* RR_TYPE_KX = 36
-	* RR_TYPE_LOC = 29
-	* RR_TYPE_MAILA = 254
-	* RR_TYPE_MAILB = 253
-	* RR_TYPE_MB = 7
-	* RR_TYPE_MD = 3
-	* RR_TYPE_MF = 4
-	* RR_TYPE_MG = 8
-	* RR_TYPE_MINFO = 14
-	* RR_TYPE_MR = 9
-	* RR_TYPE_MX = 15
-	* RR_TYPE_NAPTR = 35
-	* RR_TYPE_NIMLOC = 32
-	* RR_TYPE_NS = 2
-	* RR_TYPE_NSAP = 22
-	* RR_TYPE_NSAP_PTR = 23
-	* RR_TYPE_NSEC = 47
-	* RR_TYPE_NSEC3 = 50
-	* RR_TYPE_NSEC3PARAMS = 51
-	* RR_TYPE_NULL = 10
-	* RR_TYPE_NXT = 30
-	* RR_TYPE_OPT = 41
-	* RR_TYPE_PTR = 12
-	* RR_TYPE_PX = 26
-	* RR_TYPE_RP = 17
-	* RR_TYPE_RRSIG = 46
-	* RR_TYPE_RT = 21
-	* RR_TYPE_SIG = 24
-	* RR_TYPE_SINK = 40
-	* RR_TYPE_SOA = 6
-	* RR_TYPE_SRV = 33
-	* RR_TYPE_SSHFP = 44
-	* RR_TYPE_TSIG = 250
-	* RR_TYPE_TXT = 16
-	* RR_TYPE_UID = 101
-	* RR_TYPE_UINFO = 100
-	* RR_TYPE_UNSPEC = 103
-	* RR_TYPE_WKS = 11
-	* RR_TYPE_X25 = 19
diff --git a/contrib/unbound/libunbound/python/examples/async-lookup.py b/contrib/unbound/libunbound/python/examples/async-lookup.py
deleted file mode 100644
index 936be3218f3e..000000000000
--- a/contrib/unbound/libunbound/python/examples/async-lookup.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/python
-'''
- async-lookup.py : This example shows how to use asynchronous lookups
-
- Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-          Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
- Copyright (c) 2008. All rights reserved.
-
- This software is open source.
- 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-'''
-from __future__ import print_function
-import unbound
-import time
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-def call_back(my_data,status,result):
-    print("Call_back:", sorted(my_data))
-    if status == 0 and result.havedata:
-        print("Result:", sorted(result.data.address_list))
-        my_data['done_flag'] = True
-
-
-my_data = {'done_flag':False,'arbitrary':"object"}
-status, async_id = ctx.resolve_async("www.nic.cz", my_data, call_back, unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
-        
-while (status == 0) and (not my_data['done_flag']):
-    status = ctx.process()
-    time.sleep(0.1)
-
-if (status != 0):
-    print("Resolve error:", unbound.ub_strerror(status))
diff --git a/contrib/unbound/libunbound/python/examples/dns-lookup.py b/contrib/unbound/libunbound/python/examples/dns-lookup.py
deleted file mode 100644
index a175dfb0e0ba..000000000000
--- a/contrib/unbound/libunbound/python/examples/dns-lookup.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/python
-'''
- dns-lookup.py : This example shows how to resolve IP address
-
- Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-          Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
- Copyright (c) 2008. All rights reserved.
-
- This software is open source.
- 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-'''
-from __future__ import print_function
-import unbound
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-status, result = ctx.resolve("www.nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:", sorted(result.data.address_list))
-elif status != 0:
-    print("Error:", unbound.ub_strerror(status))
diff --git a/contrib/unbound/libunbound/python/examples/dnssec-valid.py b/contrib/unbound/libunbound/python/examples/dnssec-valid.py
deleted file mode 100644
index c5517efc6bc1..000000000000
--- a/contrib/unbound/libunbound/python/examples/dnssec-valid.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/python
-'''
- dnssec-valid.py:  DNSSEC validation
-
- Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-          Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
- Copyright (c) 2008. All rights reserved.
-
- This software is open source.
- 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-'''
-from __future__ import print_function
-import os
-from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN
-
-ctx = ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-fw = open("dnssec-valid.txt","wb")
-ctx.debugout(fw)
-ctx.debuglevel(2)
-
-if os.path.isfile("keys"):
-    ctx.add_ta_file("keys") #read public keys for DNSSEC verification
-
-status, result = ctx.resolve("www.nic.cz", RR_TYPE_A, RR_CLASS_IN)
-if status == 0 and result.havedata:
-
-    print("Result:", sorted(result.data.address_list))
-
-    if result.secure:
-        print("Result is secure")
-    elif result.bogus:
-        print("Result is bogus")
-    else:
-        print("Result is insecure")
-
diff --git a/contrib/unbound/libunbound/python/examples/dnssec_test.py b/contrib/unbound/libunbound/python/examples/dnssec_test.py
deleted file mode 100644
index 430e51a8068a..000000000000
--- a/contrib/unbound/libunbound/python/examples/dnssec_test.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-from __future__ import print_function
-from unbound import ub_ctx, RR_TYPE_A, RR_TYPE_RRSIG, RR_TYPE_NSEC, RR_TYPE_NSEC3
-import ldns
-
-def dnssecParse(domain, rrType=RR_TYPE_A):
-    print("Resolving domain", domain)
-    s, r = resolver.resolve(domain)
-    print("status: %s, secure: %s, rcode: %s, havedata: %s, answer_len; %s" % (s, r.secure, r.rcode_str, r.havedata, r.answer_len))
-    
-    s, pkt = ldns.ldns_wire2pkt(r.packet)
-    if s != 0:
-        raise RuntimeError("Error parsing DNS packet")
-
-    rrsigs = pkt.rr_list_by_type(RR_TYPE_RRSIG, ldns.LDNS_SECTION_ANSWER)
-    print("RRSIGs from answer:", sorted(rrsigs))
-    
-    rrsigs = pkt.rr_list_by_type(RR_TYPE_RRSIG, ldns.LDNS_SECTION_AUTHORITY)
-    print("RRSIGs from authority:", sorted(rrsigs))
-    
-    nsecs = pkt.rr_list_by_type(RR_TYPE_NSEC, ldns.LDNS_SECTION_AUTHORITY)
-    print("NSECs:", sorted(nsecs))
-    
-    nsec3s = pkt.rr_list_by_type(RR_TYPE_NSEC3, ldns.LDNS_SECTION_AUTHORITY)
-    print("NSEC3s:", sorted(nsec3s))
-    
-    print("---")
-
-
-resolver = ub_ctx()
-resolver.add_ta(".   IN DS   19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5")
-
-dnssecParse("nic.cz")
-dnssecParse("nonexistent-domain-blablabla.cz")
-dnssecParse("nonexistent-domain-blablabla.root.cz")
-
diff --git a/contrib/unbound/libunbound/python/examples/example8-1.py b/contrib/unbound/libunbound/python/examples/example8-1.py
deleted file mode 100644
index 723c4060e6d1..000000000000
--- a/contrib/unbound/libunbound/python/examples/example8-1.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/python
-# vim:fileencoding=utf-8
-'''
- example8-1.py: Example shows how to lookup for MX and NS records
-
- Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-          Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
- Copyright (c) 2008. All rights reserved.
-
- This software is open source.
- 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-'''
-from __future__ import print_function
-import unbound
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:")
-    print("      raw data:", result.data)
-    for k in sorted(result.data.mx_list):
-        print("      priority:%d address:%s" % k)
-
-status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:")
-    print("      raw data:", result.data)
-    for k in sorted(result.data.address_list):
-        print("      address:%s" % k)
-
-status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_NS, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:")
-    print("      raw data:", result.data)
-    for k in sorted(result.data.domain_list):
-        print("      host: %s" % k)
-
diff --git a/contrib/unbound/libunbound/python/examples/idn-lookup.py b/contrib/unbound/libunbound/python/examples/idn-lookup.py
deleted file mode 100644
index f28315067d20..000000000000
--- a/contrib/unbound/libunbound/python/examples/idn-lookup.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/python
-# vim:fileencoding=utf-8
-'''
- idn-lookup.py: IDN (Internationalized Domain Name) lookup support 
-
- Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-          Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
- Copyright (c) 2008. All rights reserved.
-
- This software is open source.
- 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-'''
-from __future__ import print_function
-import unbound
-import locale
-
-ctx = unbound.ub_ctx()
-ctx.set_option("module-config:","iterator") #We don't need validation
-ctx.resolvconf("/etc/resolv.conf")
-
-#The unicode IDN string is automatically converted (if necessary)
-status, result = ctx.resolve(u"www.háčkyčárky.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:")
-    print("      raw data:", result.data)
-    for k in sorted(result.data.address_list):
-        print("      address:%s" % k)
-
-status, result = ctx.resolve(u"háčkyčárky.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:")
-    print("      raw data:", result.data)
-    for k in sorted(result.data.mx_list_idn):
-        print("      priority:%d address:%s" % k)
-
-status, result = ctx.resolve(unbound.reverse('217.31.204.66')+'.in-addr.arpa', unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result.data:", result.data)
-    for k in sorted(result.data.domain_list_idn):
-        print("      dname:%s" % k)
diff --git a/contrib/unbound/libunbound/python/examples/mx-lookup.py b/contrib/unbound/libunbound/python/examples/mx-lookup.py
deleted file mode 100644
index e9394b3554b5..000000000000
--- a/contrib/unbound/libunbound/python/examples/mx-lookup.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/python
-# vim:fileencoding=utf-8
-'''
- mx-lookup.py: Lookup for MX records
-
- Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-          Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
- Copyright (c) 2008. All rights reserved.
-
- This software is open source.
- 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-'''
-from __future__ import print_function
-import unbound
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:")
-    print("      raw data:", result.data)
-    for k in sorted(result.data.mx_list):
-        print("      priority:%d address:%s" % k)
-
-status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:")
-    print("      raw data:", result.data)
-    for k in sorted(result.data.address_list):
-        print("      address:%s" % k)
diff --git a/contrib/unbound/libunbound/python/examples/ns-lookup.py b/contrib/unbound/libunbound/python/examples/ns-lookup.py
deleted file mode 100644
index 49f567283a25..000000000000
--- a/contrib/unbound/libunbound/python/examples/ns-lookup.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python
-# vim:fileencoding=utf-8
-'''
- ns-lookup.py: Example shows how to lookup for NS records 
-
- Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-          Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
- Copyright (c) 2008. All rights reserved.
-
- This software is open source.
- 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-'''
-from __future__ import print_function
-import unbound
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-status, result = ctx.resolve("vutbr.cz", unbound.RR_TYPE_NS, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result:")
-    print("      raw data:", result.data)
-    for k in sorted(result.data.domain_list):
-        print("      host: %s" % k)
-
diff --git a/contrib/unbound/libunbound/python/examples/reverse-lookup.py b/contrib/unbound/libunbound/python/examples/reverse-lookup.py
deleted file mode 100644
index c9a13fea6299..000000000000
--- a/contrib/unbound/libunbound/python/examples/reverse-lookup.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/python
-'''
- reverse-lookup.py: Example shows how to resolve reverse record 
-
- Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz)
-          Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
-
- Copyright (c) 2008. All rights reserved.
-
- This software is open source.
- 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 
- Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-'''
-from __future__ import print_function
-import unbound
-
-ctx = unbound.ub_ctx()
-ctx.resolvconf("/etc/resolv.conf")
-
-status, result = ctx.resolve(unbound.reverse("74.125.43.147") + ".in-addr.arpa.", unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN)
-if status == 0 and result.havedata:
-    print("Result.data:", result.data, sorted(result.data.domain_list))
-
diff --git a/contrib/unbound/libunbound/python/file_py3.i b/contrib/unbound/libunbound/python/file_py3.i
deleted file mode 100644
index 5d8b5a2716a5..000000000000
--- a/contrib/unbound/libunbound/python/file_py3.i
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * file_py3.i: Typemaps for FILE* for Python 3
- *
- * Copyright (c) 2011, Karel Slany (karel.slany AT nic.cz)
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * 
- *     * Redistributions of source code must retain the above copyright notice,
- *       this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of the organization nor the names of its
- *       contributors may be used to endorse or promote products derived from this
- *       software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-%{
-#include <unistd.h>
-#include <fcntl.h>
-%}
-
-%types(FILE *);
-
-//#define SWIG_FILE3_DEBUG
-
-/* converts basic file descriptor flags onto a string */
-%fragment("fdfl_to_str", "header") {
-const char *
-fdfl_to_str(int fdfl) {
-
-  static const char * const file_mode[] = {"w+", "w", "r"};
-
-  if (fdfl & O_RDWR) {
-    return file_mode[0];
-  } else if (fdfl & O_WRONLY) {
-    return file_mode[1];
-  } else {
-    return file_mode[2];
-  }
-}
-}
-
-%fragment("is_obj_file", "header") {
-int
-is_obj_file(PyObject *obj) {
-  int fd, fdfl;
-  if (!PyLong_Check(obj) &&                                /* is not an integer */
-      PyObject_HasAttrString(obj, "fileno") &&             /* has fileno method */
-      (PyObject_CallMethod(obj, "flush", NULL) != NULL) && /* flush() succeeded */
-      ((fd = PyObject_AsFileDescriptor(obj)) != -1) &&     /* got file descriptor */
-      ((fdfl = fcntl(fd, F_GETFL)) != -1)                  /* got descriptor flags */
-    ) {
-    return 1;
-  }
-  else {
-    return 0;
-  }
-}
-}
-
-%fragment("obj_to_file","header", fragment="fdfl_to_str,is_obj_file") {
-FILE *
-obj_to_file(PyObject *obj) {
-  int fd, fdfl;
-  FILE *fp;
-  if (is_obj_file(obj)) {
-    fd = PyObject_AsFileDescriptor(obj);
-    fdfl = fcntl(fd, F_GETFL);
-    fp = fdopen(dup(fd), fdfl_to_str(fdfl)); /* the FILE* must be flushed
-                                                and closed after being used */
-#ifdef SWIG_FILE3_DEBUG
-    fprintf(stderr, "opening fd %d (fl %d \"%s\") as FILE %p\n",
-            fd, fdfl, fdfl_to_str(fdfl), (void *)fp);
-#endif
-    return fp;
-  }
-  return NULL;
-}
-}
-
-/* returns -1 if error occurred */
-/* caused magic SWIG Syntax errors when was commented out */
-#if 0
-%fragment("dispose_file", "header") {
-int
-dispose_file(FILE **fp) {
-#ifdef SWIG_FILE3_DEBUG
-  fprintf(stderr, "flushing FILE %p\n", (void *)fp);
-#endif
-  if (*fp == NULL) {
-    return 0;
-  }
-  if ((fflush(*fp) == 0) &&  /* flush file */
-      (fclose(*fp) == 0)) {  /* close file */
-    *fp = NULL;
-    return 0;
-  }
-  return -1;
-}
-}
-#endif
-
-%typemap(arginit, noblock = 1) FILE* {
-  $1 = NULL;
-}
-
-/*
- * added due to ub_ctx_debugout since since it is overloaded:
- * takes void* and FILE*. In reality only FILE* but the wrapper
- * and the function is declared in such way.
- */
-%typemap(typecheck, noblock = 1, fragment = "is_obj_file", precedence = SWIG_TYPECHECK_POINTER) FILE* {
-  $1 = is_obj_file($input);
-}
-
-%typemap(check, noblock = 1) FILE* {
-  if ($1 == NULL) {
-    /* The generated wrapper function raises TypeError on mismatching types. */
-    SWIG_exception_fail(SWIG_TypeError, "in method '" "$symname" "', argument "
-                        "$argnum"" of type '" "$type""'");
-  }
-}
-
-%typemap(in, noblock = 1, fragment = "obj_to_file") FILE* {
-  $1 = obj_to_file($input);
-}
-
-/*
- * Commented out due the way how ub_ctx_debugout() uses the parameter.
- * This typemap would cause the FILE* to be closed after return from
- * the function. This caused Python interpreter to crash, since the
- * function just stores the FILE* internally in ctx and use it for
- * logging. So we'll leave the closing of the file on the OS.
- */
-/*%typemap(freearg, noblock = 1, fragment = "dispose_file") FILE* {
-  if (dispose_file(&$1) == -1) {
-    SWIG_exception_fail(SWIG_IOError, "closing file in method '" "$symname" "', argument "
-                        "$argnum"" of type '" "$type""'");
-  }
-}*/
diff --git a/contrib/unbound/libunbound/python/libunbound.i b/contrib/unbound/libunbound/python/libunbound.i
deleted file mode 100644
index 84a536929421..000000000000
--- a/contrib/unbound/libunbound/python/libunbound.i
+++ /dev/null
@@ -1,959 +0,0 @@
-/*
- * libunbound.i: pyUnbound module (libunbound wrapper for Python)
- * 
- * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz)
- *                     Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
- *
- * This software is open source.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- *    * Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- * 
- *    * Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- * 
- *    * Neither the name of the organization nor the names of its
- *      contributors may be used to endorse or promote products derived from this
- *      software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-%module unbound
-%{
-   #include <sys/types.h>
-   #include <sys/socket.h>
-   #include <netinet/in.h>
-   #include <arpa/inet.h>
-   #include "libunbound/unbound.h"
-%}
-
-%pythoncode %{
-   import encodings.idna
-   try:
-       import builtins
-   except ImportError:
-       import __builtin__ as builtins
-
-   # Ensure compatibility with older python versions
-   if 'bytes' not in vars():
-       bytes = str
-
-   def ord(s):
-       if isinstance(s, int):
-           return s
-       return builtins.ord(s)
-%}
-
-//%include "doc.i"
-#if PY_MAJOR_VERSION >= 3
-%include "file_py3.i" // python 3 FILE *
-#else
-%include "file.i"
-#endif
-
-%feature("docstring") strerror "Convert error value to a human readable string."
-
-// ================================================================================
-// ub_resolve - perform resolution and validation
-// ================================================================================
-%typemap(in,numinputs=0,noblock=1) (struct ub_result** result)  
-{ 
-   struct ub_result* newubr;
-   $1 = &newubr;
-} 
-  
-/* result generation */
-%typemap(argout,noblock=1) (struct ub_result** result)
-{
-  if(1) { /* new code block for variable on stack */
-    PyObject* tuple;
-    tuple = PyTuple_New(2);
-    PyTuple_SetItem(tuple, 0, $result);
-    if (result == 0) {
-       PyTuple_SetItem(tuple, 1, SWIG_NewPointerObj(SWIG_as_voidptr(newubr), SWIGTYPE_p_ub_result, SWIG_POINTER_OWN |  0 ));
-    } else {
-       PyTuple_SetItem(tuple, 1, Py_None);
-    }
-    $result = tuple;
-  }
-}
-
-                       
-// ================================================================================
-// ub_ctx - validation context
-// ================================================================================
-%nodefaultctor ub_ctx; //no default constructor & destructor
-%nodefaultdtor ub_ctx;
-
-%newobject ub_ctx_create;
-%delobject ub_ctx_delete;
-%rename(_ub_ctx_delete) ub_ctx_delete;
-
-%newobject ub_resolve;
-
-%inline %{
-  void ub_ctx_free_dbg (struct ub_ctx* c) {
-    printf("******** UB_CTX free 0x%lX ************\n", (long unsigned int)c);
-    ub_ctx_delete(c);
-  }
-
-  //RR types
-  enum enum_rr_type
-  {
-    /**  a host address */
-    RR_TYPE_A = 1, 
-    /**  an authoritative name server */
-    RR_TYPE_NS = 2, 
-    /**  a mail destination (Obsolete - use MX) */
-    RR_TYPE_MD = 3, 
-    /**  a mail forwarder (Obsolete - use MX) */
-    RR_TYPE_MF = 4, 
-    /**  the canonical name for an alias */
-    RR_TYPE_CNAME = 5, 
-    /**  marks the start of a zone of authority */
-    RR_TYPE_SOA = 6, 
-    /**  a mailbox domain name (EXPERIMENTAL) */
-    RR_TYPE_MB = 7, 
-    /**  a mail group member (EXPERIMENTAL) */
-    RR_TYPE_MG = 8, 
-    /**  a mail rename domain name (EXPERIMENTAL) */
-    RR_TYPE_MR = 9, 
-    /**  a null RR (EXPERIMENTAL) */
-    RR_TYPE_NULL = 10,
-    /**  a well known service description */
-    RR_TYPE_WKS = 11,
-    /**  a domain name pointer */
-    RR_TYPE_PTR = 12,
-    /**  host information */
-    RR_TYPE_HINFO = 13,
-    /**  mailbox or mail list information */
-    RR_TYPE_MINFO = 14,
-    /**  mail exchange */
-    RR_TYPE_MX = 15,
-    /**  text strings */
-    RR_TYPE_TXT = 16,
-    /**  RFC1183 */
-    RR_TYPE_RP = 17,
-    /**  RFC1183 */
-    RR_TYPE_AFSDB = 18,
-    /**  RFC1183 */
-    RR_TYPE_X25 = 19,
-    /**  RFC1183 */
-    RR_TYPE_ISDN = 20,
-    /**  RFC1183 */
-    RR_TYPE_RT = 21,
-    /**  RFC1706 */
-    RR_TYPE_NSAP = 22,
-    /**  RFC1348 */
-    RR_TYPE_NSAP_PTR = 23,
-    /**  2535typecode */
-    RR_TYPE_SIG = 24,
-    /**  2535typecode */
-    RR_TYPE_KEY = 25,
-    /**  RFC2163 */
-    RR_TYPE_PX = 26,
-    /**  RFC1712 */
-    RR_TYPE_GPOS = 27,
-    /**  ipv6 address */
-    RR_TYPE_AAAA = 28,
-    /**  LOC record  RFC1876 */
-    RR_TYPE_LOC = 29,
-    /**  2535typecode */
-    RR_TYPE_NXT = 30,
-    /**  draft-ietf-nimrod-dns-01.txt */
-    RR_TYPE_EID = 31,
-    /**  draft-ietf-nimrod-dns-01.txt */
-    RR_TYPE_NIMLOC = 32,
-    /**  SRV record RFC2782 */
-    RR_TYPE_SRV = 33,
-    /**  http://www.jhsoft.com/rfc/af-saa-0069.000.rtf */
-    RR_TYPE_ATMA = 34,
-    /**  RFC2915 */
-    RR_TYPE_NAPTR = 35,
-    /**  RFC2230 */
-    RR_TYPE_KX = 36,
-    /**  RFC2538 */
-    RR_TYPE_CERT = 37,
-    /**  RFC2874 */
-    RR_TYPE_A6 = 38,
-    /**  RFC2672 */
-    RR_TYPE_DNAME = 39,
-    /**  dnsind-kitchen-sink-02.txt */
-    RR_TYPE_SINK = 40,
-    /**  Pseudo OPT record... */
-    RR_TYPE_OPT = 41,
-    /**  RFC3123 */
-    RR_TYPE_APL = 42,
-    /**  draft-ietf-dnsext-delegation */
-    RR_TYPE_DS = 43,
-    /**  SSH Key Fingerprint */
-    RR_TYPE_SSHFP = 44,
-    /**  draft-richardson-ipseckey-rr-11.txt */
-    RR_TYPE_IPSECKEY = 45,
-    /**  draft-ietf-dnsext-dnssec-25 */
-    RR_TYPE_RRSIG = 46,
-    RR_TYPE_NSEC = 47,      
-    RR_TYPE_DNSKEY = 48,
-    RR_TYPE_DHCID = 49,
-
-    RR_TYPE_NSEC3 = 50,
-    RR_TYPE_NSEC3PARAMS = 51,
-
-    RR_TYPE_UINFO = 100,
-    RR_TYPE_UID = 101,
-    RR_TYPE_GID = 102,
-    RR_TYPE_UNSPEC = 103,
-
-    RR_TYPE_TSIG = 250,
-    RR_TYPE_IXFR = 251,
-    RR_TYPE_AXFR = 252,
-    /**  A request for mailbox-related records (MB, MG or MR) */
-    RR_TYPE_MAILB = 253,
-    /**  A request for mail agent RRs (Obsolete - see MX) */
-    RR_TYPE_MAILA = 254,
-    /**  any type (wildcard) */
-    RR_TYPE_ANY = 255,
-
-    /* RFC 4431, 5074, DNSSEC Lookaside Validation */
-    RR_TYPE_DLV = 32769,
-  };
-
-  // RR classes
-  enum enum_rr_class
-  { 
-    /** the Internet */
-    RR_CLASS_IN = 1,
-    /** Chaos class */
-    RR_CLASS_CH = 3,
-    /** Hesiod (Dyer 87) */
-    RR_CLASS_HS = 4,
-    /** None class, dynamic update */
-    RR_CLASS_NONE = 254,
-    /** Any class */
-    RR_CLASS_ANY = 255,
-  };
-%} 
-
-%feature("docstring") ub_ctx "Unbound resolving and validation context. 
-
-The validation context is created to hold the resolver status, validation keys and a small cache (containing messages, rrsets, roundtrip times, trusted keys, lameness information).
-
-**Usage**
-
->>> import unbound
->>> ctx = unbound.ub_ctx()
->>> ctx.resolvconf(\"/etc/resolv.conf\")
->>> status, result = ctx.resolve(\"www.google.com\", unbound.RR_TYPE_A, unbound.RR_CLASS_IN)
->>> if status==0 and result.havedata:
->>>    print \"Result:\",result.data.address_list
-Result: ['74.125.43.147', '74.125.43.99', '74.125.43.103', '74.125.43.104']
-"
-
-%extend ub_ctx
-{
- %pythoncode %{
-        def __init__(self):
-            """Creates a resolving and validation context.
-               
-               An exception is invoked if the process of creation an ub_ctx instance fails.
-            """
-            self.this = _unbound.ub_ctx_create()
-            if not self.this:
-                raise Exception("Fatal error: unbound context initialization failed")
-
-        #__swig_destroy__ = _unbound.ub_ctx_free_dbg
-        __swig_destroy__ = _unbound._ub_ctx_delete
-
-        #UB_CTX_METHODS_#   
-        def add_ta(self,ta):
-            """Add a trust anchor to the given context.
-               
-               The trust anchor is a string, on one line, that holds a valid DNSKEY or DS RR.
-               
-               :param ta:
-                   string, with zone-format RR on one line. [domainname] [TTL optional] [type] [class optional] [rdata contents]
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_add_ta(self,ta)
-            #parameters: struct ub_ctx *,char *,
-            #retvals: int
-
-        def add_ta_file(self,fname):
-            """Add trust anchors to the given context.
-               
-               Pass name of a file with DS and DNSKEY records (like from dig or drill).
-               
-               :param fname:
-                   filename of file with keyfile with trust anchors.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_add_ta_file(self,fname)
-            #parameters: struct ub_ctx *,char *,
-            #retvals: int
-
-        def config(self,fname):
-            """setup configuration for the given context.
-               
-               :param fname:
-                   unbound config file (not all settings applicable). This is a power-users interface that lets you specify all sorts of options. For some specific options, such as adding trust anchors, special routines exist.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_config(self,fname)
-            #parameters: struct ub_ctx *,char *,
-            #retvals: int
-
-        def debuglevel(self,d):
-            """Set debug verbosity for the context Output is directed to stderr.
-               
-               :param d:
-                   debug level, 0 is off, 1 is very minimal, 2 is detailed, and 3 is lots.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_debuglevel(self,d)
-            #parameters: struct ub_ctx *,int,
-            #retvals: int
-
-        def debugout(self,out):
-            """Set debug output (and error output) to the specified stream.
-               
-               Pass None to disable. Default is stderr.
-               
-               :param out:
-                   File stream to log to.
-               :returns: (int) 0 if OK, else error.
-
-               **Usage:**
-
-                  In order to log into file, use
-
-                  ::
-
-                    ctx = unbound.ub_ctx()
-                    fw = fopen("debug.log")
-                    ctx.debuglevel(3)
-                    ctx.debugout(fw)
-
-                  Another option is to print the debug informations to stderr output
-
-                  ::
-
-                    ctx = unbound.ub_ctx()
-                    ctx.debuglevel(10)
-                    ctx.debugout(sys.stderr) 
-            """
-            return _unbound.ub_ctx_debugout(self,out)
-            #parameters: struct ub_ctx *,void *,
-            #retvals: int
-
-        def hosts(self,fname="/etc/hosts"):
-            """Read list of hosts from the filename given.
-               
-               Usually "/etc/hosts". These addresses are not flagged as DNSSEC secure when queried for.
-               
-               :param fname:
-                   file name string. If None "/etc/hosts" is used.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_hosts(self,fname)
-            #parameters: struct ub_ctx *,char *,
-            #retvals: int
-
-        def print_local_zones(self):
-            """Print the local zones and their content (RR data) to the debug output.
-               
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_print_local_zones(self)
-            #parameters: struct ub_ctx *,
-            #retvals: int
-
-        def resolvconf(self,fname="/etc/resolv.conf"):
-            """Read list of nameservers to use from the filename given.
-               
-               Usually "/etc/resolv.conf". Uses those nameservers as caching proxies. If they do not support DNSSEC, validation may fail.
-               
-               Only nameservers are picked up, the searchdomain, ndots and other settings from resolv.conf(5) are ignored.
-               
-               :param fname:
-                   file name string. If None "/etc/resolv.conf" is used.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_resolvconf(self,fname)
-            #parameters: struct ub_ctx *,char *,
-            #retvals: int
-
-        def set_async(self,dothread):
-            """Set a context behaviour for asynchronous action.
-               
-               :param dothread:
-                   if True, enables threading and a call to :meth:`resolve_async` creates a thread to handle work in the background. 
-                   If False, a process is forked to handle work in the background. 
-                   Changes to this setting after :meth:`async` calls have been made have no effect (delete and re-create the context to change).
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_async(self,dothread)
-            #parameters: struct ub_ctx *,int,
-            #retvals: int
-
-        def set_fwd(self,addr):
-            """Set machine to forward DNS queries to, the caching resolver to use.
-               
-               IP4 or IP6 address. Forwards all DNS requests to that machine, which is expected to run a recursive resolver. If the  is not DNSSEC-capable, validation may fail. Can be called several times, in that case the addresses are used as backup servers.
-               
-               To read the list of nameservers from /etc/resolv.conf (from DHCP or so), use the call :meth:`resolvconf`.
-               
-               :param addr:
-                   address, IP4 or IP6 in string format. If the addr is None, forwarding is disabled.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_set_fwd(self,addr)
-            #parameters: struct ub_ctx *,char *,
-            #retvals: int
-
-        def set_option(self,opt,val):
-            """Set an option for the context.
-
-               Changes to the options after :meth:`resolve`, :meth:`resolve_async`, :meth:`zone_add`, :meth:`zone_remove`, :meth:`data_add` or :meth:`data_remove` have no effect (you have to delete and re-create the context).
-               
-               :param opt:
-                   option name from the unbound.conf config file format. (not all settings applicable). The name includes the trailing ':' for example set_option("logfile:", "mylog.txt"); This is a power-users interface that lets you specify all sorts of options. For some specific options, such as adding trust anchors, special routines exist.
-               :param val:
-                   value of the option.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_set_option(self,opt,val)
-            #parameters: struct ub_ctx *,char *,char *,
-            #retvals: int
-
-        def trustedkeys(self,fname):
-            """Add trust anchors to the given context.
-               
-               Pass the name of a bind-style config file with trusted-keys{}.
-               
-               :param fname:
-                   filename of file with bind-style config entries with trust anchors.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_ctx_trustedkeys(self,fname)
-            #parameters: struct ub_ctx *,char *,
-            #retvals: int
-        #_UB_CTX_METHODS#   
-        
-        def zone_print(self):
-            """Print local zones using debugout"""            
-            _unbound.ub_ctx_print_local_zones(self)
-
-        def zone_add(self,zonename,zonetype):
-            """Add new local zone
-
-               :param zonename: zone domain name (e.g. myzone.)
-               :param zonetype: type of the zone ("static",...) 
-               :returns: (int) 0 if OK, else error. 
-            """ 
-            return _unbound.ub_ctx_zone_add(self,zonename, zonetype)
-            #parameters: struct ub_ctx *,char*, char*
-            #retvals: int
-
-        def zone_remove(self,zonename):
-            """Remove local zone
-            
-               If exists, removes local zone with all the RRs.
-
-               :param zonename: zone domain name
-               :returns: (int) 0 if OK, else error. 
-            """ 
-            return _unbound.ub_ctx_zone_remove(self,zonename)
-            #parameters: struct ub_ctx *,char*
-            #retvals: int
-
-        def data_add(self,rrdata):
-            """Add new local RR data
-
-               :param rrdata: string, in zone-format on one line. [domainname] [TTL optional] [type] [class optional] [rdata contents]
-               :returns: (int) 0 if OK, else error. 
-
-               **Usage**
-                  The local data ...
-
-                  ::
-
-                    >>> ctx = unbound.ub_ctx()
-                    >>> ctx.zone_add("mydomain.net.","static")
-                    0
-                    >>> status = ctx.data_add("test.mydomain.net. IN A 192.168.1.1")
-                    0
-                    >>> status, result = ctx.resolve("test.mydomain.net")
-                    >>> if status==0 and result.havedata:
-                    >>>    print \"Result:\",result.data.address_list
-                    Result: ['192.168.1.1']
-
-            """ 
-            return _unbound.ub_ctx_data_add(self,rrdata)
-            #parameters: struct ub_ctx *,char*
-            #retvals: int
-
-        def data_remove(self,rrdata):
-            """Remove local RR data
-
-               If exists, remove resource record from local zone
-
-               :param rrdata: string, in zone-format on one line. [domainname] [TTL optional] [type] [class optional] [rdata contents]
-               :returns: (int) 0 if OK, else error. 
-            """ 
-            return _unbound.ub_ctx_data_remove(self,rrdata)
-            #parameters: struct ub_ctx *,char*
-            #retvals: int
-
-        #UB_METHODS_#
-        def cancel(self,async_id):
-            """Cancel an async query in progress.
-               
-               Its callback will not be called.
-               
-               :param async_id:
-                   which query to cancel.
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_cancel(self,async_id)
-            #parameters: struct ub_ctx *,int,
-            #retvals: int
-
-        def get_fd(self):
-            """Get file descriptor.
-               
-               Wait for it to become readable, at this point answers are returned from the asynchronous validating resolver. Then call the ub_process to continue processing. This routine works immediately after context creation, the fd does not change.
-               
-               :returns: (int) -1 on error, or file descriptor to use select(2) with.
-            """
-            return _unbound.ub_fd(self)
-            #parameters: struct ub_ctx *,
-            #retvals: int
-
-        def poll(self):
-            """Poll a context to see if it has any new results Do not poll in a loop, instead extract the fd below to poll for readiness, and then check, or wait using the wait routine.
-               
-               :returns: (int) 0 if nothing to read, or nonzero if a result is available. If nonzero, call ctx_process() to do callbacks.
-            """
-            return _unbound.ub_poll(self)
-            #parameters: struct ub_ctx *,
-            #retvals: int
-
-        def process(self):
-            """Call this routine to continue processing results from the validating resolver (when the fd becomes readable).
-               
-               Will perform necessary callbacks.
-               
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_process(self)
-            #parameters: struct ub_ctx *,
-            #retvals: int
-
-        def resolve(self,name,rrtype=RR_TYPE_A,rrclass=RR_CLASS_IN):
-            """Perform resolution and validation of the target name. 
-               
-               :param name:
-                   domain name in text format (a string or unicode string). IDN domain name have to be passed as a unicode string.
-               :param rrtype:
-                   type of RR in host order (optional argument). Default value is RR_TYPE_A (A class).
-               :param rrclass:
-                   class of RR in host order (optional argument). Default value is RR_CLASS_IN (for internet).
-               :returns: * (int) 0 if OK, else error.
-                         * (:class:`ub_result`) the result data is returned in a newly allocated result structure. May be None on return, return value is set to an error in that case (out of memory).
-            """
-            if isinstance(name, bytes): #probably IDN
-                return _unbound.ub_resolve(self,name,rrtype,rrclass)
-            else:
-                return _unbound.ub_resolve(self,idn2dname(name),rrtype,rrclass)
-            #parameters: struct ub_ctx *,char *,int,int,
-            #retvals: int,struct ub_result **
-
-        def resolve_async(self,name,mydata,callback,rrtype=RR_TYPE_A,rrclass=RR_CLASS_IN):
-            """Perform resolution and validation of the target name.
-               
-               Asynchronous, after a while, the callback will be called with your data and the result. 
-               If an error happens during processing, your callback will be called with error set to a nonzero value (and result==None).
-               
-               :param name:
-                   domain name in text format (a string or unicode string). IDN domain name have to be passed as a unicode string.
-               :param mydata:
-                   this data is your own data (you can pass arbitrary python object or None) which are passed on to the callback function.
-               :param callback:
-                   call-back function which is called on completion of the resolution. 
-               :param rrtype:
-                   type of RR in host order (optional argument). Default value is RR_TYPE_A (A class).
-               :param rrclass:
-                   class of RR in host order (optional argument). Default value is RR_CLASS_IN (for internet).
-               :returns: * (int) 0 if OK, else error.
-                         * (int) async_id, an identifier number is returned for the query as it is in progress. It can be used to cancel the query.
-
-               **Call-back function:**
-                    The call-back function looks as the follows::
-                    
-                        def call_back(mydata, status, result):
-                            pass
-
-                    **Parameters:** 
-                        * `mydata` - mydata object
-                        * `status` - 0 when a result has been found
-                        * `result` - the result structure. The result may be None, in that case err is set.
-
-            """
-            if isinstance(name, bytes): #probably IDN
-                return _unbound._ub_resolve_async(self,name,rrtype,rrclass,mydata,callback)
-            else:
-                return _unbound._ub_resolve_async(self,idn2dname(name),rrtype,rrclass,mydata,callback)
-            #parameters: struct ub_ctx *,char *,int,int,void *,ub_callback_t,
-            #retvals: int, int
-
-        def wait(self):
-            """Wait for a context to finish with results.
-               
-               Calls  after the wait for you. After the wait, there are no more outstanding asynchronous queries.
-               
-               :returns: (int) 0 if OK, else error.
-            """
-            return _unbound.ub_wait(self)
-            #parameters: struct ub_ctx *,
-            #retvals: int
-
-        #_UB_METHODS#
- %}
-}
-
-
-// ================================================================================
-// ub_result - validation and resolution results
-// ================================================================================
-%nodefaultctor ub_result; //no default constructor & destructor
-%nodefaultdtor ub_result;
-
-%delobject ub_resolve_free;
-%rename(_ub_resolve_free) ub_resolve_free;
- 
-%inline %{
-  void ub_resolve_free_dbg (struct ub_result* r) {
-    printf("******** UB_RESOLVE free 0x%lX ************\n", (long unsigned int)r);
-    ub_resolve_free(r);
-  }
-%} 
-
-%feature("docstring") ub_result "The validation and resolution results."
-
-//ub_result.rcode
-%inline %{
-  enum result_enum_rcode {
-    RCODE_NOERROR = 0,
-    RCODE_FORMERR = 1,
-    RCODE_SERVFAIL = 2,
-    RCODE_NXDOMAIN = 3,
-    RCODE_NOTIMPL = 4,
-    RCODE_REFUSED = 5,
-    RCODE_YXDOMAIN = 6,
-    RCODE_YXRRSET = 7,
-    RCODE_NXRRSET = 8,
-    RCODE_NOTAUTH = 9,
-    RCODE_NOTZONE = 10
-  };
-%}
-
-%pythoncode %{
-   class ub_data:
-      """Class which makes the resolution results accessible"""
-      def __init__(self, data):
-         """Creates ub_data class
-            :param data: a list of the result data in RAW format
-         """
-         if data == None:
-            raise Exception("ub_data init: No data")
-         self.data = data
-
-      def __str__(self):
-         """Represents data as string"""
-         return ';'.join([' '.join(map(lambda x:"%02X" % ord(x),a)) for a in self.data])
-
-      @staticmethod
-      def dname2str(s, ofs=0, maxlen=0):
-         """Parses DNAME and produces a list of labels
-        
-            :param ofs: where the conversion should start to parse data
-            :param maxlen: maximum length (0 means parse to the end)
-            :returns: list of labels (string)
-         """
-         if not s:
-            return []
-
-         res = []
-         slen = len(s)
-         if maxlen > 0:
-            slen = min(slen, maxlen)
-
-         idx = ofs
-         while (idx < slen):
-            complen = ord(s[idx])
-            # In python 3.x `str()` converts the string to unicode which is the expected text string type
-            res.append(str(s[idx+1:idx+1+complen].decode()))
-            idx += complen + 1
-
-         return res
-
-      def as_raw_data(self):
-         """Returns a list of RAW strings"""
-         return self.data
-
-      raw = property(as_raw_data, doc="Returns RAW data (a list of binary encoded strings). See :meth:`as_raw_data`")
-
-      def as_mx_list(self):
-         """Represents data as a list of MX records (query for RR_TYPE_MX)
-        
-            :returns: list of tuples (priority, dname)
-         """
-         return [(256*ord(rdf[0])+ord(rdf[1]),'.'.join([a for a in self.dname2str(rdf,2)])) for rdf in self.data]
-      
-      mx_list = property(as_mx_list, doc="Returns a list of tuples containing priority and domain names. See :meth:`as_mx_list`")
-
-      def as_idn_mx_list(self):
-         """Represents data as a list of MX records (query for RR_TYPE_MX)
-        
-            :returns: list of tuples (priority, unicode dname)
-         """
-         return [(256*ord(rdf[0])+ord(rdf[1]),'.'.join([encodings.idna.ToUnicode(a) for a in self.dname2str(rdf,2)])) for rdf in self.data]
-
-      mx_list_idn = property(as_idn_mx_list, doc="Returns a list of tuples containing priority and IDN domain names. See :meth:`as_idn_mx_list`")
-
-      def as_address_list(self):
-         """Represents data as a list of IP addresses (query for RR_TYPE_PTR)
-        
-            :returns: list of strings
-         """
-         return ['.'.join(map(lambda x:str(ord(x)),a)) for a in self.data]
-
-      address_list = property(as_address_list, doc="Returns a list of IP addresses. See :meth:`as_address_list`")
-
-      def as_domain_list(self):
-         """Represents data as a list of domain names (query for RR_TYPE_A)
-
-            :returns: list of strings
-         """
-         return map(lambda x:'.'.join(self.dname2str(x)), self.data)
-
-      domain_list = property(as_domain_list, doc="Returns a list of domain names. See :meth:`as_domain_list`")
-
-      def as_idn_domain_list(self):
-         """Represents data as a list of unicode domain names (query for RR_TYPE_A)
-
-            :returns: list of strings
-         """
-         return map(lambda x: '.'.join([encodings.idna.ToUnicode(a) for a in self.dname2str(x)]), self.data)
-
-      domain_list_idn = property(as_idn_domain_list, doc="Returns a list of IDN domain names. See :meth:`as_idn_domain_list`")
-%}
-        
-%extend ub_result
-{
-
-  %rename(_data) data;
-  
-  PyObject* _ub_result_data(struct ub_result* result) {
-    PyObject  *list;
-     int i,cnt;
-     (void)self;
-     if ((result == 0) || (!result->havedata) || (result->data == 0))
-        return Py_None;
-
-     for (cnt=0,i=0;;i++,cnt++) 
-         if (result->data[i] == 0)
-            break;
-     
-     list = PyList_New(cnt);
-     for (i=0;i<cnt;i++) 
-         PyList_SetItem(list, i, PyBytes_FromStringAndSize(result->data[i],result->len[i]));
-     
-     return list;
-  }
-
-  PyObject* _packet() {
-      return PyBytes_FromStringAndSize($self->answer_packet, $self->answer_len);
-  }
-  
- %pythoncode %{
-   def __init__(self):
-       raise Exception("This class can't be created directly.")
-
-   #__swig_destroy__ = _unbound.ub_resolve_free_dbg
-   __swig_destroy__ = _unbound._ub_resolve_free
-
-   #havedata = property(_unbound.ub_result_havedata_get, _unbound.ub_result_havedata_set, "Havedata property")
-
-   rcode2str = {RCODE_NOERROR:'no error', RCODE_FORMERR:'form error', RCODE_SERVFAIL:'serv fail', RCODE_NXDOMAIN:'nx domain', RCODE_NOTIMPL:'not implemented', RCODE_REFUSED:'refused', RCODE_YXDOMAIN:'yxdomain', RCODE_YXRRSET:'yxrrset', RCODE_NXRRSET:'nxrrset', RCODE_NOTAUTH:'not auth', RCODE_NOTZONE:'not zone'}
-
-   def _get_rcode_str(self):
-       """Returns rcode in display representation form
-
-          :returns: string
-       """
-       return self.rcode2str[self.rcode]
-
-   __swig_getmethods__["rcode_str"] = _get_rcode_str
-   if _newclass:rcode_str = _swig_property(_get_rcode_str)
-
-   def _get_raw_data(self):
-       """Result data, a list of network order DNS rdata items. 
-
-          Data are represented as a list of strings. To decode RAW data to the list of IP addresses use :attr:`data` attribute which returns an :class:`ub_data` instance containing conversion function.
-       """
-       return self._ub_result_data(self)
-
-   __swig_getmethods__["rawdata"] = _get_raw_data
-   rawdata = property(_get_raw_data, doc="Returns raw data, a list of rdata items. To decode RAW data use the :attr:`data` attribute which returns an instance of :class:`ub_data` containing the conversion functions.")
-
-   def _get_data(self):
-       if not self.havedata: return None
-       return ub_data(self._ub_result_data(self))
-  
-   __swig_getmethods__["data"] = _get_data
-   __swig_getmethods__["packet"] = _packet
-   data = property(_get_data, doc="Returns :class:`ub_data` instance containing various decoding functions or None")
-
-%}
-             
-}
-
-%exception ub_resolve
-%{ 
-  //printf("resolve_start(%lX)\n",(long unsigned int)arg1);
-  Py_BEGIN_ALLOW_THREADS 
-  $function 
-  Py_END_ALLOW_THREADS 
-  //printf("resolve_stop()\n");
-%} 
-
-%include "libunbound/unbound.h"
-
-%inline %{
-  //SWIG will see the ub_ctx as a class
-  struct ub_ctx {
-  };
-%}
-
-//ub_ctx_debugout void* parameter correction
-int ub_ctx_debugout(struct ub_ctx* ctx, FILE* out);
-
-// ================================================================================
-// ub_resolve_async - perform asynchronous resolution and validation
-// ================================================================================
-
-%typemap(in,numinputs=0,noblock=1) (int* async_id)  
-{ 
-   int asyncid = -1;
-   $1 = &asyncid;
-} 
-
-%apply PyObject* {void* mydata}
-       
-/* result generation */
-%typemap(argout,noblock=1) (int* async_id)
-{
-  if(1) { /* new code block for variable on stack */
-    PyObject* tuple;
-    tuple = PyTuple_New(2);
-    PyTuple_SetItem(tuple, 0, $result);
-    PyTuple_SetItem(tuple, 1, SWIG_From_int(asyncid));
-    $result = tuple;
-  }
-}
-
-// Grab a Python function object as a Python object.
-%typemap(in) (PyObject *pyfunc) {
-  if (!PyCallable_Check($input)) 
-  {
-     PyErr_SetString(PyExc_TypeError, "Need a callable object!");
-     return NULL;
-  }
-  $1 = $input;
-}
-   
-// Python callback workaround
-int _ub_resolve_async(struct ub_ctx* ctx, char* name, int rrtype, int rrclass, void* mydata, PyObject *pyfunc, int* async_id);
-
-%{
-   struct cb_data {
-      PyObject* data;
-      PyObject* func;
-   };
-
-   static void PythonCallBack(void* iddata, int status, struct ub_result* result)
-   {
-      PyObject *arglist;
-      PyObject *fresult;
-      struct cb_data* id;
-      id = (struct cb_data*) iddata;
-      arglist = Py_BuildValue("(OiO)",id->data,status, SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ub_result, 0 |  0 ));   // Build argument list
-      fresult = PyEval_CallObject(id->func,arglist);     // Call Python
-      Py_DECREF(id->func);
-      Py_DECREF(id->data);
-      free(id);
-      ub_resolve_free(result);                  //free ub_result
-      //ub_resolve_free_dbg(result);                  //free ub_result
-      Py_DECREF(arglist);                           // Trash arglist
-      Py_XDECREF(fresult);
-   }
-
-   int _ub_resolve_async(struct ub_ctx* ctx, char* name, int rrtype, int rrclass, PyObject* mydata, PyObject *pyfunc, int* async_id) {
-      int r;
-      struct cb_data* id;
-      id = (struct cb_data*) malloc(sizeof(struct cb_data));
-      id->data = mydata;
-      id->func = pyfunc;
-   
-      r = ub_resolve_async(ctx,name,rrtype,rrclass, (void *) id, PythonCallBack, async_id);
-      Py_INCREF(mydata);
-      Py_INCREF(pyfunc);
-      return r;
-   }
-
-%}
-
-%pythoncode %{
-    ub_resolve_async = _unbound._ub_resolve_async
-
-    def reverse(domain):
-        """Reverse domain name
-        
-           Usable for reverse lookups when the IP address should be reversed
-        """
-        return '.'.join([a for a in domain.split(".")][::-1])
-
-    def idn2dname(idnname):
-        """Converts domain name in IDN format to canonic domain name
-
-           :param idnname: (unicode string) IDN name
-           :returns: (string) domain name
-        """
-        return '.'.join([encodings.idna.ToASCII(a) if a else '' for a in idnname.split('.')])
-
-    def dname2idn(name):
-        """Converts canonic domain name in IDN format to unicode string
-
-            :param name: (string) domain name
-            :returns: (unicode string) domain name
-        """
-        return '.'.join([encodings.idna.ToUnicode(a) for a in name.split('.')])
-
-%}
-