Support trailing dots in DNS names. Fixes #782510. Will backport to 2.3.
diff --git a/Lib/encodings/idna.py b/Lib/encodings/idna.py
index 62aa450..37462db 100644
--- a/Lib/encodings/idna.py
+++ b/Lib/encodings/idna.py
@@ -150,10 +150,16 @@
             raise UnicodeError, "unsupported error handling "+errors
 
         result = []
-        for label in dots.split(input):
+        labels = dots.split(input)
+        if labels and len(labels[-1])==0:
+            trailing_dot = '.'
+            del labels[-1]
+        else:
+            trailing_dot = ''
+        for label in labels:
             result.append(ToASCII(label))
         # Join with U+002E
-        return ".".join(result), len(input)
+        return ".".join(result)+trailing_dot, len(input)
 
     def decode(self,input,errors='strict'):
 
@@ -168,11 +174,17 @@
             unicode(input, "ascii")
             labels = input.split(".")
 
+        if labels and len(labels[-1]) == 0:
+            trailing_dot = u'.'
+            del labels[-1]
+        else:
+            trailing_dot = u''
+
         result = []
         for label in labels:
             result.append(ToUnicode(label))
 
-        return u".".join(result), len(input)
+        return u".".join(result)+trailing_dot, len(input)
 
 class StreamWriter(Codec,codecs.StreamWriter):
     pass