fml8 チュートリアル (バージョン 7.99.1-20180910)
Prev | Chapter 41. コマンド(コマンドメール、makefml、CGI) | Next

# コマンド処理のフロー

すべてのコマンド(fml8 への命令)処理は最終的に「FML::Command」クラス 経由で「FML::Command::モード::コマンド」クラスを呼び出します。GUI およ び CUI、コマンドメールは、そこに至る前処理の段階が異なるだけです。

## コマンドメールの処理

Caution
2004/03/05 以降は、新しいフレームワークとなりました。

本節はコマンドメールの話です。 メールの本文が複数行あり、それが複数の命令を含むと想定します。

まず、メールは行単位で解析されます。 これは、一行に一つのコマンドが書いてあるという想定です。

空行を無視するなどの基本的な処理の後、コマンド(行の先頭の文字列)が、現 在のコンテキストで許されるコマンドか否か？を確認します。

1) guide や subscribe のようにメンバー以外にも許されるコマンドであれば、 そこから直接、コマンド呼び出しルーチンへ処理が移ります。 ここで許されるコマンドは anonymous_command_mail_allowed_commands 変数で定義されているコマンドです。

2) あらかじめ指定されたユーザだけに許されるコマンドの場合、 command_mail_restrictions のルールに従って他の条件を確認し、 許されたなら、呼び出しルーチンへ処理が移ります。 ここで許されるコマンドは user_command_mail_allowed_commands で定義されているコマンドです。

「あらかじめ指定されたユーザ」には、一般ユーザと管理者が含まれます。 ただし、それぞれの処理のフローが異なります。

「呼び出しルーチン」では、 (コマンドに依存した)返事の送り先の確認と (コマンドに依存する)シンタックスチェックを経て、 FML::Command クラス経由でコマンドが実行されます。 この実行は一般ユーザ権限で実行されます。

admin コマンドも「あらかじめ指定されたユーザ」ですが、 admin コマンドの実行は、ここでは行なわれません。 「admin ...」コマンドは、まず一般ユーザ権限の admin コマンド [1] の実行として処理が進められ、最終的に「FML::Command::User::admin」クラ スが呼び出されます。このクラスの中で、admin_command_mail_restrictions 変数 に基づいてリモート権限があるか？が確認され、もう一度 「FML::Command」クラス経由で管理者権限の「FML::Command::Admin::コマン ド」クラスが呼び出されます(つまりトランポリン・メカニズムです)。

## CUI (makefml/fml)の処理

このプログラムを使える時点で管理者権限(ＭＬのサーバにリモートで入り、 ユーザ fml に su できる権限)があるはずです。よって、特別な制限はありま せん。FML::Command経由で「FML::Command::Admin::コマンド」クラスを直接 呼び出しています。

なお、サーバへリモートからログインするためには SSH で「RSA 2048 ビット 以上の鍵のみを許す、パスワード認証は認めない」といった強固な運用ルール を課して下さい。

### Notes

[1] | 注: admin コマンドは user_command_mail_allowed_commands で許されています

Prev | Home | Next
コマンド(コマンドメール、makefml、CGI) | Up | コマンドの拡張: コマンドメールの場合

fml 8.0 (fml-devel) project homepage is www.fml.org/software/fml8/.
fml 4.0 project homepage is www.fml.org/software/fml4/.
about one floppy bsd routers, see www.bsdrouter.org/.
other free softwares are found at www.fml.org/software/.

author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.

For questions about FML, e-mail <fml-bugs@fml.org>.