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;