コマンドハンドラの仕様
コマンドハンドラでは、異なる環境から異なるユーザが異なるコマンドを実行した場合に、ブローカがどう応答するかを指定することができます。 ユーザがコマンドを実行する時、Helixブローカは一致するコマンドハンドラを検索し、最初に見つかった一致を使用します。 ユーザのコマンドに一致するコマンドハンドラが存在しない場合、コマンドはターゲットのHelix Coreサーバに転送され、通常処理されます。
コマンドハンドラの仕様の一般的なシンタックスは、broker.conf
のサンプルに示されています。
command: commandpattern { # Conditions for the command to meet (optional) # Note that with the exception of 'flags', these are regex patterns. flags = required-flags; args = required-arguments; user = required-user; workspace = required-client-workspace; prog = required-client-program; version = required-version-of-client-program; # What to do with matching commands (required) action = pass | reject | redirect | filter | respond ; # How to go about it destination = altserver; # Required for action = redirect execute = /path/to/filter/program; # Required for action = filter message = rejection-message; # Required for action = reject }
commandpattern
パラメータには正規表現を使用でき、ワイルドカード.*
を含めることができます。 例えば、commandpattern
のuser.*
はp4 user
コマンドとp4 users
コマンドの両方に一致します。 詳細については、正規表現の概要を参照してください。
以下の表はパラメータについて詳しく説明しています。
パラメータ | 意味 |
---|---|
|
処理されるコマンドのコマンドラインに指定される可能性のあるオプションのリスト。 この機能により、ユーザが指定するオプションに応じて、同じ |
|
処理されるコマンドのコマンドラインで指定される可能性のある引数のリスト。 |
|
コマンドを実行したユーザの名前。 |
|
コマンド実行時に有効だったHelixサーバクライアントワークスペースの設定。 |
|
ユーザがコマンドを実行したHelixサーバクライアントアプリケーション。 この機能により、アプリケーションごとにコマンドを処理することができます。 |
|
ユーザがコマンドを実行したHelixサーバアプリケーションのバージョン。 |
|
Helixブローカが指定のコマンドを処理する方法を定義します。 有効な値は、 |
|
リダイレクトされたコマンドについては、コマンドのリダイレクト先のレプリカの名前。 リダイレクト先は、 リダイレクト先をキーワード リダイレクト先をコマンドのリダイレクト先のサーバの |
|
実行するフィルタプログラムへのパス。 フィルタプログラムについて詳しくは、フィルタプログラムを参照してください。 |
|
ユーザに送信されるメッセージ。一般的には、コマンドが実行される前に送信されます。上記のアクションのいずれとも併用できます。 |
接続を認証します。 |
例えば、次のコマンドハンドラはユーザjoe
がbuildonly
クライアントワークスペースでp4 submit
を起動することを禁止します。
command: submit { user = joe; workspace = buildonly; action = reject; message = "Submit failed: Please do not submit from this workspace." }
正規表現の概要
正規表現、またはregexとは、文字列とのパターン一致に使用される、検索パターンをなす一続きの文字列のことです。 以下は、コマンドハンドラの仕様で使用できる正規表現の機能の概要です。
正規表現は、0以上のブランチからなります。 ブランチは、|
で区切ります。 正規表現は、少なくとも1つのブランチと一致する任意の文字列と一致します。
ブランチは、0以上の連結されるピースからなります。 すべてのピースが順に一致する場合に、ブランチが一致します。つまり、最初のピース、2番目のピース、3番目のピースなどのように、ピースが順に一致すると、ブランチが一致することになります。
ピースは、原子、あるいは原子とそれに続く量指定子(*
、+
、または?
)です。 原子に*
が続くと、原子が0回以上並んだインスタンスに一致します。 原子に+
が続くと、原子が1回以上並んだインスタンスに一致します。 原子に?
が続くと、原子が0回または1回並んだインスタンスに一致します。
原子は、以下のいずれかからなります。
- 括弧で囲まれた下位の正規表現 - その下位の正規表現に一致
- 範囲(以下を参照)
- . - 任意の1文字と一致
- ^ - 文字列の最初に一致
- $ - 文字列の最後に一致
\
に1文字が続いたもの - その文字に一致- 他に意味を持たない1文字 - その文字に一致
範囲は、角括弧([]
)に囲まれた一続きの文字列であり、通常はそのシーケンスの任意の1文字に一致します。 シーケンスが^
で始まる場合、そのシーケンスに含まれない任意の1文字に一致します。 シーケンス内の2文字が-
で区切られている場合、この記号は2つの文字間に含まれるすべてのASCII文字の短縮形です(例: [0-9]
は10進数の任意の1文字に一致し、[a-z]
は小文字のアルファベットの任意の1文字に一致します)。 シーケンスにリテラル]
を含めるには、それを最初の1文字にします(^
に続けることもできます)。 シーケンスにリテラル-
を含めるには、それを最初か最後の1文字にします。
フィルタプログラム
コマンドハンドラのaction
がfilter
である場合、Helixブローカはexecute
パラメータにより指定されるプログラムまたはスクリプトを実行し、プログラムによって返されるアクションを実行します。 フィルタプログラムを使用すると、ブローカコンフィギュレーションファイルによって提供される機能を超えて規則を実施することができます。
Helixブローカは、コマンドの詳細を次の形式でプログラムの標準入力に渡すことによって、フィルタプログラムを起動します。
コマンドの詳細 | 定義 |
---|---|
|
ユーザコマンド |
|
ブローカが接続待機しているポート |
|
ターゲットサーバが接続待機しているポート |
|
クライアントのP4PORT設定 |
|
クライアントアプリケーションプログラム |
|
クライアントアプリケーションプログラムのバージョン |
|
クライアントプロトコルのレベル |
|
APIプロトコルのレベル |
|
中止前にテーブルをロックする最大ロック時間(ミリ秒単位) |
|
最も高い権限( |
|
結果として返されるデータの最大行数 |
|
コマンドによりスキャンされるデータの最大行数 |
|
クライアントワークスペースの名前 |
|
要求ユーザの名前 |
|
クライアントのIPアドレス |
|
プロキシのIPアドレス(ある場合) |
|
クライアントの作業ディレクトリ |
|
コマンドへの引数の数 |
|
1番目の引数(ある場合) |
|
2番目の引数(ある場合) |
|
クライアントのホスト名 |
|
ブローカの内部バージョンレベル。 |
|
プロキシの内部バージョンレベル(ある場合)。 |
コマンドの引数に印字不能文字が含まれている場合、%記号のあとにその印字不能文字のASCIIコードを表す2桁の16進数を続けたものが、フィルタプログラムに送信されます。 例えば、タブ文字は%09
とエンコードされます。
スクリプトがデータを必要としているかどうかにかかわらず、フィルタプログラムは他の処理を実行する前に標準入力(STDIN)からこのデータを読ま込まなければなりません。 フィルタスクリプトが標準入力(STDIN)からデータを読み込まない場合、「パイプの破損」エラーが発生し、ブローカがユーザのコマンドを拒否する場合があります。
フィルタプログラムは、以下の4つのいずれかの形式でデータを表示し、標準出力(stdout)のブローカに応答しなければなりません。
action: PASS message: a message for the user (optional)
action: REJECT message: a message for the user (required)
action: REDIRECT altserver: (an alternate server name) message: a message for the user (optional)
action: RESPOND message: a message for the user (required)
action: CONTINUE
action
の値は、大文字と小文字を区別します。
action
キーワードは常に必須であり、ユーザの要求への応答方法をブローカに指示します。 使用可能なaction
は、以下のとおりです。
操作 | 定義 |
---|---|
|
ユーザのコマンドを変更せずに実行します。 ユーザへの |
|
ユーザのコマンドを拒否し、エラーメッセージを返します。 ユーザへの |
|
コマンドを別の(代替)レプリカサーバにリダイレクトします。 このアクションを実装するため、ブローカは代替サーバとの新しい接続を確立し、元のサーバではなく代替サーバにクライアントから送信されるすべてのメッセージをルーティングします。 これは、クライアントが代替Webサーバに直接接続するように要求されるHTTPリダイレクションとは異なります。 |
|
コマンドを実行せずに、情報提供メッセージを返します。 ユーザへの |
|
与えられたコマンドに一致する次のコマンドハンドラまで繰り延べます。 複数のハンドラの使用について詳しくは、「ブローカが複数のコマンドハンドラを処理する方法」を参照してください。 |
フィルタプログラムが、上記4つのメッセージによるもの以外の応答を返した場合、ユーザのコマンドは拒否されます。 フィルタスクリプトコードの実行中にエラーが発生したためブローカがユーザのコマンドを拒否した場合、ブローカはエラーメッセージを返します。
ブローカフィルタプログラムでは、複数行のメッセージ応答を処理することが困難です。 ブローカからメッセージを送信する際に新しい行が正しく解釈されるようにするには、次のような構文を使用する必要があります。
message="\"line 1\nline 3\nline f\n\""
この行は必ず引用符で囲む必要があります。
次の手順