[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 メーリングリストの案内