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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

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to