]> git.eshelyaron.com Git - emacs.git/commitdiff
Make xoauth2 auth fail when a smtp server replies 334 (Bug#78366)
authorXiyue Deng <manphiz@gmail.com>
Fri, 16 May 2025 09:48:52 +0000 (02:48 -0700)
committerEshel Yaron <me@eshelyaron.com>
Tue, 27 May 2025 14:34:47 +0000 (16:34 +0200)
* lisp/mail/smtpmail.el (smtpmail-try-auth-method): Throw error 535
when receiving a "334 server challenge" reply.

(cherry picked from commit 53371c959462a677a29ee869b3b6627facf3ed79)

lisp/mail/smtpmail.el

index 7d733e57beb74194d78c2838f502a6aa8d0f9a26..eeec7709376914243e2e29303720a5e15c47680f 100644 (file)
@@ -642,11 +642,21 @@ USER and PASSWORD should be non-nil."
 
 (cl-defmethod smtpmail-try-auth-method
   (process (_mech (eql 'xoauth2)) user password)
-  (smtpmail-command-or-throw
-   process
-   (concat "AUTH XOAUTH2 "
-           (base64-encode-string
-            (concat "user=" user "\1auth=Bearer " password "\1\1") t))))
+  (let ((ret (smtpmail-command-or-throw
+              process
+              (concat "AUTH XOAUTH2 "
+                      (base64-encode-string
+                       (concat "user=" user "\1auth=Bearer " password "\1\1")
+                       t)))))
+    (if (eq (car ret) 334)
+        ;; When a server returns 334 server challenge, it usually means
+        ;; the credentials it received were wrong (e.g. was an actual
+        ;; password instead of an access token).  In such a case, we
+        ;; should return a string with 535 to indicate a failure so that
+        ;; smtpmail will try other authentication mechanisms.  See also
+        ;; https://debbugs.gnu.org/78366.
+        (throw 'done "535 5.7.8 Authentication credentials invalid")
+      ret)))
 
 (defun smtpmail-response-code (string)
   (when string