]> Pileus Git - ~andy/fetchmail/commitdiff
Handle socket errors on CAPABILITY probes.
authorMatthias Andree <matthias.andree@gmx.de>
Sun, 22 May 2011 21:14:01 +0000 (23:14 +0200)
committerMatthias Andree <matthias.andree@gmx.de>
Sun, 22 May 2011 21:14:01 +0000 (23:14 +0200)
imap.c

diff --git a/imap.c b/imap.c
index 0bbf06db4c98154a4ce042b85f314e01987922ce..dca3bab9f51448cba5c3e81804ca775c4773f648 100644 (file)
--- a/imap.c
+++ b/imap.c
@@ -324,7 +324,7 @@ static void imap_canonicalize(char *result, char *raw, size_t maxlen)
     result[j] = '\0';
 }
 
-static void capa_probe(int sock, struct query *ctl)
+static int capa_probe(int sock, struct query *ctl)
 /* set capability variables from a CAPA probe */
 {
     int        ok;
@@ -360,6 +360,8 @@ static void capa_probe(int sock, struct query *ctl)
        if (outlevel >= O_DEBUG)
            report(stdout, GT_("Protocol identified as IMAP2 or IMAP2BIS\n"));
     }
+    else
+       return ok;
 
     /* 
      * Handle idling.  We depend on coming through here on startup
@@ -377,6 +379,8 @@ static void capa_probe(int sock, struct query *ctl)
     }
 
     peek_capable = (imap_version >= IMAP4);
+
+    return PS_SUCCESS;
 }
 
 static int do_authcert (int sock, const char *command, const char *name)
@@ -412,7 +416,8 @@ static int imap_getauth(int sock, struct query *ctl, char *greeting)
     else
        expunge_period = 1;
 
-    capa_probe(sock, ctl);
+    if ((ok = capa_probe(sock, ctl)))
+       return ok;
 
     /* 
      * If either (a) we saw a PREAUTH token in the greeting, or
@@ -459,7 +464,8 @@ static int imap_getauth(int sock, struct query *ctl, char *greeting)
                 * Now that we're confident in our TLS connection we can
                 * guarantee a secure capability re-probe.
                 */
-               capa_probe(sock, ctl);
+               if ((ok = capa_probe(sock, ctl)))
+                   return ok;
                if (outlevel >= O_VERBOSE)
                {
                    report(stdout, GT_("%s: upgrade to TLS succeeded.\n"), commonname);