[mew-dist 20092] NNTP AUTHINFO

Kenichi OKADA kokada at example.com
2002年 1月 17日 (木) 03:39:18 JST


おかだです.

3点あります.

1. greeting messageの後に mode readerが必要です.
 mew-nntp{,2,3}-fsm を修正し,mew-nntp{,2,3,}-command-mode-reader を
 追加しました.

2. post, list について,authfinfo を実装しました.
 mew-nntp3 の mew-nntp-user のあたりはごまかしています.

3. greeting message や mode reader の返り値は 200 だけでなく,
 201 である可能性もあります.
 mew-nntp{,2,3}-fsm と mew-nntp{,2,3}-fsm-next で修正しました.

-- 
岡田 健一 mailto:okada at example.com


Index: mew-nntp.el
===================================================================
RCS file: /cvsmew/mew/mew-nntp.el,v
retrieving revision 1.26
diff -c -u -r1.26 mew-nntp.el
--- mew-nntp.el	2002/01/07 10:06:29	1.26
+++ mew-nntp.el	2002/01/16 18:38:42
@@ -49,19 +49,20 @@
 ;;;
 
 (defvar mew-nntp-fsm
-  '(("greeting" nil ("200" . "authinfo"))
-    ("authinfo" nil ("381" . "authpass"))
-    ("authpass" nil ("281" . "group") (t . "wpwd"))
-    ("group"    nil ("211" . "xover"))
-    ("xover"	t   ("224" . "pre-article"))
-    ("article"  t   ("220" . "post-article") ("221" . "post-article"))
-    ("quit"     nil ("205" . "noop"))))
+  '(("greeting"    nil ("20[01]" . "mode-reader"))
+    ("mode-reader" nil ("20[01]" . "authinfo"))
+    ("authinfo"    nil ("381" . "authpass"))
+    ("authpass"    nil ("281" . "group") (t . "wpwd"))
+    ("group"       nil ("211" . "xover"))
+    ("xover"	   t   ("224" . "pre-article"))
+    ("article"     t   ("220" . "post-article") ("221" . "post-article"))
+    ("quit"        nil ("205" . "noop"))))
 
 (defsubst mew-nntp-fsm-by-status (status fsm)
   (assoc status fsm))
 
 (defsubst mew-nntp-fsm-next (status code fsm)
-  (cdr (mew-assoc-match code (nthcdr 2 (mew-nntp-fsm-by-status status fsm)) 0)))
+  (cdr (mew-assoc-match2 code (nthcdr 2 (mew-nntp-fsm-by-status status fsm)) 0)))
 
 (defsubst mew-nntp-fsm-reply (status fsm)
   (nth 1 (mew-nntp-fsm-by-status status fsm)))
@@ -272,6 +273,10 @@
 	(port (mew-nntp-get-port pnm))
 	(user (mew-nntp-get-user pnm)))
     (concat user "@" server ":" port)))
+
+(defun mew-nntp-command-mode-reader (pro pnm)
+  (process-send-string
+     pro (format "MODE READER%s" mew-cs-eol)))
 
 (defun mew-nntp-command-authinfo (pro pnm)
   (let ((user (mew-nntp-get-user pnm)))
Index: mew-nntp2.el
===================================================================
RCS file: /cvsmew/mew/mew-nntp2.el,v
retrieving revision 1.9
diff -c -u -r1.9 mew-nntp2.el
--- mew-nntp2.el	2001/12/13 07:08:19	1.9
+++ mew-nntp2.el	2002/01/16 18:38:42
@@ -22,19 +22,20 @@
 (mew-info-defun "mew-nntp2-" mew-nntp2-info-list)
 
 (defvar mew-nntp2-fsm
-  '(("greeting"  nil ("200" . "authinfo"))
-    ("authinfo"  nil ("381" . "authpass"))
-    ("authpass"  nil ("340" . "post") (t . "wpwd"))
-    ("post"      nil ("340" . "post-post"))
-    ("post-post" nil ("240" . "quit")) ;; xxx
-    ("quit"      nil ("205" . "done"))
-    ("done"      nil (t     . "noop"))))
+  '(("greeting"    nil ("20[01]" . "mode-reader"))
+    ("mode-reader" nil ("20[01]" . "authinfo"))
+    ("authinfo"    nil ("381" . "authpass"))
+    ("authpass"    nil ("281" . "post") (t . "wpwd"))
+    ("post"        nil ("340" . "post-post"))
+    ("post-post"   nil ("240" . "quit")) ;; xxx
+    ("quit"        nil ("205" . "done"))
+    ("done"        nil (t     . "noop"))))
 
 (defsubst mew-nntp2-fsm-by-status (status fsm)
   (assoc status fsm))
 
 (defsubst mew-nntp2-fsm-next (status code fsm)
-  (cdr (mew-assoc-match code (nthcdr 2 (mew-nntp2-fsm-by-status status fsm)) 0)))
+  (cdr (mew-assoc-match2 code (nthcdr 2 (mew-nntp2-fsm-by-status status fsm)) 0)))
 
 (defsubst mew-nntp2-fsm-reply (status fsm)
   (nth 1 (mew-nntp2-fsm-by-status status fsm)))
@@ -150,6 +151,10 @@
 	(port (mew-nntp2-get-port pnm))
 	(user (mew-nntp2-get-user pnm)))
     (concat user "@" server ":" port)))
+
+(defun mew-nntp2-command-mode-reader (pro pnm)
+  (process-send-string
+     pro (format "MODE READER%s" mew-cs-eol)))
 
 (defun mew-nntp2-command-authinfo (pro pnm)
   (let ((user (mew-nntp2-get-user pnm)))
Index: mew-nntp3.el
===================================================================
RCS file: /cvsmew/mew/mew-nntp3.el,v
retrieving revision 1.10
diff -c -u -r1.10 mew-nntp3.el
--- mew-nntp3.el	2001/12/17 12:11:04	1.10
+++ mew-nntp3.el	2002/01/16 18:38:42
@@ -73,15 +73,18 @@
 ;;;
 
 (defvar mew-nntp3-fsm
-  '(("greeting" nil ("200" . "list"))
-    ("list"     t   ("215" . "post-list"))
-    ("quit"     nil ("205" . "noop"))))
+  '(("greeting"    nil ("20[01]" . "mode-reader"))
+    ("mode-reader" nil ("20[01]" . "authinfo"))
+    ("authinfo"    nil ("381" . "authpass"))
+    ("authpass"    nil ("281" . "list") (t . "wpwd"))
+    ("list"        t   ("215" . "post-list"))
+    ("quit"        nil ("205" . "noop"))))
 
 (defsubst mew-nntp3-fsm-by-status (status fsm)
   (assoc status fsm))
 
 (defsubst mew-nntp3-fsm-next (status code fsm)
-  (cdr (mew-assoc-match code (nthcdr 2 (mew-nntp3-fsm-by-status status fsm)) 0)))
+  (cdr (mew-assoc-match2 code (nthcdr 2 (mew-nntp3-fsm-by-status status fsm)) 0)))
 
 (defsubst mew-nntp3-fsm-reply (status fsm)
   (nth 1 (mew-nntp3-fsm-by-status status fsm)))
@@ -96,6 +99,34 @@
     (if mew-config-cases
 	(setq case (mew-input-case mew-case-input "NNTP")))
     (mew-nntp3-newsgroups-alist case)))
+
+(defun mew-nntp3-passtag (pnm)
+  (let ((server (mew-nntp-server (mew-nntp3-get-case pnm)))
+	(port (mew-nntp-port (mew-nntp3-get-case pnm)))
+	(user (mew-nntp-user (mew-nntp3-get-case pnm))))
+    (concat user "@" server ":" port)))
+
+(defun mew-nntp3-command-mode-reader (pro pnm)
+  (process-send-string
+     pro (format "MODE READER%s" mew-cs-eol)))
+
+(defun mew-nntp3-command-authinfo (pro pnm)
+  (let ((user (mew-nntp-user (mew-nntp3-get-case pnm))))
+    (if user
+	(process-send-string
+	 pro (format "AUTHINFO USER %s%s" user mew-cs-eol))
+      (mew-nntp3-set-status pnm "list")
+      (mew-nntp3-command-list pro pnm))))
+
+(defun mew-nntp3-command-authpass (pro pnm)
+  (let ((pass (mew-input-passwd "AUTHINFO: " (mew-nntp3-passtag pnm))))
+    (process-send-string
+     pro (format "AUTHINFO PASS %s%s" pass mew-cs-eol))))
+
+(defun mew-nntp3-command-wpwd (pro pnm)
+  (message "AUTHINFO password is wrong!")
+  (mew-passwd-set-passwd (mew-nntp3-passtag pnm) nil)
+  (mew-nntp3-tear-down pnm))
 
 (defun mew-nntp3-newsgroups-alist (case)
   (let* ((server (mew-nntp-server case))



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