8 FML 設定ファイルのフォーマットと構造

fml の設定ファイル、メンバーリストは基本的に shell like な構造で記述さ
れていると期待されています。つまり基本的に # ではじまる行はコメント、
空行は飛ばす等の挙動を各ルーチンはしています。

以下では各設定ファイルのフォーマットについて言及します。

8.1 members ファイルのフォーマットと構造

2.2 では以前と異なり一般ユーザには下のようなフォーマットは見えません。
すでにいなくなったメンバーの情報をだすべきではないからです。管理者には
後述する生のフォーマットが見えてしまいます。一応知っておいて下さい。

$MEMBER_LIST (default members) で定義されるファイルは

	#.FML
		…fml が自動的につけるコメント…
	#.endFML
	アドレス1
	アドレス2
	# アドレス3
	##BYE アドレス4
	アドレス5

のような形をしています。歴史的理由により現在では

   # の後空白 でコメントアウトされていてもメンバーチェックの対象になる
   ## ではじまるところはコメント

となっています。よって上の例では ##BYE の行は無視されますが、それ以外
の アドレス1 〜 アドレス5 (4を除いて) すべてがメンバーチェックの際には
対象となります。

[歴史]
この動作は 1.2 release version の直後、自動登録を拡張する際に導入され
ました。またこの導入のため # off と # skip はどう違う?という疑問がそ
の後生まれることになりました。

なおメンバーファイルとしては各行のアドレスより後ろの部分は
何にも使われていませんので、勝手に使って構いません。

しかしながら、自動登録の場合は $MEMBER_LIST と $ACTIVE_LIST は同じもの
($MEMBER_LIST)が使われます。よってそのフォーマットは $ACTIVE_LIST 形
式であると仮定する必要があります。

8.2 actives ファイルのフォーマットと構造

$ACTIVE_LIST (default actives) で定義されるファイルは $MEMBER_LIST と
同様の構造を持ちます。

しかし actives ファイルは拡張された表現として各アドレスのオプションを
行の残りの部分に持つことができます。

	アドレス	オプション	# コメント

	注意:なお、それぞれの↑ブロックの間には必ず一つ以上の SPACE
	か TAB があると仮定しています。

よって勝手に何かを書いた場合オプションとみなされます。付加情報は # コ
メント として行の最後にでも書いて下さい。この辺は shell と同じです。

オプションは V1 と V2 フォーマットがあります。

   V1 フォーマットは

	数字(フォーマット)	まとめおくりの指定
	数字以外		リレーサーバ

   V2 フォーマットでは将来の拡張のため

	m=まとめ送り指定
	r=リレーサーバ
	s=1(skip を意味する)

のように alphabet=option-value の形で定義されています。現在のところこ
れ以外のキーワードは将来のために予約されています。

現在のルーチンは V2 のみを理解します。よって V1 -> V2 に変換する必要が
あります。この変換は

	libfml.pl で ChangeMemberList が呼ばれた時

つまりメンバーリスト等へのなんらかの変更を行なう時に自動的に行なわれま
す。

8.3 actives と members の違い

フォーマット的には上述の通りです。後は自動登録の章で述べられている通り
members はメンバーであるか否か?の認証、 actives は配送リストです。

自動登録では members 一つを認証と配送リスト両方に使っています。そのた
め表現の拡張が必要だったわけです。

8.4 複数のメンバーリスト、複数の配送リスト

	@ACTIVE_LIST	複数の配送リスト
	@MEMBER_LIST	複数のメンバーリスト

を定義できます。地方ごととか組織ごとにリストを管理するのに便利かも知れ
ません。
	@ACTIVE_LIST	plural member lists
	@MEMBER_LIST	plural delivery lists

デフォールトでは @ACTIVE_LIST は $ACTIVE_LIST と同じになります。
@MEMBER_LIST は members と members-admin です。

歴史: 最初に管理者を設定して後はリモートですべてをおこなうという目的の
ために拡張されました。

***
actives members のバックアップについて => 
33.8

8.5 メンバーリストファイルの拡張について (libmember_name.pl)

1998/01/09 AUTHOR: 福井 誠之 <fukui@sonic.nm.fujitsu.co.jp>

libmember_name.pl は members にメンバー各個人の名前を付加するモジュー
ルです。

この機能を有効にするには、config.ph にて、

      $USE_MEMBER_NAME = 1;

の一行を記述するだけで OK です。既に運用中の ML でも OK です。
makefml config のメニューでもできます。


[機能説明]

  これまでの fml では、メンバー一覧を 'members' コマンドで取り寄せると
メンバー全員のアドレスが返送されてきますが、アドレスだけでは誰が誰なのか
わかりにくい場合がありました。
  このモジュール libmember_name.pl は、その問題を解決するために、各メンバー
の名前 (基本的には、mail の From: ヘッダに書かれている名前(gecos)) を管理
する機能を付加します。
  このモジュールを有効にすることにより、機能が追加・変更される項目を以下
に記述します。


● 自動登録モード

    自動登録時 ('confirm','subscribe' コマンドによる登録も含む) に、
  mail の From: 行に書かれているアドレスが $MEMBER_LIST に追加されますが、
  その際に From: 行に書かれている名前 (gecos) も保存するようになります。

● 'members', 'member' コマンド

    'members', 'member' コマンドによるメンバー一覧の取り寄せで、メン
  バーのアドレスに対応する名前が登録されている場合には、その名前が付加さ
  れて返送されます。

  返送されるメンバー一覧の例 :

	#.FML HEADER
	# NEW FORMAT FOR FURTHER EXTENSION
	# e.g. fukachan@phys r=relayserver m=3u s=skip 
	# r= relayserver
	# m= matomeokuri parameter is time and option
	# s= skip. can post from this address but not delivered here.
	# the same obsolete format is compatible with new format and as follows:
	# e.g. fukachan@phys relayserver matome 3u
	#.endFML HEADER
	yoshio@aaa.co.jp (早乙女 好雄)
	yumi@bbb.ac.jp (Yumi SAOTOME)
	##BYE yuina@ccc.or.jp (Yuina HIMOO)
	・
	・
	・

● 'name' コマンド (新規)

  コマンド文法 : name [新しい名前]

    コマンドを送ってきた者の登録されている名前を [新しい名前] に変更します。
  古い名前が登録されていない場合は、新規に登録されます。
  また、[新しい名前] を省略すると、現在登録されている名前を削除します。

● 'admin name' コマンド (新規)

  コマンド文法 : admin name アドレス [新しい名前]

    リモート管理機能を使用している場合に有効になる、管理者用の名前変更コマ
  ンドです。アドレスを指定することにより、各メンバーの名前を変更することが
  できます。([新しい名前] の取り扱いについては、'name' コマンドと同様)

    この 'name' と 'admin name' コマンドを使用することにより、自動登録
  でない ML や、既に運用されている ML でも、名前の新規登録や変更ができるよ
  うになります。さらに、自動登録時には無条件に gecos が登録されるのとは違
  い、コマンドのオペランドにより自由な名前を登録することができますので、
  例えば、
      - 内輪の ML で、メンバーのニックネームを登録
      - 職場の ML で、名前だけでなく所属も付加して登録
  等の応用ができます。

[技術的補足]

● 名前の管理方法

    表面上は、members ファイル中に書かれている各行のメンバーのアドレスに
  名前が付加されるように見えますが、実際には members-name という別ファイル
  にて、'アドレス 名前' というエントリを記述して、アドレスと名前の対応付け
  をしています。('members' コマンドは members ファイルを返送するのではな
  く、members と members-name をマージしてテンポラリファイルを作成し、それ
  を返送しています)

    また、名前は日本語(2バイト文字) も OK で、途中に空白文字を含んでいても
  かまいません(改行までが名前と認識されるため)。管理ファイルには、強制的に
  JISコードに変換してから書き込まれます。さらに、From: や Subject: ヘッダ
  から名前を得たときには、 $USE_MIME = 1 なら MIME デコードの処理が行われ
  ます。

● 名前管理ファイル members-name のファイル名変更方法

  'members-name' という名前を変更したい場合には、config.ph にて

    $MEMBER_NAME_FILE = "$DIR/〜";

  と記述して変更してください。(〜 : 変更したいファイル名)

● メンバーの名前を得るための関数

  HOOK 処理等で、メンバーの名前を得たいときには、事前に

	&use('member_name');

  をした上で、

	&CheckMemberNameFile(アドレスの文字列)

  を呼び出してください。アドレスに対応する名前が返ってきます。
  名前が登録されていない場合には、'' が返ってきます。

  名前は members-name ファイルに書かれている文字コードがそのままで返って
  きます。基本的に JIS コードのはずですが、members-name を直接編集して
  JISコード以外の文字コードで記述した場合はその限りではありません。

● libmember_name.pl が OVERWRITE しているコマンド・処理

    上記のような方法で、アドレスと名前の対応付けを管理していますので、先の
  機能説明で記述したコマンドに加えて、さらに他のコマンドも libmember_name.pl
  内で追加処理が行われます。
    libmember_name.pl 内で追加処理が実行されるコマンド・処理の一覧を以下に
  記述します。

	- 自動登録処理 ('confirm','subscribe' コマンド含む)
	- 'members','member' コマンド
	- 'bye','unsubscribe' コマンド
	- 'chaddr','change-address','change' コマンド
	- 'admin bye','admin unsubscribe' コマンド
	- 'admin chaddr','admin change-address','admin change' コマンド
	- 'name' コマンド (新規)
	- 'admin name' コマンド (新規)

● 'name', 'admin name' コマンドの &SecureP() 処理のバイパスについて

  fml では、コマンドを処理する際にコマンドラインに不当な文字がないかどうかを
  &SecureP() という関数内でチェックして、不当な文字が含まれていればコマンド
  の実行を却下するようになっています。

  'name','admin name' コマンドで、オペランドに日本語(2バイト文字) を指定
  すると、そのままではこの 2バイト文字が「不当な文字」と認識されてコマンドが
  実行できません。そこで、'name','admin name' コマンドで &SecureP() 処理
  をバイパスするために、libmember_name.pl では %SECURE_REGEXP を定義していま
  す。

  %SECURE_REGEXP を定義して &SecureP() をバイパスしたときの副作用について、
  fukachan に質問してみたところ、

  "Ken'ichi Fukamachi" <fukachan@sapporo.iij.ad.jp> さん wrote:
  |うーん、どうだろ。SecureP とかは汎用なので、あまり緩くできないとおもっ
  |ています。でも特定のコマンドのフレーズを通してもそれが単なる string 操
  |作でしかないのであれば特に変なことはおこらないはずですけどね。だから大
  |丈夫だろうとおもってます。

  とのことです。


8.6 msendrc ファイルのフォーマットと構造

msendrc は $MSEND_RC で定められる場所におかれます。そのフォーマットは

	アドレス	次回に送る最初の記事番号

です。msednrc は msend.pl が制御するログファイルです。msend.pl は 
$ACTIVE_LIST を見て、

	・あるアドレスがまとめ送りになった
		そのアドレスのエントリを msendrc 内に新しく作る

	・あるアドレスがまとめ送りで”なくなった”
		そのアドレスのエントリを消去

	・まとめおくりを配送した
		次回に送る最初の記事番号を msendrc に記録する		

ということを msendrc に対して行ないます。msend.pl 以外のプログラムが 
msendrc をいじることはありません。

8.7 パスワードファイルのフォーマットと構造
See also: 41.19
 
25.0
 

リモート管理の時の認証で用いるパスワードを保存しているファイルは
$PASSWD_FILE でデフォールトでは $DIR/etc/passwd です。フォーマットは
See also: 25.0
 

	アドレス	cryptされたパスワード

です。つまり UNIX 伝統のパスワードファイル形式の先頭の2つが空白で区切
られたものです。#crypt(3) についてはマニュアル参照

	$REMOTE_ADMINISTRATION_AUTH_TYPE = "md5";
See also: 25.6
 

と設定されている時は fml.pl の crypt 関数は crypt(3) ではなく MD5 の値
を返すようになります。これは MD5.pm を用いた実装なので perl 5 であるこ
とと MD5-1.7.tar.gz のインストールが必要です。MD5.pm のソースは fml の 
directory に一緒に置いてあります。

admin コマンドには initpass というパスワード初期化コマンドがあります。
あるアドレスをこのファイルへ登録する時などは makefml passwd を使うと良
いでしょう。makefml の使い方については INSTALL ファイルを参照。

8.8 FMLインストール後の maintenance と version up に関して

install は makefml install を使います。version up も同様にして下さい。
というのはインストールするOSなどに依存することがあるので、makefml
install を使うべきだからです。なにをやっているか知っている人は別に cp 
でも構いません:)

version up の仕方は、例えば次のようになるでしょう。

	% cd /var/tmp
	% tar zxvf fml-current.tar.gz
	% cd fml-version番号他の名前
	% make install

以下では例として
	/usr/local/fml に executable
	/var/spool/ml/elena に elena ML
ということにしましょう。

makefml install はいつでも /usr/local/fml に executable やライブラリを
入れるだけです。version up の際に違うことは既にあるML群に対してロッ
クをしてからインストール作業を行なうことだけです。/var/spool/ml/elena 
の下つまり config.ph 等は変更を受けません。

fml.pl を筆頭に lib*pl 群は overwrite されますから自分でいじってしまっ
ている場合は一旦バックアップを取っておくことが必要です。

メインテナンスを楽にするにはコマンドのパスやML全体共通の設定はファイ
ルに全部書いておくべきだし、可能な限りHOOKなどにするべきです。例えば

	$HOME/libexec/fml/sitedef.ph 

で行ない各MLごとの設定は

	$HOME/w/spool/fml-support/config.ph 

で制御するなどの運用ポリシーを立てておくことも大事です。



[PREVIOUS CHAPTER] [NEXT CHAPTER]
Copyright (C) 1993-1999 Ken'ichi Fukamachi
All rights of this page is reserved.

# This Document(html format) is automatically geneareted by fwix.pl. 
# fwix (Formatter of WIX Language) is fml document formatter system
# designed to generate plaintext, html, texinfo and nroff from one file.
#
# Copyright (C) 1993-1999 Ken'ichi Fukamachi
#          All rights reserved. 
#               1993-1996 fukachan@phys.titech.ac.jp
#               1996-1999 fukachan@sapporo.iij.ad.jp
# 
# FML is free software; you can redistribute it and/or modify
# it under the terms of GNU General Public License.
# See the file COPYING for more details.