mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-05 19:31:02 -08:00
Merge changes made in Gnus trunk.
auth.texi (Overview, Help for users, Help for developers): Update docs. (Help for users): Talk about spaces. sieve-manage.el: Autoload `auth-source-search'. (sieve-sasl-auth): Use it. nnimap.el: Autoload `auth-source-forget+'. (nnimap-open-connection-1): Use it if the connection fails. auth-source.el: Require `password-cache'. (auth-source-hide-passwords, auth-source-cache): Remove and mark obsolete. (auth-source-magic): Marker for `password-cache' keys. (auth-source-do-cache): Update docstring. (auth-source-search): Use and check cache. (auth-source-forget-all-cached, auth-source-remember) (auth-source-recall, auth-source-forget, auth-source-forget+) (auth-source-specmatchp): Caching support functions. (auth-source-forget-user-or-password, auth-source-forget-all-cached): Remove and obsolete. (auth-source-user-or-password): Remove caching to further discourage using it. Always hide passwords. password-cache.el (password-cache-remove): Accept secrets that are not strings. mail-source.el: Autoload `auth-source-search'. (mail-source-keyword-map): Note order matters. (mail-source-set-1): Get all the mail-source source values and defaults and search auth-source on those if needed. This can all probably be simplified. nnimap.el: Autoload `auth-source-search'. (nnimap-credentials): Use it. (nnimap-open-connection-1): Ask for the virtual server and physical address in one shot. nntp.el: Autoload `auth-source-search'. (nntp-send-authinfo): Use it. Note TODO. auth-source.el (auth-source-secrets-search, auth-source-user-or-password): Use `append' instead of `nconc'. (auth-source-user-or-password): Build return list better and protect against nil :secret. auth-source.el (top): Require 'eieio unconditionally. Autoload `secrets-get-attributes' instead of `secrets-get-attribute'. (auth-source-secrets-search): Limit search when `max' is greater than number of results. auth-source.el (auth-source-secrets-search): Add examples. auth-source.el (auth-sources): Allow for simpler defaults for Secrets API with a string "secrets:collection-name" and with 'default. (auth-source-backend-parse): Parse "secrets:collection-name" and 'default. Recurse on parses instead of repeating code. Use the Secrets API is the source is not nil and 'ignore otherwise. Emit a message when ignoring a source. (auth-source-search): List ignored search keys at the top level. (auth-source-netrc-create): Use `case' instead of `cond'. (auth-source-secrets-search): Created with TODOs. (auth-source-secrets-create): Created with TODOs. (auth-source-retrieve, auth-source-create, auth-source-delete) (auth-source-protocol-defaults, auth-source-user-or-password-imap) (auth-source-user-or-password-pop3, auth-source-user-or-password-ssh) (auth-source-user-or-password-sftp) (auth-source-user-or-password-smtp): Removed. (auth-source-user-or-password): Deprecated and modified to be a wrapper around `auth-source-search'. Not tested thoroughly. auth-source.el: Bring in assoc and eioeio libraries. (secrets-enabled): New variable to track the status of the Secrets API. (auth-source-backend): New EIOEIO class to represent a backend. (auth-source-creation-defaults): New variable to set prompt defaults during token creation (see the `auth-source-search' docstring for details). (auth-sources): Simplify to allow a simple string as a netrc backend spec. (auth-source-backend-parse): Parse a backend from an `auth-sources' spec. (auth-source-backend-parse-parameters): Fill in the backend parameters. (auth-source-search): Main auth-source API entry point. (auth-source-delete): Wrapper around `auth-source-search' for deletion. (auth-source-search-collection): Helper function for searching. (auth-source-netrc-parse, auth-source-netrc-normalize) (auth-source-netrc-search, auth-source-netrc-create): Netrc backend. Supports search, create, and delete. (auth-source-secrets-search, auth-source-secrets-create): Secrets API backend stubs. (auth-source-user-or-password): Call `auth-source-search' but it's not ready yet.
This commit is contained in:
parent
e730aabed5
commit
b8e0f0cd20
10 changed files with 1189 additions and 461 deletions
|
|
@ -32,7 +32,7 @@
|
|||
(eval-when-compile
|
||||
(require 'cl)
|
||||
(require 'imap))
|
||||
(autoload 'auth-source-user-or-password "auth-source")
|
||||
(autoload 'auth-source-search "auth-source")
|
||||
(autoload 'pop3-movemail "pop3")
|
||||
(autoload 'pop3-get-message-count "pop3")
|
||||
(autoload 'nnheader-cancel-timer "nnheader")
|
||||
|
|
@ -332,6 +332,7 @@ Common keywords should be listed here.")
|
|||
(:prescript)
|
||||
(:prescript-delay)
|
||||
(:postscript)
|
||||
;; note server and port need to come before user and password
|
||||
(:server (getenv "MAILHOST"))
|
||||
(:port 110)
|
||||
(:user (or (user-login-name) (getenv "LOGNAME") (getenv "USER")))
|
||||
|
|
@ -345,6 +346,7 @@ Common keywords should be listed here.")
|
|||
(:subdirs ("cur" "new"))
|
||||
(:function))
|
||||
(imap
|
||||
;; note server and port need to come before user and password
|
||||
(:server (getenv "MAILHOST"))
|
||||
(:port)
|
||||
(:stream)
|
||||
|
|
@ -417,42 +419,66 @@ the `mail-source-keyword-map' variable."
|
|||
(put 'mail-source-bind 'lisp-indent-function 1)
|
||||
(put 'mail-source-bind 'edebug-form-spec '(sexp body))
|
||||
|
||||
;; TODO: use the list format for auth-source-user-or-password modes
|
||||
(defun mail-source-set-1 (source)
|
||||
(let* ((type (pop source))
|
||||
(defaults (cdr (assq type mail-source-keyword-map)))
|
||||
default value keyword auth-info user-auth pass-auth)
|
||||
(defaults (cdr (assq type mail-source-keyword-map)))
|
||||
(search '(:max 1))
|
||||
found default value keyword auth-info user-auth pass-auth)
|
||||
|
||||
;; append to the search the useful info from the source and the defaults:
|
||||
;; user, host, and port
|
||||
|
||||
;; the msname is the mail-source parameter
|
||||
(dolist (msname '(:server :user :port))
|
||||
;; the asname is the auth-source parameter
|
||||
(let* ((asname (case msname
|
||||
(:server :host) ; auth-source uses :host
|
||||
(t msname)))
|
||||
;; this is the mail-source default
|
||||
(msdef1 (or (plist-get source msname)
|
||||
(nth 1 (assoc msname defaults))))
|
||||
;; ...evaluated
|
||||
(msdef (mail-source-value msdef1)))
|
||||
(setq search (append (list asname
|
||||
(if msdef msdef t))
|
||||
search))))
|
||||
;; if the port is unknown yet, get it from the mail-source type
|
||||
(unless (plist-get search :port)
|
||||
(setq search (append (list :port (symbol-name type)))))
|
||||
|
||||
(while (setq default (pop defaults))
|
||||
;; for each default :SYMBOL, set SYMBOL to the plist value for :SYMBOL
|
||||
;; using `mail-source-value' to evaluate the plist value
|
||||
(set (mail-source-strip-keyword (setq keyword (car default)))
|
||||
;; note the following reasons for this structure:
|
||||
;; 1) the auth-sources user and password override everything
|
||||
;; 2) it avoids macros, so it's cleaner
|
||||
;; 3) it falls through to the mail-sources and then default values
|
||||
(cond
|
||||
((and
|
||||
(eq keyword :user)
|
||||
(setq user-auth
|
||||
(nth 0 (auth-source-user-or-password
|
||||
'("login" "password")
|
||||
;; this is "host" in auth-sources
|
||||
(if (boundp 'server) (symbol-value 'server) "")
|
||||
type))))
|
||||
user-auth)
|
||||
((and
|
||||
(eq keyword :password)
|
||||
(setq pass-auth
|
||||
(nth 1
|
||||
(auth-source-user-or-password
|
||||
'("login" "password")
|
||||
;; this is "host" in auth-sources
|
||||
(if (boundp 'server) (symbol-value 'server) "")
|
||||
type))))
|
||||
pass-auth)
|
||||
(t (if (setq value (plist-get source keyword))
|
||||
(mail-source-value value)
|
||||
(mail-source-value (cadr default)))))))))
|
||||
;; note the following reasons for this structure:
|
||||
;; 1) the auth-sources user and password override everything
|
||||
;; 2) it avoids macros, so it's cleaner
|
||||
;; 3) it falls through to the mail-sources and then default values
|
||||
(cond
|
||||
((and
|
||||
(eq keyword :user)
|
||||
(setq user-auth (plist-get
|
||||
;; cache the search result in `found'
|
||||
(or found
|
||||
(setq found (nth 0 (apply 'auth-source-search
|
||||
search))))
|
||||
:user)))
|
||||
user-auth)
|
||||
((and
|
||||
(eq keyword :password)
|
||||
(setq pass-auth (plist-get
|
||||
;; cache the search result in `found'
|
||||
(or found
|
||||
(setq found (nth 0 (apply 'auth-source-search
|
||||
search))))
|
||||
:secret)))
|
||||
;; maybe set the password to the return of the :secret function
|
||||
(if (functionp pass-auth)
|
||||
(setq pass-auth (funcall pass-auth))
|
||||
pass-auth))
|
||||
(t (if (setq value (plist-get source keyword))
|
||||
(mail-source-value value)
|
||||
(mail-source-value (cadr default)))))))))
|
||||
|
||||
(eval-and-compile
|
||||
(defun mail-source-bind-common-1 ()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue