<!--
   $FML: post_check_article_thread.sgml,v 1.6 2008/08/18 02:23:59 fukachan Exp $
-->


<sect1 id="config.post.check.article.thread">
	<title>
	ケーススタディ: フォローする場合なら誰でも投稿可能なＭＬ
	</title>

<para>
「メンバー以外からの投稿」を受けて「投稿が拒否される」ケースが結構あり
ます。
</para>

<para>
もちろん自分の使っているアドレスを変更したのを忘れたとか、サブドメイン
があったりなかったりなど、適当な使い方をしていたためのエラーもあれば、
転送先で読んで、そこから返事を書いてエラーになるケースもあります。
</para>

<para>
そこで、2004/10/28 以降の article_post_restrictions には、特定の条件を
満たせば短時間だけ From: のアドレス(認証に使うメールアドレス)に関わら
ず投稿可能なオプション機能が追加されています。
</para>

<para>
現在の実装は「本ＭＬの記事を受けていて、その記事に対してのリプライをす
るのであれば通してやろう」というものです。ただし時間制限つきです。
具体的には、In-Reply-To: もしくは References: で過去(一週間以内)の記事
の message-id: を参照しているメールに対しては、(From: のメールアドレス
に関わらず)記事の投稿を許します。
</para>


<sect2>
	<title>
	レシピ
	</title>

<qandaset>

<qandaentry>

<question>
<para>
フォローする場合なら誰でも投稿可能なＭＬ
</para>
</question>

<answer>

<para>
設定例は次のようになります。
check_article_thread が、このオプションです。
<screen>
article_post_restrictions       =       reject_system_special_accounts
                                        check_article_thread
                                        permit_member_maps
                                        reject
</screen>
これをデフォルト設定にしておいたほうが便利な気もしますが、いまのところ、
そういう設定になっていません。
この機能を利用したい場合、明示的に article_post_restrictions を変更して下さい。
</para>

<para>
注: &fml8; 2008/08/17 以降のバージョンでは isolate (SPAM の隔離)が推奨です。
<screen>
article_post_restrictions       =       isolate_system_special_accounts
                                        check_article_thread
                                        permit_member_maps
                                        isolate
</screen>
</para>

</answer>

</qandaentry>

</qandaset>

</sect2>


<sect2>
	<title>
	議論
	</title>

<para>
ま、ようは cookie みたいなもんですよね。
ですが、課題は色々あります。
</para>

<para>
1) 許す時間の長さを、どのくらいまで短くするのが適正か？
<screen>
article_post_article_thread_lifetime = 86400
</screen>
$article_post_article_thread_lifetime という変数で制御できるようにして
みました。デフォルトでは一日です。
</para>

<para>
それより、時間制限って、いつからいつまでだ？
スレッドの始まった時からＮ秒？
それとも
スレッドで最後に投稿された記事からＮ秒？
どちらが妥当なのでしょうか？
</para>

<para>
2) subject: とスレッドの依存関係両方をチェックすると、
   かなり偽造するのが大変になるだろうとは思う。
<footnote>
<para>
真面目に確率計算をしてくれると、
卒論くらいに、ちょうど良いかなぁ（そうか？）。
誰かやりたい人がいたら、御一報を:-)
</para>
</footnote>
</para>

<para>
もっとも、たいてい message-id の方が長いことが多いから、From: 
偽造よりこっちのほうが突破は難しいですかね？
</para>

<para>
でもでも、駄目駄目な message-id をつける mailer だと、逆に弱く
なるけどねぇ。UNIXタイム@ホスト(FQDNじゃない) みたいなへぼいや
つだと、予測する範囲がすごく小さいや。
</para>

</sect2>


<sect2>
	<title>
	レシピ
	</title>

<qandaset>
<qandaentry>

<question>
<para>
特定少数の人だけがスレッドをたてられるＭＬ。
</para>

</question>

<answer>

<para>
これ、モデレータシステムより便利だと思うのですが、どうでしょうか？
</para>

<para>
たとえば次のような設定です。こうすると、疑似的に「スレッドをたてる小数
の人(管理者) + スレッドへのリプライをする管理者以外の人たち」という運
用になりますね。
</para>

<para>
<screen>
member_maps			=       $tmp_dir/members-thread-init

article_post_restrictions       =       reject_system_special_accounts
                                        check_article_thread
                                        permit_member_maps
                                        isolate
</screen>
注: &fml8; 2008/08/17 以降のバージョンでは
reject ではなく isolate (SPAM の隔離)が推奨です。
</para>

<para>
まず members-thread-init に登録されている人だけは
「いつでも投稿」できます。これ以外のメンバーは、通常、投稿を拒否されます。
しかし、投稿されたメールに返信をした場合にかぎり
check_article_thread 命令で投稿が許されるという仕組みです。
</para>

<para>
つまり、最初に管理者の人が話題をふる。その話題へのフォローだけはＭＬに
流れる。ようするに、管理者の人だけが「新規の話題を紹介する」ことが出来
る仕組みです。モデレータ風だけど、少し違う仕掛けです。
</para>

<para>
このほうがモデレータより簡単で便利だと思うんですが、どうですかね？
</para>

<para>
また、ネタふりをする人の認証も PGP を使うとより良いです。
<screen>
member_maps			=       $tmp_dir/members-thread-init

article_post_restrictions       =       reject_system_special_accounts
                                        check_article_thread
                                        check_pgp_signature
                                        isolate
</screen>
注: &fml8; 2008/08/17 以降のバージョンでは
reject より isolate (SPAM の隔離)が推奨です。
</para>

</answer>

</qandaentry>

</qandaset>

</sect2>


</sect1>
