Allow specifying the login method for nnimap
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 25 Dec 2012 11:40:14 +0000 (12:40 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 25 Dec 2012 11:40:14 +0000 (12:40 +0100)
* nnimap.el (nnimap-authenticator): Expand to allow specifying the
login methods.
(nnimap-login): Respect the `nnimap-authenticator' variable.

lisp/ChangeLog
lisp/nnimap.el
texi/ChangeLog
texi/gnus.texi

index 69558f9..b62b1ad 100644 (file)
@@ -1,5 +1,9 @@
 2012-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
+       * nnimap.el (nnimap-authenticator): Expand to allow specifying the
+       login methods.
+       (nnimap-login): Respect the `nnimap-authenticator' variable.
+
        * gnus-sum.el (gnus-summary-push-marks-to-backend): Push the complete
        mark state when moving articles.  Otherwise unticked articles will get
        their ticks back after moving.
index 3277a7f..968d1ee 100644 (file)
@@ -100,7 +100,8 @@ Uses the same syntax as `nnmail-split-methods'.")
 
 (defvoo nnimap-authenticator nil
   "How nnimap authenticate itself to the server.
-Possible choices are nil (use default methods) or `anonymous'.")
+Possible choices are nil (use default methods), `anonymous',
+`login', `plain' and `cram-md5'.")
 
 (defvoo nnimap-expunge t
   "If non-nil, expunge articles after deleting them.
@@ -498,9 +499,13 @@ textual parts.")
    ;; round trips than CRAM-MD5, and it's less likely to be buggy),
    ;; and we're using an encrypted connection.
    ((and (not (nnimap-capability "LOGINDISABLED"))
-        (eq (nnimap-stream-type nnimap-object) 'tls))
+        (eq (nnimap-stream-type nnimap-object) 'tls)
+        (or (null nnimap-authenticator)
+            (eq nnimap-authenticator 'login)))
     (nnimap-command "LOGIN %S %S" user password))
-   ((nnimap-capability "AUTH=CRAM-MD5")
+   ((and (nnimap-capability "AUTH=CRAM-MD5")
+        (or (null nnimap-authenticator)
+            (eq nnimap-authenticator 'cram-md5)))
     (erase-buffer)
     (let ((sequence (nnimap-send-command "AUTHENTICATE CRAM-MD5"))
          (challenge (nnimap-wait-for-line "^\\+\\(.*\\)\n")))
@@ -513,9 +518,13 @@ textual parts.")
                               (base64-decode-string challenge))))
        "\r\n"))
       (nnimap-wait-for-response sequence)))
-   ((not (nnimap-capability "LOGINDISABLED"))
+   ((and (not (nnimap-capability "LOGINDISABLED"))
+        (or (null nnimap-authenticator)
+            (eq nnimap-authenticator 'login)))
     (nnimap-command "LOGIN %S %S" user password))
-   ((nnimap-capability "AUTH=PLAIN")
+   ((and (nnimap-capability "AUTH=PLAIN")
+        (or (null nnimap-authenticator)
+            (eq nnimap-authenticator 'plain)))
     (nnimap-command
      "AUTHENTICATE PLAIN %s"
      (base64-encode-string
index cd3182b..8a184e8 100644 (file)
@@ -1,3 +1,8 @@
+2012-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Customizing the IMAP Connection): Mention the other
+       authenticators.
+
 2012-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
        * gnus.texi (Browse Foreign Server): Document
index 8fb5904..edbae06 100644 (file)
@@ -14208,7 +14208,11 @@ what you need.
 
 @item nnimap-authenticator
 Some @acronym{IMAP} servers allow anonymous logins.  In that case,
-this should be set to @code{anonymous}.
+this should be set to @code{anonymous}.  If this variable isn't set,
+the normal login methods will be used.  If you wish to specify a
+specific login method to be used, you can set this variable to either
+@code{login} (the traditional @acronym{IMAP} login method),
+@code{plain} or @code{cram-md5}.
 
 @item nnimap-expunge
 If non-@code{nil}, expunge articles after deleting them.  This is always done