[fetchmail]IPv6 DNS Problems
Sebastian Wiesinger
fetchmail@tracker.fire-world.de
Mon, 28 Mar 2005 17:34:47 +0200
--r5Pyd7+fXNt84Ff3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
* Sebastian Wiesinger <fetchmail@tracker.fire-world.de> [2005-03-28 01:33]:
> I attached my hotfix for this (which is poorly written, but works for
> me) to this mail.
I made a new diff because I forgot to include the whole "else" tree
for IPv6. :(
It would be nice if someone could implement something (better) like
that.
Sebastian
--
GPG Key-ID: 0x76B79F20 (0x1B6034F476B79F20)
Wehret den Anfaengen: http://odem.org/informationsfreiheit/
'Are you Death?' ... IT'S THE SCYTHE, ISN'T IT? PEOPLE ALWAYS NOTICE THE SCYTHE.
-- Terry Pratchett, The Fifth Elephant
--r5Pyd7+fXNt84Ff3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ipv6-dns.diff"
--- ./fetchmail-6.2.5/driver.c Mon Mar 28 01:12:21 2005
+++ ./fetchmail-6.2.5-patched/driver.c Mon Mar 28 17:22:51 2005
@@ -34,6 +34,7 @@
#endif
#if defined(HAVE_RES_SEARCH) || defined(HAVE_GETHOSTBYNAME)
+#include <resolv.h>
#include <netdb.h>
#include "mx.h"
#endif /* defined(HAVE_RES_SEARCH) || defined(HAVE_GETHOSTBYNAME) */
@@ -826,6 +827,9 @@
int err, mailserver_socket = -1;
#endif /* HAVE_VOLATILE */
const char *msg;
+#if INET6_ENABLE
+ u_long resolver_options;
+#endif
SIGHANDLERTYPE pipesave;
SIGHANDLERTYPE alrmsave;
@@ -1007,9 +1011,36 @@
* Received: from hostname [10.0.0.1]
*/
errno = 0;
+#if INET6_ENABLE
+ res_init();
+#endif /* INET6_ENABLE */
namerec = gethostbyname(ctl->server.queryname);
if (namerec == (struct hostent *)NULL)
{
+#if INET6_ENABLE
+ resolver_options = _res.options;
+ _res.options |= RES_USE_INET6;
+ namerec = gethostbyname(ctl->server.queryname);
+ _res.options = resolver_options;
+ if (namerec == (struct hostent *)NULL)
+ {
+ report(stderr,
+ GT_("couldn't find canonical DNS name of %s (%s)\n"),
+ ctl->server.pollname, ctl->server.queryname);
+ err = PS_DNS;
+ set_timeout(0);
+ phase = oldphase;
+ goto closeUp;
+ }
+ else
+ {
+ ctl->server.truename=xstrdup((char *)namerec->h_name);
+ ctl->server.trueaddr=xmalloc(namerec->h_length);
+ memcpy(ctl->server.trueaddr,
+ namerec->h_addr_list[0],
+ namerec->h_length);
+ }
+#else /* !INET6_ENABLE */
report(stderr,
GT_("couldn't find canonical DNS name of %s (%s)\n"),
ctl->server.pollname, ctl->server.queryname);
@@ -1017,6 +1048,7 @@
set_timeout(0);
phase = oldphase;
goto closeUp;
+#endif /* INET6_ENABLE */
}
else
{
--r5Pyd7+fXNt84Ff3--