[Mew-dist 09614] Re: 1.94b39

Kazu Yamamoto ( 山本和彦 ) kazu at example.com
1999年 7月 14日 (水) 11:48:00 JST


From: HEO SeonMeyong <seirios at example.com>
Subject: Re: [Mew-dist 09611] 1.94b39
Date: Wed, 14 Jul 1999 02:38:12 +0900

> 	o mew-protect-privacy-encrypted を優先する
> 実装にして欲しいという点が挙げられる。

あれー。単なる順番ミスですね。訂正しました。

> という変数を準備しておき、
> 	o t ならばcacheしておいたpass phraseをpgp(encrypt|sign|decrypt)に利用
> 	o nil ならば cache しない
> という機構があれば、嬉しいユーザーもいると思う。

作りました。以下のパッチを当てて、mew-use-pgp-cached-passphrase を t 
にして下さい。

パスフレーズをキャッシュできると、prefetch の際に暗号メールの解析を中
断する必要はない気もします。しかし、世の中の暗号メールは PGP/MIME だけ
ではないし(PGP/MIME のパスフレーズだけを管理すればよいのではない)、暗
号メールが勝手に復号されるのはやっぱり恐い(気の性かも)ので、解析を中断
する仕様はそのままにします。

さて、キャッシュしたパスフレーズをタイマーで消す機能を実装しようとして
います。いろいろ調べた結果、Emacs/XEmacs のタイマーは扱いづらいので、
「パスフレーズを入力してから 1 時間後」のようなニートなタイマーは管理
しにくいです。よって、Mew を起動してから、たとえば 1 時間ごとにパスフ
レーズを消すようにしますが、いいですか? 

パスフレーズを入力したタイミングによっては、たとえば 2 分後に消える可
能性もあるということです。

--かず
-------------- next part --------------
Index: mew-encode.el
===================================================================
RCS file: /home/kazu/cvsroot/Mew/mew/mew-encode.el,v
retrieving revision 1.85
retrieving revision 1.86
diff -c -r1.85 -r1.86
*** mew-encode.el	1999/07/13 12:03:26	1.85
--- mew-encode.el	1999/07/14 02:29:55	1.86
***************
*** 100,114 ****
  	    (mew-draft-make-backup (not multip))
  	    ;; save syntax before setting privacy
  	    (if (or (mew-syntax-get-privacy mew-encode-syntax) ;; specified
! 		    mew-draft-privacy-error) ;; bypass
  		()
  	      (cond
  	       (privacy
  		(setq type privacy))
- 	       (mew-protect-privacy-always
- 		(setq type mew-protect-privacy-always-type))
  	       ((and mew-protect-privacy-encrypted mew-draft-encrypted-p)
! 		(setq type mew-protect-privacy-encrypted-type)))
  	      (mew-syntax-set-privacy
  	       mew-encode-syntax
  	       (nth 1 (assoc type mew-privacy-database)))
--- 100,114 ----
  	    (mew-draft-make-backup (not multip))
  	    ;; save syntax before setting privacy
  	    (if (or (mew-syntax-get-privacy mew-encode-syntax) ;; specified
! 		    (and (null privacy) mew-draft-privacy-error)) ;; bypass
  		()
  	      (cond
  	       (privacy
  		(setq type privacy))
  	       ((and mew-protect-privacy-encrypted mew-draft-encrypted-p)
! 		(setq type mew-protect-privacy-encrypted-type))
! 	       (mew-protect-privacy-always
! 		(setq type mew-protect-privacy-always-type)))
  	      (mew-syntax-set-privacy
  	       mew-encode-syntax
  	       (nth 1 (assoc type mew-privacy-database)))
Index: mew-pgp.el
===================================================================
RCS file: /home/kazu/cvsroot/Mew/mew/mew-pgp.el,v
retrieving revision 1.68
retrieving revision 1.69
diff -c -r1.68 -r1.69
*** mew-pgp.el	1999/07/13 09:18:59	1.68
--- mew-pgp.el	1999/07/14 02:29:55	1.69
***************
*** 139,144 ****
--- 139,146 ----
  (defmacro mew-pgp-get (list)
    (` (nth mew-pgp-ver (, list))))
  
+ (defvar mew-pgp-cached-passphrase nil)
+ 
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;
  ;; PGP version check
***************
*** 377,382 ****
--- 379,393 ----
  ;; PGP process functions
  ;;
  
+ (defun mew-pgp-passphrase ()
+    (if mew-use-pgp-cached-passphrase
+        (if mew-pgp-cached-passphrase
+ 	   mew-pgp-cached-passphrase
+ 	 (setq mew-pgp-cached-passphrase
+ 	       (mew-input-passwd mew-pgp-prompt-enter-pass)))
+      (setq mew-pgp-cached-passphrase nil) ;; cancel anyway
+      (mew-input-passwd mew-pgp-prompt-enter-pass)))
+ 
  (defun mew-pgp-process-sentinel (process event)
    (let ((decrypted "PGP decrypted. ")
  	(msg ""))
***************
*** 440,448 ****
  
     ;; pass phrase for sign or decrypt
     ((string-match (mew-pgp-get mew-pgp-msg-enter-pass) string)
!     (process-send-string
!      process
!      (format "%s\n" (mew-input-passwd mew-pgp-prompt-enter-pass)))
      (set-process-filter process 'mew-pgp-process-filter2))
  
     ;; just in case
--- 451,457 ----
  
     ;; pass phrase for sign or decrypt
     ((string-match (mew-pgp-get mew-pgp-msg-enter-pass) string)
!     (process-send-string process (format "%s\n" (mew-pgp-passphrase)))
      (set-process-filter process 'mew-pgp-process-filter2))
  
     ;; just in case
***************
*** 458,471 ****
     ;; re-enter pass phrase
     ((string-match (mew-pgp-get mew-pgp-msg-reenter-pass) string)
      (setq mew-pgp-string nil)
!     (process-send-string 
!      process
!      (format "%s\n" (mew-input-passwd mew-pgp-prompt-reenter-pass)))
      (set-process-filter process 'mew-pgp-process-filter2))
  
     ;; pass phrases were wrong three times
     ((string-match (mew-pgp-get mew-pgp-msg-bad-pass) string)
      (setq mew-pgp-failure mew-pgp-err-pass)
      (set-process-filter process 'mew-pgp-process-filter3))
  
     ;; no pubring for verify
--- 467,480 ----
     ;; re-enter pass phrase
     ((string-match (mew-pgp-get mew-pgp-msg-reenter-pass) string)
      (setq mew-pgp-string nil)
!     (setq mew-pgp-cached-passphrase nil) ;; cancel anyway
!     (process-send-string process (format "%s\n" (mew-pgp-passphrase)))
      (set-process-filter process 'mew-pgp-process-filter2))
  
     ;; pass phrases were wrong three times
     ((string-match (mew-pgp-get mew-pgp-msg-bad-pass) string)
      (setq mew-pgp-failure mew-pgp-err-pass)
+     (setq mew-pgp-cached-passphrase nil) ;; cancel anyway
      (set-process-filter process 'mew-pgp-process-filter3))
  
     ;; no pubring for verify
Index: mew-vars.el
===================================================================
RCS file: /home/kazu/cvsroot/Mew/mew/mew-vars.el,v
retrieving revision 1.145
retrieving revision 1.146
diff -c -r1.145 -r1.146
*** mew-vars.el	1999/07/13 11:33:00	1.145
--- mew-vars.el	1999/07/14 02:29:55	1.146
***************
*** 914,919 ****
--- 914,923 ----
  \"f\" and \"F\" are used. Otherwise, symbolic links are
  created (if the feature is provided).")
  
+ (defvar mew-use-pgp-cached-passphrase nil
+   "*if non-nil, PGP passphrase which you inputed is cached to be used
+ for further PGP processes.")
+ 
  ;;
  ;; X face
  ;;


Mew-dist メーリングリストの案内