Date: Sun, 27 Jan 2008 13:24:35 +0100 From: "Pawel Pekala" <c0rn@o2.pl> To: "FreeBSD gnats submit" <FreeBSD-gnats-submit@FreeBSD.org> Subject: ports/120041: [maintainer] mail/libetpan add IPv6 fallback patch from etpan`s CVS Message-ID: <1201436675.22754@caprica.slowicza.org> Resent-Message-ID: <200801271250.m0RCo2nU000309@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 120041 >Category: ports >Synopsis: [maintainer] mail/libetpan add IPv6 fallback patch from etpan`s CVS >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Jan 27 12:50:01 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Pawel Pekala >Release: FreeBSD 6.2-RELEASE-p9 i386 >Organization: >Environment: System: FreeBSD 6.2-RELEASE-p9 #0: Thu Nov 29 04:07:33 UTC 2007 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC >Description: Add patch from libetpan`s CVS fixing connect errors in some cases: 2008-01-25 - libetpan-0.52cvs35 - colin * src/data-types/connect.c Fix connection failures when client and server are ipv4 and ipv6 capable, but no ip6 route exists to the server. >How-To-Repeat: >Fix: --- libetpan.diff begins here --- diff -urN /usr/ports/mail/libetpan/files/patch-ipv6-fallback libetpan/files/patch-ipv6-fallback --- /usr/ports/mail/libetpan/files/patch-ipv6-fallback Thu Jan 1 01:00:00 1970 +++ libetpan/files/patch-ipv6-fallback Sun Jan 27 13:01:48 2008 @@ -0,0 +1,69 @@ +Index: src/data-types/connect.c +=================================================================== +RCS file: /cvsroot/libetpan/libetpan/src/data-types/connect.c,v +retrieving revision 1.25 +diff -u -p -u -r1.25 connect.c +--- src/data-types/connect.c 27 Oct 2007 10:08:24 -0000 1.25 ++++ src/data-types/connect.c 25 Jan 2008 08:29:58 -0000 +@@ -88,6 +88,21 @@ static int prepare_fd(int fd) + 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 @@ int mail_tcp_connect_with_local_address( + + 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,8 +255,22 @@ int mail_tcp_connect_with_local_address( + + 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) { +- goto close_socket; ++ 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 @@ int mail_tcp_connect_with_local_address( + if (ai == NULL) + goto err; + #endif +- + return s; + + close_socket: --- libetpan.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1201436675.22754>