X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/12b6af5c7ed2cfdb9783312bf890cf1e6c80c67a..e24ad6dd2b3499a367fff0dfd9c9c8a4bdaeb4fd:/lisp/pgg-gpg.el diff --git a/lisp/pgg-gpg.el b/lisp/pgg-gpg.el index 4b8b79b068..97b3b3e3d4 100644 --- a/lisp/pgg-gpg.el +++ b/lisp/pgg-gpg.el @@ -1,20 +1,21 @@ ;;; pgg-gpg.el --- GnuPG support for PGG. ;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Daiki Ueno -;; Symmetric encryption and gpg-agent support added by: +;; Symmetric encryption and gpg-agent support added by: ;; Sascha Wilde ;; Created: 1999/10/28 ;; Keywords: PGP, OpenPGP, GnuPG +;; Package: pgg ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; 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. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,9 +23,7 @@ ;; 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., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Code: @@ -52,7 +51,7 @@ :type '(choice (const :tag "New `--recipient' option" "--recipient") (const :tag "Old `--remote-user' option" "--remote-user"))) -(defcustom pgg-gpg-use-agent nil +(defcustom pgg-gpg-use-agent t "Whether to use gnupg agent for key caching." :group 'pgg-gpg :type 'boolean) @@ -61,7 +60,7 @@ "GnuPG ID of your default identity.") (defun pgg-gpg-process-region (start end passphrase program args) - (let* ((use-agent (pgg-gpg-use-agent-p)) + (let* ((use-agent (and (null passphrase) (pgg-gpg-use-agent-p))) (output-file-name (pgg-make-temp-file "pgg-output")) (args `("--status-fd" "2" @@ -94,8 +93,10 @@ (if pgg-passphrase-coding-system (progn (setq encoded-passphrase-with-new-line - (encode-coding-string passphrase-with-newline - pgg-passphrase-coding-system)) + (encode-coding-string + passphrase-with-newline + (coding-system-change-eol-conversion + pgg-passphrase-coding-system 'unix))) (pgg-clear-string passphrase-with-newline)) (setq encoded-passphrase-with-new-line passphrase-with-newline passphrase-with-newline nil)) @@ -104,6 +105,9 @@ (process-send-eof process) (while (eq 'run (process-status process)) (accept-process-output process 5)) + ;; Accept any remaining pending output coming after the + ;; status change. + (accept-process-output process 5) (setq status (process-status process) exit-status (process-exit-status process)) (delete-process process) @@ -186,9 +190,9 @@ Optional ALL non-nil means search all keys, including secret keys." (let ((args (list "--with-colons" "--no-greeting" "--batch" (if all "--list-secret-keys" "--list-keys") string)) - (key-regexp (concat "^\\(sec\\|pub\\)" + (key-regexp (concat "^\\(sec\\|pub\\|uid\\)" ":[^:]*:[^:]*:[^:]*:\\([^:]*\\):[^:]*" - ":[^:]*:[^:]*:[^:]*:\\([^:]*\\):"))) + ":[^:]*:[^:]*:[^:]*:\\([^:]+\\):"))) (with-temp-buffer (apply #'call-process pgg-gpg-program nil t nil args) (goto-char (point-min)) @@ -222,7 +226,7 @@ passphrase cache or user." (list "--batch" "--armor" "--always-trust" "--encrypt") (if pgg-text-mode (list "--textmode")) (if sign (list "--sign" "--local-user" pgg-gpg-user-id)) - (if recipients + (if (or recipients pgg-encrypt-for-me) (apply #'nconc (mapcar (lambda (rcpt) (list pgg-gpg-recipient-argument rcpt)) @@ -403,5 +407,4 @@ passphrase cache or user." (provide 'pgg-gpg) -;;; arch-tag: 2aa5d5d8-93a0-4865-9312-33e29830e000 ;;; pgg-gpg.el ends here