The attached patch is unverified, but attemtpts to add proper checks on TCP DNS connections to detect & log when there is some problem connecting to the nameserver.
Additionally it corrects a bug in connection management if there is more than one nameserver configured. The code forgot to assign the current nameserver on the tcp connection and as result there is memory corruption if a tcp connection is etablished to the second/third.. nameserver.
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [EMAIL PROTECTED] # jh3azdhbtdwcs8xs # target_branch: http://squid-cache.org/bzr/squid3/branches/SQUID_3_0/ # testament_sha1: 054f2c357199ebf597e95765272ac0a3c34bbe22 # timestamp: 2008-08-31 01:08:48 +0200 # base_revision_id: [EMAIL PROTECTED] # z765gl20q73ni7f1 # # Begin patch === modified file 'src/dns_internal.cc' --- src/dns_internal.cc 2008-07-08 10:33:53 +0000 +++ src/dns_internal.cc 2008-08-30 23:04:33 +0000 @@ -131,7 +131,6 @@ struct _ns { - struct sockaddr_in S; int nqueries; int nreplies; @@ -715,6 +714,7 @@ nsvc * vc = (nsvc *)data; if (status != COMM_OK) { + debugs(78, 1, "idnsInitVCConnected: Failed to connect to nameserver " << inet_ntoa(nameservers[vc->ns].S.sin_addr) << " using TCP!"); comm_close(fd); return; } @@ -739,6 +739,7 @@ { nsvc *vc = cbdataAlloc(nsvc); nameservers[ns].vc = vc; + vc->ns = ns; struct IN_ADDR addr; @@ -776,6 +777,12 @@ nsvc *vc = nameservers[ns].vc; + if (!vc) { + debugs(78, 1, "idnsSendQuery: Failed to initiate TCP connection to nameserver " << inet_ntoa(nameservers[vc->ns].S.sin_addr) << "!"); + + return; + } + vc->queue->reset(); short head = htons(q->sz); # Begin bundle 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
signature.asc
Description: This is a digitally signed message part