Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/certbot/certbot.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'certbot-dns-rfc2136')
-rw-r--r--certbot-dns-rfc2136/Dockerfile5
-rw-r--r--certbot-dns-rfc2136/MANIFEST.in3
-rw-r--r--certbot-dns-rfc2136/certbot_dns_rfc2136/_internal/__init__.py1
-rw-r--r--certbot-dns-rfc2136/certbot_dns_rfc2136/_internal/dns_rfc2136.py (renamed from certbot-dns-rfc2136/certbot_dns_rfc2136/dns_rfc2136.py)13
-rw-r--r--certbot-dns-rfc2136/docs/api.rst5
-rw-r--r--certbot-dns-rfc2136/docs/api/dns_rfc2136.rst5
-rw-r--r--certbot-dns-rfc2136/docs/conf.py3
-rw-r--r--certbot-dns-rfc2136/local-oldest-requirements.txt5
-rw-r--r--certbot-dns-rfc2136/readthedocs.org.requirements.txt8
-rw-r--r--certbot-dns-rfc2136/setup.py36
-rw-r--r--certbot-dns-rfc2136/tests/dns_rfc2136_test.py (renamed from certbot-dns-rfc2136/certbot_dns_rfc2136/dns_rfc2136_test.py)34
11 files changed, 73 insertions, 45 deletions
diff --git a/certbot-dns-rfc2136/Dockerfile b/certbot-dns-rfc2136/Dockerfile
deleted file mode 100644
index 1b8feb2f8..000000000
--- a/certbot-dns-rfc2136/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM certbot/certbot
-
-COPY . src/certbot-dns-rfc2136
-
-RUN pip install --no-cache-dir --editable src/certbot-dns-rfc2136
diff --git a/certbot-dns-rfc2136/MANIFEST.in b/certbot-dns-rfc2136/MANIFEST.in
index 18f018c08..5a661cef6 100644
--- a/certbot-dns-rfc2136/MANIFEST.in
+++ b/certbot-dns-rfc2136/MANIFEST.in
@@ -1,3 +1,6 @@
include LICENSE.txt
include README.rst
recursive-include docs *
+recursive-include tests *
+global-exclude __pycache__
+global-exclude *.py[cod]
diff --git a/certbot-dns-rfc2136/certbot_dns_rfc2136/_internal/__init__.py b/certbot-dns-rfc2136/certbot_dns_rfc2136/_internal/__init__.py
new file mode 100644
index 000000000..44894bb35
--- /dev/null
+++ b/certbot-dns-rfc2136/certbot_dns_rfc2136/_internal/__init__.py
@@ -0,0 +1 @@
+"""Internal implementation of `~certbot_dns_rfc2136.dns_rfc2136` plugin."""
diff --git a/certbot-dns-rfc2136/certbot_dns_rfc2136/dns_rfc2136.py b/certbot-dns-rfc2136/certbot_dns_rfc2136/_internal/dns_rfc2136.py
index b8c01cdd3..cb4d5addb 100644
--- a/certbot-dns-rfc2136/certbot_dns_rfc2136/dns_rfc2136.py
+++ b/certbot-dns-rfc2136/certbot_dns_rfc2136/_internal/dns_rfc2136.py
@@ -57,7 +57,7 @@ class Authenticator(dns_common.DNSAuthenticator):
def _validate_algorithm(self, credentials):
algorithm = credentials.conf('algorithm')
if algorithm:
- if not self.ALGORITHMS.get(algorithm):
+ if not self.ALGORITHMS.get(algorithm.upper()):
raise errors.PluginError("Unknown algorithm: {0}.".format(algorithm))
def _setup_credentials(self):
@@ -129,7 +129,7 @@ class _RFC2136Client(object):
rcode = response.rcode()
if rcode == dns.rcode.NOERROR:
- logger.debug('Successfully added TXT record')
+ logger.debug('Successfully added TXT record %s', record_name)
else:
raise errors.PluginError('Received response from server: {0}'
.format(dns.rcode.to_text(rcode)))
@@ -164,7 +164,7 @@ class _RFC2136Client(object):
rcode = response.rcode()
if rcode == dns.rcode.NOERROR:
- logger.debug('Successfully deleted TXT record')
+ logger.debug('Successfully deleted TXT record %s', record_name)
else:
raise errors.PluginError('Received response from server: {0}'
.format(dns.rcode.to_text(rcode)))
@@ -206,7 +206,11 @@ class _RFC2136Client(object):
request.flags ^= dns.flags.RD
try:
- response = dns.query.udp(request, self.server, port=self.port)
+ try:
+ response = dns.query.tcp(request, self.server, port=self.port)
+ except OSError as e:
+ logger.debug('TCP query failed, fallback to UDP: %s', e)
+ response = dns.query.udp(request, self.server, port=self.port)
rcode = response.rcode()
# Authoritative Answer bit should be set
@@ -220,4 +224,3 @@ class _RFC2136Client(object):
except Exception as e:
raise errors.PluginError('Encountered error when making query: {0}'
.format(e))
-
diff --git a/certbot-dns-rfc2136/docs/api.rst b/certbot-dns-rfc2136/docs/api.rst
index 8668ec5d8..ac13c3df2 100644
--- a/certbot-dns-rfc2136/docs/api.rst
+++ b/certbot-dns-rfc2136/docs/api.rst
@@ -2,7 +2,4 @@
API Documentation
=================
-.. toctree::
- :glob:
-
- api/**
+Certbot plugins implement the Certbot plugins API, and do not otherwise have an external API.
diff --git a/certbot-dns-rfc2136/docs/api/dns_rfc2136.rst b/certbot-dns-rfc2136/docs/api/dns_rfc2136.rst
deleted file mode 100644
index f5e98454a..000000000
--- a/certbot-dns-rfc2136/docs/api/dns_rfc2136.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-:mod:`certbot_dns_rfc2136.dns_rfc2136`
---------------------------------------
-
-.. automodule:: certbot_dns_rfc2136.dns_rfc2136
- :members:
diff --git a/certbot-dns-rfc2136/docs/conf.py b/certbot-dns-rfc2136/docs/conf.py
index 8cc5d595f..c0d55078e 100644
--- a/certbot-dns-rfc2136/docs/conf.py
+++ b/certbot-dns-rfc2136/docs/conf.py
@@ -17,6 +17,7 @@
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
+
# import sys
# sys.path.insert(0, os.path.abspath('.'))
@@ -37,7 +38,7 @@ extensions = ['sphinx.ext.autodoc',
'sphinx.ext.viewcode']
autodoc_member_order = 'bysource'
-autodoc_default_flags = ['show-inheritance', 'private-members']
+autodoc_default_flags = ['show-inheritance']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
diff --git a/certbot-dns-rfc2136/local-oldest-requirements.txt b/certbot-dns-rfc2136/local-oldest-requirements.txt
index 8368d266e..cf61c15a5 100644
--- a/certbot-dns-rfc2136/local-oldest-requirements.txt
+++ b/certbot-dns-rfc2136/local-oldest-requirements.txt
@@ -1,2 +1,3 @@
-acme[dev]==0.21.1
-certbot[dev]==0.21.1
+# Remember to update setup.py to match the package versions below.
+acme[dev]==0.29.0
+certbot[dev]==1.1.0
diff --git a/certbot-dns-rfc2136/readthedocs.org.requirements.txt b/certbot-dns-rfc2136/readthedocs.org.requirements.txt
index df89018ce..2cf4f70f8 100644
--- a/certbot-dns-rfc2136/readthedocs.org.requirements.txt
+++ b/certbot-dns-rfc2136/readthedocs.org.requirements.txt
@@ -1,12 +1,12 @@
# readthedocs.org gives no way to change the install command to "pip
-# install -e .[docs]" (that would in turn install documentation
+# install -e certbot-dns-rfc2136[docs]" (that would in turn install documentation
# dependencies), but it allows to specify a requirements.txt file at
# https://readthedocs.org/dashboard/letsencrypt/advanced/ (c.f. #259)
# Although ReadTheDocs certainly doesn't need to install the project
-# in --editable mode (-e), just "pip install .[docs]" does not work as
-# expected and "pip install -e .[docs]" must be used instead
+# in --editable mode (-e), just "pip install certbot-dns-rfc2136[docs]" does not work as
+# expected and "pip install -e certbot-dns-rfc2136[docs]" must be used instead
-e acme
--e .
+-e certbot
-e certbot-dns-rfc2136[docs]
diff --git a/certbot-dns-rfc2136/setup.py b/certbot-dns-rfc2136/setup.py
index edf7b6ba6..fa51c2108 100644
--- a/certbot-dns-rfc2136/setup.py
+++ b/certbot-dns-rfc2136/setup.py
@@ -1,14 +1,16 @@
-from setuptools import setup
-from setuptools import find_packages
+import sys
+from setuptools import find_packages
+from setuptools import setup
+from setuptools.command.test import test as TestCommand
-version = '0.31.0.dev0'
+version = '1.3.0.dev0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
install_requires = [
- 'acme>=0.21.1',
- 'certbot>=0.21.1',
+ 'acme>=0.29.0',
+ 'certbot>=1.1.0',
'dnspython',
'mock',
'setuptools',
@@ -20,6 +22,20 @@ docs_extras = [
'sphinx_rtd_theme',
]
+class PyTest(TestCommand):
+ user_options = []
+
+ def initialize_options(self):
+ TestCommand.initialize_options(self)
+ self.pytest_args = ''
+
+ def run_tests(self):
+ import shlex
+ # import here, cause outside the eggs aren't loaded
+ import pytest
+ errno = pytest.main(shlex.split(self.pytest_args))
+ sys.exit(errno)
+
setup(
name='certbot-dns-rfc2136',
version=version,
@@ -28,9 +44,9 @@ setup(
author="Certbot Project",
author_email='client-dev@letsencrypt.org',
license='Apache License 2.0',
- python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
+ python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',
classifiers=[
- 'Development Status :: 3 - Alpha',
+ 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins',
'Intended Audience :: System Administrators',
'License :: OSI Approved :: Apache Software License',
@@ -39,10 +55,10 @@ setup(
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
+ 'Programming Language :: Python :: 3.8',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Security',
'Topic :: System :: Installation/Setup',
@@ -59,8 +75,10 @@ setup(
},
entry_points={
'certbot.plugins': [
- 'dns-rfc2136 = certbot_dns_rfc2136.dns_rfc2136:Authenticator',
+ 'dns-rfc2136 = certbot_dns_rfc2136._internal.dns_rfc2136:Authenticator',
],
},
+ tests_require=["pytest"],
test_suite='certbot_dns_rfc2136',
+ cmdclass={"test": PyTest},
)
diff --git a/certbot-dns-rfc2136/certbot_dns_rfc2136/dns_rfc2136_test.py b/certbot-dns-rfc2136/tests/dns_rfc2136_test.py
index 89ce3d93e..c767dba23 100644
--- a/certbot-dns-rfc2136/certbot_dns_rfc2136/dns_rfc2136_test.py
+++ b/certbot-dns-rfc2136/tests/dns_rfc2136_test.py
@@ -1,6 +1,5 @@
-"""Tests for certbot_dns_rfc2136.dns_rfc2136."""
+"""Tests for certbot_dns_rfc2136._internal.dns_rfc2136."""
-import os
import unittest
import dns.flags
@@ -9,6 +8,7 @@ import dns.tsig
import mock
from certbot import errors
+from certbot.compat import os
from certbot.plugins import dns_test_common
from certbot.plugins.dns_test_common import DOMAIN
from certbot.tests import util as test_util
@@ -23,7 +23,7 @@ VALID_CONFIG = {"rfc2136_server": SERVER, "rfc2136_name": NAME, "rfc2136_secret"
class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest):
def setUp(self):
- from certbot_dns_rfc2136.dns_rfc2136 import Authenticator
+ from certbot_dns_rfc2136._internal.dns_rfc2136 import Authenticator
super(AuthenticatorTest, self).setUp()
@@ -64,7 +64,7 @@ class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthentic
def test_valid_algorithm_passes(self):
config = VALID_CONFIG.copy()
- config["rfc2136_algorithm"] = "HMAC-SHA512"
+ config["rfc2136_algorithm"] = "HMAC-sha512"
dns_test_common.write(config, self.config.rfc2136_credentials)
self.auth.perform([self.achall])
@@ -73,7 +73,7 @@ class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthentic
class RFC2136ClientTest(unittest.TestCase):
def setUp(self):
- from certbot_dns_rfc2136.dns_rfc2136 import _RFC2136Client
+ from certbot_dns_rfc2136._internal.dns_rfc2136 import _RFC2136Client
self.rfc2136_client = _RFC2136Client(SERVER, PORT, NAME, SECRET, dns.tsig.HMAC_MD5)
@@ -162,7 +162,7 @@ class RFC2136ClientTest(unittest.TestCase):
self.rfc2136_client._find_domain,
'foo.bar.'+DOMAIN)
- @mock.patch("dns.query.udp")
+ @mock.patch("dns.query.tcp")
def test_query_soa_found(self, query_mock):
query_mock.return_value = mock.MagicMock(answer=[mock.MagicMock()], flags=dns.flags.AA)
query_mock.return_value.rcode.return_value = dns.rcode.NOERROR
@@ -171,9 +171,9 @@ class RFC2136ClientTest(unittest.TestCase):
result = self.rfc2136_client._query_soa(DOMAIN)
query_mock.assert_called_with(mock.ANY, SERVER, port=PORT)
- self.assertTrue(result == True)
+ self.assertTrue(result)
- @mock.patch("dns.query.udp")
+ @mock.patch("dns.query.tcp")
def test_query_soa_not_found(self, query_mock):
query_mock.return_value.rcode.return_value = dns.rcode.NXDOMAIN
@@ -181,9 +181,9 @@ class RFC2136ClientTest(unittest.TestCase):
result = self.rfc2136_client._query_soa(DOMAIN)
query_mock.assert_called_with(mock.ANY, SERVER, port=PORT)
- self.assertTrue(result == False)
+ self.assertFalse(result)
- @mock.patch("dns.query.udp")
+ @mock.patch("dns.query.tcp")
def test_query_soa_wraps_errors(self, query_mock):
query_mock.side_effect = Exception
@@ -193,6 +193,20 @@ class RFC2136ClientTest(unittest.TestCase):
self.rfc2136_client._query_soa,
DOMAIN)
+ @mock.patch("dns.query.udp")
+ @mock.patch("dns.query.tcp")
+ def test_query_soa_fallback_to_udp(self, tcp_mock, udp_mock):
+ tcp_mock.side_effect = OSError
+ udp_mock.return_value = mock.MagicMock(answer=[mock.MagicMock()], flags=dns.flags.AA)
+ udp_mock.return_value.rcode.return_value = dns.rcode.NOERROR
+
+ # _query_soa | pylint: disable=protected-access
+ result = self.rfc2136_client._query_soa(DOMAIN)
+
+ tcp_mock.assert_called_with(mock.ANY, SERVER, port=PORT)
+ udp_mock.assert_called_with(mock.ANY, SERVER, port=PORT)
+ self.assertTrue(result)
+
if __name__ == "__main__":
unittest.main() # pragma: no cover