MC_ALLOCATE動詞は、呼び出し元トランザクション プログラム (TP) によって発行されます。 ローカル論理ユニット (LU) とパートナー LU の間にセッションを割り当て、( RECEIVE_ALLOCATE と組み合わせて) 呼び出し元 TP と呼び出された TP の間の会話を確立します。 この動詞が正常に実行されると、APPC は会話識別子 (conv_id) を生成します。 conv_idは、他のすべての APPC 会話動詞に必要なパラメーターです。
次の構造体では、 MC_ALLOCATE 動詞で使用される動詞制御ブロック (VCB) について説明します。
構文
struct mc_allocate {
unsigned short opcode;
unsigned char opext;
unsigned char reserv2;
unsigned short primary_rc;
unsigned long secondary_rc;
unsigned char tp_id[8];
unsigned long conv_id;
unsigned char reserv3;
unsigned char synclevel;
unsigned char reserv4[2];
unsigned char rtn_ctl;
unsigned char reserv5;
unsigned long conv_group_id;
unsigned long sense_data;
unsigned char plu_alias[8];
unsigned char mode_name[8];
unsigned char tp_name[64];
unsigned char security;
unsigned char reserv6[11];
unsigned char pwd[10];
unsigned char user_id[10];
unsigned short pip_dlen;
unsigned char FAR * pip_dptr;
unsigned char reserv7;
unsigned char fqplu_name[17];
unsigned char reserv8[8];
unsigned long proxy_user;
unsigned long proxy_domain;
unsigned char reserv9[16];
};
メンバー
オペコード
指定されたパラメーター。 動詞の操作コードを指定します。AP_M_ALLOCATE。
opext
指定されたパラメーター。 動詞演算拡張機能 (AP_MAPPED_CONVERSATION) を指定します。 AP_EXTD_VCB ビットが設定されている場合は、動詞制御ブロックの拡張バージョンが使用されることを示します。 この場合、 MC_ALLOCATE 構造には、同期ポイントのサポートまたは特権プロキシ機能のサポートが含まれます。
reserv2
予約済みフィールド。
primary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定される主なリターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラー コードについては、リターン コードを参照してください。
secondary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるセカンダリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラー コードについては、リターン コードを参照してください。
tp_id
指定されたパラメーター。 ローカル TP を識別します。 このパラメーターの値は 、TP_STARTEDによって返されました。
conv_id
返されたパラメーター。 2 つの TP 間で確立された会話を識別します。
reserv3
予約済みフィールド。
synclevel
指定されたパラメーター。 会話の同期レベルを指定します。 これは、TP がデータの受信確認を要求し、データの受信を確認できるかどうかを決定します。
AP_NONEは、確認処理がこの会話で使用されないことを指定します。
AP_CONFIRM_SYNC_LEVELは、TP がこの会話で確認処理を使用できることを指定します。
AP_SYNCPTは、TP がこの会話で同期ポイント レベル 2 の確認処理を使用できることを指定します。
reserv4
予約済みフィールド。reserv5
予約済みフィールド。rtn_ctl
指定されたパラメーター。 ローカル TP からのセッション要求に対して動作するローカル LU がローカル TP に制御を返すタイミングを指定します。 セッションの詳細については、「 トランザクション・プログラムの概要」を参照してください。AP_IMMEDIATEは、競合の勝者セッションがすぐに使用可能な場合に LU が割り当て、制御を TP に返すように指定します。
AP_WHEN_SESSION_ALLOCATEDは、セッションを割り当てるか、このトピックの「リターン コード」に記載されているエラーの 1 つを検出するまで、LU が TP に制御を戻さないことを指定します。 (セッション制限が 0 の場合、LU はすぐに制御を返します)。セッションが使用できない場合、TP はセッションを待機します。
AP_WHEN_SESSION_FREEは、LU が競合優先セッションまたは競合敗者セッションを割り当てる (使用可能またはアクティブ化できる場合) ことを指定し、TP に制御を戻します。 エラーが発生した場合(このトピックのリターン コードに記載されているように)、呼び出しは primary_rc フィールドと secondary_rc フィールドのエラーと共に直ちに返されます。
AP_WHEN_CONWINNER_ALLOCは、競合の勝者セッションを割り当てるか、このトピックのリターン コードに記載されているエラーの 1 つを検出するまで、LU が制御を返さないことを指定します。 (セッション制限が 0 の場合、LU はすぐに制御を返します)。セッションが使用できない場合、TP はセッションを待機します。
AP_WHEN_CONV_GROUP_ALLOCは、 conv_group_idで指定されたセッションを割り当てるか、このトピックのリターン コードに記載されているエラーの 1 つを検出するまで、LU が TP に制御を戻さないことを指定します。 セッションが使用できない場合、TP はセッションが解放されるまで待機します。
注
AP_IMMEDIATEは、新しいセッションを開始しない rtn_ctl の唯一の値です。 AP_IMMEDIATE以外の値の場合、適切なセッションがすぐに使用できない場合、Microsoft® Host Integration Server はセッションの開始を試みます。 これにより、オンデマンド接続がアクティブになります。
conv_group_id
指定された/返されるパラメーター。 セッションの割り当て元となる会話グループの識別子を指定します。
conv_group_idは、rtn_ctlが WHEN_CONV_GROUP_ALLOCに設定されている場合にのみ必要です。
rtn_ctlが別の値を指定し、primary_rcがAP_OK場合、これは戻り値です。
sense_data
返されたパラメーター。 割り当てエラー (再試行または再試行なし) を示し、センス データを含みます。
plu_alias
指定されたパラメーター。 パートナー LU がローカル TP に認識されるエイリアスを指定します。
plu_aliasは、構成時に確立されたパートナー LU の名前と一致する必要があります。
パラメーターは 8 バイトの ASCII 文字列です。 次の ASCII 文字で構成できます。
大文字
数字 0 ~ 9
スペース
特殊文字 $、#、%、および@
この文字列の最初の文字をスペースにすることはできません。
このパラメーターの値が 8 バイト未満の場合は、右側に ASCII スペース (0x20) を埋め込みます。
パートナー LU に fqplu_name パラメーターを指定する場合は、このパラメーターに 2 進ゼロを入力します。
TP、5250 エミュレーター、APPC アプリケーションを使用するユーザーまたはグループの場合、システム管理者は既定のローカル LU とリモート LU を割り当てることができます。 この場合、フィールドは空白または null のままにされ、ユーザーまたはグループ・メンバーが APPC プログラムを開始すると、デフォルト LU にアクセスします。
mode_name
指定されたパラメーター。 構成時に定義されたネットワーク特性のセットの名前を指定します。mode_nameの値は、構成時にパートナー LU に関連付けられているモードの名前と一致している必要があります。
パラメーターは 8 バイトの EBCDIC 文字ストリングです。 これは、タイプ A EBCDIC 文字セットの文字で構成できます。
大文字
数字 0 ~ 9
特殊文字 $、#、および@
文字列の最初の文字は、大文字または特殊文字である必要があります。
マップされた会話では SNASVCMG を使用しないでください。 SNASVCMG は、APPC によって内部的に使用される予約済み mode_name です。
tp_name
指定されたパラメーター。 呼び出された TP の名前を指定します。 呼び出 し 元の TP のMC_ALLOCATEで指定された tp_name の値は、呼び出された TP のRECEIVE_ALLOCATE で指定された tp_name の値と一致する必要があります。このパラメーターは 64 バイトの EBCDIC 文字ストリングであり、大文字と小文字が区別されます。 tp_name パラメーターは、次の EBCDIC 文字で構成できます。
大文字と小文字
数字 0 ~ 9
特殊文字 $、#、@、ピリオド (.)
tp_nameが 64 バイト未満の場合は、EBCDIC スペース (0x40) を使用して右側に埋め込みます。
SNA 規則では、サービス TP 名には最大 4 文字を指定できます。 最初の文字は、0x00と0x3Fの間の 16 進数のバイトです。 その他の文字は、AE EBCDIC 文字セットの型です。
セキュリティ
指定されたパラメーター。 パートナー LU が呼び出された TP へのアクセスを検証するために必要な情報を提供します。 このトピックの Security パラメーターの使用可能な値 のセクションを参照してください。Reserv6
予約済みフィールド。pwd
指定されたパラメーター。 user_idに関連付けられているパスワードを指定 します。pwd パラメーターは、セキュリティが AP_PGM または AP_SAME に設定されている場合にのみ必要です。 構成中に確立された user_id のパスワードと一致する必要があります。
pwd パラメーターは 10 バイトの EBCDIC 文字ストリングであり、大文字と小文字が区別されます。 これは、次の EBCDIC 文字で構成できます。
大文字と小文字
数字 0 ~ 9
特殊文字 $、#、@、ピリオド (.)
パスワードが 10 バイト未満の場合は、EBCDIC スペース (0x40) を使用して右側に埋め込みます。
APPC 自動ログオン機能を使用する場合は、 pwd 文字ストリングを MS$SAME にハードコーディングする必要があります。 詳細については、「解説」セクションを参照してください。
user_id
指定されたパラメーター。 パートナー TP にアクセスするために必要なユーザー識別子を指定します。 セキュリティ パラメーターが AP_PGM または AP_SAME に設定されている場合にのみ必要です。user_id パラメーターは 10 バイトの EBCDIC 文字列であり、大文字と小文字が区別されます。 パートナー TP 用に構成されたいずれかのユーザー識別子と一致する必要があります。
このパラメーターは、次の EBCDIC 文字で構成できます。
大文字と小文字
数字 0 ~ 9
特殊文字 $、#、@、ピリオド (.)
user_idが 10 バイト未満の場合は、EBCDIC スペース (0x40) を使用して右側に埋め込みます。
APPC 自動ログオン機能を使用する場合は、 user_id 文字ストリングを MS$SAME にハードコーディングする必要があります。 詳細については、「解説」セクションを参照してください。
pip_dlen
指定されたパラメーター。 パートナー TP に渡されるプログラム初期化パラメーター (PIP) の長さを指定します。 範囲は 0 から 32767 です。pip_dptr
指定されたパラメーター。 PIP データを含むバッファーのアドレスを指定します。 このパラメーターは 、pip_dlen が 0 より大きい場合にのみ使用します。PIP データは、パートナー TP またはリモート オペレーティング システムで必要な初期化パラメーターまたは環境セットアップ情報で構成できます。 PIP データは、一般的なデータ ストリーム (GDS) 形式に従う必要があります。 詳細については、IBM SNA マニュアルを参照してください。
Microsoft Windows の場合、データ バッファーは静的データ領域またはグローバルに割り当てられた領域に配置できます。 データ バッファーは、この領域内に完全に収まる必要があります。
reserv7
予約済みフィールド。fqplu_name
指定されたパラメーター。 パートナー LU の完全修飾名を指定します。 これは、リモート ノードで定義されているローカル LU の完全修飾名と一致する必要があります。 このパラメーターは、NETID の 2 つのタイプ A EBCDIC 文字ストリングと、パートナー LU の LU 名で構成されます。 名前は EBCDIC ピリオド (.) で区切られています。plu_aliasが指定されていない場合は、この名前を指定する必要があります。 これは、次の EBCDIC 文字で構成できます。
18大文字
数字 0 ~ 9
特殊文字 $、#、および@
このパラメーターの値が 17 バイト未満の場合は、EBCDIC スペース (0x40) で右側に埋め込みます。
reserv8
予約済みフィールド。proxy_user
指定されたパラメーター。 特権プロキシ機能を使用して偽装するユーザー名を含む Unicode 文字列を指す LPWSTR を指定します。 このフィールドは、拡張 VCB を示す opext フィールドにAP_EXTD_VCB ビットが設定されている場合にのみ使用できます。proxy_domain
指定されたパラメーター。 特権プロキシ機能を使用して偽装するユーザーのドメイン名を含む Unicode 文字列を指す LPWSTR を指定します。 このフィールドは、拡張 VCB を示す opext フィールドにAP_EXTD_VCB ビットが設定されている場合にのみ使用できます。reserv9
予約済みフィールド。
セキュリティ パラメーターに使用できる値
構成中に呼び出された TP に対して確立された会話セキュリティに基づいて、次のいずれかの値を使用します。
会話セキュリティを使用しない呼び出された TP のAP_NONE。
会話セキュリティを使用し、ユーザー識別子とパスワードを必要とする呼び出された TP のAP_PGM。 この情報は 、user_id パラメーターと pwd パラメーターを 使用して指定します。
会話セキュリティを使用し、ユーザー識別子とパスワードを必要とする特権プロキシを使用して呼び出された TP のAP_PROXY_PGMします。 偽装するユーザーのユーザー名とドメイン名を含む Unicode 文字列を指すには、 proxy_user と proxy_domain のポインターを設定する必要があります。 アプリケーションでは、 user_id フィールドと pwd フィールドを設定する必要はありません。
プロキシによって指定された有効なユーザー識別子とパスワードを持つ特権プロキシを使用して呼び出された TP のAP_PROXY_SAME。その後、別の TP が呼び出されます。 偽装するユーザーのユーザー名とドメイン名を含む Unicode 文字列を指すには、 proxy_user と proxy_domain のポインターを設定する必要があります。 アプリケーションでは、 user_id フィールドと pwd フィールドを設定する必要はありません。
たとえば、TP A が特権プロキシによって指定された有効なユーザー識別子とパスワードを使用して TP B を呼び出し、TP B が TP C を呼び出すとします。TP B がAP_PROXY_SAME値を指定した場合、APPC は TP A からのユーザー ID と既に検証済みのインジケーターを TP C の LU を送信します。 このインジケーターは、TP C にパスワードを必要としないように指示します (TP C が既に検証済みのインジケーターを受け入れるように構成されている場合)。
会話セキュリティを使用するため、特権プロキシ メカニズムによって提供されるユーザー識別子とパスワードを必要とする特権プロキシを使用して呼び出された TP のAP_PROXY_STRONGします。 偽装するユーザーのユーザー名とドメイン名を含む Unicode 文字列を指すには、 proxy_user と proxy_domain のポインターを設定する必要があります。 アプリケーションでは、 user_id フィールドと pwd フィールドを設定する必要はありません。 AP_PROXY_STRONG、AP_PROXY_STRONGではクリア テキスト パスワードが許可されないという点でAP_PROXY_PGMとは異なります。 リモート システムが暗号化されたパスワード (強力な会話セキュリティ) をサポートしていない場合、この呼び出しは失敗します。
有効なユーザー識別子とパスワードを使用して呼び出された TP のAP_SAME。この TP は、別の TP を呼び出します。
たとえば、TP A が有効なユーザー識別子とパスワードを使用して TP B を呼び出し、TP B が TP C を呼び出すとします。TP B がAP_SAME値を指定した場合、APPC は TP A からのユーザー ID と既に検証済みのインジケーターを TP C の LU を送信します。 このインジケーターは、TP C にパスワードを必要としないように指示します (TP C が既に検証済みのインジケーターを受け入れるように構成されている場合)。
AP_SAMEが MC_ALLOCATE 動詞で使用される場合、アプリケーションは常に動詞制御ブロック内の user_id および pwd パラメーターの値を提供する必要があります。 Host Integration Server とピア LU の間でネゴシエートされるプロパティに応じて、 MC_ALLOCATE 動詞は次の優先順位で 3 種類の Attach (FMH-5) メッセージのいずれかを送信します。
LU が "既に検証済み" のセキュリティをネゴシエートしている場合、Host Integration Server によって送信された Attach には、VCB で指定された pwd パラメーター フィールドの内容は含まれません。
LU が "永続的な検証" セキュリティをネゴシエートした場合、Host Integration Server によって送信される Attach には VCB で指定された pwd パラメーターが含まれますが、アタッチが LU-LU セッションの開始以降に指定された user_id パラメーターの最初のパラメーターである場合にのみ、後続のすべての Attach (アプリケーションまたはこの LU-LU モードのトリプレットを使用する他のアプリケーションによって発行) の pwd パラメーターが省略されます。
LU が上記のいずれのネゴシエートも行っていない場合、Host Integration Server によって送信された Attach では、すべての Attach の user_id パラメーターと pwd パラメーターの両方が省略されます。
アプリケーションは、LU 間でネゴシエートされたセキュリティー・モードを判断することも、それが発行している MC_ALLOCATE 動詞がその LU-LU モード・トリプレットの最初のものかどうかを判断することもできません。 そのため、セキュリティが AP_SAME に設定されている場合、アプリケーションでは常に VCB の user_id および pwd パラメーター フィールドを設定する必要があります。
永続的検証と既に検証済みのセキュリティの詳細については、SNA 形式ガイドの「FM ヘッダー 5: アタッチ (LU 6.2)」セクションを参照してください。
会話セキュリティを使用するため、ユーザー識別子とパスワードが必要な、呼び出された TP のAP_STRONG。 この情報は 、user_id パラメーターと pwd パラメーターを 使用して指定します。 AP_STRONG AP_STRONGではクリア テキスト パスワードが許可されないという点で、AP_PGMとは異なります。 リモート システムが暗号化されたパスワード (強力な会話セキュリティ) をサポートしていない場合、この呼び出しは失敗します。
APPC 自動ログオン機能を使用する場合は、 セキュリティ をAP_PGMに設定する必要があります。 詳細については、「解説」セクションを参照してください。
リターン コード
AP_OK
プライマリ リターン コード。動詞が正常に実行されました。
AP_UNSUCCESSFUL
プライマリ リターン コード。指定されたパラメーター rtn_ctl TP への制御の即時 (AP_IMMEDIATE) 戻り値を指定し、ローカル LU に使用可能な競合勝者セッションがありませんでした。
AP_PARAMETER_CHECK
プライマリ リターン コード。パラメーター エラーのため、動詞が実行されませんでした。
AP_BAD_RETURN_CONTROL
セカンダリ リターン コード。 rtn_ctl に指定された値が無効です。
AP_BAD_SECURITY
セカンダリ リターン コード。 セキュリティ に指定された値が無効でした。
AP_BAD_SYNC_LEVEL
セカンダリ リターン コード。 sync_level に指定された値が無効です。
AP_BAD_TP_ID
セカンダリ リターン コード。 tp_id に指定された値が無効です。
AP_PIP_LEN_INCORRECT
セカンダリ リターン コード。 pip_dlen の値が 32767 より大きかった。
AP_UNKNOWN_PARTNER_MODE
セカンダリ リターン コード。 mode_name に指定された値が無効です。
AP_BAD_PARTNER_LU_ALIAS
セカンダリ リターン コード。APPC は、提供された partner_lu_aliasを認識しませんでした。
AP_NO_USE_OF_SNASVCMG
セカンダリ リターン コード。SNASVCMG は、 mode_nameの有効な値ではありません。
AP_INVALID_DATA_SEGMENT
セカンダリ リターン コード。PIP データが割り当てられたデータ セグメントよりも長かったか、PIP データ バッファーのアドレスが間違っていました。
AP_ALLOCATION_ERROR
プライマリ リターン コード。APPC が会話を割り当てませんでした。 会話の状態は RESET に設定されます。
このコードは、 MC_ALLOCATE後に発行された動詞を介して返すことができます。
AP_ALLOCATION_FAILURE_NO_RETRY
セカンダリ リターン コード。構成エラーやセッション プロトコル エラーなどの永続的な状態のため、会話を割り当てることができません。 エラーを特定するには、システム管理者がエラー ログ ファイルを調べる必要があります。 エラーが修正されるまで、割り当てを再試行しないでください。
AP_ALLOCATION_FAILURE_RETRY
セカンダリ リターン コード。リンクエラーなどの一時的な状態のため、会話を割り当てませんでした。 エラーの理由は、システム エラー ログに記録されます。 割り当てを再試行します。
AP_COMM_SUBSYSTEM_ABENDED
プライマリ リターン コード。は、次のいずれかの条件を示します。
この会話で使用されたノードで、異常終了が発生しました。
TP と PU 2.1 ノード間の接続が切断されました (LAN エラー)。
TP のコンピューターの SnaBase で、異常終了が発生しました。
システム管理者は、エラー・ログを調べて、異常終了の理由を判別する必要があります。
AP_COMM_SUBSYSTEM_NOT_LOADED
プライマリ リターン コード。動詞の処理中に必要なコンポーネントを読み込んだり終了したりできませんでした。 したがって、通信は行われませんでした。 修正措置については、システム管理者に問い合わせてください。この戻りコードを MC_ALLOCATEと共に使用すると、ローカル LU をサポートする通信システムが見つからなかったことを示すことができます。 (たとえば、 TP_STARTED で指定されたローカル LU エイリアスが正しくないか、構成されていません)。 lu_alias または mode_name が 8 文字未満の場合は、これらのフィールドに右側のスペースが入力されていることを確認する必要があります。 このエラーは、これらのパラメーターがスペースで満たされていない場合に返されます。 これは、MC_ALLOCATE 要求を満たすノードがないためです。
MC_ALLOCATEが複数のノードで構成された Host Integration Server システムに対してこのリターン コードを生成する場合、次の 2 つのセカンダリ リターン コードがあります。
0xF0000001
セカンダリ リターン コード。ノードが起動されていません。
0xF0000002
セカンダリ リターン コード。少なくとも 1 つのノードが開始されましたが、ローカル LU ( TP_STARTED が発行されたとき) がアクティブなノードで構成されていません。 この問題は、次のいずれかである可能性があります。
ローカル LU を持つノードが開始されていません。
ローカル LU が構成されていません。
AP_INVALID_VERB_SEGMENT
プライマリ リターン コード。データ セグメントの末尾を超えて拡張された VCB。AP_STACK_TOO_SMALL
プライマリ リターン コード。アプリケーションのスタック サイズが小さすぎて動詞を実行できませんでした。 アプリケーションのスタック サイズを増やします。AP_CONV_BUSY
プライマリ リターン コード。どの会話でも、一度に 1 つの未処理の会話動詞しか存在できません。 これは、ローカル TP に複数のスレッドがあり、複数のスレッドが同じ conv_idを使用して APPC 呼び出しを発行している場合に発生する可能性があります。AP_THREAD_BLOCKING
プライマリ リターン コード。呼び出し元スレッドは既にブロック呼び出し中です。AP_UNEXPECTED_DOS_ERROR
プライマリ リターン コード。ローカル TP からの APPC 呼び出しの処理中に、オペレーティング システムから APPC にエラーが返されました。 オペレーティング システムのリターン コードは、 secondary_rcを介して返されます。 Intel のバイト スワップ順に表示されます。 問題が解決しない場合は、システム管理者に問い合わせてください。
注釈
MC_ALLOCATE は、マップされた会話を確立します。
TP がこの動詞を発行すると、会話状態は RESET になります。 正常に実行されると (primary_rc がAP_OK)、状態は SEND に変わります。 動詞が実行されない場合、状態は変更されません。
MC_ALLOCATEのいくつかのパラメーターは、EBCDIC または ASCII 文字列です。 TP は CSV CONVERT を使用して、文字列を 1 つの文字セットから他方の文字セットに変換できます。
MC_ALLOCATE要求をすぐに送信するために、呼び出し元の TP は、MC_ALLOCATEの直後にMC_FLUSHまたはMC_CONFIRMを発行できます。 それ以外の場合、 MC_ALLOCATE 要求は、バッファーがいっぱいになるまで、ローカル LU の送信バッファー内の他のデータと共に蓄積されます。
MC_ALLOCATE後にMC_CONFIRMを発行することで、呼び出し元の TP は、割り当てが成功したかどうかをすぐに判断できます (synclevel が AP_CONFIRM_SYNC_LEVEL に設定されている場合)。
通常、 MC_ALLOCATE 動詞の mode_name パラメーターの値は、呼び出された TP のノード用に構成され、パートナー LU との構成中に関連付けられているモードの名前と一致する必要があります。
呼び出された TP のノード上のパートナー LU に関連付けられているモードのいずれかが暗黙的モードの場合、パートナー LU に関連付けられているモード名が mode_nameの値と一致しない場合、2 つの LU 間で確立されたセッションは暗黙的モードになります。
Host Integration Server では、パスワード置換と呼ばれる機能がサポートされています。 これは、Attach メッセージ上の 2 つのノード間を流れるパスワードを暗号化する最新バージョンの IBM i オペレーティング・システム (V3R1) でサポートされているセキュリティー機能です。 ユーザー ID とパスワードを指定して APPC トランザクション プログラムを呼び出すたびに、パスワードは Attach に流れます。 たとえば、これは誰かが IBM i にログオンするたびに発生します。
パスワード置換のサポートは、BIND 要求のバイト 23 のビット 5 を 1 に設定することによって示されます (パスワード置換がサポートされていることを示します)。 リモート システムが BIND 応答でこのビットを設定した場合、Host Integration Server は FMH-5 Attach メッセージに含まれる LU 6.2 会話セキュリティ パスワードを自動的に暗号化します。 Host Integration Server APPC アプリケーションは、VCB の セキュリティ フィールドを MC_ALLOCATE 要求でAP_PGMまたはAP_STRONGに設定することで、この機能を自動的 に 利用します。
APPC アプリケーションが暗号化されたパスワードのフローを強制する場合、アプリケーションは、MC_ALLOCATE要求の VCB の セキュリティ フィールドの AP_STRONG を指定できます。 このオプションは、IBM i V3R1 で定義されているように実装されており、物理ネットワークを流れる前に LU 6.2 pwd (パスワード) フィールドが暗号化されるCM_SECURITY_PROGRAM_STRONGとして、IBM i CPI-C プログラマー・リファレンスに記載されています。
パスワード置換機能は現在、IBM i V3R1 以降でのみサポートされています。 リモート システムがこの機能をサポートしていない場合、Host Integration Server は、10060006のセンス コードを使用してセッションのバインドを解除します。 2 つのノードは、BIND 交換でこの機能をサポートしているかどうかをネゴシエートします。 Host Integration Server は BIND に少し設定し、暗号化のために BIND にランダムなデータを追加します。 リモート ノードがパスワードの置換をサポートしている場合は、BIND 応答で同じビットを設定し、復号化のためにいくつかの (異なる) ランダム データを追加します。
Host Integration Server では、APPC アプリケーションの自動ログオンがサポートされています。 この機能には、ネットワーク管理者による特定の構成が必要です。APPC アプリケーションは、Host Integration Server のクライアントから LAN 側で呼び出す必要があります。 クライアントは Windows ドメインにログインする必要がありますが、Host Integration Server APPC API をサポートする任意のプラットフォームにすることができます。
クライアント アプリケーションは、特殊なハードコーディングされた APPC ユーザー名 MS$SAME とパスワード MS$SAME を使用して、"プログラム" レベルのセキュリティを使用するようにコーディングされています。 このセッション割り当てがクライアントから Host Integration Server に送信されると、Host Integration Server サーバーは、クライアントがログインしている Windows アカウントに対応するホスト アカウントとパスワードを検索し、ホストアカウント情報をホストに送信する APPC 添付メッセージに置き換えます。
注
リモート ノードがパスワード置換を指定するビットを設定し、ランダムなデータを追加することは無効です。
IBM によると、LU 6.2 のパスワード置換の実装では、パスワードの置換はサポートされませんが、パスワード置換ビットはランダムなデータを指定せずに Host Integration Server にエコーバックされます。 これを行うと、Host Integration Server はセンス コード 10060006 でセッションのバインドを解除します。このセンス コードは次のように解釈されます。
1006 = 必須フィールドまたはパラメーターがありません。
0006 = 制御ベクトルの必須サブフィールドが省略されました。
Host Integration Server では、イベント 17 もログに記録する必要があります (APPC セッションのアクティブ化エラー: BIND 否定応答が送信されました)。
正しい解決策は、失敗した実装を修正することです。 ただし、短期的な回避策として、次の Host Integration Server SNA Service レジストリ設定を設定できます: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\snaservr\parameters\NOPWDSUB: REG_SZ: YES
レジストリでこのパラメーターを指定すると、Host Integration Server のパスワード置換のサポートは無効になります。
定義された Windows ユーザーに代わって、特権 APPC アプリケーションが単一の Sign-On 機能を使用して APPC 会話を開くことができるように、Host Integration Server にいくつかの更新が行われました。 これは特権プロキシ機能と呼ばれます。 この機能を呼び出すために、拡張機能が APPC MC_ALLOCATE 動詞に追加されました。
APPC アプリケーションは、特別な Windows グループのメンバーである Windows ユーザー アカウントで起動することによって特権を得る。 ホスト セキュリティ ドメインが構成されている場合、SNA マネージャーは、Host Integration Server のホスト セキュリティ機能で使用する 2 つ目の Windows グループを定義します。 実際のクライアントが実行されているユーザー アカウントがこの 2 つ目の Windows グループのメンバーである場合、クライアントは、ホスト アカウント キャッシュで定義されている任意のユーザー アカウントに代わって APPC 会話を開始する特権を持ちます。
特権プロキシ機能の動作を次に示します。
Host Integration Server 管理者は、APP というホスト セキュリティ ドメインを作成します。 SNA マネージャーが 2 つの Windows グループを作成するようになりました。 最初のグループは APP と呼ばれ、2 つ目はこの例ではAPP_PROXY呼び出されます。 APP グループに割り当てられているユーザーは、シングル サインオンに対して有効になります。 APP_PROXY グループに割り当てられているユーザーは特権プロキシです。 管理者は、SNA マネージャーの [ホスト セキュリティ ドメイン] プロパティ ダイアログ ボックスの [ユーザー] ボタンを使用して、Windows ユーザー AppcUser を APP_PROXY グループに追加します。
管理者は、AppCAPP という Windows サービスとして実行するように Host Integration Server サーバー上に APPC アプリケーションを設定し、そのサービスが AppcUser ユーザー アカウントで動作するように設定されています。 APPCAPP を実行すると、拡張 VCB 形式を使用して ALLOCATE 動詞を使用して APPC セッションが開き、目的のユーザーの Windows ユーザー名 (UserA など) が指定されます。
SNA サービスは、Host Security Domain APP のメンバーである接続からのセッション要求を確認します。 クライアント/サーバー インターフェイスは、実際のクライアントが AppcUser であることを SNA サービスに通知します。
SNA サービスは、AppcUser がAPP_PROXY グループのメンバーであるかどうかを確認します。 AppcUser はAPP_PROXYのメンバーであるため、SNA サービスは APPC Attach (FMH-5) コマンドに UserA のユーザー名/パスワードを挿入し、パートナー TP に送信します。
特権プロキシ機能をサポートするには、APPC アプリケーションで次のプログラム ロジックを実装する必要があります。
APPC アプリケーションは、偽装する Windows ユーザー ID とドメイン名を決定する必要があります。
APPC アプリケーションは、 MC_ALLOCATE 動詞を呼び出す前に、次のパラメーターを設定する必要があります。
拡張 MC_ALLOCATE 動詞制御ブロック構造の使用を有効にするには、 opext フィールドでAP_EXTD_VCBフラグを設定します。
セキュリティをAP_PROXY_SAME、AP_PROXY_PGM、またはAP_PROXY_STRONGに設定します。
偽装するユーザーのユーザー名とドメイン名を含む Unicode 文字列を指すproxy_userとproxy_domainのポインターを設定します。
注
アプリケーションは、MC_ALLOCATE VCB の user_id フィールドと pwd フィールドを設定する必要はありません。
APPC アプリケーションが上記の手順を実行し、 MC_ALLOCATE 動詞を発行すると、Host Integration Server サーバーは、指定された Windows ユーザーのホスト セキュリティ ドメインで検索を実行し、FMH-5 のユーザー ID フィールドとパスワード フィールドをリモート システムに送信される添付メッセージに設定します。