Always recognize IPv6 domain literal domains.
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Fri, 3 Feb 2006 15:26:54 +0000 (15:26 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Fri, 3 Feb 2006 15:26:54 +0000 (15:26 +0000)
doc/doc-txt/ChangeLog
src/src/parse.c

index dc2d0ceff7553d582bcab543d11b83a6ca7509d7..212ec706c55d9444c6bbf5ab0cfa2a98d5019082 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.282 2005/12/22 14:54:50 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.283 2006/02/03 15:26:54 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -67,6 +67,11 @@ PH/11 The exinext utility has a -C option for testing purposes, but although
 PH/12 In the smtp transport, treat an explicit ECONNRESET error the same as
       an end-of-file indication when reading a command response.
 
 PH/12 In the smtp transport, treat an explicit ECONNRESET error the same as
       an end-of-file indication when reading a command response.
 
+PH/13 Domain literals for IPv6 were not recognized unless IPv6 support was
+      compiled. In many other places in Exim, IPv6 addresses are always
+      recognized, so I have changed this. It also means that IPv4 domain
+      literals of the form [IPV4:n.n.n.n] are now always recognized.
+
 
 Exim version 4.60
 -----------------
 
 Exim version 4.60
 -----------------
index 252628e1a6c5e8ec83a7d39d2bd19c01f6a749ce..c4936ca945743b8a8ed2133a14fc743e62d75f30 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/parse.c,v 1.5 2005/06/27 14:29:43 ph10 Exp $ */
+/* $Cambridge: exim/src/src/parse.c,v 1.6 2006/02/03 15:26:54 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -243,18 +243,17 @@ s = skip_comment(s);
 any character except [ ] \, including linear white space, and may contain
 quoted characters. However, RFC 821 restricts literals to being dot-separated
 3-digit numbers, and we make the obvious extension for IPv6. Go for a sequence
 any character except [ ] \, including linear white space, and may contain
 quoted characters. However, RFC 821 restricts literals to being dot-separated
 3-digit numbers, and we make the obvious extension for IPv6. Go for a sequence
-of digits and dots (hex digits and colons for IPv6) here; later this will be
-checked for being a syntactically valid IP address if it ever gets to a router.
+of digits, dots, hex digits, and colons here; later this will be checked for
+being a syntactically valid IP address if it ever gets to a router.
 
 
-If IPv6 is supported, allow both the formal form, with IPV6: at the start, and
-the informal form without it, and accept IPV4: as well, 'cause someone will use
-it sooner or later. */
+Allow both the formal IPv6 form, with IPV6: at the start, and the informal form
+without it, and accept IPV4: as well, 'cause someone will use it sooner or
+later. */
 
 if (*s == '[')
   {
   *t++ = *s++;
 
 
 if (*s == '[')
   {
   *t++ = *s++;
 
-  #if HAVE_IPV6
   if (strncmpic(s, US"IPv6:", 5) == 0 || strncmpic(s, US"IPv4:", 5) == 0)
     {
     memcpy(t, s, 5);
   if (strncmpic(s, US"IPv6:", 5) == 0 || strncmpic(s, US"IPv4:", 5) == 0)
     {
     memcpy(t, s, 5);
@@ -263,10 +262,6 @@ if (*s == '[')
     }
   while (*s == '.' || *s == ':' || isxdigit(*s)) *t++ = *s++;
 
     }
   while (*s == '.' || *s == ':' || isxdigit(*s)) *t++ = *s++;
 
-  #else
-  while (*s == '.' || isdigit(*s)) *t++ = *s++;
-  #endif
-
   if (*s == ']') *t++ = *s++; else
     {
     *errorptr = US"malformed domain literal";
   if (*s == ']') *t++ = *s++; else
     {
     *errorptr = US"malformed domain literal";