ONC+ 開発ガイド

SAC の概要

サービスアクセスコントローラ (SAC) は SAF の制御プロセスです。 SAC は /etc/inittab のエントリに入れて init() で起動します。SAC の機能は、ポートモニターを、システム管理者が指定した状態に保持することです。

管理コマンド sacadm を使用して、SAC にポートモニターの状態を変更させることができます。また、sacadm を使用して、ポートモニターを SAC の管理下に入れたり、管理から外したり、SAC が管理しているポートモニターの情報をリストしたりできます。

SAC の管理ファイルには、SAC の管理下の各ポートモニターを一意的に識別できるタグと、各ポートモニターを起動するコマンドのパス名が入っています。

SAC が実行する主な機能を簡単に示します。

ポートモニターの基本機能

ポートモニターは、マシン上の同タイプの入力ポートセットを監視するプロセスです。ポートモニターの主目的は、外部からのサービス要求を検出し、それを適切にディスパッチすることです。

ポートとは、外部に開かれたシステム上のアクセスポイントです。ネットワーク上のアドレス (TSAP または PSAP)、固定された端末回線、着信電話回線などがポートとなります。何をポートとみなすかは、ポートモニター自体が定義します。

ポートモニターはいくつかの基本機能を実行します。これらの機能の一部は SAF への適合が必要となります。 また、ポートモニター自体の条件や設計により指定される機能もあります。

ポートモニターの主な機能を 2 つ示します。

ポート管理

ポートモニターの第 1 の機能はポートの管理です。ポートを実際にどう管理するかの詳細は、ポートモニターの開発者が定義します。ポートモニターは複数のポートを同時に管理できます。

ポート管理の例として、電話回線の接続における回線速度の設定、適切なネットワークアドレスとの結合、サービス終了後のポートの再初期化、プロンプトの出力などがあります。

アクティビティの監視

ポートモニターの第 2 の機能は、アクティビティ指示に対応するポートを監視することです。検出されるアクティビティには、次の 2 つのタイプがあります。

  1. アクティビティの 1 つは、ポートモニターがモニタ固有のアクションを取るための指示です。ポートモニター固有アクティビティの例として、ブレークキーが押されると回線速度を循環させるという指示があります。すべてのポートモニターが、同じ指示を認識して同じように反応するわけではありません。ポートモニターがどのような指示を検出するかは、ポートモニターの開発者が定義します。

  2. もう 1 つのアクティビティは着信サービス要求です。ポートモニターはサービス要求を受信すると、受信したポートからどのサービスが要求されているかを判定できなければなりません。同じサービスを複数のポートで提供できることに注意してください。

ポートモニターのその他の機能

この項では、ポートモニターのその他の機能について簡単に説明します。

システムへのアクセス制限

ポートモニターは現在実行中のサービスに影響することなく、システムへのアクセスを制限できなければなりません。そのために、ポートモニターは使用可能と使用不可の 2 つの内部状態を保持しています。ポートモニターの起動時の状態は、sac で設定した環境変数 ISTATE の値で決まります。SAC とポートモニターのインタフェース を参照してください。

ポートモニターの有効と無効を切り換えると、その管理下にあるすべてのポートが影響を受けます。ポートモニターが 1 つのポートだけを管理している場合は、そのポートだけが影響を受けます。複数ポートがそのポートモニターの管理下にあるときは、それらのポートすべてが影響を受けます。

ポートモニターの有効と無効の切り換えは動的な操作です。この操作で、ポートモニターの内部状態が変わります。ただし、次にポートモニターを起動するときには、この状態は失われます。

これに対して、個々のポートの有効と無効の切り換えは静的な操作です。この操作によって管理ファイルが変更されます。次にポートモニターを起動しても、ポートの状態は残ります。

utmpx エントリの作成

ポートモニターは、起動するサービスの utmpx エントリを作成します。そのとき、エントリのタイプフィールドは USER_PROCESS に設定されます。ただし、pmadm でサービスを追加したときに -fu を指定した場合だけです。utmpx エントリは、次にサービスによって変更されます。サービスが終了したときは、utmpx エントリは DEAD_PROCESS に設定されなければなりません。

ポートモニターのプロセス ID とファイルのロック

ポートモニターは、起動したときに自分のプロセス ID をカレントディレクトリの _pid というファイルに書き込み、そのファイルにアドバイザリロックを設定します。

サービス環境の変更: doconfig() の実行

ポートモニターは、ポートモニターの管理ファイル _pmtab に指定されているサービスを起動する前に、サービスごとの構成スクリプトがあればライブラリ関数 doconfig() を呼び出してそれを実行します。セキュリティ上の理由だけではなく、サービスごとの構成スクリプトで制限コマンドの実行が指示される場合があるので、ポートモニターはルートアクセス権で起動されます。サービスの呼び出し方法の詳細は、ポートモニターの開発者が定義します。