[PREVIOUS CHAPTER] [NEXT CHAPTER]
5 モデレータ


この章は『MLに流す前に査読をする人がいるというシステム』についてです。

注: モデレータは moderator コマンドを使うためにMLのメンバーでないと
    だめです。members ないし members-admin にモデレータの人の
    アドレスを追加しておいて下さい。

5.1	Overview

モデレーター機能は、以下のような査読投稿システムです。

	1 ML宛に来たメールは配送されず
	2 一旦モデレーターへフォワードされます
	3 モデレーターは内容を査読後承認するなら
	  あるキーワード(パスワード)をMLサーバへ送ることで
	  ML全体へ配送されます。	
	 (このキーワードを送る方法については後述します)

変数は config.ph で

	$PERMIT_POST_FROM              = "moderator";

となっている状態です。makefml config の設定画面では

   [POST]

   1    PERMIT_POST_FROM                   moderators

のようになります。コマンドについても

   [COMMAND]

   3    PERMIT_COMMAND_FROM                moderators

設定はできますが、いちいち承認を出すコマンドというのは意味がない気がし
ます。が、実際にはコマンドへの承認をだすことができます:)

tricky なコードの副産物で $MAIL_LIST != $COMMAND_ADDRESS なのに
$MAIL_LIST も # moderator コマンドは理解してしまいます。このままでもい
いような気がしてそうなってます。$PERMIT_COMMAND_FROM が moderators は
tricky なことをしているので、ちょっとねぇ…

5.2	承認の仕方 ($MODERATOR_FORWARD_TYPE == 2 デフォールト)

$MODERATOR_FORWARD_TYPE という変数があります。デフォールトは2です。

次のようなメールがモデレーターに来ます。

   Moderated $MAIL_LIST (elena@fml.org) receives a submit from

      fukachan@fml.org.

   Please check it. If you certify the following article, 
   please send to elena-ctl@fml.org
   the following line (only this line!)

   moderator certified 199711032027.709982

   ------- Forwarded Message

   メール本文

   ------- End of Forwarded Message

メールはMLサーバも保存しています。メール本文の内容を承認したなら、

moderator certified 199711032027.709982

の行だけをコマンド用のアドレスに送って下さい。そうするとMLサーバは自
分が保存しておいたそのメールを配送します。

モデレーターか否かはこの特別な文字列(moderator certified 数字)を知っ
ているか否かです。この数字は毎回違うもるので、ある意味で暗合レベルの非
常に低い one time password だとみなすこともできます。

このメールが送られてくる人は誰でもモデレーターになれます。デフォールト
は $MAINTAINER ですが、複数の人をモデレーターにするなら moderators と
いうファイルを作り actives や members のように一行一アドレス書いていっ
て下さい。

5.3	承認の仕方 ($MODERATOR_FORWARD_TYPE == 1 もしくは 未定義)

承認を求めるメールがフォワードされるのは $MAINTAINER です。承認したか
否かはパスワード認証になります。パスワードを知っている人がモデレータと
いえます。MLサーバへ送るメールのヘッダに Approval: line をつけて

	1 メールは一回管理者へフォワードされる。
        2 管理者が査読してOKとみなしたらMLへ投げる。
          Approval: password フィールドをヘッダにつけてMLに
          投げればメールは配送される。

パスワードはリモート管理のし方と同様に保守して下さい。
問題としては

	Approval: password をつかうのはいやだ
	#こういう実装はいやなんだけど、してるだけ

	ださいMUA(メールユーザインターフェイス)がある

などがあるので回避策の一つとして

	admin forward
	フォワードする本文

というコマンドもあります。

	admin pass あなたのパスワード
	admin forward
	本文(この下は全部フォワードされる)

5.4	承認の仕方 ($MODERATOR_FORWARD_TYPE == 3 もしくは 未定義)
5.3

Type III は I の変形です。パスワードを知っている人(モデレータ)は査読に
関わらず出せます。Approval: パスワード つきでメールをだせば査読にまわ
らずそのまま通過します。

See also "admin forward" command.
5.3


5.5	メンバーを信頼度に応じて3段階に分ける

メンバーを3段階に分けることを考える。

group 1: モデレータ(の人々)。無条件に信頼される。
group 2: 信頼できるメンバ。普通に送ると普通に配送される。
group 3: 一般メンバ。普通に送るとモデレータに転送され、
	 通常のモデレータの手順を踏む。

通常モデレータモードは3段階ではないので改造が必要である。
ここではこれをHOOKでこれを実現することにする。

1. まずデフォールトはモデレータモードにする。makefml config なりcfに書
くなりして

	$PERMIT_POST_FROM  = "moderator";

になるようにする。

2. priv というファイルをMLのHOMEにつくり、group 2 に対応する信頼でき
るメンバー(だがモデレータではない)の群を登録する(一行一アドレス)。

3.  その上で以下のようなHOOKをcfの最後に入れて config.ph を再生成する。

$START_HOOK = q#
     $PRIV_LIST = "$DIR/priv";
      if (&CheckMember($From_address, $PRIV_LIST)) {
         $PERMIT_POST_FROM  = "members_only";
   }
#;


5.6	queueのexpire

	$MODERATOR_EXPIRE_LIMIT (default 14 == 2 weeks)

submitされたが承認されなかったメールは2週間(デフォールト値)たったら消
す。期間は $MODERATOR_EXPIRE_LIMIT という変数で制御する。


[PREVIOUS CHAPTER] [NEXT CHAPTER]