Tags: patch

Hello!  It looks like the problem is a result of a server crash when the 
configured IMAP server is not listening: the IPv6 patch causes a 
segfault.

Attached is a patch to solve this and quiet the init script a bit.

Take care,

-- 
Kees Cook                                            @outflux.net
diff -u up-imapproxy-1.2.4/debian/patches/imapproxy-ipv6.patch up-imapproxy-1.2.4/debian/patches/imapproxy-ipv6.patch
--- up-imapproxy-1.2.4/debian/patches/imapproxy-ipv6.patch
+++ up-imapproxy-1.2.4/debian/patches/imapproxy-ipv6.patch
@@ -146,7 +146,7 @@
  
 +#ifdef HAVE_IPV6
 +
-+    for ( ai = ISD.ai; ; ai = ai->ai_next ) {
++    for ( ai = ISD.ai; ; ) {
 +        addrlen = ai->ai_family == PF_INET6 ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
 +
 +	sd = socket( ai->ai_family, SOCK_STREAM, IPPROTO_TCP );
@@ -164,7 +164,7 @@
 +	else
 +	  break; /* Success */
 +
-+	if (!ai) {
++	if (!(ai=ai->ai_next)) {
 +	    syslog(LOG_ERR, "%s: connect() failed to all addresses.", fn);
 +	    sleep( 15 );    /* IMAP server may not be started yet. */
 +	    ai = ISD.ai;
diff -u up-imapproxy-1.2.4/debian/imapproxy.init.d up-imapproxy-1.2.4/debian/imapproxy.init.d
--- up-imapproxy-1.2.4/debian/imapproxy.init.d
+++ up-imapproxy-1.2.4/debian/imapproxy.init.d
@@ -51,7 +51,7 @@
 		--exec $DAEMON -- $ARGS
 	ssd_ret=$?
 	sleep 1
-	if [ $ssd_ret==0 ] && grep -q $DAEMON /proc/`cat $PIDFILE`/cmdline >/dev/null ; then
+	if [ $ssd_ret==0 ] && [ -r /proc/`cat $PIDFILE`/cmdline ] && grep -q $DAEMON /proc/`cat $PIDFILE`/cmdline >/dev/null ; then
 		echo "$NAME."
 	else
 		echo "Failed to start $NAME. Check logs for details."
diff -u up-imapproxy-1.2.4/src/main.c up-imapproxy-1.2.4/src/main.c
--- up-imapproxy-1.2.4/src/main.c
+++ up-imapproxy-1.2.4/src/main.c
@@ -1052,7 +1052,7 @@
 
 #ifdef HAVE_IPV6
 
-    for ( ai = ISD.ai; ; ai = ai->ai_next ) {
+    for ( ai = ISD.ai; ; ) {
         addrlen = ai->ai_family == PF_INET6 ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
 
 	sd = socket( ai->ai_family, SOCK_STREAM, IPPROTO_TCP );
@@ -1072,7 +1072,7 @@
 	  break; /* Success */
         }
 
-	if (!ai) {
+	if (!(ai=ai->ai_next)) {
 	    syslog(LOG_ERR, "%s: connect() failed to all addresses.", fn);
 	    sleep( 15 );    /* IMAP server may not be started yet. */
 	    ai = ISD.ai;

Reply via email to