;;; password.el --- Read passwords from user, possibly using a password cache.
-;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
;; Author: Simon Josefsson <simon@josefsson.org>
;; Created: 2003-12-21
;;
;; (password-cache-add "test" "foo")
;; => nil
-;;
+
+;; Note the previous two can be replaced with:
+;; (password-read-and-add "Password? " "test")
+;; ;; Minibuffer prompt for password.
+;; => "foo"
+;; ;; "foo" is now cached with key "test"
+
+
;; (password-read "Password? " "test")
;; ;; No minibuffer prompt
;; => "foo"
;;; Code:
-(if (featurep 'xemacs)
- (require 'run-at-time)
- (autoload 'run-at-time "timer"))
+(when (featurep 'xemacs)
+ (require 'timer-funcs))
(eval-when-compile
(require 'cl))
(symbol-value (intern-soft key password-data)))
(read-passwd prompt)))
+(defun password-read-and-add (prompt &optional key)
+ "Read password, for use with KEY, from user, or from cache if wanted.
+Then store the password in the cache. Uses `password-read' and
+`password-cache-add'."
+ (let ((password (password-read prompt key)))
+ (when (and password key)
+ (password-cache-add key password))
+ password))
+
(defun password-cache-remove (key)
"Remove password indexed by KEY from password cache.
This is typically run be a timer setup from `password-cache-add',
"Add password to cache.
The password is removed by a timer after `password-cache-expiry'
seconds."
- (set (intern key password-data) password)
- (when password-cache-expiry
+ (when (and password-cache-expiry (null (intern-soft key password-data)))
(run-at-time password-cache-expiry nil
#'password-cache-remove
key))
+ (set (intern key password-data) password)
nil)
(provide 'password)