[PREVIOUS CHAPTER]
[NEXT CHAPTER]
4 内部構造
%Procedure というのが内部で使っているコマンド定義のハッシュテーブルで
す。このハッシュを操作する手段が以下の配列やハッシュです。
4.1 MLで使えるコマンドを増やすor減らす
../remote_control 4.10
config.ph でコントロールできます。いくつかの変数がありますが、次のよう
に作動します
1 @PermitProcedure が定義してあるなら
@PermitProcedure で許しているコマンドだけを設定します。
もし、定義されていなければデフォールトのすべてのコマンドが
利用可能になります。
これらの設定はグローバル変数の %Procedure に定義されます。
2 %LocalProcedure が定義されているなら
1 で定義された %Procedure を %LocalProcedure で上書きします。
3 @DenyProcedure が定義されているなら
@DenyProcedure のコマンドだけを使えなくする
Example:
○ guide と summary のみを使用可能、それ以外はすべて使用不可
@PermitProcedure = ('guide', 'summary');
○デフォールトに加え自分で定義した hack コマンドも使える
%LocalProcedure = ('hack', 'ProcHack');
もちろんこの場合はどこかで sub ProcHack { ...; } があって
この関数を用意しておく必要がある。
○デフォールトの中で get 関係は使えなくする
@DenyProcedure = ('get', 'send', 'mget', 'msend');
○ メンバーリストなどを取れないようにする
@DenyProcedure = ('member', 'active', 'members', 'actives', 'status', 'stat');
4.2 ハッシュ %Procedure の特殊なキー
ハッシュ %Procedure には特別な書き方があります。通常は
ハッシュのキー 値
----------------------------------------
コマンド名 関数名
ですが、
ハッシュのキー 値
----------------------------------------
key Function Name (e.g. ProcHoeHoe)
#key file name
r#key 1 or 0
r2a#key 1 or 0
l#key the maximum request for key in one mail
○ #key はファイルを送り返す関数でのファイル名です。実はファイルを送り
返す関数は共通なので、これを利用すると好きなファイルを送り返す新しいコ
マンドがほいほい作れます。
例: "help" コマンドは $HELP_FILE ("#help"の値) を送り返す。
# help for usage of commands
'help', 'ProcFileSendBack',
'#help', $HELP_FILE,
Example: add your new command "news" to send back "$DIR/news" file.
2.3
%LocalProcedure = ('news', 'ProcFileSendBack',
'#news', "$DIR/news");
○ r#key はこのコマンドを実行したら実行のログをユーザーに送り返します。
例: "off" コマンドではログをユーザーに送り返す。
'off', 'ProcSetDeliveryMode',
'r#off', 1,
○ r2a#key はこのコマンドを実行したら実行のログを管理者に送り返します。
* If "r2a#key" is defined, FML sends the trace log of the command to
$MAINTAINER.
例: "bye" や "unsubscribe" のコマンドの実行ログは管理者にも送る。
'bye', 'ProcSetMemberList',
'r#bye', 1,
'r2a#bye', 1,
'unsubscribe', 'ProcSetMemberList',
'r#unsubscribe', 1,
'r2a#unsubscribe', 1,
Ex 2: "chaddr" case.
'chaddr', 'ProcSetMemberList',
'r#chaddr', 1,
○ l#key
一通のメールの中のコマンド 'command' リクエストを最大でも
$Procedure{"l#command"} 個までに制限する。コマンドごとに制限は変えられ
る。$MAXNUM_COMMAND_INPUT は一つのメールの中のコマンドの合計への制限に
なっている(種別を問わず足し合わせた値)。
例: "get" は1メールで10個まで
'l#get', 10,
4.3 コマンドの # syntax
コマンドはデフォールトで "# get 1" と "#get 1" は同じものとみなしてい
ます。# で始まるか否かだけで判定しています。--ctladdr で fml.pl を呼び
出している場合(例えば include-ctl を使っている場合)は # も必要ありませ
ん。
$COMMAND_SYNTAX_EXTENSION = 1; (default 1)
がデフォールトです。
III コマンド各論
[PREVIOUS CHAPTER]
[NEXT CHAPTER]