X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fpassword-cache.el;h=9f5c18f3415e70c9bf5a47ecee917b9f04c86de1;hb=e2c1d571d8a1c38be0eab90ac59fe3a916ffa62d;hp=301201ea0ebe8a5450831016b99f2072f82f6b8c;hpb=9a8731d6dea8021a10dec1b42f382609336a9aa9;p=gnus diff --git a/lisp/password-cache.el b/lisp/password-cache.el index 301201ea0..9f5c18f34 100644 --- a/lisp/password-cache.el +++ b/lisp/password-cache.el @@ -1,7 +1,6 @@ ;;; password-cache.el --- Read passwords, possibly using a password cache. -;; Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -;; Free Software Foundation, Inc. +;; Copyright (C) 1999-2000, 2003-2012 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Created: 2003-12-21 @@ -51,11 +50,15 @@ ;;; Code: +;; Options are autoloaded since they are used by eg mml-sec.el. + +;;;###autoload (defcustom password-cache t "Whether to cache passwords." :group 'password :type 'boolean) +;;;###autoload (defcustom password-cache-expiry 16 "How many seconds passwords are cached, or nil to disable expiring. Whether passwords are cached at all is controlled by `password-cache'." @@ -73,6 +76,13 @@ regulate cache behavior." key (symbol-value (intern-soft key password-data)))) +;;;###autoload +(defun password-in-cache-p (key) + "Check if KEY is in the cache." + (and password-cache + key + (intern-soft key password-data))) + (defun password-read (prompt &optional key) "Read password, for use with KEY, from user, or from cache if wanted. KEY indicate the purpose of the password, so the cache can @@ -101,17 +111,19 @@ remove incorrect ones from the cache." (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', +This is typically run by a timer setup from `password-cache-add', but can be invoked at any time to forcefully remove passwords from the cache. This may be useful when it has been detected that a password is invalid, so that `password-read' query the user again." - (let ((password (symbol-value (intern-soft key password-data)))) - (when password - (if (fboundp 'clear-string) - (clear-string password) - (fillarray password ?_)) - (unintern key password-data)))) + (let ((sym (intern-soft key password-data))) + (when sym + (let ((password (symbol-value sym))) + (when (stringp password) + (if (fboundp 'clear-string) + (clear-string password) + (fillarray password ?_))) + (unintern key password-data))))) (defun password-cache-add (key password) "Add password to cache. @@ -130,5 +142,4 @@ The password is removed by a timer after `password-cache-expiry' seconds." (provide 'password-cache) -;; arch-tag: ab160494-16c8-4c68-a4a1-73eebf6686e5 ;;; password-cache.el ends here