diff options
| author | Glenn Morris | 2007-12-04 04:08:13 +0000 |
|---|---|---|
| committer | Glenn Morris | 2007-12-04 04:08:13 +0000 |
| commit | bb23c731767e4bd3103adcdc19f506e64cc62842 (patch) | |
| tree | 2759d43de81433e6edd889109b9149e5c9b4769f /lisp | |
| parent | 13b0ef0170f19f44b0aaca9cc180d9d609743a82 (diff) | |
| download | emacs-bb23c731767e4bd3103adcdc19f506e64cc62842.tar.gz emacs-bb23c731767e4bd3103adcdc19f506e64cc62842.zip | |
Move to ../password-cache.el.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/gnus/password.el | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/lisp/gnus/password.el b/lisp/gnus/password.el deleted file mode 100644 index 0d478774902..00000000000 --- a/lisp/gnus/password.el +++ /dev/null | |||
| @@ -1,141 +0,0 @@ | |||
| 1 | ;;; password.el --- Read passwords from user, possibly using a password cache. | ||
| 2 | |||
| 3 | ;; Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 | ||
| 4 | ;; Free Software Foundation, Inc. | ||
| 5 | |||
| 6 | ;; Author: Simon Josefsson <simon@josefsson.org> | ||
| 7 | ;; Created: 2003-12-21 | ||
| 8 | ;; Keywords: password cache passphrase key | ||
| 9 | |||
| 10 | ;; This file is part of GNU Emacs. | ||
| 11 | |||
| 12 | ;; GNU Emacs is free software; you can redistribute it and/or modify | ||
| 13 | ;; it under the terms of the GNU General Public License as published by | ||
| 14 | ;; the Free Software Foundation; either version 3, or (at your option) | ||
| 15 | ;; any later version. | ||
| 16 | |||
| 17 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 18 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 19 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 20 | ;; GNU General Public License for more details. | ||
| 21 | |||
| 22 | ;; You should have received a copy of the GNU General Public License | ||
| 23 | ;; along with GNU Emacs; see the file COPYING. If not, write to the | ||
| 24 | ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
| 25 | ;; Boston, MA 02110-1301, USA. | ||
| 26 | |||
| 27 | ;;; Commentary: | ||
| 28 | |||
| 29 | ;; Greatly influenced by pgg.el written by Daiki Ueno, with timer | ||
| 30 | ;; fixes for XEmacs by Katsumi Yamaoka. In fact, this is mostly just | ||
| 31 | ;; a rip-off. | ||
| 32 | ;; | ||
| 33 | ;; (password-read "Password? " "test") | ||
| 34 | ;; ;; Minibuffer prompt for password. | ||
| 35 | ;; => "foo" | ||
| 36 | ;; | ||
| 37 | ;; (password-cache-add "test" "foo") | ||
| 38 | ;; => nil | ||
| 39 | |||
| 40 | ;; Note the previous two can be replaced with: | ||
| 41 | ;; (password-read-and-add "Password? " "test") | ||
| 42 | ;; ;; Minibuffer prompt for password. | ||
| 43 | ;; => "foo" | ||
| 44 | ;; ;; "foo" is now cached with key "test" | ||
| 45 | |||
| 46 | |||
| 47 | ;; (password-read "Password? " "test") | ||
| 48 | ;; ;; No minibuffer prompt | ||
| 49 | ;; => "foo" | ||
| 50 | ;; | ||
| 51 | ;; (password-read "Password? " "test") | ||
| 52 | ;; ;; No minibuffer prompt | ||
| 53 | ;; => "foo" | ||
| 54 | ;; | ||
| 55 | ;; ;; Wait `password-cache-expiry' seconds. | ||
| 56 | ;; | ||
| 57 | ;; (password-read "Password? " "test") | ||
| 58 | ;; ;; Minibuffer prompt for password is back. | ||
| 59 | ;; => "foo" | ||
| 60 | |||
| 61 | ;;; Code: | ||
| 62 | |||
| 63 | (eval-when-compile | ||
| 64 | (require 'cl)) | ||
| 65 | |||
| 66 | (defcustom password-cache t | ||
| 67 | "Whether to cache passwords." | ||
| 68 | :group 'password | ||
| 69 | :type 'boolean) | ||
| 70 | |||
| 71 | (defcustom password-cache-expiry 16 | ||
| 72 | "How many seconds passwords are cached, or nil to disable expiring. | ||
| 73 | Whether passwords are cached at all is controlled by `password-cache'." | ||
| 74 | :group 'password | ||
| 75 | :type '(choice (const :tag "Never" nil) | ||
| 76 | (integer :tag "Seconds"))) | ||
| 77 | |||
| 78 | (defvar password-data (make-vector 7 0)) | ||
| 79 | |||
| 80 | (defun password-read-from-cache (key) | ||
| 81 | "Obtain passphrase for KEY from time-limited passphrase cache. | ||
| 82 | Custom variables `password-cache' and `password-cache-expiry' | ||
| 83 | regulate cache behavior." | ||
| 84 | (and password-cache | ||
| 85 | key | ||
| 86 | (symbol-value (intern-soft key password-data)))) | ||
| 87 | |||
| 88 | (defun password-read (prompt &optional key) | ||
| 89 | "Read password, for use with KEY, from user, or from cache if wanted. | ||
| 90 | KEY indicate the purpose of the password, so the cache can | ||
| 91 | separate passwords. The cache is not used if KEY is nil. It is | ||
| 92 | typically a string. | ||
| 93 | The variable `password-cache' control whether the cache is used." | ||
| 94 | (or (password-read-from-cache key) | ||
| 95 | (read-passwd prompt))) | ||
| 96 | |||
| 97 | (defun password-read-and-add (prompt &optional key) | ||
| 98 | "Read password, for use with KEY, from user, or from cache if wanted. | ||
| 99 | Then store the password in the cache. Uses `password-read' and | ||
| 100 | `password-cache-add'. | ||
| 101 | Custom variables `password-cache' and `password-cache-expiry' | ||
| 102 | regulate cache behavior." | ||
| 103 | (let ((password (password-read prompt key))) | ||
| 104 | (when (and password key) | ||
| 105 | (password-cache-add key password)) | ||
| 106 | password)) | ||
| 107 | |||
| 108 | (defun password-cache-remove (key) | ||
| 109 | "Remove password indexed by KEY from password cache. | ||
| 110 | This is typically run be a timer setup from `password-cache-add', | ||
| 111 | but can be invoked at any time to forcefully remove passwords | ||
| 112 | from the cache. This may be useful when it has been detected | ||
| 113 | that a password is invalid, so that `password-read' query the | ||
| 114 | user again." | ||
| 115 | (let ((password (symbol-value (intern-soft key password-data)))) | ||
| 116 | (when password | ||
| 117 | (if (fboundp 'clear-string) | ||
| 118 | (clear-string password) | ||
| 119 | (fillarray password ?_)) | ||
| 120 | (unintern key password-data)))) | ||
| 121 | |||
| 122 | (defun password-cache-add (key password) | ||
| 123 | "Add password to cache. | ||
| 124 | The password is removed by a timer after `password-cache-expiry' | ||
| 125 | seconds." | ||
| 126 | (when (and password-cache-expiry (null (intern-soft key password-data))) | ||
| 127 | (run-at-time password-cache-expiry nil | ||
| 128 | #'password-cache-remove | ||
| 129 | key)) | ||
| 130 | (set (intern key password-data) password) | ||
| 131 | nil) | ||
| 132 | |||
| 133 | (defun password-reset () | ||
| 134 | "Clear the password cache." | ||
| 135 | (interactive) | ||
| 136 | (fillarray password-data 0)) | ||
| 137 | |||
| 138 | (provide 'password) | ||
| 139 | |||
| 140 | ;;; arch-tag: ab160494-16c8-4c68-a4a1-73eebf6686e5 | ||
| 141 | ;;; password.el ends here | ||