[gnus git] branch master updated: n0-17-124-geb77f7d =1= Merge changes made in Emacs trunk.

Katsumi Yamaoka <[email protected]>
Newsgroups gmane.emacs.gnus.cvs
Message-ID <[email protected]>
       via  eb77f7d94997f68ccd0b3e73d71782221f269aa8 (commit)
      from  dd5c9c2cc48fb25d6e6df11717b17c2746ac54ae (commit)


- Log -----------------------------------------------------------------
commit eb77f7d94997f68ccd0b3e73d71782221f269aa8
Author: Daiki Ueno <[email protected]>
Date:   Fri Jul 1 04:04:59 2011 +0000

    Merge changes made in Emacs trunk.
    
    plstore.el (plstore-select-keys, plstore-encrypt-to): New variable.
     (plstore-save): Support public key encryption.
     (plstore--init-from-buffer): New function.
     (plstore-open): Use it; fix error when opening a non-existent file.
     (plstore-revert): Use plstore--init-from-buffer.
    auth-source.el (auth-source-backend): Fix :initarg for data slot.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 8369986..2aba7e4 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,15 @@
+2011-07-01  Daiki Ueno  <[email protected]>
+
+	* plstore.el (plstore-select-keys, plstore-encrypt-to): New variable.
+	(plstore-save): Support public key encryption.
+	(plstore--init-from-buffer): New function.
+	(plstore-open): Use it; fix error when opening a non-existent file.
+	(plstore-revert): Use plstore--init-from-buffer.
+
+2011-07-01  Daiki Ueno  <[email protected]>
+
+	* auth-source.el (auth-source-backend): Fix :initarg for data slot.
+
 2011-06-30  Katsumi Yamaoka  <[email protected]>
 
 	* mml2015.el (mml2015-use): Replace string-match-p with string-match
diff --git a/lisp/auth-source.el b/lisp/auth-source.el
index 135c679..fd54c5a 100644
--- a/lisp/auth-source.el
+++ b/lisp/auth-source.el
@@ -126,7 +126,7 @@ let-binding."
          :type t
          :custom string
          :documentation "The backend protocol.")
-   (data :initarg :arg
+   (data :initarg :data
          :initform nil
          :documentation "Internal backend data.")
    (create-function :initarg :create-function
diff --git a/lisp/plstore.el b/lisp/plstore.el
index 392437d..360388d 100644
--- a/lisp/plstore.el
+++ b/lisp/plstore.el
@@ -44,6 +44,40 @@
 
 (require 'epg)
 
+(defgroup plstore nil
+  "Searchable, partially encrypted, persistent plist store"
+  :version "24.1"
+  :group 'files)
+
+(defcustom plstore-select-keys 'silent
+  "Control whether or not to pop up the key selection dialog.
+
+If t, always asks user to select recipients.
+If nil, query user only when `plstore-encrypt-to' is not set.
+If neither t nor nil, doesn't ask user.  In this case, symmetric
+encryption is used."
+  :type '(choice (const :tag "Ask always" t)
+		 (const :tag "Ask when recipients are not set" nil)
+		 (const :tag "Don't ask" silent))
+  :group 'plstore)
+
+(defvar plstore-encrypt-to nil
+  "*Recipient(s) used for encrypting secret entries.
+May either be a string or a list of strings.")
+
+(put 'plstore-encrypt-to 'safe-local-variable
+     (lambda (val)
+       (or (stringp val)
+	   (and (listp val)
+		(catch 'safe
+		  (mapc (lambda (elt)
+			  (unless (stringp elt)
+			    (throw 'safe nil)))
+			val)
+		  t)))))
+
+(put 'plstore-encrypt-to 'permanent-local t)
+
 (defvar plstore-cache-passphrase-for-symmetric-encryption nil)
 (defvar plstore-passphrase-alist nil)
 
@@ -107,35 +141,39 @@
 (defun plstore-get-file (this)
   (buffer-file-name (plstore--get-buffer this)))
 
+(defun plstore--init-from-buffer (plstore)
+  (goto-char (point-min))
+  (when (looking-at ";;; public entries")
+    (forward-line)
+    (plstore--set-alist plstore (read (point-marker)))
+    (forward-sexp)
+    (forward-char)
+    (when (looking-at ";;; secret entries")
+      (forward-line)
+      (plstore--set-encrypted-data plstore (read (point-marker))))
+    (plstore--merge-secret plstore)))
+
 ;;;###autoload
 (defun plstore-open (file)
   "Create a plstore instance associated with FILE."
+  (with-current-buffer (find-file-noselect file)
+    ;; make the buffer invisible from user
+    (rename-buffer (format " plstore %s" (buffer-file-name)))
   (let ((store (vector
-		(find-file-noselect file)
+		  (current-buffer)
 		nil		     ;plist (plist)
 		nil		     ;encrypted data (string)
 		nil		     ;secret plist (plist)
 		nil		     ;merged plist (plist)
 		)))
-    (plstore-revert store)
-    store))
+      (plstore--init-from-buffer store)
+      store)))
 
 (defun plstore-revert (plstore)
   "Replace current data in PLSTORE with the file on disk."
   (with-current-buffer (plstore--get-buffer plstore)
     (revert-buffer t t)
-    ;; make the buffer invisible from user
-    (rename-buffer (format " plstore %s" (buffer-file-name)))
-    (goto-char (point-min))
-    (when (looking-at ";;; public entries\n")
-      (forward-line)
-      (plstore--set-alist plstore (read (point-marker)))
-      (forward-sexp)
-      (forward-char)
-      (when (looking-at ";;; secret entries\n")
-	(forward-line)
-	(plstore--set-encrypted-data plstore (read (point-marker))))
-      (plstore--merge-secret plstore))))
+    (plstore--init-from-buffer plstore)))
 
 (defun plstore-close (plstore)
   "Destroy a plstore instance PLSTORE."
@@ -304,20 +342,37 @@ SECRET-KEYS is a plist containing secret data."
   "Save the contents of PLSTORE associated with a FILE."
   (with-current-buffer (plstore--get-buffer plstore)
     (erase-buffer)
-    (insert ";;; public entries\n" (pp-to-string (plstore--get-alist plstore)))
+    (insert ";;; public entries -*- mode: emacs-lisp -*- \n"
+	    (pp-to-string (plstore--get-alist plstore)))
     (if (plstore--get-secret-alist plstore)
 	(let ((context (epg-make-context 'OpenPGP))
 	      (pp-escape-newlines nil)
+	      (recipients
+	       (cond
+		((listp plstore-encrypt-to) plstore-encrypt-to)
+		((stringp plstore-encrypt-to) (list plstore-encrypt-to))))
 	      cipher)
 	  (epg-context-set-armor context t)
 	  (epg-context-set-passphrase-callback
 	   context
 	   (cons #'plstore-passphrase-callback-function
 		 plstore))
-	  (setq cipher (epg-encrypt-string context
+	  (setq cipher (epg-encrypt-string
+			context
 					   (pp-to-string
 					    (plstore--get-secret-alist plstore))
-					   nil))
+			(if (or (eq plstore-select-keys t)
+				(and (null plstore-select-keys)
+				     (not (local-variable-p 'plstore-encrypt-to
+							    (current-buffer)))))
+			    (epa-select-keys
+			     context
+			     "Select recipents for encryption.
+If no one is selected, symmetric encryption will be performed.  "
+			     recipients)
+			  (if plstore-encrypt-to
+			      (epg-list-keys context recipients)))))
+	  (goto-char (point-max))
 	  (insert ";;; secret entries\n" (pp-to-string cipher))))
     (save-buffer)))
 

-----------------------------------------------------------------------
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we listed those
revisions in full, above.

Summary of changes:
 lisp/ChangeLog      |   12 ++++++
 lisp/auth-source.el |    2 +-
 lisp/plstore.el     |  107 ++++++++++++++++++++++++++++++++++++++------------
 3 files changed, 94 insertions(+), 27 deletions(-)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnus Project".

The branch, master has been updated


hooks/post-receive
-- 
Gnus Project
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.