
libmember_name.pl 簡易ドキュメント
                                           1998/01/09 福井 誠之
                                              (fukui@sonic.nm.fujitsu.co.jp)


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


[機能説明]

  これまでの 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 EXTENTION
	# 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 で、名前だけでなく所属も付加して登録
  等の応用ができます。


[使用方法]

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

      $USE_MEMBER_NAME = 1;

  の一行を記述するだけで OK です。既に運用中の ML でも OK です。


[技術的補足]

● 名前の管理方法

    表面上は、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 操
  |作でしかないのであれば特に変なことはおこらないはずですけどね。だから大
  |丈夫だろうとおもってます。

  とのことです。


[謝辞]

    fml 作者の fukachan こと深町殿には、この機能を実現するために、散々
  わがままを言って fml 本体の改造をしていただきました(^^;)
  厚く御礼申し上げます。

                                                            - 以上 -

