X-Git-Url: https://cgit.sxemacs.org/?p=gnus;a=blobdiff_plain;f=lisp%2Fpgg.el;h=abb49a96193b6310cdfde2374f5bf42de4391d3c;hp=82a3805a358bae5220f52bcd7b42b9fc971d60aa;hb=125d88b46ad2efa065f06d5dac37a245b488985a;hpb=8420193b546192c91eea75b1850b2a41e3e1ac73 diff --git a/lisp/pgg.el b/lisp/pgg.el index 82a3805a3..abb49a961 100644 --- a/lisp/pgg.el +++ b/lisp/pgg.el @@ -1,6 +1,6 @@ ;;; pgg.el --- glue for the various PGP implementations. -;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/10/28 @@ -29,7 +29,7 @@ (require 'pgg-def) (require 'pgg-parse) -(autoload 'run-at-time "timer") +(require 'password) ;; Don't merge these two `eval-when-compile's. (eval-when-compile @@ -42,13 +42,6 @@ (require 'w3) (require 'url))) -;; Fixme: Avoid this and use mm-make-temp-file (especially for -;; something sensitive like pgp). -(defvar pgg-temporary-file-directory - (cond ((fboundp 'temp-directory) (temp-directory)) - ((boundp 'temporary-file-directory) temporary-file-directory) - ("/tmp/"))) - ;;; @ utility functions ;;; @@ -78,7 +71,8 @@ ,@body))) (defun pgg-temp-buffer-show-function (buffer) - (let ((window (split-window-vertically))) + (let ((window (or (get-buffer-window buffer 'visible) + (split-window-vertically)))) (set-window-buffer window buffer) (shrink-window-if-larger-than-buffer window))) @@ -94,27 +88,17 @@ (set-buffer standard-output) (insert-buffer-substring pgg-errors-buffer))))) -(defvar pgg-passphrase-cache (make-vector 7 0)) - (defun pgg-read-passphrase (prompt &optional key) - (or (and pgg-cache-passphrase - key (setq key (pgg-truncate-key-identifier key)) - (symbol-value (intern-soft key pgg-passphrase-cache))) - (read-passwd prompt))) + (when pgg-cache-passphrase + (password-read prompt (setq key (pgg-truncate-key-identifier key))))) (defun pgg-add-passphrase-cache (key passphrase) - (setq key (pgg-truncate-key-identifier key)) - (set (intern key pgg-passphrase-cache) - passphrase) - (run-at-time pgg-passphrase-cache-expiry nil - #'pgg-remove-passphrase-cache - key)) + (let ((password-cache-expiry pgg-passphrase-cache-expiry)) + (password-cache-add (setq key (pgg-truncate-key-identifier key)) + passphrase))) (defun pgg-remove-passphrase-cache (key) - (let ((passphrase (symbol-value (intern-soft key pgg-passphrase-cache)))) - (when passphrase - (fillarray passphrase ?_) - (unintern key pgg-passphrase-cache)))) + (password-cache-remove key)) (defmacro pgg-convert-lbt-region (start end lbt) `(let ((pgg-conversion-end (set-marker (make-marker) ,end))) @@ -148,6 +132,19 @@ `(with-current-buffer pgg-output-buffer (if (zerop (buffer-size)) nil ,@body t))) +(defalias 'pgg-make-temp-file + (if (fboundp 'make-temp-file) + 'make-temp-file + (lambda (prefix &optional dir-flag) + (let ((file (expand-file-name + (make-temp-name prefix) + (if (fboundp 'temp-directory) + (temp-directory) + temporary-file-directory)))) + (if dir-flag + (make-directory file)) + file)))) + ;;; @ interface functions ;;; @@ -185,15 +182,6 @@ the region." "Decrypt the current region between START and END." (interactive "r") (let* ((buf (current-buffer)) - (packet (cdr (assq 1 (with-temp-buffer - (insert-buffer-substring buf) - (pgg-decode-armor-region - (point-min) (point-max)))))) - (key (cdr (assq 'key-identifier packet))) - (pgg-default-user-id - (if key - (concat "0x" (pgg-truncate-key-identifier key)) - pgg-default-user-id)) (status (pgg-save-coding-system start end (pgg-invoke "decrypt-region" (or pgg-scheme pgg-default-scheme) @@ -388,4 +376,5 @@ within the region." (provide 'pgg) +;;; arch-tag: 9cc705dd-1e6a-4c90-8dce-c3561f9a2cf4 ;;; pgg.el ends here