Synch with Gnus trunk.

2009-09-10  Teodor Zlatanov  <tzz@lifelogs.com>

 * net/imap.el (imap-interactive-login): Better messages.
 (imap-open): Fix bug with renamed buffer on reconnect.
 (imap-authenticate): Add buffer-local imap-last-authenticator variable
 for easier debugging and cleaner code.  On successful (guessed based on
 server capabilities) secondary authentication, set imap-state
 correctly.
 (imap-last-authenticator): Define imap-last-authenticator as a variable
 to avoid warnings.
This commit is contained in:
Katsumi Yamaoka 2009-09-28 12:09:13 +00:00
parent 54c72c3108
commit ffa894dbde
2 changed files with 35 additions and 11 deletions

View file

@ -1108,6 +1108,17 @@
* loadup.el (define-key-rebound-commands): Don't bother fiddling with
define-key-rebound-commands and precompute-menubar-bindings.
2009-09-10 Teodor Zlatanov <tzz@lifelogs.com>
* net/imap.el (imap-interactive-login): Better messages.
(imap-open): Fix bug with renamed buffer on reconnect.
(imap-authenticate): Add buffer-local imap-last-authenticator variable
for easier debugging and cleaner code. On successful (guessed based on
server capabilities) secondary authentication, set imap-state
correctly.
(imap-last-authenticator): Define imap-last-authenticator as a variable
to avoid warnings.
2009-09-10 Glenn Morris <rgm@gnu.org>
* pcvs.el (cvs-mode-find-file): Use forward-line rather than goto-line.

View file

@ -380,6 +380,7 @@ basis.")
(defvar imap-port nil)
(defvar imap-username nil)
(defvar imap-password nil)
(defvar imap-last-authenticator nil)
(defvar imap-calculate-literal-size-first nil)
(defvar imap-state 'closed
"IMAP state.
@ -872,25 +873,26 @@ Returns t if login was successful, nil otherwise."
(while (or (not user) (not passwd))
(setq user (or imap-username
(read-from-minibuffer
(concat "IMAP username for " imap-server
(concat "imap: username for " imap-server
" (using stream `" (symbol-name imap-stream)
"'): ")
(or user imap-default-user))))
(setq passwd (or imap-password
(read-passwd
(concat "IMAP password for " user "@"
(concat "imap: password for " user "@"
imap-server " (using authenticator `"
(symbol-name imap-auth) "'): "))))
(when (and user passwd)
(if (funcall loginfunc user passwd)
(progn
(message "imap: Login successful...")
(setq ret t
imap-username user)
(when (and (not imap-password)
(or imap-store-password
(y-or-n-p "Store password for this session? ")))
(y-or-n-p "imap: Store password for this IMAP session? ")))
(setq imap-password passwd)))
(message "Login failed...")
(message "imap: Login failed...")
(setq passwd nil)
(setq imap-password nil)
(sit-for 1))))
@ -1160,7 +1162,10 @@ necessary. If nil, the buffer name is generated."
buffer
(buffer-name buffer))))
(kill-buffer buffer)
(rename-buffer name))
(rename-buffer name)
;; set the passed buffer to the current one,
;; so that (imap-opened buffer) later will work
(setq buffer (current-buffer)))
(message "imap: Reconnecting with stream `%s'...done"
stream)
(setq imap-stream stream)
@ -1173,6 +1178,7 @@ necessary. If nil, the buffer name is generated."
(setq streams nil))))))
(when (imap-opened buffer)
(setq imap-mailbox-data (make-vector imap-mailbox-prime 0)))
;; (debug "opened+state+auth+buffer" (imap-opened buffer) imap-state imap-auth buffer)
(when imap-stream
buffer))))
@ -1217,25 +1223,32 @@ password is remembered in the buffer."
(eq imap-state 'examine))
(make-local-variable 'imap-username)
(make-local-variable 'imap-password)
(if user (setq imap-username user))
(if passwd (setq imap-password passwd))
(make-local-variable 'imap-last-authenticator)
(when user (setq imap-username user))
(when passwd (setq imap-password passwd))
(if imap-auth
(and (funcall (nth 2 (assq imap-auth
imap-authenticator-alist)) (current-buffer))
(and (setq imap-last-authenticator
(assq imap-auth imap-authenticator-alist))
(funcall (nth 2 imap-last-authenticator) (current-buffer))
(setq imap-state 'auth))
;; Choose authenticator.
(let ((auths imap-authenticators)
auth)
(while (setq auth (pop auths))
;; OK to use authenticator?
(when (funcall (nth 1 (assq auth imap-authenticator-alist)) (current-buffer))
(setq imap-last-authenticator
(assq auth imap-authenticator-alist))
(when (funcall (nth 1 imap-last-authenticator) (current-buffer))
(message "imap: Authenticating to `%s' using `%s'..."
imap-server auth)
(setq imap-auth auth)
(if (funcall (nth 2 (assq auth imap-authenticator-alist)) (current-buffer))
(if (funcall (nth 2 imap-last-authenticator) (current-buffer))
(progn
(message "imap: Authenticating to `%s' using `%s'...done"
imap-server auth)
;; set imap-state correctly on successful auth attempt
(setq imap-state 'auth)
;; stop iterating through the authenticator list
(setq auths nil))
(message "imap: Authenticating to `%s' using `%s'...failed"
imap-server auth)))))