PCオーガナイザー

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)