ALLOCATE
動詞は、呼び出し元トランザクション プログラム (TP) によって発行されます。 ローカル論理ユニット (LU) とパートナー LU の間にセッションを割り当て、( RECEIVE_ALLOCATE と組み合わせて) 呼び出し元 TP と呼び出された TP の間の会話を確立します。 この動詞が正常に実行されると、APPC は会話識別子 (conv_id) を生成します。
conv_idは、他のすべての APPC 会話動詞に必要なパラメーターです。
次の構造体では、 ALLOCATE 動詞で使用される動詞制御ブロックについて説明します。
構文
struct 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 conv_type;
unsigned char synclevel;
unsigned char reserv3[2];
unsigned char rtn_ctl;
unsigned char reserv4;
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 reserv5[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_B_ALLOCATE) を指定します。
opext
指定されたパラメーター。 動詞演算拡張機能 (AP_BASIC_CONVERSATION) を指定します。 AP_EXTD_VCB ビットが設定されている場合は、動詞制御ブロックの拡張バージョンが使用されることを示します。 この場合、 ALLOCATE 構造体には、同期ポイントのサポートまたは特権プロキシ機能のサポートが含まれています。
reserv2
予約済みフィールド。
primary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定される主なリターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラー コードについては、リターン コードを参照してください。
secondary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるセカンダリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラー コードについては、リターン コードを参照してください。
tp_id
指定されたパラメーター。 ローカル TP を識別します。 このパラメーターの値は 、TP_STARTEDによって返されました。
conv_id
返されたパラメーター。 2 つの TP 間で確立された会話を識別します。
conv_type
指定されたパラメーター。
ALLOCATEのみによって、割り当てる会話の種類を指定するために使用され、AP_BASIC_CONVERSATIONまたはAP_MAPPED_CONVERSATIONのいずれかです。
ALLOCATE がマップされた会話を確立する場合、ローカル TP は基本的な会話動詞を発行し、データ レコードを論理レコードに変換し、論理レコードをデータ レコードに変換する独自のマッピング レイヤーを提供する必要があります。 パートナー TP は、基本的な会話動詞を発行してマッピング レイヤーを提供できます。または、マップされた会話動詞を使用できます (パートナー TP が、マップされた会話動詞をサポートする APPC の実装を使用している場合)。 詳細については、IBM SNA マニュアルを参照してください。
synclevel
指定されたパラメーター。 会話の同期レベルを指定します。 これは、TP がデータの受信確認を要求し、データの受信を確認できるかどうかを決定します。
AP_NONEは、確認処理がこの会話で使用されないことを指定します。
AP_CONFIRM_SYNC_LEVELは、TP がこの会話で確認処理を使用できることを指定します。
AP_SYNCPTは、TP がこの会話で同期ポイント レベル 2 の確認処理を使用できることを指定します。
reserv3
予約済みフィールド。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_ALLOCATEDは、競合の勝者セッションを割り当てるか、このトピックのリターン コードに記載されているエラーの 1 つを検出するまで、LU が制御を返さないことを指定します。 (セッション制限が 0 の場合、LU はすぐに制御を返します)。セッションが使用できない場合、TP はセッションを待機します。
AP_WHEN_CONV_GROUP_ALLOCATEDは、 conv_group_idで指定されたセッションを割り当てるか、このトピックのリターン コードに記載されているエラーの 1 つを検出するまで、LU が TP に制御を戻さないことを指定します。 セッションが使用できない場合、TP はセッションが解放されるまで待機します。
注
AP_IMMEDIATEは、新しいセッションを開始しない rtn_ctl の唯一の値です。 AP_IMMEDIATE以外の値の場合、適切なセッションがすぐに使用できない場合、Host Integration Server はセッションの開始を試みます。 これにより、オンデマンド接続がアクティブになります。
reserv4
予約済みフィールド。
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 にアクセスします。 既定の LU の詳細については、Microsoft Host Integration Server のヘルプを参照してください。
mode_name
指定されたパラメーター。 構成時に定義されたネットワーク特性のセットの名前を指定します。mode_nameの値は、構成時にパートナー LU に関連付けられているモードの名前と一致している必要があります。
パラメーターは 8 バイトの EBCDIC 文字ストリングです。 これは、タイプ A EBCDIC 文字セットの文字で構成できます。
大文字
数字 0 ~ 9
特殊文字 $、#、および@
文字列の最初の文字は、大文字または特殊文字である必要があります。
マップされた会話では SNASVCMG を使用しないでください。 SNASVCMG は、APPC によって内部的に使用される予約済み mode_name です。 基本的な会話でこの名前を使用することはお勧めしません。
tp_name
指定されたパラメーター。 呼び出された TP の名前を指定します。 呼び出 し 元の TP で 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 へのアクセスを検証するために必要な情報を提供します。構成中に呼び出された 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 が既に検証済みのインジケーターを受け入れるように構成されている場合)。
ALLOCATE 動詞でAP_SAMEを使用する場合、アプリケーションは常に動詞制御ブロック内の user_id パラメーターと pwd パラメーターの値を指定する必要があります。 SNA サーバーとピア LU の間でネゴシエートされるプロパティに応じて、 ALLOCATE 動詞は次の優先順位で 3 種類の Attach (FMH-5) メッセージのいずれかを送信します。
LU が "既に検証済み" のセキュリティをネゴシエートしている場合、SNA サーバーによって送信された Attach には、VCB で指定された pwd パラメーター フィールドの内容は含まれません。
LU が "永続的な検証" セキュリティをネゴシエートした場合、SNA サーバーによって送信される Attach には VCB で指定された pwd パラメーターが含まれますが、attach が LU-LU セッションの開始以降に指定された user_id パラメーターの最初のパラメーターである場合にのみ、後続のすべてのアタッチ (アプリケーションまたはこの LU-LU モードの triplet を使用する他のアプリケーションによって発行される) で pwd パラメーターを省略します。
LU が上記のいずれのネゴシエートも行っていない場合、SNA サーバーによって送信された Attach では、すべての Attach で user_id パラメーターと pwd パラメーターの両方が省略されます。
アプリケーションは、LU 間でネゴシエートされたセキュリティー・モードを判断することも、それが発行している 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に設定する必要があります。 詳細については、「解説」セクションを参照してください。
reserv5
予約済みフィールド。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) 形式に従う必要があります。 詳細については、「 SNA LU6.2 リファレンス: IBM によって公開されたピア プロトコル」を参照してください。
Windows の場合、データ バッファーは静的データ領域またはグローバルに割り当てられた領域に配置できます。 データ バッファーは、この領域内に完全に収まる必要があります。
reserv7
予約済みフィールド。fqplu_name
指定されたパラメーター。 パートナー LU の完全修飾名を指定します。 これは、リモート ノードで定義されているローカル LU の完全修飾名と一致する必要があります。 このパラメーターは、NETID の 2 つのタイプ A EBCDIC 文字ストリングと、パートナー LU の LU 名で構成されます。 名前は EBCDIC ピリオド (.) で区切られています。plu_aliasが指定されていない場合は、この名前を指定する必要があります。 これは、次の EBCDIC 文字で構成できます。
大文字
数字 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
予約済みフィールド。
リターン コード
AP_OK
プライマリ リターン コード。動詞が正常に実行されました。
接続失敗
プライマリ リターン コード。指定されたパラメーター rtn_ctl TP への制御の即時 (AP_IMMEDIATE) 戻り値を指定し、ローカル LU に使用可能な競合勝者セッションがありませんでした。
AP_パラメーターチェック
プライマリ リターン コード。パラメーター エラーのため、動詞が実行されませんでした。
不正なリターン制御
セカンダリ リターン コード。 rtn_ctl に指定された値が無効です。
AP_セキュリティ不正
セカンダリ リターン コード。 セキュリティ に指定された値が無効でした。
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_不正なパートナー_LUエイリアス
セカンダリ リターン コード。APPC は、提供された partner_lu_aliasを認識しませんでした。
AP_BAD_CONV_TYPE (基本的な会話の場合)
セカンダリ リターン コード。 conv_type に指定された値が無効です。
AP_NO_USE_OF_SNASVCMG (マップされた会話の場合)
セカンダリ リターン コード。SNASVCMG は、 mode_nameの有効な値ではありません。
AP_INVALID_DATA_SEGMENT
セカンダリ リターン コード。PIP データが割り当てられたデータ セグメントよりも長かったか、PIP データ バッファーのアドレスが間違っていました。
AP_割り当てエラー
プライマリ リターン コード。APPC が会話を割り当てませんでした。 会話の状態は RESET に設定されます。
このコードは、 ALLOCATE の後に発行された動詞を介して返すことができます。
AP_ALLOCATION_FAILURE_NO_RETRY
セカンダリ リターン コード。構成エラーやセッション プロトコル エラーなどの永続的な状態のため、会話を割り当てることができません。 エラーを特定するには、システム管理者がエラー ログ ファイルを調べる必要があります。 エラーが修正されるまで、割り当てを再試行しないでください。
AP_割り当て失敗再試行
セカンダリ リターン コード。リンクエラーなどの一時的な状態のため、会話を割り当てませんでした。 エラーの理由は、システム エラー ログに記録されます。 割り当てを再試行します。
AP_COMM_SUBSYSTEM_ABENDED
プライマリ リターン コード。は、次のいずれかの条件を示します。
この会話で使用されたノードで、異常終了が発生しました。
TP と PU 2.1 ノード間の接続が切断されました (LAN エラー)。
TP のコンピューターの SnaBase で、異常終了が発生しました。
システム管理者は、エラー・ログを調べて、異常終了の理由を判別する必要があります。
AP_COMM_サブシステムが読み込みされていません
プライマリ リターン コード。動詞の処理中に必要なコンポーネントを読み込んだり終了したりできませんでした。 したがって、通信は行われませんでした。 修正措置については、システム管理者に問い合わせてください。この戻りコードを ALLOCATE と共に使用すると、ローカル LU をサポートする通信システムが見つからなかったことを示すことができます。 (たとえば、 TP_STARTED で指定されたローカル LU エイリアスが正しくないか、構成されていません)。 lu_alias または mode_name が 8 文字未満の場合は、これらのフィールドに右側のスペースが入力されていることを確認する必要があります。 ALLOCATE 要求を満たすノードがないため、これらのパラメーターにスペースが入っていない場合、このエラーが返されます。
ALLOCATE が Host Integration Server を使用して複数のノードで構成されたシステムに対してこのリターン コードを生成する場合、次の 2 つのセカンダリ リターン コードがあります。
0xF0000001
セカンダリ リターン コード。ノードが起動されていません。
0xF0000002
セカンダリ リターン コード。少なくとも 1 つのノードが開始されましたが、ローカル LU ( TP_STARTED が発行されたとき) がアクティブなノードで構成されていません。 この問題は、次のいずれかである可能性があります。
ローカル LU を持つノードが開始されていません。
ローカル LU が構成されていません。
AP_無効な動詞セグメント
プライマリ リターン コード。データ セグメントの末尾を超えて拡張された 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 のバイト スワップ順に表示されます。 問題が解決しない場合は、システム管理者に問い合わせてください。
注釈
ALLOCATE では、基本的な会話またはマップされた会話を確立できます。
TP がこの動詞を発行すると、会話状態は RESET になります。 正常に実行されると (primary_rc がAP_OK)、状態は SEND に変わります。 動詞が実行されない場合、状態は変更されません。
ALLOCATE のいくつかのパラメーターは、EBCDIC または ASCII 文字列です。 TP では、共通サービス動詞 (CSV) CONVERT を使用して、文字列を 1 つの文字セットから他方の文字セットに変換できます。
ALLOCATE 要求を直ちに送信するために、呼び出し元の TP は ALLOCATE の直後に FLUSH または CONFIRM を発行できます。 それ以外の場合、 ALLOCATE 要求は、バッファーがいっぱいになるまで、ローカル LU の送信バッファー内の他のデータと共に蓄積されます。
ALLOCATE 後に CONFIRM を発行することで、呼び出し元の TP は、割り当てが成功したかどうかをすぐに判別できます (synclevel が AP_CONFIRM_SYNC_LEVEL に設定されている場合)。
通常、 ALLOCATE 動詞の mode_name パラメーターの値は、呼び出された TP のノード用に構成され、パートナー LU との構成中に関連付けられているモードの名前と一致する必要があります。
呼び出された TP のノード上のパートナー LU に関連付けられているモードのいずれかが暗黙的モードの場合、パートナー LU に関連付けられているモード名が mode_nameの値と一致しない場合、2 つの LU 間で確立されたセッションは暗黙的モードになります。
Host Integration Server では、パスワード置換と呼ばれる機能がサポートされています。 これは、ATTACH メッセージ上の 2 つのノード間を流れるパスワードを暗号化する、IBM i オペレーティング・システムでサポートされるセキュリティー機能です。 ユーザー ID とパスワードを指定して APPC トランザクション プログラムを呼び出すたびに、パスワードは Attach に流れます。 たとえば、これは誰かが IBM i にログオンするたびに発生します。
パスワード置換のサポートは、BIND 要求のバイト 23 のビット 5 を 1 に設定することによって示されます (パスワード置換がサポートされていることを示します)。 リモート・システムが BIND 応答でこのビットを設定すると、SNA サーバーは FMH-5 Attach メッセージに含まれる LU 6.2 会話セキュリティー・パスワードを自動的に暗号化します。 Host Integration Server を使用する APPC アプリケーションでは、 VCB のセキュリティ フィールドを ALLOCATE 要求でAP_PGMまたはAP_STRONGに設定することで、この機能が自動的に利用されます。
APPC アプリケーションが暗号化されたパスワードを強制的にフローさせる場合、アプリケーションは ALLOCATE 要求の VCB のセキュリティ フィールドのAP_STRONGを指定できます。 このオプションは、IBM i V3R1 で定義されているように実装されており、物理ネットワークを流れる前に LU 6.2 pwd (パスワード) フィールドが暗号化されるCM_SECURITY_PROGRAM_STRONGとして、IBM i CPI-C プログラマー・リファレンスに記載されています。
パスワード置換機能は現在、IBM i V3R1 以降でのみサポートされています。 リモート・システムがこの機能をサポートしていない場合、SNA サーバーは、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 を使用して、"プログラム" レベルのセキュリティを使用するようにコーディングされています。 このセッション割り当てがクライアントから SNA サーバーに送信されると、サーバーは、クライアントがログインしている Windows アカウントに対応するホスト アカウントとパスワードを検索し、ホストに送信する APPC 添付メッセージにホスト アカウント情報を置き換えます。
注
リモート ノードがパスワード置換を指定するビットを設定し、ランダムなデータを追加することは無効です。
IBM によると、LU 6.2 のパスワード置換の実装では、パスワードの置換はサポートされませんが、パスワード置換ビットはランダムなデータを指定せずに Host Integration Server にエコーバックされます。 これを行うと、SNA サーバーはセンス コード 10060006 を使用してセッションのバインドを解除します。このセンス コードは次のように解釈されます。
1006 = 必須フィールドまたはパラメーターがありません。
0006 = 制御ベクトルの必須サブフィールドが省略されました。
Host Integration Server では、イベント 17 もログに記録する必要があります (APPC セッションのアクティブ化エラー: BIND 否定応答が送信されました)。
正しい解決策は、失敗した実装を修正することです。 ただし、短期的な回避策として、次の Host Integration Server サービス レジストリ設定を設定できます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\snaservr\parameters\NOPWDSUB: REG_SZ: はい
レジストリでこのパラメーターを指定すると、パスワード置換のサポートは無効になります。
定義された Windows ユーザーに代わって、特権 APPC アプリケーションが単一の Sign-On 機能を使用して APPC 会話を開くことができるように、Host Integration Server にいくつかの更新が行われました。 これは特権プロキシ機能と呼ばれます。 この機能を呼び出すために、APPC 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 サービスとして実行するようにホスト統合サーバー上に 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 アプリケーションは 、ALLOCATE 動詞を呼び出す前に、次のパラメーターを設定する必要があります。
拡張 ALLOCATE 動詞制御ブロック構造の使用を有効にするには、 opext フィールドに AP_EXTD_VCB フラグを設定します。
セキュリティをAP_PROXY_SAME、AP_PROXY_PGM、またはAP_PROXY_STRONGに設定します。
偽装するユーザーのユーザー名とドメイン名を含む Unicode 文字列を指すproxy_userとproxy_domainのポインターを設定します。
注
アプリケーションは ALLOCATE VCB の user_id フィールドと pwd フィールドを設定する必要はありません。
APPC アプリケーションが上記の手順を実行して ALLOCATE 動詞を発行すると、Host Integration Server サーバーは、指定された Windows ユーザーのホスト セキュリティ ドメインで参照を実行し、FMH-5 Attach メッセージでリモート システムに送信されるユーザー ID とパスワード フィールドを設定します。