[exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog NewSt…

Αρχική Σελίδα
Delete this message
Reply to this message
Συντάκτης: Philip Hazel
Ημερομηνία:  
Προς: exim-cvs
Αντικείμενο: [exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog NewStuff exim/exim-src ACKNOWLEDGMENTS exim/exim-src/src dns.c exim.h exim/exim-src/src/lookups dnsdb.c exim/exim-test-orig/AutoTest/scripts 0
ph10 2004/11/24 15:43:36 GMT

  Modified files:
    exim-doc/doc-txt     ChangeLog NewStuff 
    exim-src             ACKNOWLEDGMENTS 
    exim-src/src         dns.c exim.h 
    exim-src/src/lookups dnsdb.c 
    exim-test-orig/AutoTest/scripts 082 
    exim-test-orig/AutoTest/stdout 082 
  Log:
  Added the mxh lookup type for dnsdb lookups.


  Revision  Changes    Path
  1.38      +5 -2      exim/exim-doc/doc-txt/ChangeLog
  1.16      +10 -6     exim/exim-doc/doc-txt/NewStuff
  1.7       +1 -0      exim/exim-src/ACKNOWLEDGMENTS
  1.3       +4 -0      exim/exim-src/src/dns.c
  1.3       +3 -1      exim/exim-src/src/exim.h
  1.4       +24 -12    exim/exim-src/src/lookups/dnsdb.c
  1.7       +2 -0      exim/exim-test-orig/AutoTest/scripts/082
  1.7       +2 -0      exim/exim-test-orig/AutoTest/stdout/082


  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- ChangeLog    24 Nov 2004 14:38:13 -0000    1.37
  +++ ChangeLog    24 Nov 2004 15:43:36 -0000    1.38
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.37 2004/11/24 14:38:13 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.38 2004/11/24 15:43:36 ph10 Exp $


   Change log file for Exim from version 4.21
   -------------------------------------------
  @@ -154,10 +154,13 @@
       (1) There is a new type, "zns", which walks up the domain tree until it
           finds some nameserver records. It should be used with care.


  -    (2) It is now possible to give a list of domains (or IP addresses) to be
  +    (2) There is a new type, "mxh", which is like "mx" except that it returns
  +        just the host names, not the priorities.
  +
  +    (3) It is now possible to give a list of domains (or IP addresses) to be
           looked up.


  -    (3) It is now possible to specify the separator character for use when
  +    (4) It is now possible to specify the separator character for use when
           multiple records are returned.


38. The dnslists ACL condition has been extended: it is now possible to supply

  Index: NewStuff
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- NewStuff    24 Nov 2004 14:38:13 -0000    1.15
  +++ NewStuff    24 Nov 2004 15:43:36 -0000    1.16
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.15 2004/11/24 14:38:13 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.16 2004/11/24 15:43:36 ph10 Exp $


New Features in Exim
--------------------
@@ -108,7 +108,7 @@

       Previously this was a syntax error.


  -12. There is now a new "record type" that can be specified in dnsdb lookups. It
  +12. There is a new "record type" that can be specified in dnsdb lookups. It
       is "zns" (for "zone NS"). It performs a lookup for NS records on the given
       domain, but if none are found, it removes the first component of the domain
       name, and tries again. This process continues until NS records are found
  @@ -129,7 +129,11 @@
       the name servers for the high-level domains such as .com or .co.uk are not
       going to be on such a list.


  -13. It is now possible to specify a list of domains or IP addresses to be
  +13. Another new "record type" is "mxh"; this looks up MX records just as "mx"
  +    does, but it returns only the names of the hosts, omitting the priority
  +    values.
  +
  +14. It is now possible to specify a list of domains or IP addresses to be
       looked up in a dnsdb lookup. The list is specified in the normal Exim way,
       with colon as the default separator, but with the ability to change this.
       For example:
  @@ -151,13 +155,13 @@
       of them yields some data, the lookup succeeds. However, if there is a
       temporary DNS error for any of them, the lookup defers.


  -14. It is now possible to specify the character to be used as a separator when
  +15. It is now possible to specify the character to be used as a separator when
       a dnsdb lookup returns data from more than one DNS record. The default is a
       newline. To specify a different character, put '>' followed by the new
       character at the start of the query. For example:


         ${lookup dnsdb{>: a=h1.test.ex:h2.test.ex}}
  -      ${lookup dnsdb{>| mx=<;m1.test.ex;m2.test.ex}}
  +      ${lookup dnsdb{>| mxh=<;m1.test.ex;m2.test.ex}}


       It is permitted to specify a space as the separator character. Note that
       more than one DNS record can be found for a single lookup item; this
  @@ -166,7 +170,7 @@
       The same effect could be achieved by wrapping the lookup in ${tr...}; this
       feature is just a syntactic simplification.


  -15. It is now possible to supply a list of domains and/or IP addresses to be
  +16. It is now possible to supply a list of domains and/or IP addresses to be
       lookup up in a DNS blacklist. Previously, only a single domain name could
       be given, for example:


  @@ -196,7 +200,7 @@
       Once a DNS record has been found (that matches a specific IP return
       address, if specified), no further lookups are done.


  -16. The log selector queue_time_overall causes Exim to output the time spent on
  +17. The log selector queue_time_overall causes Exim to output the time spent on
       the queue as an addition to the "Completed" message. Like queue_time (which
       puts the queue time on individual delivery lines), the time is tagged with
       "QT=", and it is measured from the time that the message starts to be


  Index: ACKNOWLEDGMENTS
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/ACKNOWLEDGMENTS,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ACKNOWLEDGMENTS    24 Nov 2004 14:38:13 -0000    1.6
  +++ ACKNOWLEDGMENTS    24 Nov 2004 15:43:36 -0000    1.7
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.6 2004/11/24 14:38:13 ph10 Exp $
  +$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.7 2004/11/24 15:43:36 ph10 Exp $


EXIM ACKNOWLEDGEMENTS

  @@ -122,6 +122,7 @@
                               Timezone patch for exiwhat
                               Patch for more daemon exiwhat information
                               Patch for -dd 
  +                            Patch for mxh lookup type in dnsdb 
   Giuliano Gavazzi          Patches for OSX compilation
   Dominic Germain           Patch for exiqgrep MacOS X bug
   Oliver Gorwits            $load_average patch


  Index: dns.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/dns.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- dns.c    19 Nov 2004 09:45:54 -0000    1.2
  +++ dns.c    24 Nov 2004 15:43:36 -0000    1.3
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/dns.c,v 1.2 2004/11/19 09:45:54 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/dns.c,v 1.3 2004/11/24 15:43:36 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -649,6 +649,10 @@
     uschar **fully_qualified_name)
   {
   if (type >= 0) return dns_lookup(dnsa, name, type, fully_qualified_name);
  +
  +/* The "mx hosts only" type doesn't require any special action here */
  +
  +if (type == T_MXH) return dns_lookup(dnsa, name, T_MX, fully_qualified_name);


/* Find nameservers for the domain or the nearest enclosing zone, excluding the
root servers. */

  Index: exim.h
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/exim.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- exim.h    19 Nov 2004 09:45:54 -0000    1.2
  +++ exim.h    24 Nov 2004 15:43:36 -0000    1.3
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/exim.h,v 1.2 2004/11/19 09:45:54 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/exim.h,v 1.3 2004/11/24 15:43:36 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -279,9 +279,11 @@
   #endif


/* We use the private type T_ZNS for retrieving the nameservers for the
-enclosing zone of a domain. */
+enclosing zone of a domain, and the private type T_MXH for retrieving
+the MX hostnames only (without their priorities). */

#define T_ZNS (-1)
+#define T_MXH (-2)

/* The resolv.h header defines __P(x) on some Solaris 2.5.1 systems (without
checking that it is already defined, in fact). This conflicts with other

  Index: dnsdb.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/lookups/dnsdb.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- dnsdb.c    19 Nov 2004 15:18:57 -0000    1.3
  +++ dnsdb.c    24 Nov 2004 15:43:36 -0000    1.4
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/lookups/dnsdb.c,v 1.3 2004/11/19 15:18:57 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/lookups/dnsdb.c,v 1.4 2004/11/24 15:43:36 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -32,6 +32,7 @@
   #endif
     "cname",
     "mx",
  +  "mxh",
     "ns",
     "ptr",
     "srv",
  @@ -49,6 +50,7 @@
   #endif
     T_CNAME,
     T_MX,
  +  T_MXH,     /* Private type for "MX hostnames" */
     T_NS,
     T_PTR,
     T_SRV,
  @@ -184,6 +186,8 @@
           != NULL)
     {       
     uschar rbuffer[256];
  +  int searchtype = (type == T_ZNS)? T_NS :          /* record type we want */
  +                   (type == T_MXH)? T_MX : type; 


     /* If the type is PTR, we have to construct the relevant magic lookup
     key. This code is now in a separate function. */
  @@ -196,24 +200,25 @@


     DEBUG(D_lookup) debug_printf("dnsdb key: %s\n", domain);


- /* Do the lookup and sort out the result. We use the special
- lookup function that knows about pseudo types like "zns". If the lookup
- fails, continue with the next domain. */
+ /* Do the lookup and sort out the result. There are two special types that
+ are handled specially: T_ZNS and T_MXH. The former is handled in a special
+ lookup function so that the facility could be used from other parts of the
+ Exim code. The latter affects only what happens later on in this function,
+ but for tidiness it is handled in a similar way. If the lookup fails,
+ continue with the next domain. */

     rc = dns_special_lookup(&dnsa, domain, type, NULL);


     if (rc == DNS_NOMATCH || rc == DNS_NODATA) continue;
     if (rc != DNS_SUCCEED) return DEFER;


  -  /* If the lookup was a pseudo-type, change it to the correct type for
  -  searching the returned records; then search for them. */
  -  
  -  if (type == T_ZNS) type = T_NS;
  +  /* Search the returned records */
  +
     for (rr = dns_next_rr(&dnsa, &dnss, RESET_ANSWERS);
          rr != NULL;
          rr = dns_next_rr(&dnsa, &dnss, RESET_NEXT))
       {
  -    if (rr->type != type) continue;
  +    if (rr->type != searchtype) continue;


       /* There may be several addresses from an A6 record. Put the configured 
       separator between them, just as for between several records. However, A6 
  @@ -245,26 +250,33 @@
         yield = string_cat(yield, &size, &ptr, (uschar *)(rr->data+1),
           (rr->data)[0]);
         }
  -    else   /* T_CNAME, T_MX, T_NS, T_SRV, T_PTR */
  +    else   /* T_CNAME, T_MX, T_MXH, T_NS, T_SRV, T_PTR */
         {
  +      int num; 
         uschar s[264];
         uschar *p = (uschar *)(rr->data);
  -      if (type == T_MX)
  +       
  +      if (type == T_MXH)
  +        {
  +        /* mxh ignores the priority number and includes only the hostnames */
  +        GETSHORT(num, p);            /* pointer is advanced */
  +        }
  +      else if (type == T_MX)
           {
  -        int num;
           GETSHORT(num, p);            /* pointer is advanced */
           sprintf(CS s, "%d ", num);
           yield = string_cat(yield, &size, &ptr, s, Ustrlen(s));
           }
         else if (type == T_SRV)
           {
  -        int num, weight, port;
  +        int weight, port;
           GETSHORT(num, p);            /* pointer is advanced */
           GETSHORT(weight, p);
           GETSHORT(port, p);
           sprintf(CS s, "%d %d %d ", num, weight, port);
           yield = string_cat(yield, &size, &ptr, s, Ustrlen(s));
           }
  +         
         rc = dn_expand(dnsa.answer, dnsa.answer + dnsa.answerlen, p,
           (DN_EXPAND_ARG4_TYPE)(s), sizeof(s));



  Index: 082
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/scripts/082,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- 082    19 Nov 2004 15:18:57 -0000    1.6
  +++ 082    24 Nov 2004 15:43:36 -0000    1.7
  @@ -438,6 +438,7 @@
   ns=test.ex                 ${lookup dnsdb{ns=test.ex}{$value}fail}
   zns=x.y.z.test.ex          ${lookup dnsdb{zns=x.y.z.test.ex}{$value}fail}
   mx=mxt1.test.ex            ${lookup dnsdb{mx=mxt1.test.ex}{$value}fail}
  +mxh=mxt1.test.ex           ${lookup dnsdb{mxh=mxt1.test.ex}{$value}fail}
   ptr=131.111.10.206         ${lookup dnsdb{ptr=131.111.10.206}{$value}fail}
   a6=xoanon.ipv6.test.ex     ${lookup dnsdb {a6=xoanon.ipv6.test.ex}{$value}{fail}}
   a6=prefix.ipv6.test.ex     ${lookup dnsdb {a6=prefix.ipv6.test.ex}{$value}{fail}}
  @@ -451,6 +452,7 @@
   ten-1:ten2                 ${lookup dnsdb{a=ten-1.test.ex:ten-2.test.ex}}
   ten-1|ten2                 ${lookup dnsdb{a=<|ten-1.test.ex|ten-2.test.ex}}
   mxt1;mxt2 | output         ${lookup dnsdb{>|mx=<;mxt1.test.ex;mxt2.test.ex}}
  +mxt1;mxt2 | output         ${lookup dnsdb{>|mxh=<;mxt1.test.ex;mxt2.test.ex}}
   13/14 rbl                  ${lookup dnsdb{> 13.12.11.10.rbl.test.ex:13.12.11.10.rbl.test.ex}}
   double ptr                 ${lookup dnsdb{ptr=10.0.0.1:10.0.0.2}}
   ten-1:bad                  ${lookup dnsdb{ a = ten-1.test.ex:badbad.test.ex}{$value}{FAILED}}


  Index: 082
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stdout/082,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- 082    19 Nov 2004 15:18:57 -0000    1.6
  +++ 082    24 Nov 2004 15:43:36 -0000    1.7
  @@ -434,6 +434,7 @@
   > ns=test.ex                 xoanon.csi.cam.ac.uk
   > zns=x.y.z.test.ex          xoanon.csi.cam.ac.uk
   > mx=mxt1.test.ex            5 xoanon.csi.cam.ac.uk
  +> mxh=mxt1.test.ex           xoanon.csi.cam.ac.uk
   > ptr=131.111.10.206         xoanon.csi.cam.ac.uk
   > Failed: lookup of "a6=xoanon.ipv6.test.ex" gave DEFER: unsupported DNS record type
   > Failed: lookup of "a6=prefix.ipv6.test.ex" gave DEFER: unsupported DNS record type
  @@ -449,6 +450,7 @@
   > ten-1|ten2                 10.0.0.1
   10.0.0.2
   > mxt1;mxt2 | output         5 xoanon.csi.cam.ac.uk|5 not-exist.test.ex
  +> mxt1;mxt2 | output         xoanon.csi.cam.ac.uk|not-exist.test.ex
   > 13/14 rbl                  This is a test blacklisting message This is a test blacklisting message
   > double ptr                 ten-1.test.ex
   ten-2.test.ex