/[smeserver]/rpms/qmail/sme9/qmail-103-dns_response_buffer.patch
ViewVC logotype

Contents of /rpms/qmail/sme9/qmail-103-dns_response_buffer.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Sat Feb 2 00:24:43 2013 UTC (11 years, 10 months ago) by slords
Branch: MAIN
CVS Tags: qmail-1_03-23_el6_sme, qmail-1_03-17_el6_sme, qmail-1_03-20_el6_sme, qmail-1_03-22_el6_sme, qmail-1_03-24_el6_sme, qmail-1_03-21_el6_sme, qmail-1_03-18_el6_sme, qmail-1_03-19_el6_sme, HEAD
Initial import

1 --- qmail-1.03/dns.c.103 Mon Aug 17 16:06:58 1998
2 +++ qmail-1.03/dns.c Wed Aug 26 16:28:56 1998
3 @@ -21,10 +21,12 @@
4 static unsigned short getshort(c) unsigned char *c;
5 { unsigned short u; u = c[0]; return (u << 8) + c[1]; }
6
7 -static union { HEADER hdr; unsigned char buf[PACKETSZ]; } response;
8 +static struct { unsigned char *buf; } response;
9 +static int responsebuflen = 0;
10 static int responselen;
11 static unsigned char *responseend;
12 static unsigned char *responsepos;
13 +static u_long saveresoptions;
14
15 static int numanswers;
16 static char name[MAXDNAME];
17 @@ -45,18 +47,33 @@
18 errno = 0;
19 if (!stralloc_copy(&glue,domain)) return DNS_MEM;
20 if (!stralloc_0(&glue)) return DNS_MEM;
21 - responselen = lookup(glue.s,C_IN,type,response.buf,sizeof(response));
22 + if (!responsebuflen)
23 + if (response.buf = (unsigned char *)alloc(PACKETSZ+1))
24 + responsebuflen = PACKETSZ+1;
25 + else return DNS_MEM;
26 +
27 + responselen = lookup(glue.s,C_IN,type,response.buf,responsebuflen);
28 + if ((responselen >= responsebuflen) ||
29 + (responselen > 0 && (((HEADER *)response.buf)->tc)))
30 + {
31 + if (responsebuflen < 65536)
32 + if (alloc_re(&response.buf, responsebuflen, 65536))
33 + responsebuflen = 65536;
34 + else return DNS_MEM;
35 + saveresoptions = _res.options;
36 + _res.options |= RES_USEVC;
37 + responselen = lookup(glue.s,C_IN,type,response.buf,responsebuflen);
38 + _res.options = saveresoptions;
39 + }
40 if (responselen <= 0)
41 {
42 if (errno == ECONNREFUSED) return DNS_SOFT;
43 if (h_errno == TRY_AGAIN) return DNS_SOFT;
44 return DNS_HARD;
45 }
46 - if (responselen >= sizeof(response))
47 - responselen = sizeof(response);
48 responseend = response.buf + responselen;
49 responsepos = response.buf + sizeof(HEADER);
50 - n = ntohs(response.hdr.qdcount);
51 + n = ntohs(((HEADER *)response.buf)->qdcount);
52 while (n-- > 0)
53 {
54 i = dn_expand(response.buf,responseend,responsepos,name,MAXDNAME);
55 @@ -66,7 +83,7 @@
56 if (i < QFIXEDSZ) return DNS_SOFT;
57 responsepos += QFIXEDSZ;
58 }
59 - numanswers = ntohs(response.hdr.ancount);
60 + numanswers = ntohs(((HEADER *)response.buf)->ancount);
61 return 0;
62 }
63

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed