Function: auth-source-netrc-saver
auth-source-netrc-saver is a byte-compiled function defined in
auth-source.el.gz.
Signature
(auth-source-netrc-saver FILE ADD)
Documentation
Save a line ADD in FILE, prompting along the way.
Respects auth-source-save-behavior. Uses
auth-source-netrc-cache to avoid prompting more than once.
Source Code
;; Defined in /usr/src/emacs/lisp/auth-source.el.gz
(defun auth-source-netrc-saver (file add)
"Save a line ADD in FILE, prompting along the way.
Respects `auth-source-save-behavior'. Uses
`auth-source-netrc-cache' to avoid prompting more than once."
(let* ((key (format "%s %s" file (rfc2104-hash 'md5 64 16 file add)))
(cached (assoc key auth-source-netrc-cache)))
(if cached
(auth-source-do-trivia
"auth-source-netrc-saver: found previous run for key %s, returning"
key)
(with-temp-buffer
(when (file-exists-p file)
(insert-file-contents file))
(when auth-source-gpg-encrypt-to
;; (see bug#7487) making `epa-file-encrypt-to' local to
;; this buffer lets epa-file skip the key selection query
;; (see the `local-variable-p' check in
;; `epa-file-write-region').
(unless (local-variable-p 'epa-file-encrypt-to (current-buffer))
(make-local-variable 'epa-file-encrypt-to))
(if (listp auth-source-gpg-encrypt-to)
(setq epa-file-encrypt-to auth-source-gpg-encrypt-to)))
;; we want the new data to be found first, so insert at beginning
(goto-char (point-min))
;; Ask AFTER we've successfully opened the file.
(let ((prompt (format "Save auth info to file %s? " file))
(done (not (eq auth-source-save-behavior 'ask)))
(bufname "*auth-source Help*")
k)
(while (not done)
(setq k (auth-source-read-char-choice prompt '(?y ?n ?N ?e ??)))
(cl-case k
(?y (setq done t))
(?? (save-excursion
(with-output-to-temp-buffer bufname
(princ
(concat "(y)es, save\n"
"(n)o but use the info\n"
"(N)o and don't ask to save again\n"
"(e)dit the line\n"
"(?) for help as you can see.\n"))
;; Why? Doesn't with-output-to-temp-buffer already do
;; the exact same thing anyway? --Stef
(set-buffer standard-output)
(help-mode))))
(?n (setq add ""
done t))
(?N
(setq add ""
done t)
(customize-save-variable 'auth-source-save-behavior nil))
(?e (setq add (read-string "Line to add: " add)))
(t nil)))
(when (get-buffer-window bufname)
(delete-window (get-buffer-window bufname)))
;; Make sure the info is not saved.
(when (null auth-source-save-behavior)
(setq add ""))
(when (< 0 (length add))
(progn
(unless (bolp)
(insert "\n"))
(insert add "\n")
(write-region (point-min) (point-max) file nil 'silent)
;; Make the .authinfo file non-world-readable.
(set-file-modes file #o600)
(auth-source-do-debug
"auth-source-netrc-create: wrote 1 new line to %s"
file)
(message "Saved new authentication information to %s" file)
nil))))
(auth-source--aput auth-source-netrc-cache key "ran"))))