## Tcl9.0.3/Tk9.0.3 Documentation > Tcl Commands > safe

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    safe — 安全な解釈実行機能の生成と操作 Creating and manipulating safe interpreters
  構文 SYNOPSIS
  指示項目 OPTIONS
  説明 DESCRIPTION
  諸命令 COMMANDS
    ::safe::interpCreate ?child? ?options...?
    ::safe::interpInit child ?options...?
    ::safe::interpConfigure child ?options...?
    ::safe::interpDelete child
    ::safe::interpFindInAccessPath child directory
    ::safe::interpAddToAccessPath child directory
    ::safe::setSyncMode ?newValue?
    ::safe::setLogCmd ?cmd arg...?
  指示項目 OPTIONS
    -accessPath directoryList
    -autoPath directoryList
    -statics boolean
    -noStatics
    -nested boolean
    -nestedLoadOk
    -deleteHook script
  ALIASES
    source fileName
    load fileName
    file ?subcommand args...?
    encoding ?subcommand args...?
    exit
  SECURITY
  TYPICAL USE
  SYNC MODE
  SEE ALSO
  KEYWORDS

### NAME

safe — 安全な解釈実行機能の生成と操作 Creating and manipulating safe interpreters

### 構文 SYNOPSIS

::safe::interpCreate ?child? ?options...?
::safe::interpInit child ?options...?
::safe::interpConfigure child ?options...?
::safe::interpDelete child
::safe::interpAddToAccessPath child directory
::safe::interpFindInAccessPath child directory
::safe::setSyncMode ?newValue?
::safe::setLogCmd ?cmd arg...?

#### 指示項目 OPTIONS

?-accessPath pathList?
?-autoPath pathList?
?-statics boolean?
?-noStatics?
?-nested boolean?
?-nestedLoadOk?
?-deleteHook script?

### 説明 DESCRIPTION

安全なTclは信頼できないTcl記述譜を安全に実行し､又､この様な記述譜による潜在的に危険な機能性の使用の仲介を提供する仕組みである｡ 　　　 Safe Tcl is a mechanism for executing untrusted Tcl scripts safely and for providing mediated access by such scripts to potentially dangerous functionality.

安全な Tcl は信頼できないTcl記述譜が呼出し元の応用譜に危害を与えらないことを確実にする｡機密事項や個人情報攻撃を防御する｡信頼できないTcl記述譜は中央集中処理依頼型の応用譜や計算機の中枢の崩壊から防がれている｡信頼できないTcl記述譜は､中央集中処理型計算機の中や､いかなる組織に提供している中央集中処理型応用譜の中に､保存されている情報の開示から妨げられている｡ 　　　 Safe Tcl ensures that untrusted Tcl scripts cannot harm the hosting application. It prevents integrity and privacy attacks. Untrusted Tcl scripts are prevented from corrupting the state of the hosting application or computer. Untrusted scripts are also prevented from disclosing information stored on the hosting computer or in the hosting application to any party.

安全な Tcl は､ source と load と file と encoding と exit 命令の為に予め定義したショートカットの一揃いを含み､更に､自動-組込みと梱包の仕組みが可能な､安全で機能制限した解釈実行機能を､親の解釈実行機能に､生成することを許容する｡ 　　　 Safe Tcl allows a parent interpreter to create safe, restricted interpreters that contain a set of predefined aliases for the source, load, file, encoding, and exit commands and are able to use the auto-loading and package mechanisms.

ファイル体系の構造の情報は安全な解釈実行機能には全く漏洩しない､理由は､そちらからは､算譜の要素を含む仮想的な経路のみが利用できるだけであるから｡安全な解釈実行機能がファイルを実行する(source)よう要求する時は､仮想的な経路の算譜の要素を､実行するファイルの名前の経路の部分として使用する; 親の解釈実行機能は算譜の要素を実際のディレクトリーの名前に透明に翻訳し､要求された操作を実行する(更なる詳細は下の SECURITY 参照)｡下記に記述した命令の任意附加旗標を使用して､異なる水準の安全保障を選択することも可能である｡　　　 No knowledge of the file system structure is leaked to the safe interpreter, because it has access only to a virtualized path containing tokens. When the safe interpreter requests to source a file, it uses the token in the virtual path as part of the file name to source; the parent interpreter transparently translates the token into a real directory name and executes the requested operation (see the section SECURITY below for details). Different levels of security can be selected by using the optional flags of the commands described below.

安全な Tcl によって､親の解釈実行機能内に提供された全ての命令は safe の名前空間内で活動する｡ 　　 All commands provided in the parent interpreter by Safe Tcl reside in the safe namespace.

### 諸命令 COMMANDS

親の解釈実行機能内で次の命令が提供されている: 　 The following commands are provided in the parent interpreter:

::safe::interpCreate ?child? ?options...?
  安全な解釈実行機能を生成し､ ALIASES の節で記述されたショートカットを実装し､与えられた指示項目 options によって指定されたように自動組込みと梱包の仕組みを初期化する｡指示項目の引数の記述については､下の OPTIONS の節を参照されたい｡もし､ slave 引数が省略されると､名前が生成される｡::safe::interpCreate は常に解釈実行機能の名前を返す｡ 　　 Creates a safe interpreter, installs the aliases described in the section ALIASES and initializes the auto-loading and package mechanism as specified by the supplied options. See the OPTIONS section below for a description of the optional arguments. If the child argument is omitted, a name will be generated. ::safe::interpCreate always returns the interpreter name.

  名前が child の解釈実行機能は名前空間区切りを含んでも好いが､先頭や末尾の名前空間区切りを有してはならず､又､名前空間の区切りの中に過剰のコロンを含んではならない｡解釈実行機能の名前は大域名前空間 :: に対し相対修飾され､ ::safe::interpCreate 命令が評価される名前空間に相対修飾ではない｡ The interpreter name child may include namespace separators, but may not have leading or trailing namespace separators, or excess colon characters in namespace separators. The interpreter name is qualified relative to the global namespace ::, not the namespace in which the ::safe::interpCreate command is evaluated.

::safe::interpInit child ?options...?
  この命令は､安全な解釈実行機能を生成しない処を除いて､ interpCreate に似ている｡子供 child は interp create -safe の様な他の手段によって予め生成しておかねばならない｡解釈実行機能の名前 child は名前空間区切りを含んでも好く､ interpCreate と同じ制約の対象である｡ This command is similar to interpCreate except it that does not create the safe interpreter. child must have been created by some other means, like interp create -safe. The interpreter name child may include namespace separators, subject to the same restrictions as for interpCreate.

::safe::interpConfigure child ?options...?
  もし､ options が全く与えられないと､名前の付けられた安全な解釈実行機能の為の､全ての指示項目のための設定を､指示項目と､この child の為の現在の値のリストとして返す｡もし､追加の引数が一つ与えられると､ name と value の２要素のリストを返す､ここで､ name は､指示項目の完全名で､ value は､あの指示項目と child の為の値である｡もし２つ以上の追加の引数が与えられると､安全な解釈実行機能を再構成設定を起こし､それぞれ及び与えられた指示項目のみ変更する｡指示項目の記述については下の OPTIONS の節を参照されたい｡使用例は: 　　　 If no options are given, returns the settings for all options for the named safe interpreter as a list of options and their current values for that child. If a single additional argument is provided, it will return a list of 2 elements name and value where name is the full name of that option and value the current value for that option and the child. If more than two additional arguments are provided, it will reconfigure the safe interpreter and change each and only the provided options. See the section on OPTIONS below for options description. Example of use:

      # 同じ構成設定を"$i0"として伴う解釈実行機能を生成する:
      # Create new interp with the same configuration as "$i0":
      set i1 [safe::interpCreate {*}[safe::interpConfigure $i0]]

      # 現在の削除済み鈎を取得する
      # Get the current deleteHook
      set dh [safe::interpConfigure $i0  -del]

      # 解釈実行機能の静的組込み可の属性と削除済み鈎のみを変更
      # (他は変更せずに残す)
      # Change (only) the statics loading ok attribute of an
      # interp and its deleteHook (leaving the rest unchanged):
      safe::interpConfigure $i0  -delete {foo bar} -statics 0

::safe::interpDelete child
  安全な解釈実行機能を削除し対応する親の解釈実行機能のデータ構造を浄化する｡もし､ deleteHook 記述譜がこの解釈実行機能として指定されると､解釈実行機能が削除される前に､追加の引数としての解釈実行機能の名前によって評価される｡ 　 Deletes the safe interpreter and cleans up the corresponding parent interpreter data structures. If a deleteHook script was specified for this interpreter it is evaluated before the interpreter is deleted, with the name of the interpreter as an additional argument.

::safe::interpFindInAccessPath child directory
  この命令は､安全な解釈実行機能の現在の仮想的利用経路内の実際のディレクトリー directory の為の算譜の要素を見付けて返す｡もしディレクトリーが見付からないと不都合を発生する｡使用例として: 　　 This command finds and returns the token for the real directory directory in the safe interpreter's current virtual access path. It generates an error if the directory is not found. Example of use:

      $child eval [list set tk_library \
            [::safe::interpFindInAccessPath $name $tk_library]]

::safe::interpAddToAccessPath child directory
  この命令は､ directory を親の解釈実行機能の安全な解釈実行機能の為に維持された仮想的経路に追加し､安全な解釈実行機能内でそのディレクトリー内のファイルの利用の便宜を得る代表辞を返す｡もし､ディレクトリーが既に仮想的経路にあると､仮想的経路にディレクトリーを再追加することなく代表辞を返す｡使用例として: 　 This command adds directory to the virtual path maintained for the safe interpreter in the parent, and returns the token that can be used in the safe interpreter to obtain access to files in that directory. If the directory is already in the virtual path, it only returns the token without adding the directory to the virtual path again. Example of use:

      $child eval [list set tk_library \
            [::safe::interpAddToAccessPath $name $tk_library]]

::safe::setSyncMode ?newValue?
  この命令は､安全基準の"同期様式"を得るか設定するかの為に使われる｡ 引数が供給される時､ もし､引数が論理値でない場合､又は､どれかの､安全基準の解釈実行機能が存在する時､本命令は､不都合を返す｡ 典型的には､値は初期化の一部として設定される - 論理真値の為には､"同期様式" 是 (無為設定)､ 論理偽値の為には､"同期様式" 断 ｡ "同期様式" 是に伴い､安全基準は､それぞれの子供の解釈実行機能の､利用経路に伴う同期した ::auto_path を保持する｡ 詳細は､下の SYNC MODE 項を参照されたい｡ This command is used to get or set the "Sync Mode" of the Safe Base. When an argument is supplied, the command returns an error if the argument is not a boolean value, or if any Safe Base interpreters exist. Typically the value will be set as part of initialization - boolean true for "Sync Mode" on (the default), false for "Sync Mode" off. With "Sync Mode" on, the Safe Base keeps each child interpreter's ::auto_path synchronized with its access path. See the section SYNC MODE below for details.

::safe::setLogCmd ?cmd arg...?
  この命令は､対象としている寿命消尽の行事が安全な解釈実行機能に起った時に呼出される記述譜を､実装する｡引数なしで呼出された時は､現在実装されている記述譜を返す｡空文字列の引数１つで､呼出された時は､現在実装されている記述譜は取除かれ､日誌記録機能は停止される｡記述譜は､対象としている行事を記述する文字列である､本命令の一つだけの追加的引数にすることにより起動される｡主たる目的は､安全な解釈実行機能の不具合修復を援助することにある｡この便益を使用することにより､安全な解釈実行機能は包括的文言の不都合伝言文のみしか得られない時にも､完全な不都合伝言文が得られる｡これは､安全な解釈実行機能を実際のディレクトリー名の様な機密扱いの情報が含まれているかもしれない失敗や他の行事の伝言文を見ることから防ぐ｡ 　　　 This command installs a script that will be called when interesting life cycle events occur for a safe interpreter. When called with no arguments, it returns the currently installed script. When called with one argument, an empty string, the currently installed script is removed and logging is turned off. The script will be invoked with one additional argument, a string describing the event of interest. The main purpose is to help in debugging safe interpreters. Using this facility you can get complete error messages while the safe interpreter gets only generic error messages. This prevents a safe interpreter from seeing messages about failures and other events that might contain sensitive information such as real directory names.

  Example of use:

      ::safe::setLogCmd puts stderr

  下の例は､安全な解釈実行機能がその仮想的利用経路に見付らないファイルを源譜に使用しようと試みた事例､の出力である｡註意すべきは､安全な解釈実行機能はファイルが見付らないと言う不具合伝達文を受取るだけである事である: 　　　 Below is the output of a sample session in which a safe interpreter attempted to source a file not found in its virtual access path. Note that the safe interpreter only received an error message saying that the file was not found:

      NOTICE for child interp10 : Created
      NOTICE for child interp10 : Setting accessPath=(/foo/bar) staticsok=1 nestedok=0 deletehook=()
      NOTICE for child interp10 : auto_path in interp10 has been set to {$p(:0:)}
      ERROR for child interp10 : /foo/bar/init.tcl: no such file or directory

#### 指示項目 OPTIONS

次の指示項目が ::safe::interpCreate と ::safe::interpInit と ::safe::interpConfigure に共通に使える｡どの指示項目の名前も混同しない範囲でなら短縮可能である｡指示項目の名前は大文字と小文字を区別しない｡ 　　 The following options are common to ::safe::interpCreate, ::safe::interpInit, and ::safe::interpConfigure. Any option name can be abbreviated to its minimal non-ambiguous name. Option names are not case sensitive.

-accessPath directoryList
  この指示項目はそこから安全な解釈実行機能のファイルの源譜指定 source と組込み load ができるディレクトリーのリストを設定する｡もし､この指示項目を設定しないか､空リストが指定されると､安全な解釈実行機能は､同じディレクトリーを自動組込みの為の親として使用する｡仮想的は経路についての更なる詳細は下の SECURITY の節を参照されたい｡ 　　　 This option sets the list of directories from which the safe interpreter can source and load files. If this option is not specified, or if it is given as the empty list, the safe interpreter will use the same directories as its parent for auto-loading. See the section SECURITY below for more detail about virtual paths, tokens and access control.

-autoPath directoryList
  この指示項目は､解釈実行機能の::auto_path内のディレクトリーのリストを設定する｡ 安全基準が"同期様式"是 を有する場合､指示項目は定められない - その場合､安全な解釈実行機能の ::auto_path は安全基準によって管理され､ 且つ､その利用経路の登録様式である｡ 詳細は下のSYNC MODE項を参照されたい｡ This option sets the list of directories in the safe interpreter's ::auto_path. The option is undefined if the Safe Base has "Sync Mode" on - in that case the safe interpreter's ::auto_path is managed by the Safe Base and is a tokenized form of its access path. See the section SYNC MODE below for details.

-statics boolean
  この指示項目は安全な解釈実行機能が静的に連結した梱包( load {} Tk の様な)を許容することを指定する｡省略時設定は真値 : 安全な解釈実行機能は静的に連結した梱包を許容している｡ 　　　　 This option specifies if the safe interpreter will be allowed to load statically linked packages (like load {} Tk). The default value is true : safe interpreters are allowed to load statically linked packages.

-noStatics
  この指示項目は -statics false の為の短縮表示の便宜であり､従って､安全な解釈実行機能は静的に連結した梱包を許容しない｡ 　　 This option is a convenience shortcut for -statics false and thus specifies that the safe interpreter will not be allowed to load statically linked packages.

-nested boolean
  この指示項目は､安全な解釈実行機能がそれ自身の子供の解釈実行機能の中への梱包の組込みを許容しているか否か､を指定する｡省略時設定は偽値 : 安全な解釈実行機能は自身の子供の解釈実行機能の中への梱包の組込みを許容してない｡ 　　 This option specifies if the safe interpreter will be allowed to load packages into its own sub-interpreters. The default value is false : safe interpreters are not allowed to load packages into their own sub-interpreters.

-nestedLoadOk
  この指示項目は -nested true の為の短縮表示の便宜であり､従って､安全な解釈実行機能は自身の子供の解釈実行機能の中への梱包の組込みを許容する｡ 　 This option is a convenience shortcut for -nested true and thus specifies the safe interpreter will be allowed to load packages into its own sub-interpreters.

-deleteHook script
  この指示項目に非空の記述譜が与えられた時､追加的な引数として､追加的な引数として安全な解釈実行機能を実際に削除する直前に､同じ名前の親の安全な解釈実行機能内で評価される｡空値を与えると､何であれ､安全な解釈実行機能の為に､現在実装されている削除鈎記述譜が取除かれる｡省略時の値 ({}) では削除回収を何も持たない｡ 　　 When this option is given a non-empty script, it will be evaluated in the parent with the name of the safe interpreter as an additional argument just before actually deleting the safe interpreter. Giving an empty value removes any currently installed deletion hook script for that safe interpreter. The default value ({}) is not to have any deletion call back.

### ALIASES

次のショートカットが安全な解釈実行機能の中に提供される｡ The following aliases are provided in a safe interpreter:

source fileName
  要求されたファイル､Tclの源譜のファイルは､見付かれば､安全な解釈実行機能の中に源譜として使用される｡ source 命令で別名指定すると､安全な解釈実行機能の為に仮想的な経路からファイルを源譜に指定できるだけである｡ source 命令の別名指定は､安全な解釈実行機能に､仮想的経路であってその中に源譜に指定するファイルが見付かることを意味するディレクトリーを表す代表辞の名前を使うよう要求する｡適正なファイル名の制限に関する更なる論議は､ SECURITY の節を参照されたい｡ 　　　 The requested file, a Tcl source file, is sourced into the safe interpreter if it is found. The source alias can only source files from directories in the virtual path for the safe interpreter. The source alias requires the safe interpreter to use one of the token names in its virtual path to denote the directory in which the file to be sourced can be found. See the section on SECURITY for more discussion of restrictions on valid filenames.

load fileName
  要求されたファイル､共有された目的ファイルは､見付かれば､安全な解釈実行機能の中に動的に組込まれる｡ファイル名はそれが成功裏に見付かる様に､安全な解釈実行機能の為に､仮想的経路の中に記述した代表辞を含まなくてはならない｡更に､共有目的ファイルは安全な入り口点を含まなくてはならない; 更なる詳細は取扱説明書の load 命令の頁を参照されたい｡ 　　　 The requested file, a shared object file, is dynamically loaded into the safe interpreter if it is found. The filename must contain a token name mentioned in the virtual path for the safe interpreter for it to be found successfully. Additionally, the shared object file must contain a safe entry point; see the manual page for the load command for more details.

file ?subcommand args...?
  この file 別名は､安全な一揃いの副命令の中の file 命令の利用を提供する; 許容する副命令は､ dirname, join, extension, root, tail, pathnamepathtype 副命令だけである｡これらの副命令に関する更なる詳細は取扱説明書の file 命令を参照されたい｡ 　 The file alias provides access to a safe subset of the subcommands of the file command; it allows only dirname, join, extension, root, tail, pathtype and split subcommands. For more details on what these subcommands do see the manual page for the file command.

encoding ?subcommand args...?
  この encoding 別名は､安全な一揃いの副命令の中の encoding 命令の利用を提供する; 系の文字番号体系の設定は許容しないが､体系を含む他の全ての副命令に現在の文字番号体系を確認することは許容する｡ 　 The encoding alias provides access to a safe subset of the subcommands of the encoding command; it disallows setting of the system encoding, but allows all other subcommands including system to check the current encoding.

exit
  呼出し中の解釈実行機能は削除され､その計算は中止される､しかし､この解釈実行機能が存在しているTcl処理課程は終了しない｡ 　　 The calling interpreter is deleted and its computation is stopped, but the Tcl process in which this interpreter exists is not terminated.

### SECURITY

安全な Tcl は､嫌がらせツールやサービス拒否攻撃(訳註 代表的なスパイウェア名)を完全に防止しようとは企てない｡これらの攻撃の形式は応用譜や使用者から便利に仕事を遂行する為に計算機を使うことを一時的に妨害する､譬えば使用できる中央演算装置の時間や､利用できる画面装置を浪費するとかして｡この様な攻撃は､苛立たしいが､安全な Tcl が防いでいる機密事項や個人情報の攻撃に較べ一般的には重要度が低いと推定される｡ 　 denial of service attacks. These forms of attack prevent the application or user from temporarily using the computer to perform useful work, for example by consuming all available CPU time or all available screen real estate. These attacks, while aggravating, are deemed to be of lesser importance in general than integrity and privacy attacks that Safe Tcl is to prevent.

安全な解釈実行機能内で利用できる命令は､取扱説明書の解釈実行機能の頁に定義された安全な組に加え､ source, load, exit を仲介する別名､及び､安全な組の file と encoding を仲介する別名である｡ 　 The commands available in a safe interpreter, in addition to the safe set as defined in interp manual page, are mediated aliases for source, load, exit, and safe subsets of file and encoding. The safe interpreter can also auto-load code and it can request that packages be loaded.

これらの幾つかの命令は局所ファイル体系を利用するので､そのディレクトリー構造に関する情報漏洩の潜在的可能性がある｡これを防ぐ為､安全な解釈実行機能内で引数としてファイル名をとる命令は実際のディレクトリー名の代りに代表辞を使う｡これらの代表辞は､要求のある間､譬えば､親の解釈実行機能により､仲介されたファイルを源譜にする時に､実ディレクトリ名に翻訳される｡ この仮想的経路の体系は､::safe::interpCreate に生成されたか ::safe::interpInit に初期化されたそれぞれの解釈実行機能､及び､安全な解釈実行機能内で利用できる代表辞から局所的ファイル体系上の実際の経路名に対応する経路､との為に､親の解釈実行機能内で維持されていて､それで､その上で解釈実行機能が実行されている主組織のファイル体系の構造に関わる情報の取得を､防いでいる｡source と load の別名の為に､子供の解釈実行機能に提供できる唯一の有効なファイル名引数は[file jointoken filename]の形式の経路である､(即ち､元の固有ファイル経路書式を使う時: Unix 上ではtoken/filename 又､Windows 上では token\filename ) ここで､ token は accessPath (利用経路)リストのディレクトリーの一つ､又､ filename はそのディレクトリー内の一つのファイル(仔ディレクトリーの利用は許容されない)である｡ Because some of these commands access the local file system, there is a potential for information leakage about its directory structure. To prevent this, commands that take file names as arguments in a safe interpreter use tokens instead of the real directory names. These tokens are translated to the real directory name while a request to, e.g., source a file is mediated by the parent interpreter. This virtual path system is maintained in the parent interpreter for each safe interpreter created by ::safe::interpCreate or initialized by ::safe::interpInit and the path maps tokens accessible in the safe interpreter into real path names on the local file system thus preventing safe interpreters from gaining knowledge about the structure of the file system of the host on which the interpreter is executing. The only valid file names arguments for the source and load aliases provided to the child are path in the form of [file join token filename] (i.e. when using the native file path formats: token/filename on Unix and token\filename on Windows), where token is representing one of the directories of the accessPath list and filename is one file in that directory (no sub directories access are allowed).

代表辞が安全な解釈実行機能内で､ファイルを源譜として使用又は組込みする要求に使用する時は､その代表辞は検査され実際の経路名に翻訳され､そして､源譜として使用又は組込みするファイルがファイル系上で位置が特定される｡安全な解釈実行機能は決して､ファイル系上に保存されている実際の経路名の情報は取得しない｡ 　　 When a token is used in a safe interpreter in a request to source or load a file, the token is checked and translated to a real path name and the file to be sourced or loaded is located on the file system. The safe interpreter never gains knowledge of the actual path name under which the file is stored on the file system.

更に､安全な解釈実行機能によって源譜として使用されるかもしれないファイル群の中に偶然含まれた機密ファイルから情報が漏洩する潜在的可能性を防ぐ為に､ source 別名に､利用するファイルが次の制約に合致するよう制限する: ファイルの名前は､１４文字かそれより短くなければならない､一つより多く点 (“.”) を含んではならない､拡張子 (“.tcl”) で終るか､ (“tclIndex”) に呼ばれるものでなければならない｡ 　　　 To further prevent potential information leakage from sensitive files that are accidentally included in the set of files that can be sourced by a safe interpreter, the source alias restricts access to files meeting the following constraints: the file name must fourteen characters or shorter, must not contain more than one dot (“.”), must end up with the extension (“.tcl”) or be called (“tclIndex”.)

最初の利用経路リストのそれぞれの要素は､仔解釈実行機能の auto_path の中に設定される代表辞に代入され､そして､そのリストの第一要素がその仔解釈実行機能の tcl_library として設定される｡ 　 Each element of the initial access path list will be assigned a token that will be set in the child auto_path and the first element of that list will be set as the tcl_library for that child.

もし利用経路引数が::safe::interpCreateか::safe::interpInitに与えられないか､空リストであると､ 省略時設定の振舞いは､仔の解釈実行機能に､恰も親の解釈実行機能が同じ梱包を利用させているかの如く､利用させる､ことである｡ (もう少し正確には: Tcl で書かれた(それは､仔の解釈実行機能内で実行するので危険になる可能性がないと定義された)か､又はC拡張で書かれ､ _SafeInit 入口点を提供している梱包だけである｡) そのために､親の解釈実行機能の auto_path は仔の解釈実行機能の利用経路を構築する為に使用される｡仔の解釈実行機能が成功裡にTcl外部函数群(それ自身は､自動組込みの仕組みを有する) のファイルを組込む為に tcl_library は､必要に応じて､仔の解釈実行機能内の利用経路の最初の位置に追加又は移動され､それによって仔の解釈実行機能内の tcl_library は親の解釈実行機能のものと同じになる(但し､その実際の経路は依然として仔の解釈実行機能からは不可視である)｡親にも仔にも中の自動組込みが省略時設定で､同じに働くために､親の auto_path 内の､それぞれのディレクトリの第１水準が､(未だ入ってなければ)子供の利用経路に追加される｡勿論､この省略時設定の仕掛けに頼る代りに､何時でも､その子供のディレクトリが決して捜索されないように､ -accessPath 旗標を使って当該ディレクトリーリストを明示的に指定することによって､更に制限された経路に指定することができる｡ 　　　　 If the access path argument is not given to ::safe::interpCreate or ::safe::interpInit or is the empty list, the default behavior is to let the child access the same packages as the parent has access to (Or to be more precise: only packages written in Tcl (which by definition cannot be dangerous as they run in the child interpreter) and C extensions that provides a _SafeInit entry point). For that purpose, the parent's auto_path will be used to construct the child access path. In order that the child successfully loads the Tcl library files (which includes the auto-loading mechanism itself) the tcl_library will be added or moved to the first position if necessary, in the child access path, so the child tcl_library will be the same as the parent's (its real path will still be invisible to the child though). In order that auto-loading works the same for the child and the parent in this by default case, the first-level sub directories of each directory in the parent auto_path will also be added (if not already included) to the child access path. You can always specify a more restrictive path for which sub directories will never be searched by explicitly specifying your directory list with the -accessPath flag instead of relying on this default mechanism.

accessPath が最初に作成されたか初期化された(即ち､interpConfigure -accessPath list によって)後に､変更された時､ auto_reset は､その auto_index を新しい代表辞リストに同調させる為に､自動的に安全な解釈実行機能内で評価される｡ 　　 When the accessPath is changed after the first creation or initialization (i.e. through interpConfigure -accessPath list), an auto_reset is automatically evaluated in the safe interpreter to synchronize its auto_index with the new token list.

### TYPICAL USE

多くの場合､安全基準の解釈実行機能は､ 解釈実行機能が生成される時に指定できる､又､解釈実行機能の寿命の間変更されなく維持される｡ In many cases, the properties of a Safe Base interpreter can be specified when the interpreter is created, and then left unchanged for the lifetime of the interpreter.

もし､安全基準の解釈実行機能を"同期様式"断 で使用したい場合､ この命令 を評価されたい 　　　　 If you wish to use Safe Base interpreters with "Sync Mode" off, evaluate the command

      safe::setSyncMode 0

使用者の要求する特性を伴う解釈実行機能を作成する為には､::safe::interpCreate か ::safe::interpInitを使われたい｡ 最も簡単な方法は､-accessPathや-autoPathを指定しない事である､ その意味は､安全な解釈実行機能は親の解釈実行機能と同じ経路を使う事になる｡ しかし､もし､-accessPathが指定されると､ -autoPathも指定されねばならない､さもないと､ {}に設定される事になる｡ Use ::safe::interpCreate or ::safe::interpInit to create an interpreter with the properties that you require. The simplest way is not to specify -accessPath or -autoPath, which means the safe interpreter will use the same paths as the parent interpreter. However, if -accessPath is specified, then -autoPath must also be specified, or else it will be set to {}.

-autoPathの値は､ 不安全な解釈実行機能と同じ規則に従って､tcl索引とpkgIndex.tcl ファイルとを､ 利用する為に(pkg_mkIndexと外部函数を参照されたい)､その被要求となる｡ The value of -autoPath will be that required to access tclIndex and pkgIndex.tcl files according to the same rules as an unsafe interpreter (see pkg_mkIndex(n) and library(n)).

"同期様式"是 で､ 指示項目-autoPathは未定義であり､且つ､安全基準は子供の ::auto_pathを 利用経路の解釈字句形式に設定する｡ 更に､存在するディレクトリーに加え､ もし､"安全様式"が否なら､ ::auto_pathは､多くの仔ディレクトリーと利用経路に属する､集合単位経路を含む｡ With "Sync Mode" on, the option -autoPath is undefined, and the Safe Base sets the child's ::auto_path to a tokenized form of the access path. In addition to the directories present if "Safe Mode" is off, the ::auto_path includes the numerous subdirectories and module paths that belong to the access path.

### SYNC MODE

Tcl第9版以前､安全基準は､ その利用経路の解析字句化形式と同期されたそれぞれの解釈実行機能の::auto_pathを保存した｡ Tcl 8.4以前の制限事項はこの性質を必要とした｡ この::auto_pathの決定は､外部函数内とpkg_mkIndexの仕様に適合しない､にも拘らず､ 梱包の発見と積込みに関して完全に働いた｡ Tcl 8.5内のTcl 構成要素の導入は､ 利用経路ての多くの数のディレクトリーを追加し､それは､ これ等追加のディレクトリーを::auto_pathに不必要に添付させるには不便である｡ Before Tcl version 9.0, the Safe Base kept each safe interpreter's ::auto_path synchronized with a tokenized form of its access path. Limitations of Tcl 8.4 and earlier made this feature necessary. This definition of ::auto_path did not conform its specification in library(n) and pkg_mkIndex(n), but nevertheless worked perfectly well for the discovery and loading of packages. The introduction of Tcl modules in Tcl 8.5 added a large number of directories to the access path, and it is inconvenient to have these additional directories unnecessarily appended to the ::auto_path.

既存の符号命令との両立性を保存する為に､この ::auto_path と利用経路(同期様式 是)の同期化は､ 猶､無為設定である｡ 但し､安全基準は安全な解釈実行機能の::auto_pathを､ その機能を遂行する(同期様式 断)為にそれに必要なディレクトリーの更に短いリストに､ 制限する選択を提供する｡ どの様な安全基準の解釈実行機能を生成する前であっても､様式を選択する為に､ ::safe::setSyncMode命令を使われたい｡ In order to preserve compatibility with existing code, this synchronization of the ::auto_path and access path ("Sync Mode" on) is still the default. However, the Safe Base offers the option of limiting the safe interpreter's ::auto_path to the much shorter list of directories that is necessary for it to perform its function ("Sync Mode" off). Use the command ::safe::setSyncMode to choose the mode before creating any Safe Base interpreters.

両方の様式で､ 安全な解釈実行機能を初期化する為の､ 最も便利な方法は､ -accessPath指示項目や-autoPath指示項目無しに(又は､-accessPath指示項目を空リストに設定して)､ ::safe::interpCreateや::safe::interpInitを呼出すことであり､それは､ 梱包と､集合単位と､自動積込みファイルに､ 親の解釈実行機能として､安全な解釈実行機能を梱包と､集合単位と､自動積込みファイルに与える｡ "同期様式"断 で､安全基準は､-autoPathの値を､親の ::auto_pathに設定し､且つ､ 子供の::auto_pathを 親の::auto_pathの解釈字句形式に設定する｡ In either mode, the most convenient way to initialize a safe interpreter is to call ::safe::interpCreate or ::safe::interpInit without the -accessPath or -autoPath options (or with the -accessPath option set to the empty list), which will give the safe interpreter the same access as the parent interpreter to packages, modules, and autoloader files. With "Sync Mode" off, the Safe Base will set the value of -autoPath to the parent's ::auto_path, and will set the child's ::auto_path to a tokenized form of the parent's ::auto_path.

"同期様式"断 で､ ::safe::interpCreateや::safe::interpInitや::safe::interpConfigureへの呼出し内で､ もし､-autoPathの為に､縦え空リストでも､値が供給されると､ それは解析字句化され､且つ安全な解釈実行機能の::auto_pathとして使われる｡ 利用する経路に属さないどの様なディレクトリーも､解析字句化されないし､ 且つ､警告なく無視される｡ 但し､-autoPathの値は､指定された通りに残る､且つ､それは､ もし､-accessPathの値を変更する為に､::safe::interpConfigureが呼出されると､ 子供の::auto_pathを再解析字句化する為に使われる｡ With "Sync Mode" off, if a value is specified for -autoPath, even the empty list, in a call to ::safe::interpCreate, ::safe::interpInit, or ::safe::interpConfigure, it will be tokenized and used as the safe interpreter's ::auto_path. Any directories that do not also belong to the access path cannot be tokenized and will be silently ignored. However, the value of -autoPath will remain as specified, and will be used to re-tokenize the child's ::auto_path if ::safe::interpConfigure is called to change the value of -accessPath.

"同期様式"断 で､もし､ 引数-accessPath {} を伴って ::safe::interpConfigureを呼出す事によって､ 利用経路が､ 親の解釈実行機能内の値に置き直されると､ 異なる値を指定する為に､引数-autoPathが供給されない限り､ ::auto_path も又､置き直される｡ With "Sync Mode" off, if the access path is reset to the values in the parent interpreter by calling ::safe::interpConfigure with arguments -accessPath {}, then the ::auto_path will also be reset unless the argument -autoPath is supplied to specify a different value.

"同期様式"断 で､もし-accessPathの非-空値が供給されると､ 安全な解釈実行機能の ::auto_path は {} に設定される(::safe::interpConfigureによって )か､変更なしに残される(::safe::interpConfigureによって)｡ もし､安全命令が､-autoPathに新しい値を指定すると､ それは､-accessPath引数が処理された後に適用される｡ With "Sync Mode" off, if a non-empty value of -accessPath is supplied, the safe interpreter's ::auto_path will be set to {} (by ::safe::interpCreate, ::safe::interpInit) or left unchanged (by ::safe::interpConfigure). If the same command specifies a new value for -autoPath, it will be applied after the -accessPath argument has been processed.

"同期様式"断 の使用の用例: この様などの命令も､ ::auto_path を､親の解釈実行機能内でのその値の登記済みの形式に設定する｡ Examples of use with "Sync Mode" off: any of these commands will set the ::auto_path to a tokenized form of its value in the parent interpreter:

      safe::interpCreate foo
      safe::interpCreate foo -accessPath {}
      safe::interpInit bar
      safe::interpInit bar -accessPath {}
      safe::interpConfigure foo -accessPath {}

"同期様式"断 の使用の用例: 非-空利用経路を伴う安全な解釈実行機能の初期化の時､自己の値も指定されないと､ ::auto_path は {} に設定される｡ Example of use with "Sync Mode" off: when initializing a safe interpreter with a non-empty access path, the ::auto_path will be set to {} unless its own value is also specified:

      safe::interpCreate foo -accessPath {
          /usr/local/TclHome/lib/tcl9.0
          /usr/local/TclHome/lib/tcl9.0/http1.0
          /usr/local/TclHome/lib/tcl9.0/opt0.4
          /usr/local/TclHome/lib/tcl9.0/msgs
          /usr/local/TclHome/lib/tcl9.0/encoding
          /usr/local/TclHome/lib
      }

      # 仔供の ::auto_path は適切な値を与えられねばならない:
      # The child's ::auto_path must be given a suitable value:

      safe::interpConfigure foo -autoPath {
          /usr/local/TclHome/lib/tcl9.0
          /usr/local/TclHome/lib
      }

      # 二つの命令は組わせられる:
      # The two commands can be combined:

      safe::interpCreate foo -accessPath {
          /usr/local/TclHome/lib/tcl9.0
          /usr/local/TclHome/lib/tcl9.0/http1.0
          /usr/local/TclHome/lib/tcl9.0/opt0.4
          /usr/local/TclHome/lib/tcl9.0/msgs
          /usr/local/TclHome/lib/tcl9.0/encoding
          /usr/local/TclHome/lib
      } -autoPath {
          /usr/local/TclHome/lib/tcl9.0
          /usr/local/TclHome/lib
      }

"同期様式"断 の使用の用例: safe::interpAddToAccessPath命令は安全な解釈実行機能の::auto_pathを切替えない｡そこで､どのような､必要な変更も､記述譜で為さねばならない: Example of use with "Sync Mode" off: the command safe::interpAddToAccessPath does not change the safe interpreter's ::auto_path, and so any necessary change must be made by the script:

      safe::interpAddToAccessPath foo /usr/local/TclHome/lib/extras/Img1.4.11

      lassign [safe::interpConfigure foo -autoPath] DUM childAutoPath
      lappend childAutoPath /usr/local/TclHome/lib/extras/Img1.4.11
      safe::interpConfigure foo -autoPath $childAutoPath

### SEE ALSO

interp, library, load, package, pkg_mkIndex, source, tm, unknown

### KEYWORDS

alias, auto-loading, auto_mkindex, load, parent interpreter, safe interpreter, child interpreter, source
Copyright © 1995-1996 Sun Microsystems, Inc.