summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Hazel <ph10@hermes.cam.ac.uk>2005-09-19 10:13:39 +0000
committerPhilip Hazel <ph10@hermes.cam.ac.uk>2005-09-19 10:13:39 +0000
commit7a546ad529bc715e345141261097737a986af03c (patch)
tree6138dd99b5786d3b7368e7bc5261349aa6f99f8a
parenta7fdad5bca2c6495f3181e29835eeef7670a567b (diff)
More work for interfacing to the new test suite.
-rw-r--r--src/src/host.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/src/src/host.c b/src/src/host.c
index ee4461bc8..7df1f1428 100644
--- a/src/src/host.c
+++ b/src/src/host.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/host.c,v 1.14 2005/09/16 14:44:11 ph10 Exp $ */
+/* $Cambridge: exim/src/src/host.c,v 1.15 2005/09/19 10:13:39 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -147,8 +147,11 @@ while (!done)
*************************************************/
/* This function is called instead of gethostbyname(), gethostbyname2(), or
-getipnodebyname() when running in the test harness. It uses only the DNS to
-look up the host name. In the new test harness, this means it will access only
+getipnodebyname() when running in the test harness. It recognizes the name
+"manyhome.test.ex" and generates a humungous number of IP addresses. It also
+recognizes an unqualified "localhost" and forces it to the appropriate loopback
+address. IP addresses are treated as literals. For other names, it uses the DNS
+to find the host name. In the new test harness, this means it will access only
the fake DNS resolver. In the old harness it will call the real resolver and
access the test zone.
@@ -178,6 +181,36 @@ DEBUG(D_host_lookup)
debug_printf("using host_fake_gethostbyname for %s (%s)\n", name,
(af == AF_INET)? "IPv4" : "IPv6");
+/* Handle the name that needs a vast number of IP addresses */
+
+if (Ustrcmp(name, "manyhome.test.ex") == 0 && af == AF_INET)
+ {
+ int i, j;
+ yield = store_get(sizeof(struct hostent));
+ alist = store_get(2049 * sizeof(char *));
+ adds = store_get(2048 * alen);
+ yield->h_name = CS name;
+ yield->h_aliases = NULL;
+ yield->h_addrtype = af;
+ yield->h_length = alen;
+ yield->h_addr_list = CSS alist;
+ for (i = 104; i <= 111; i++)
+ {
+ for (j = 0; j <= 255; j++)
+ {
+ *alist++ = adds;
+ *adds++ = 10;
+ *adds++ = 250;
+ *adds++ = i;
+ *adds++ = j;
+ }
+ }
+ *alist = NULL;
+ return yield;
+ }
+
+/* Handle unqualified "localhost" */
+
if (Ustrcmp(name, "localhost") == 0)
lname = (af == AF_INET)? US"127.0.0.1" : US"::1";