PCオーガナイザーとは 5250エミュレータの機能で 5250エミュレータの中から
それを実行しているローカルPCのコマンドを実行する機能のことです。
例えばPCオーガナイザーを使ってWindows の Excelを起動することもできます。
元々のPCオーガナイザーの動作原理は非常に簡単なものです。
PCオーガナイザーは STRPCO と STRPCCMD という二つのコマンドより成っています。
STRPCO : オーガナイザーの開始 で PCオーガナイザーを開始したら
STRPCCMD : PC コマンドの開始 によって 指定したPCコマンドを実行します。
STRPCCMD の動作原理は単純で 5250ストリームの中に非表示で PCコマンドを埋め込んで、
PC 側の 5250エミュレータ(PCOMM または ClientAccess ) がこれを実行するだけです。
要はPCオーガナイザーは 5250ストリームに埋め込んだPCコマンドを
PCクライアント側の 5250エミュレータが実行する、という
クライアント/サーバー型の実行システムなのです。
これが5250エミュレータではなくブラウザである場合は
セキュリティ・システム上ブラウザでは簡単にPCコマンドを実行できるわけにはいきません。
もしブラウザが HTMLストリームに埋め込まれたPCコマンドを簡単に実行できるような機能があれば、
それはまさしくセキュリティ・ホールであり、
アクセスするだけでPCを破壊してしまうようなサイトを作ることが可能になってしまいます。
PCオーガナイザーでは PCコマンドが埋め込まれて
隠されているだけであることは、IBMマニュアルには記載されていませんが、
これは(株)オフィスクアトロが5250 ストリームを解析してわかったことです。
PCオーガナイザーの動作原理を発見してこれを解決しているソフトウェアは世界中で弊社製品だけです。
他にはありません。
まとめると、
- PCオーガナイザーは 5250ストリームにPCコマンドを埋め込んでいる
- PCオーガナイザーは 5250エミュレータで PCコマンドを実行する
クライアント/サーバー・モデルである
ということがわかりました。
AutoWeb でのPCオーガナイザー
AutoWeb では PCオーガナイザーを、そのまま無修正で実行することができます。
ユーザー・プログラムには何の変更も加える必要はありません。
PCオーガナイザーが起動するWebフェーシングは世界中でも AutoWeb だけです。
AutoWebによって PCオーガナイザーを利用する場合は、ユーザーは特別な設定は何も必要ありません。
AutoWeb では、オーガナイザーはそのまま動作させることができます。
AutoWeb でのPCオーガナイザーの動作原理
AutoWeb は PCオーガナイザーの実行を検知すると
PCの実行コマンドをDOS の BATCHファイルにコマンドを埋め込んで
IFS にバッチ・ファイルを保管してエンド・ユーザーにダウンロードして実行することを促します。
エンド・ユーザーは自らの意思でバッチ・ファイルをダウンロードして
実行するのですから、これはセキュリティ・ホールには当たりません。
上記の HTMLのソースの一部は次のとおりです。
<form name="CGIFORM" method="get" action="/AS400-NET.USR/TEMP/QACXPTPQ3K.BAT"> <div class="wrap"> <div class="cnt"> <p class="cmd">PC コマンド: NOTEPAD C:\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS <p class="msg">このコマンドを実行しますか? <div class="cnt_btn"> <input type="submit" class="btn_y" value="は い"> <input type="button" class="btn_n" value="い い え" onclick="history.back()"> </div> </div> </div>
【解説】
action="/AS400-NET.USR/TEMP/QACXPTPQ3K.BAT" が示すように
QACXPTPQ3K.BAT という名前のバッチ・ファイルが生成されています。
【例】バッチ・ファイルの内容
@echo off START /B NOTEPAD C:\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS
【解説】
これは Windows の HOSTSファイルを NOTEPAD によってオープンする命令です。
TONAKAI/3.0 によるPCオーガナイザーの移行
TONAKAI/3.0 を使えば PCオーガナイザーを起動している CLP ( CLプログラム)を
Webで動作する CLPに変換することができます。
TONAKAI も PCオーガナイザーは動作原理は AutoWeb の場合と同じです。
5250エミュレータで動作していた STRPCOコマンドと STRPCCMD は
それぞれ STRHTP コマンドと、STRHTPCMD に書き換えられます。
5250エミュレータ | TONAKAI/3.0 | |
---|---|---|
オーガナイザーの開始 | STRPCO | STRHTP |
PCコマンドの実行 | STRPCCMD | STRHTPCMD |
【PCM001CL: 変換前のCLPソース】
0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* PCM001CL : メモ帳の起動 (HOSTS) */ 0004.00 /*---------------------------------------------------------*/ 0005.00 DCL VAR(&PCCMD) TYPE(*CHAR) LEN(123) 0006.00 0007.00 CHGVAR VAR(&PCCMD) VALUE('NOTEPAD + 0008.00 C:WINDOWSSYSTEM32DRIVERSETCHOSTS') 0009.00 STRPCO PCTA(*NO) 0010.00 MONMSG MSGID(IWS4010) 0011.00 STRPCCMD PCCMD(&PCCMD) PAUSE(*NO) 0012.00 ENDPGM
【PCM001CL: 変換後のCLPソース】
0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* PCM001CL : メモ帳の起動 (HOSTS) */ 0004.00 /*---------------------------------------------------------*/ 0005.00 /*-------------------------------------------------------------------*/ 0006.00 /* CRTMOD=*NONE */ 0007.00 /* CRTPGM=CRTCLPGM CGIBIN/PCM001CL SRCFILE(ASNET.USR/QCLSRC) + */ 0008.00 /* GENOPT(*NOXREF *NOPATCH) AUT(*ALL) */ 0009.00 /* USER=QTR */ 0010.00 /* TYPE=CLP */ 0011.00 /* HTML=/AS400-NET.USR/PROJECT/PCM001CL/.HTM */ 0012.00 /* LIBL=CGIBIN QTRFIL QTEMP QGPL ASNET.COM */ 0013.00 /* CALL=HTTP://218.44.135.22/QSYS.LIB/CGIBIN.LIB/PCM001CL.PGM */ 0014.00 /* TEXT= メモ帳の起動 (HOSTS) */ 0015.00 /* SESSIO=*NO */ 0016.00 /* KEEP-ALIVE=*NO */ 0017.00 /* SMARTCONNECTION=*YES */ 0018.00 /* CCSID=5035 */ 0019.00 /* CHARSET=SHIFT_JIS */ 0020.00 /* XML-DATABIND=*NO */ 0021.00 /* 作成日 :CRTDATE=2015/07/27 時刻 :16:00:20 BY QTR */ 0022.00 /* 変更日 :CHGDATE=2015/07/27 時刻 :16:00:20 BY QTR */ 0023.00 /*-------------------------------------------------------------------*/ 0024.00 DCL VAR(&PCCMD) TYPE(*CHAR) LEN(123) 0025.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0026.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) 0027.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) 0028.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) 0029.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) 0030.00 DCL VAR(&MSGQ) TYPE(*CHAR) LEN(10) 0031.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) 0032.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0033.00 0034.00 RTVJOBA TYPE(&TYPE) 0035.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ 0036.00 CHGVAR VAR(&MSGQ) VALUE('*SYSOPR ') 0037.00 ENDDO /* バッチ */ 0038.00 ELSE CMD(DO) /* 対話式 */ 0039.00 CHGVAR VAR(&MSGQ) VALUE('*TOMSGQ ') 0040.00 ENDDO /* 対話式 */ 0041.00 0042.00 CHGVAR VAR(&PCCMD) VALUE('NOTEPAD + 0043.00 C:\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS') 0044.00 STRHTP PCTA(*NO) 0045.00 MONMSG MSGID(IWS4010) 0046.00 STRHTPCMD PCCMD(&PCCMD) PAUSE(*NO) 0047.00 RETURN 0048.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + 0049.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 0050.00 MSGFLIB(&MSGFLIB) 0051.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) 0052.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 0053.00 MSGTYPE(*ESCAPE) 0054.00 ENDDO 0055.00 ELSE CMD(DO) 0056.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + 0057.00 MSGDTA(&MSGDTA) TOMSGQ(*TOPGMQ) + 0058.00 MSGTYPE(*ESCAPE) 0059.00 ENDDO 0060.00 ENDPGM
【解説】
コンパイル・プロセッサーの追加
eStudio でのコンパイルを指示するコンパイル・プロセッサーが追加されています。
コンパイル・プロセッサーは QMAKESRC にも追加されています。
0005.00 /*-------------------------------------------------------------------*/ 0006.00 /* CRTMOD=*NONE */ 0007.00 /* CRTPGM=CRTCLPGM CGIBIN/PCM001CL SRCFILE(ASNET.USR/QCLSRC) + */ 0008.00 /* GENOPT(*NOXREF *NOPATCH) AUT(*ALL) */ : :
メッセージ用の DCL文と MONMSG の追加
エラーをモニターするための MONMSG とそれに必要な変数の DCL文が追加されています。
0025.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0026.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) : 0032.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
RTVJOBA と MSGQ の追加
このジョブがバッチ・ジョブか対話式であるかを判別するために
RTVJOBA と MSGQ のセットが追加されています。
0034.00 RTVJOBA TYPE(&TYPE) 0035.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ 0036.00 CHGVAR VAR(&MSGQ) VALUE('*SYSOPR ') 0037.00 ENDDO /* バッチ */ 0038.00 ELSE CMD(DO) /* 対話式 */ 0039.00 CHGVAR VAR(&MSGQ) VALUE('*TOMSGQ ') 0040.00 ENDDO /* 対話式 */
STRPCO コマンドは STRHTP コマンドに書き換えられます。
ただし STRHTPコマンドは何も行いません。
0044.00 STRHTP PCTA(*NO)
STRPCCMD コマンドは STRHTPCMD コマンドに置き換えられます。
STRHTPCMD はPCコマンドを実行するためのバッチ・ファイルを IFS に生成して
そのバッチ・ファイルのダウンロードと実行をエンド・ユーザーに促します。
0046.00 STRHTPCMD PCCMD(&PCCMD) PAUSE(*NO)