pristine/qmail-103-oversize-dns.patch
author Tomas Zeman <tzeman@volny.cz>
Sun, 08 Jul 2012 12:20:20 +0200
changeset 4 454df9357b4b
permissions -rw-r--r--
Imported pristine/qmail-103-oversize-dns.patch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     1
http://www.ckdhr.com/ckd/qmail-103.patch
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     2
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     3
Description from http://qmail.ruk.cuni.cz/top.html :
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     4
Christopher K. Davis has a patch to accept oversize DNS packets which works on
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     5
both qmail's dns.c and tcpserver's dns.c. If you don't want to patch qmail, you
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     6
can ameliorate the problem somewhat using djbdns, which returns only the
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     7
records you ask for, making for a smaller ANSWER section. 
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     8
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     9
--- qmail-1.03/dns.c.103	Mon Aug 17 16:06:58 1998
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    10
+++ qmail-1.03/dns.c	Wed Aug 26 16:28:56 1998
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    11
@@ -21,10 +21,12 @@
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    12
 static unsigned short getshort(c) unsigned char *c;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    13
 { unsigned short u; u = c[0]; return (u << 8) + c[1]; }
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    14
 
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    15
-static union { HEADER hdr; unsigned char buf[PACKETSZ]; } response;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    16
+static struct { unsigned char *buf; } response;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    17
+static int responsebuflen = 0;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    18
 static int responselen;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    19
 static unsigned char *responseend;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    20
 static unsigned char *responsepos;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    21
+static unsigned long saveresoptions;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    22
 
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    23
 static int numanswers;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    24
 static char name[MAXDNAME];
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    25
@@ -45,18 +47,33 @@
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    26
  errno = 0;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    27
  if (!stralloc_copy(&glue,domain)) return DNS_MEM;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    28
  if (!stralloc_0(&glue)) return DNS_MEM;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    29
- responselen = lookup(glue.s,C_IN,type,response.buf,sizeof(response));
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    30
+ if (!responsebuflen)
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    31
+  if (response.buf = (unsigned char *)alloc(PACKETSZ+1))
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    32
+   responsebuflen = PACKETSZ+1;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    33
+  else return DNS_MEM;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    34
+
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    35
+ responselen = lookup(glue.s,C_IN,type,response.buf,responsebuflen);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    36
+ if ((responselen >= responsebuflen) ||
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    37
+     (responselen > 0 && (((HEADER *)response.buf)->tc)))
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    38
+  {
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    39
+   if (responsebuflen < 65536)
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    40
+    if (alloc_re(&response.buf, responsebuflen, 65536))
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    41
+     responsebuflen = 65536;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    42
+    else return DNS_MEM;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    43
+    saveresoptions = _res.options;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    44
+    _res.options |= RES_USEVC;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    45
+    responselen = lookup(glue.s,C_IN,type,response.buf,responsebuflen);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    46
+    _res.options = saveresoptions;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    47
+  }
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    48
  if (responselen <= 0)
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    49
   {
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    50
    if (errno == ECONNREFUSED) return DNS_SOFT;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    51
    if (h_errno == TRY_AGAIN) return DNS_SOFT;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    52
    return DNS_HARD;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    53
   }
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    54
- if (responselen >= sizeof(response))
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    55
-   responselen = sizeof(response);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    56
  responseend = response.buf + responselen;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    57
  responsepos = response.buf + sizeof(HEADER);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    58
- n = ntohs(response.hdr.qdcount);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    59
+ n = ntohs(((HEADER *)response.buf)->qdcount);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    60
  while (n-- > 0)
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    61
   {
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    62
    i = dn_expand(response.buf,responseend,responsepos,name,MAXDNAME);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    63
@@ -66,7 +83,7 @@
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    64
    if (i < QFIXEDSZ) return DNS_SOFT;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    65
    responsepos += QFIXEDSZ;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    66
   }
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    67
- numanswers = ntohs(response.hdr.ancount);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    68
+ numanswers = ntohs(((HEADER *)response.buf)->ancount);
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    69
  return 0;
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    70
 }
454df9357b4b Imported pristine/qmail-103-oversize-dns.patch
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    71