summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2008-04-05 20:27:28 +0000
committerDan Winship <danw@src.gnome.org>2008-04-05 20:27:28 +0000
commitfc42d8acf7fb64c71aae7db3480f4f121eb2baa3 (patch)
tree276819b06373fe4a0554194527a85dadd39903cc
parent797462000d2e977db154d3eae120a308f18a8085 (diff)
downloadlibsoup-fc42d8acf7fb64c71aae7db3480f4f121eb2baa3.tar.gz
Don't cache negative results, even if the DNS server explicitly states
* libsoup/soup-dns.c (resolve_address, resolve_name): Don't cache negative results, even if the DNS server explicitly states that the host does not exist; some servers give different answers to clients inside and outside their firewall. #523269, Jörgen Scheibengruber. svn path=/trunk/; revision=1127
-rw-r--r--ChangeLog8
-rw-r--r--libsoup/soup-dns.c14
2 files changed, 12 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index aa3843f4..aef1bac1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2008-04-05 Dan Winship <danw@gnome.org>
+ * libsoup/soup-dns.c (resolve_address, resolve_name): Don't
+ cache negative results, even if the DNS server explicitly states
+ that the host does not exist; some servers give different answers
+ to clients inside and outside their firewall. #523269, Jörgen
+ Scheibengruber.
+
+2008-04-05 Dan Winship <danw@gnome.org>
+
* libsoup/soup-message-body.c (soup_message_body_set_accumulate)
(soup_message_body_get_accumulate): New, replaces
SOUP_MESSAGE_OVERWRITE_CHUNKS, but can be set on either the
diff --git a/libsoup/soup-dns.c b/libsoup/soup-dns.c
index f3c77499..34fc399a 100644
--- a/libsoup/soup-dns.c
+++ b/libsoup/soup-dns.c
@@ -326,8 +326,7 @@ resolve_address (SoupDNSCacheEntry *entry)
entry->sockaddr = g_memdup (res->ai_addr, res->ai_addrlen);
entry->resolved = TRUE;
freeaddrinfo (res);
- } else
- entry->resolved = (retval != EAI_AGAIN);
+ }
#else /* !HAVE_GETADDRINFO */
@@ -343,9 +342,7 @@ resolve_address (SoupDNSCacheEntry *entry)
memcpy (&sin.sin_addr, h->h_addr_list[0], sizeof (struct in_addr));
entry->sockaddr = g_memdup (&sin, sizeof (struct sockaddr_in));
entry->resolved = TRUE;
- } else
- entry->resolved = (h || h_errno != TRY_AGAIN);
-
+ }
g_mutex_unlock (soup_gethost_lock);
@@ -375,10 +372,8 @@ resolve_name (SoupDNSCacheEntry *entry)
if (retval == 0) {
entry->hostname = name;
entry->resolved = TRUE;
- } else {
+ } else
g_free (name);
- entry->resolved = (retval != EAI_AGAIN);
- }
#else /* !HAVE_GETNAMEINFO */
@@ -392,8 +387,7 @@ resolve_name (SoupDNSCacheEntry *entry)
if (h) {
entry->hostname = g_strdup (h->h_name);
entry->resolved = TRUE;
- } else
- entry->resolved = (h_errno != TRY_AGAIN);
+ }
}
g_mutex_unlock (soup_gethost_lock);