Skip to content

Commit

Permalink
FIx a bug where the remote IMAP server has a AAAA record but there's
Browse files Browse the repository at this point in the history
no IPv6 connectivity from the client to that site.  Prior to this fix,
the fallback to IPv4 wasn't working properly.  (The fix should be in
the next release of libetpan.)
  • Loading branch information
smb committed Jan 25, 2008
1 parent 7abe6ee commit 75896bd
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 3 deletions.
4 changes: 2 additions & 2 deletions mail/libetpan/Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# $NetBSD: Makefile,v 1.16 2008/01/18 05:08:26 tnn Exp $
# $NetBSD: Makefile,v 1.17 2008/01/25 18:26:31 smb Exp $
#

DISTNAME= libetpan-0.52
PKGREVISION= 2
PKGREVISION= 3
CATEGORIES= mail
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=libetpan/}

Expand Down
3 changes: 2 additions & 1 deletion mail/libetpan/distinfo
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
$NetBSD: distinfo,v 1.8 2007/10/27 13:55:27 wiz Exp $
$NetBSD: distinfo,v 1.9 2008/01/25 18:26:32 smb Exp $

SHA1 (libetpan-0.52.tar.gz) = e2fdf76b471e57a153bad4c4def7fde512385021
RMD160 (libetpan-0.52.tar.gz) = 3e826d57987780b204c9074a9c225e960f214d66
Size (libetpan-0.52.tar.gz) = 1611405 bytes
SHA1 (patch-aa) = e783adf544c9a63df584815ee4b033249cecf0ff
SHA1 (patch-af) = f7f6977a0bdd709eaba1efed216eee6a3a0f542b
66 changes: 66 additions & 0 deletions mail/libetpan/patches/patch-af
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
$NetBSD: patch-af,v 1.1 2008/01/25 18:26:32 smb Exp $

--- src/data-types/connect.c.orig 2007-08-06 17:32:30.000000000 -0400
+++ src/data-types/connect.c 2008-01-25 13:15:13.000000000 -0500
@@ -88,6 +88,21 @@
return 0;
}

+#ifdef HAVE_IPV6
+static int verify_sock_errors(int s)
+{
+ uint len;
+ int val;
+ len = sizeof(val);
+ if (getsockopt(s, SOL_SOCKET, SO_ERROR, &val, &len) < 0) {
+ return -1;
+ } else if (val != 0) {
+ return -1;
+ }
+ return 0;
+}
+#endif
+
static int wait_connect(int s, int r)
{
fd_set fds;
@@ -206,6 +221,7 @@

for (ai = res; ai != NULL; ai = ai->ai_next) {
s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+
if (s == -1)
continue;

@@ -239,9 +255,23 @@

r = connect(s, ai->ai_addr, ai->ai_addrlen);
r = wait_connect(s, r);
+
+ if (r != -1) {
+ r = verify_sock_errors(s);
+ }
+
if (r == -1) {
+ if (ai->ai_next) {
+#ifdef WIN32
+ closesocket(s);
+#else
+ close(s);
+#endif
+ continue;
+ } else {
goto close_socket;
}
+ }
/* if we're here, we're good */
break;
}
@@ -252,7 +282,6 @@
if (ai == NULL)
goto err;
#endif
-
return s;

close_socket:

0 comments on commit 75896bd

Please sign in to comment.