X-Git-Url: https://cgit.sxemacs.org/?p=gnus;a=blobdiff_plain;f=lisp%2Fpgg.el;h=abb49a96193b6310cdfde2374f5bf42de4391d3c;hp=0f686d6d62568931ab25608ab73671ffca19506f;hb=125d88b46ad2efa065f06d5dac37a245b488985a;hpb=f70a95edd4d8b2d4413e2b64dce83b0dfde38d93 diff --git a/lisp/pgg.el b/lisp/pgg.el index 0f686d6d6..abb49a961 100644 --- a/lisp/pgg.el +++ b/lisp/pgg.el @@ -1,47 +1,47 @@ ;;; pgg.el --- glue for the various PGP implementations. -;; Copyright (C) 1999,2000 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/10/28 ;; Keywords: PGP -;; This file is part of SEMI (Secure Emacs MIME Interface). +;; This file is part of GNU Emacs. -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. - ;;; Commentary: -;; ;;; Code: (require 'pgg-def) (require 'pgg-parse) +(require 'password) +;; Don't merge these two `eval-when-compile's. +(eval-when-compile + (require 'cl)) +;; Fixme: This would be better done with an autoload for +;; `url-insert-file-contents', and the url stuff rationalized. +;; (`locate-library' can say whether the url code is available.) (eval-when-compile (ignore-errors (require 'w3) (require 'url))) -(defvar pgg-temporary-file-directory - (cond ((fboundp 'temp-directory) (temp-directory)) - ((boundp 'temporary-file-directory) temporary-file-directory) - ("/tmp/"))) - ;;; @ utility functions ;;; @@ -71,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))) @@ -87,35 +88,17 @@ (set-buffer standard-output) (insert-buffer-substring pgg-errors-buffer))))) -(defvar pgg-passphrase-cache (make-vector 7 0)) - -(defvar pgg-read-passphrase nil) (defun pgg-read-passphrase (prompt &optional key) - (if (not pgg-read-passphrase) - (if (functionp 'read-passwd) - (setq pgg-read-passphrase 'read-passwd) - (if (load "passwd" t) - (setq pgg-read-passphrase 'read-passwd) - (autoload 'ange-ftp-read-passwd "ange-ftp") - (setq pgg-read-passphrase 'ange-ftp-read-passwd)))) - (or (and pgg-cache-passphrase - key (setq key (pgg-truncate-key-identifier key)) - (symbol-value (intern-soft key pgg-passphrase-cache))) - (funcall pgg-read-passphrase 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))) @@ -149,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 ;;; @@ -186,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 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) @@ -389,4 +376,5 @@ within the region." (provide 'pgg) +;;; arch-tag: 9cc705dd-1e6a-4c90-8dce-c3561f9a2cf4 ;;; pgg.el ends here