]> granicus.if.org Git - mutt/commitdiff
If there is an * OK [CAPABILITY... qualifier on connect, parse it and skip
authorBrendan Cully <brendan@kublai.com>
Tue, 3 Jan 2006 17:31:53 +0000 (17:31 +0000)
committerBrendan Cully <brendan@kublai.com>
Tue, 3 Jan 2006 17:31:53 +0000 (17:31 +0000)
the manual capability check.

imap/command.c
imap/imap.c

index 6f78e937a8190445011ba9cb75c43244d89a1711..b080bd09e57cf521d8b167b600ac6af0c024bc7f 100644 (file)
@@ -41,7 +41,7 @@ static IMAP_COMMAND* cmd_new (IMAP_DATA* idata);
 static int cmd_status (const char *s);
 static void cmd_handle_fatal (IMAP_DATA* idata);
 static int cmd_handle_untagged (IMAP_DATA* idata);
-static void cmd_parse_capabilities (IMAP_DATA* idata, char* s);
+static void cmd_parse_capability (IMAP_DATA* idata, char* s);
 static void cmd_parse_expunge (IMAP_DATA* idata, const char* s);
 static void cmd_parse_list (IMAP_DATA* idata, char* s);
 static void cmd_parse_lsub (IMAP_DATA* idata, char* s);
@@ -414,7 +414,9 @@ static int cmd_handle_untagged (IMAP_DATA* idata)
       cmd_parse_fetch (idata, pn);
   }
   else if (ascii_strncasecmp ("CAPABILITY", s, 10) == 0)
-    cmd_parse_capabilities (idata, s);
+    cmd_parse_capability (idata, s);
+  else if (!ascii_strncasecmp ("OK [CAPABILITY", s, 14))
+    cmd_parse_capability (idata, imap_next_word (s));
   else if (ascii_strncasecmp ("LIST", s, 4) == 0)
     cmd_parse_list (idata, s);
   else if (ascii_strncasecmp ("LSUB", s, 4) == 0)
@@ -456,13 +458,16 @@ static int cmd_handle_untagged (IMAP_DATA* idata)
 
 /* cmd_parse_capabilities: set capability bits according to CAPABILITY
  *   response */
-static void cmd_parse_capabilities (IMAP_DATA* idata, char* s)
+static void cmd_parse_capability (IMAP_DATA* idata, char* s)
 {
   int x;
+  char* bracket;
 
   dprint (2, (debugfile, "Handling CAPABILITY\n"));
 
   s = imap_next_word (s);
+  if ((bracket = strchr (s, ']')))
+    *bracket = '\0';
   FREE(&idata->capstr);
   idata->capstr = safe_strdup (s);
 
index d5826b577cd88ed85e8ce8aa659f3c4387741174..8e88bd8ba64a6c576a76722710da453d46f0d5b4 100644 (file)
@@ -406,8 +406,8 @@ int imap_open_connection (IMAP_DATA* idata)
 
   if (ascii_strncasecmp ("* OK", idata->buf, 4) == 0)
   {
-    /* TODO: Parse new tagged CAPABILITY data (* OK [CAPABILITY...]) */
-    if (imap_check_capabilities (idata))
+    if (ascii_strncasecmp ("* OK [CAPABILITY", idata->buf, 16)
+        && imap_check_capabilities (idata))
       goto bail;
 #if defined(USE_SSL) || defined(USE_GNUTLS)
     /* Attempt STARTTLS if available and desired. */