プログラムコールを処理し、ログ、セキュリティチェックなどのクロスカッティング操作を実行するWrapper/Bridge COBOLプログラムで作業しています。 主な動機はチェックしていますプロデューサプログラムを呼び出すためのアクセス権を持っているかどうかにかかわらず、コンシューマプログラムのセキュリティアクセス。COBOL内の別のプログラムのリンケージセクションにリンケージセクションデータを渡す方法
ブリッジCOBOLプログラムをB1、プロデューサプログラムP1とコンシューマ(クライアント)C1とします。
C1がP1を呼び出すときは、B1に電話をかけなければなりません。次に、B1はアクセシビリティをチェックします。 C1がアクセスできる場合、B1はP1にC1のデータを呼び出します。
C1 -> B1 -> P1
ここで、B1とP1との連結部分は同じである。プログラムは、EXEC CICS LINKを使用してお互いに電話をかけています。
COMMAREA、
COMMAREA1 (DataSet Name)
01 COMMAREA-STRUCT,
03 a-field
03 another-field
...
クライアント。
IDENTIFICATION DIVISION.
PROGRAM-ID. Client.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY COMMAREA1
PROCEDURE DIVISION
/* fill CommareaStruct with some values. */
....
/* call B1 Bridge */
EXEC CICS LINK PROGRAM (B1Bridge) NOHANDLE
COMMAREA (COMMAREA-STRUCT)
LENGTH (LENGTH OF COMMAREA-STRUCT)
END-EXEC
....
橋、
IDENTIFICATION DIVISION.
PROGRAM-ID. B1Bridge.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
COPY COMMAREA1
PROCEDURE DIVISION
...
/* access control */
/* logging */
...
/* pass data to P1*/
EXEC CICS LINK PROGRAM (P1) NOHANDLE
COMMAREA (COMMAREA-STRUCT)
LENGTH (LENGTH OF COMMAREA-STRUCT)
END-EXEC
....
プロデューサー。
IDENTIFICATION DIVISION.
PROGRAM-ID. P1
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
COPY COMMAREA1
PROCEDURE DIVISION
....
*doing some business with data in COMMAREA1
...
私が上記を試してみると、ブリッジプログラムB1のコンパイル時の警告が出ました。 "COMMAREA-STRUCTまたはその従属部の1つが参照されましたが、COMMAREA-STRUCTは、アドレス可能性を持たないリンクセクション項目でしたが、この参照は実行時に完全には解決されません。
この意味は? B1のリンケージセクションをP1のリンケージセクションにどのように渡す必要がありますか?
私がこのようにしようとすると、EIBRESP:22とEIBRESP2:26(commarea length error)が実行時に取得されました。
- 編集 -
私はもっと詳しく述べるべきだと思います。
主な動機; 実際には会社COM1とCOM2の2社があります。 COM2は数年間COM1の系列会社でした。 COM1とCOM2にはそれぞれCICS1とCICS2があります。また、COM2クライアントプログラムはCOM1プロデューサプログラムを使用します。 COM2クライアントは、COM1プロデューサを直接呼び出すことはありません。 COM2クライアントはデータをCOMMAREA-STRUCTに入れ、Generic Cobol Program(GCPにする)をリモートで呼び出します。 COMMAREA-STRUCTには、GCPがどのプログラムを呼びたいのかを把握する「プロデューサプログラム名」フィールドもあります。したがって、GCPはCOMMAREA-STRUCTからデータをエクスポートし、プロデューサのフィールドにマップします。 GCPはアドレッシングを使用してマッピング操作を動的に実行します(プロデューサごとに特別なわけではありません)。プロデューサが実行すると、GCPは結果を受け取り、COMMAREA-STRUCTを介してクライアントに戻ります。 このシステムは数年前と同じように設計されました。 COM2のクライアントは何千人、COM1の何千ものプロデューサーがいます。今
、COM2は別にCOM1からしたいと考えています。したがって、COM1は、すべてのCOM1リソース(プロデューサ)への完全なアクセス権をこれ以上与えたくありません。したがって、COM1はCICS1の前に新しいcicsを置くことを望んでいます。これは、B1 Bridgeプログラムだけをローカルで実行するハンドラーCICSになります。これは、ネットワークのセキュリティと企業の政治的決定についても同様です。
少しずつ企業を分離するために、クライアントもプロデューサーも影響を受けるべきではありません。したがって、問題はGCP-Bridgeレイヤーで解決する必要があります。
これは、B1 BridgeがCOM2クライアントのGCPのように動作し、アクセシビリティをチェックして(何らかの方法で適用して)、クライアントからのすべてのデータを変更せずにGCPに渡す必要があるからです。
現在のところ、ログ操作には優先順位はありません。私たちは少しずつ企業の一部に集中します。
あなたの熟練したコメントに感謝します。
* B1は別のCICS上にあり、COM1のLOADLIB1にアクセスできないため、B1はEXEC CICS LINKによってGCPをリモートで呼び出す必要があるため、CALLを使用することはできません。
* commareaを渡すのではなく、チャンネルを渡すのは良い音です。それについて議論するつもりです。
*ところで、私はLENGHT OFでフルワード - ハーフワード競合をチェックします。あなたが正しいです。
*セキュリティチェックについては、「EXEC CICS照会セキュリティ」について説明します。
*上記のとおり、コピーブックは変更できません。唯一の我々は変更することができますが置き換え&見つけることで、クライアント上の
EXEC CICS LINK PROGRAM (B1)
に、
EXEC CICS LINK PROGRAM (GCP)
です。何千人ものクライアントがいるからです。コピーブックを変更して触れることは望ましくありません。
これらの詳細を照らして、私は問題がより理解しやすくなると思います。
したがって、コンパイルの出力リストを見てください。 PROCEDURE DIVISIONヘッダーを見てください。 USINGを参照してください。 @cschneidが詳述しているように、あなたの01はアドレス可能性を持っていません。クライアントプログラムはどのように "ログオン"し、アクセス制御とログ記録を与えるのはなぜですか? –
ログとセキュリティは面白いことがあります。セキュリティのために 'EXEC CICS QUERY SECURITY'をお勧めします(あなたのセキュリティ関係者に確認してください)。ロギング - どこに? VSAM? DB2?何をロギングしていますか? – cschneid
あなたの熟練したコメントをお寄せいただきありがとうございます。私は、問題の詳細と私の回答からなる質問を編集しました。 – Tunceren