diff --git a/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/ipv6-1143.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143.conf
similarity index 100%
rename from letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/ipv6-1143.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143.conf
diff --git a/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/ipv6-1143b.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143b.conf
similarity index 100%
rename from letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/ipv6-1143b.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143b.conf
diff --git a/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143c.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143c.conf
new file mode 100644
index 000000000..f75dd7850
--- /dev/null
+++ b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143c.conf
@@ -0,0 +1,9 @@
+
+DocumentRoot /xxxx/
+ServerName noodles.net.nz
+ServerAlias www.noodles.net.nz
+CustomLog ${APACHE_LOG_DIR}/domlogs/noodles.log combined
+
+ AllowOverride All
+
+
diff --git a/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143d.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143d.conf
new file mode 100644
index 000000000..f16b412da
--- /dev/null
+++ b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/ipv6-1143d.conf
@@ -0,0 +1,9 @@
+
+DocumentRoot /xxxx/
+ServerName noodles.net.nz
+ServerAlias www.noodles.net.nz
+CustomLog ${APACHE_LOG_DIR}/domlogs/noodles.log combined
+
+ AllowOverride All
+
+
diff --git a/letsencrypt/plugins/common.py b/letsencrypt/plugins/common.py
index 319692344..b72c57c7b 100644
--- a/letsencrypt/plugins/common.py
+++ b/letsencrypt/plugins/common.py
@@ -110,8 +110,17 @@ class Addr(object):
@classmethod
def fromstring(cls, str_addr):
"""Initialize Addr from string."""
- tup = str_addr.partition(':')
- return cls((tup[0], tup[2]))
+ if str_addr.startswith('['):
+ # ipv6 addresses starts with [
+ endIndex = str_addr.rfind(']')
+ host = str_addr[:endIndex + 1]
+ port = ''
+ if len(str_addr) > endIndex + 2 and str_addr[endIndex + 1] == ':':
+ port = str_addr[endIndex + 2:]
+ return cls((host, port))
+ else:
+ tup = str_addr.partition(':')
+ return cls((tup[0], tup[2]))
def __str__(self):
if self.tup[1]:
diff --git a/letsencrypt/plugins/common_test.py b/letsencrypt/plugins/common_test.py
index 55319f0a0..5fdd57c5f 100644
--- a/letsencrypt/plugins/common_test.py
+++ b/letsencrypt/plugins/common_test.py
@@ -81,6 +81,9 @@ class AddrTest(unittest.TestCase):
self.addr1 = Addr.fromstring("192.168.1.1")
self.addr2 = Addr.fromstring("192.168.1.1:*")
self.addr3 = Addr.fromstring("192.168.1.1:80")
+ self.addr4 = Addr.fromstring("[fe00::1]")
+ self.addr5 = Addr.fromstring("[fe00::1]:*")
+ self.addr6 = Addr.fromstring("[fe00::1]:80")
def test_fromstring(self):
self.assertEqual(self.addr1.get_addr(), "192.168.1.1")
@@ -89,22 +92,38 @@ class AddrTest(unittest.TestCase):
self.assertEqual(self.addr2.get_port(), "*")
self.assertEqual(self.addr3.get_addr(), "192.168.1.1")
self.assertEqual(self.addr3.get_port(), "80")
+ self.assertEqual(self.addr4.get_addr(), "[fe00::1]")
+ self.assertEqual(self.addr4.get_port(), "")
+ self.assertEqual(self.addr5.get_addr(), "[fe00::1]")
+ self.assertEqual(self.addr5.get_port(), "*")
+ self.assertEqual(self.addr6.get_addr(), "[fe00::1]")
+ self.assertEqual(self.addr6.get_port(), "80")
def test_str(self):
self.assertEqual(str(self.addr1), "192.168.1.1")
self.assertEqual(str(self.addr2), "192.168.1.1:*")
self.assertEqual(str(self.addr3), "192.168.1.1:80")
+ self.assertEqual(str(self.addr4), "[fe00::1]")
+ self.assertEqual(str(self.addr5), "[fe00::1]:*")
+ self.assertEqual(str(self.addr6), "[fe00::1]:80")
def test_get_addr_obj(self):
self.assertEqual(str(self.addr1.get_addr_obj("443")), "192.168.1.1:443")
self.assertEqual(str(self.addr2.get_addr_obj("")), "192.168.1.1")
self.assertEqual(str(self.addr1.get_addr_obj("*")), "192.168.1.1:*")
+ self.assertEqual(str(self.addr4.get_addr_obj("443")), "[fe00::1]:443")
+ self.assertEqual(str(self.addr5.get_addr_obj("")), "[fe00::1]")
+ self.assertEqual(str(self.addr4.get_addr_obj("*")), "[fe00::1]:*")
def test_eq(self):
self.assertEqual(self.addr1, self.addr2.get_addr_obj(""))
self.assertNotEqual(self.addr1, self.addr2)
self.assertFalse(self.addr1 == 3333)
+ self.assertEqual(self.addr4, self.addr4.get_addr_obj(""))
+ self.assertNotEqual(self.addr4, self.addr5)
+ self.assertFalse(self.addr4 == 3333)
+
def test_set_inclusion(self):
from letsencrypt.plugins.common import Addr
set_a = set([self.addr1, self.addr2])
@@ -114,6 +133,13 @@ class AddrTest(unittest.TestCase):
self.assertEqual(set_a, set_b)
+ set_c = set([self.addr4, self.addr5])
+ addr4b = Addr.fromstring("[fe00::1]")
+ addr5b = Addr.fromstring("[fe00::1]:*")
+ set_d = set([addr4b, addr5b])
+
+ self.assertEqual(set_c, set_d)
+
class TLSSNI01Test(unittest.TestCase):
"""Tests for letsencrypt.plugins.common.TLSSNI01."""