HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
現在のプロセス特権が,引数に指定されている特権と一致するかどうかに応じて, TRUE または FALSE という文字列値を戻します。特権の肯定形,および否定形のいずれも指定できます。
F$PRIVILEGE (特権)
特権
特権,またはコンマ (,) で区切られた特権のリストを含む文字列を指定します。プロセス特権のリストについては,『OpenVMS システム・セキュリティ・ガイド』を参照してください。 [NO]ALL を除く,任意のプロセス特権を 1 つ指定します。
F$PRIVILEGE 関数を使用して,ユーザの現在のプロセスに関する特権を識別します。特権の前に "NO" が付いている場合は,関数が TRUE を戻すよう,その特権は無効になります。 F$PRIVILEGE 関数はリストのキーワードをそれぞれチェックし, 1 つでも偽があれば FALSE を戻します。
| #1 |
|---|
$ PROCPRIV = F$PRIVILEGE("OPER,GROUP,TMPMBX,NONETMBX")
$ SHOW SYMBOL PROCPRIV
PROCPRIV = "FALSE"
|
この例では,F$PRIVILEGE 関数を使用して,プロセスが OPER 特権,GROUP 特権,および TMPMBX 特権を持っているか,またユーザが NETMBX 特権を持っていないかを調べています。
この例に示されているプロセスは,OPER ( オペレータ ) 特権,GROUP 特権, TMPMBX ( 一時メールボックス ) 特権,および NETMBX (ネットワーク・メールボックス) 特権のすべてを持っています。したがって,プロセスが NETMBX 特権を持っていますが, priv-state リストに NONETMBX が指定されているため, FALSE が戻されます。他の 3 つのキーワードの論理演算の結果は真ですが, NONETMBXの結果が偽であるため,この式全体は偽であると評価されます。
現在のプロセス名文字列を得るために使用します。 F$PROCESS 関数では引数は必要ありませんが,括弧は指定しなければなりません。
F$PROCESS()
なし。
| #1 |
|---|
$ NAME = F$PROCESS() $ SHOW SYMBOL NAME NAME = "MARTIN" |
この例では,F$PROCESS 関数は現在のプロセス名を戻し,その名前が,NAME というシンボルに割り当てられます。
ディレクトリ・ファイルを検索し,指定したファイルの完全ファイル指定を戻します。
F$SEARCH (ファイル指定[,ストリーム id])
ファイル指定
検索するファイル指定を含む文字列を指定します。装置名またはディレクトリ名を省略する場合には,F$SEARCH 関数は,現在の省略時のディスクおよびディレクトリを,省略時の値として使用します。しかし F$SEARCH 関数は,ファイル名またはファイル・タイプに対して省略時の値を補いません。バージョン番号を省略する場合には,F$SEARCH 関数は,最高のバージョン番号を持つファイルのファイル指定を戻します。 ファイル指定 引数でワイルドカード文字を使用すると, F$SEARCH 関数を呼び出すたびに, ファイル指定 引数に当てはまる次のファイル指定が戻されます。 ファイル指定 引数に当てはまる最後のファイル指定が戻された後は,空文字列が戻されます。ストリーム id
検索ストリーム識別番号を示す,正の整数を指定します。F$SEARCH 関数を 2 回以上使用し,それぞれに異なる ファイル指定 引数を指定したい場合は,検索ストリーム識別番号を使用して,それぞれの検索コンテキストを管理します。コマンド・プロシージャの中で F$SEARCH 関数を 2 回以上使用し,異なる ファイル指定 引数を使用する場合には,各検索を別々に識別するために,ストリーム id 引数を指定します。
ストリーム id 引数を省略すると,F$SEARCH 関数は,異なる ファイル指定 引数が指定されるたびに,ディレクトリ・ファイルの先頭から検索を開始します。
F$SEARCH レキシカル関数は,RMS サービスの $SEARCH を呼び出し,ディレクトリ・ファイルを検索し,指定したファイルの完全ファイル指定を戻します。 F$SEARCH 関数を使用すると,$SEARCH RMS サービスを使用して,ディレクトリ内のファイルを検索できます。$SEARCH ルーチンについての詳細は,『OpenVMS Record Management Services Reference Manual』を参照してください。コマンド・プロシージャ内のループで F$SEARCH 関数を使用すると,ワイルドカード文字を含む ファイル指定 引数と一致するファイルすべてのファイル指定を戻すことができます。 F$SEARCH 関数が実行されるたびに,ワイルドカード文字を含むファイル指定に一致する,次のファイル指定が戻されます。次に戻すファイル指定がなくなると,空文字列が戻されます。ループ内で F$SEARCH 関数を使用する場合は, ファイル指定 引数に,アスタリスク (*) またはパーセント記号 (%) ワイルドカード文字を使用しなければなりません。ワイルドカード文字を使用しない場合は, F$SEARCH 関数は常に同じファイル指定を戻します。
次のいずれかの方法を使用して,検索ストリームのコンテキストを維持する必要があります。
- ストリーム id 引数を指定し,明示的に維持する。
- ストリーム id 引数を省略し, F$SEARCH 関数を実行するたびに同じ ファイル指定 引数を使用して,暗黙に維持する。
検索ストリームのコンテキストを維持しない場合は,異なる ファイル指定 引数を指定するたびに,ディレクトリ・ファイルの先頭から新しい検索を開始することになります。
注意
レキシカル関数 F$SEARCH は,ユーザが指定した選択基準に一致したすべてのファイルを戻すことができます。また,検索開始時から検索終了時までの間の任意の時点でディレクトリに存在するすべてのファイルを戻すことができます。検索中に作成,リネーム,または削除されたファイルは,戻されないことがあります。
| #1 |
|---|
$ START:
$ FILE = F$SEARCH("SYS$SYSTEM:*.EXE")
$ IF FILE .EQS. "" THEN EXIT
$ SHOW SYMBOL FILE
$ GOTO START
|
このコマンド・プロシージャは,SYS$SYSTEM ディレクトリにある,すべての .EXE ファイルの最新バージョンのファイル指定を表示します ( バージョン番号にアスタリスク (*) が使用されていないので,最新バージョンだけが表示されます )。 ファイル指定 引数である SYS$SYSTEM:*.EXE は文字列式なので,引用符 (" ") で囲んでいます。
stream-id 引数が指定されていないため, F$SEARCH 関数は 1 つの検索ストリームを使用します。後続の F$SEARCH 呼び出しは,同じ ファイル指定 引数を使用して, SYS$SYSTEM から .EXE ファイルの次のファイル指定を戻します。各 .EXE ファイルの最新バージョンが表示された後は, F$SEARCH 関数は空文字列を戻し,このプロシージャは終了します。
| #2 |
|---|
$ START:
$ COM = F$SEARCH ("*.COM;*",1)
$ DAT = F$SEARCH ("*.DAT;*",2)
$ SHOW SYMBOL COM
$ SHOW SYMBOL DAT
$ IF (COM.EQS. "") .AND. (DAT.EQS. "") THEN EXIT
$ GOTO START
|
このコマンド・プロシージャは,.COM ファイルと .DAT ファイルの両方の省略時のディスクおよびディレクトリを検索します。各検索のコンテキストが維持されるように,各 F$SEARCH 関数に対して stream-id 引数が指定されている点に注意してください。
最初の F$SEARCH 関数は,ファイル・タイプが .COM であるファイルの検索を,ディレクトリ・ファイルの先頭から開始します。.COM ファイルが検出されると,検索コンテキストを維持するためにポインタが設定されます。 F$SEARCH 関数をもう一度実行すると,ファイル・タイプが .DAT であるファイルの検索を,ディレクトリ・ファイルの先頭から開始します。このプロシージャがループを実行して,START というラベルに戻ると,各 F$SEARCH 関数は stream-id 引数を使用して,ディレクトリ・ファイルの正しい位置から検索を開始します。 .COM ファイルと .DAT ファイルのすべてのバージョンが戻された後,このプロシージャは終了します。
| #3 |
|---|
$ FILESPEC = F$SEARCH("TRNTO""SMITH SALLY""::DKA1:[PROD]*.DAT")
$ SHOW SYMBOL FILESPEC
FILESPEC = "TRNTO"smith password"::DKA1:[PROD]CARS.DAT"
|
この例では,F$SEARCH 関数を使用して,リモート・ノードのファイルのファイル指定を戻しています。アクセス制御文字列は, F$SEARCH 関数に対する引数として文字列式の一部で使用されているため,二重引用符で囲まれています。文字列式に引用符含める場合は,二重引用符を 2 つ重ねて指定する必要があります。
F$SEARCH 関数が,アクセス制御文字列を含むノード名を戻す場合は,実際のユーザのパスワードが "password" という単語に置き換えられます。
指定した利用者特権を許可または禁止します。 F$SETPRV 関数は,利用者特権を示すキーワードのリストを戻します。このリストには, F$SETPRV 関数が実行される前の指定した特権に関する状態が表示されます。特権を許可または禁止するためには,指定された特権を変更できるように設定されていなければなりません。
特権の制限事項についての詳細は,『OpenVMS System Services Reference Manual』の $SETPRV システム・サービスの説明を参照してください。
F$SETPRV (特権)
特権
特権,またはコンマ (,) で区切られた特権のリストを定義する,文字列式を指定します。プロセス特権のリストについての詳細は,『OpenVMS ユーザーズ・マニュアル』を参照してください。
レキシカル関数 F$SETPRV は,$SETPRV システム・サービスを呼び出し,指定した利用者特権を許可または禁止します。 $SETPRV 関数は,利用者特権を示すキーワードのリストを戻します。このリストには, F$SETPRV 関数が実行される前の指定した特権の状態が表示されます。特権 引数に指定した特権を変更することが許可されているかいないかに関わらず,F$SETPRV 特権は,ユーザの現在の特権に関するキーワードを戻します。ただし,F$SETPRV 関数が許可または禁止するのは,変更することを許可されている特権だけです。
F$SETPRV 関数を含むプログラムまたはプロシージャを実行する場合は, F$SETPRV 関数が,ユーザのプロセスを適正な特権状態に復元しているかを必ず確認してください。詳細は,以下の例を参照してください。
| #1 |
|---|
$ OLDPRIV = F$SETPRV("OPER,NOTMPMBX")
$ SHOW SYMBOL OLDPRIV
OLDPRIV = "NOOPER,TMPMBX"
|
この例では,プロセスは OPER 特権および TMPMBX 特権を変更できる権限が与えられています。 F$SETPRV 関数は OPER 特権を許可し,TMPMBX 特権を禁止します。さらに F$SETPRV 関数は,変更する前のこれらの特権の状態を示すために, NOOPER と TMPMBX というキーワードを戻します。
特権キーワードのリストは文字列リテラルなので,引用符 ("") で囲まなければなりません。
| #2 |
|---|
$ SHOW PROCESS/PRIVILEGE
05-JUN-2001 15:55:09.60 RTA1: User: HELRIEGEL
Process privileges:
Process rights identifiers:
INTERACTIVE
LOCAL
$ NEWPRIVS = F$SETPRV("ALL, NOOPER")
$ SHOW SYMBOL NEWPRIVS
NEWPRIVS = "NOCMKRNL,NOCMEXEC,NOSYSNAM,NOGRPNAM,NOALLSPOOL,
NOIMPERSONATE,NODIAGNOSE,NOLOG_IO,NOGROUP,NOACNT,NOPRMCEB,
NOPRMMBX,NOPSWAPM,NOALTPRI,NOSETPRV,NOTMPMBX,NOWORLD,NOMOUNT,
NOOPER,NOEXQUOTA,NONETMBX,NOVOLPRO,NOPHY_IO,NOBUGCHK,NOPRMGBL,
NOSYSGBL,NOPFNMAP,NOSHMEM,NOSYSPRV,NOBYPASS,NOSYSLCK,NOSHARE,
NOUPGRADE,NODOWNGRADE,NOGRPPRV,NOREADALL,NOSECURITY,OPER"
$ SHOW PROCESS/PRIVILEGE
05-JUN-2001 10:21:18.32 User: INAZU Process ID: 00000F24
Node: TOKNOW Process name: "_FTA23:"
Authorized privileges:
NETMBX SETPRV SYSPRV TMPMBX
Process privileges:
ACNT may suppress accounting messages
ALLSPOOL may allocate spooled device
ALTPRI may set any priority value
AUDIT may direct audit to system security audit log
BUGCHK may make bug check log entries
BYPASS may bypass all object access controls
CMEXEC may change mode to exec
CMKRNL may change mode to kernel
DIAGNOSE may diagnose devices
DOWNGRADE may downgrade object secrecy
EXQUOTA may exceed disk quota
GROUP may affect other processes in same group
GRPNAM may insert in group logical name table
GRPPRV may access group objects via system protection
IMPERSONATE may impersonate another user
IMPORT may set classification for unlabeled object
LOG_IO may do logical i/o
MOUNT may execute mount acp function
NETMBX may create network device
OPER may perform operator functions
PFNMAP may map to specific physical pages
PHY_IO may do physical i/o
PRMCEB may create permanent common event clusters
PRMGBL may create permanent global sections
PRMMBX may create permanent mailbox
PSWAPM may change process swap mode
READALL may read anything as the owner
SECURITY may perform security administration functions
SETPRV may set any privilege bit
SHARE may assign channels to non-shared devices
SHMEM may create/delete objects in shared memory
SYSGBL may create system wide global sections
SYSLCK may lock system wide resources
SYSNAM may insert in system logical name table
SYSPRV may access objects via system protection
TMPMBX may create temporary mailbox
UPGRADE may upgrade object integrity
VOLPRO may override volume protection
WORLD may affect other processes in the world
Process rights:
INTERACTIVE
LOCAL
System rights:
SYS$NODE_TOKNOW
$ NEWPRIVS = F$SETPRV(NEWPRIVS)
$ SHOW PROCESS/PRIVILEGE
05-JUN-2001 16:05:07.23 RTA1: User: JERROM
Process privileges:
OPER operator privilege
Process rights identifiers:
INTERACTIVE
LOCAL
|
この例では,DCL コマンドの SHOW PROCESS/PRIVILEGE コマンドを使用して,現在のプロセスに関する特権を表示しています。このプロセスには何も特権がありません。
次に,F$SETPRV 関数を使用して,ALL キーワードを処理し,シンボル NEWPRIVS に記録されている各特権の以前の状態を許可します。次に F$SETPRV 関数は NOOPER キーワードを処理し, OPER の以前の状態を NEWPRIVS に記録し,OPER ( オペレータ ) 特権を禁止します。戻される文字列に OPER 特権が 2 回表示される点に注意してください。最初は NOOPER,次は OPER と表示されます。
SHOW PROCESS/PRIVILEGE コマンドを入力すると,現在のプロセスでは, OPER 特権を除くすべての特権が許可されていることが表示されます。
戻される文字列を F$SETPRV のパラメータとして使用すると,プロセスは OPER 特権が許可されます。これは NEWPRIVS シンボルに OPER コマンドが 2 度表示されたためです。その結果,F$SETPRV は最初のキーワード NOOPER を検索し,特権を無効にします。最終的には NEWPRIVS 文字列内の他のキーワードを処理した後,OPER が表示され, OPER 特権が許可されます。
現在の特権環境を保存するために ALL や NOALL を使用する場合は,次のコマンド・プロシージャを実行して,コマンド・プロシージャのプロセスを変更することをおすすめします。
$ CURRENT_PRIVS = F$SETPRV("ALL") $ TEMP = F$SETPRV("NOOPER")
このプロシージャを使用すると,以前の特権環境に戻すために,コマンド・プロシージャの最後に次のコマンドを指定することができます。
$ TEMP = F$SETPRV(CURRENT_PRIVS)
| #3 |
|---|
$ SAVPRIV = F$SETPRV("NOGROUP")
$ SHOW SYMBOL SAVPRIV
SAVPRIV = "GROUP"
$ TEST = F$PRIVILEGE("GROUP")
$ SHOW SYMBOL TEST
TEST = "TRUE"
|
この例では,プロセスには GROUP 特権を変更する権限が与えられていません。しかし,F$SETPRV 関数は,GROUP 特権の現在の設定情報を戻します。
F$PRIVILEGE 関数は,プロセスが GROUP 特権を持つかどうかを判断するために使用されています。この関数から戻された TRUE という文字列は, F$SETPRV 関数がこの特権を禁止しようとしたにもかかわらず,プロセスが GROUP 特権を持つことを示しています。
| #4 |
|---|
$ SHOW PROCESS/PRIVILEGE 05-JUN-2001 15:55:09.60 RTA1: User: KASER Process privileges: AUDIT may direct audit to system security audit log DOWNGRADE may downgrade object secrecy IMPORT may set classification for unlabeled object UPDATE |
これらのプロセスに関する特権は VAX 固有の特権であり, OpenVMS VAX システムの Security Enhancement Service Software (SEVMS) でのみ使用されます。
| 前へ | 次へ | 目次 | 索引 |