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;