]> granicus.if.org Git - neomutt/commitdiff
imap_authenticators -> slist
authorRichard Russon <rich@flatcap.org>
Mon, 10 Jun 2019 18:51:17 +0000 (19:51 +0100)
committerRichard Russon <rich@flatcap.org>
Wed, 12 Jun 2019 23:23:35 +0000 (00:23 +0100)
Convert `$imap_authenticators` to use the new DT_SLIST type (string list).

imap/auth.c
imap/imap.h
init.h

index 3b28d4cd006b41bf55d08e3b1684b53433be6b81..067eab6454075dbc3f219e8e1979f455925df681 100644 (file)
@@ -34,7 +34,7 @@
 #include "auth.h"
 
 /* These Config Variables are only used in imap/auth.c */
-char *C_ImapAuthenticators; ///< Config: (imap) List of allowed IMAP authentication methods
+struct Slist *C_ImapAuthenticators; ///< Config: (imap) List of allowed IMAP authentication methods
 
 /**
  * imap_authenticators - Accepted authentication methods
@@ -68,40 +68,29 @@ int imap_authenticate(struct ImapAccountData *adata)
 {
   int rc = IMAP_AUTH_FAILURE;
 
-  if (C_ImapAuthenticators)
+  if (C_ImapAuthenticators && (C_ImapAuthenticators->count > 0))
   {
     mutt_debug(LL_DEBUG2, "Trying user-defined imap_authenticators\n");
 
     /* Try user-specified list of authentication methods */
-    char *methods = mutt_str_strdup(C_ImapAuthenticators);
-    char *delim = NULL;
-
-    for (const char *method = methods; method; method = delim)
+    struct ListNode *np = NULL;
+    STAILQ_FOREACH(np, &C_ImapAuthenticators->head, entries)
     {
-      delim = strchr(method, ':');
-      if (delim)
-        *delim++ = '\0';
-      if (!method[0])
-        continue;
-
-      mutt_debug(LL_DEBUG2, "Trying method %s\n", method);
+      mutt_debug(LL_DEBUG2, "Trying method %s\n", np->data);
 
       for (size_t i = 0; i < mutt_array_size(imap_authenticators); i++)
       {
         const struct ImapAuth *auth = &imap_authenticators[i];
-        if (!auth->method || (mutt_str_strcasecmp(auth->method, method) == 0))
+        if (!auth->method || (mutt_str_strcasecmp(auth->method, np->data) == 0))
         {
-          rc = auth->authenticate(adata, method);
+          rc = auth->authenticate(adata, np->data);
           if (rc == IMAP_AUTH_SUCCESS)
           {
-            FREE(&methods);
             return rc;
           }
         }
       }
     }
-
-    FREE(&methods);
   }
   else
   {
index 7eb183e0e3ab60219d0679eb3fd8cbb53a6f2a07..9b8eb93b5abfd509a37dd24e51d04978a7fa63b6 100644 (file)
@@ -62,7 +62,7 @@ struct PatternHead;
 struct stat;
 
 /* These Config Variables are only used in imap/auth.c */
-extern char *C_ImapAuthenticators;
+extern struct Slist *C_ImapAuthenticators;
 
 /* These Config Variables are only used in imap/imap.c */
 extern bool C_ImapIdle;
diff --git a/init.h b/init.h
index 2fe76dacf0404993198ef614032887b17c0cbccc..709796709951223b8734dd719ad231fd84698abd 100644 (file)
--- a/init.h
+++ b/init.h
@@ -1541,7 +1541,7 @@ struct ConfigDef MuttVars[] = {
   ** list.
   */
 #ifdef USE_IMAP
-  { "imap_authenticators", DT_STRING, &C_ImapAuthenticators, 0 },
+  { "imap_authenticators", DT_SLIST|SLIST_SEP_COLON, &C_ImapAuthenticators, 0 },
   /*
   ** .pp
   ** This is a colon-delimited list of authentication methods NeoMutt may