You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

119 lines
5.7 KiB

[comment {--- punk::docgen generated from inline doctools comments ---}]
[comment {--- punk::docgen DO NOT EDIT DOCS HERE UNLESS YOU REMOVE THESE COMMENT LINES ---}]
[comment {--- punk::docgen overwrites this file ---}]
[manpage_begin punkshell_module_punk::island 0 0.1.0]
[copyright "2024"]
[titledesc {filesystem islands for safe interps}] [comment {-- Name section and table of contents description --}]
[moddesc {punk::island for safe interps}] [comment {-- Description at end of page heading --}]
[require punk::island]
[keywords module interp filesystem]
[description]
[para] Package to a allow a safe interpreter to access islands of the
[para] filesystem only, i.e. restricted directory trees within the
[para] filesystem. The package brings back file, open and glob to the child interp
[para] interpreter, though in a restricted manner.
[para] JN Warning:
[para] This mechanism can have interactions with package loading from auto_path - needs review.
[section Overview]
[para] overview of punk::island
[subsection Concepts]
[para] -
[subsection dependencies]
[para] packages used by punk::island
[list_begin itemized]
[item] [package {Tcl 8.6}]
[list_end]
[section API]
[subsection {Namespace punk::island::class}]
[para] class definitions
[list_begin enumerated]
[list_end] [comment {--- end class enumeration ---}]
[subsection {Namespace punk::island::interps}]
[para] hosts information for interpreters
[list_begin definitions]
[list_end] [comment {--- end definitions namespace punk::island::interps ---}]
[subsection {Namespace punk::island}]
[para] Core API functions for punk::island
[list_begin definitions]
[call [fun add] [arg child] [arg path]]
[para] Add a path to the list of paths that are explicitely allowed for access
[para] to a child interpreter. Access to any path that has not been explicitely
[para] allowed will be denied. Paths that are added to the list of allowed
[para] islands are always fully normalized.
[para] Arguments:
[list_begin arguments]
[arg_def string child] Identifier of the child interpreter to control
[list_end]
[call [fun reset] [arg child]]
[para] Remove all access path allowance and arrange for the interpreter to be
[para] able to return to the regular safe state.
[para] Arguments:
[list_begin arguments]
[arg_def string child] Identifier of the child interpreter
[list_end]
[list_end] [comment {--- end definitions namespace punk::island ---}]
[subsection {Namespace punk::island::lib}]
[para] Secondary functions that are part of the API
[list_begin definitions]
[list_end] [comment {--- end definitions namespace punk::island::lib ---}]
[section Internal]
[subsection {Namespace punk::island::system}]
[para] Internal functions that are not part of the API
[list_begin definitions]
[call [fun Allowed] [arg child] [arg fname]]
[para] Check that the file name passed as an argument is within the islands of
[para] the filesystem that have been registered through the add command for a
[para] given (safe) interpreter. The path is fully normalized before testing
[para] against the islands, which themselves are fully normalized.
[para] Arguments:
[list_begin arguments]
[arg_def string child] Identifier of the child interpreter
[arg_def string fname] (relative) path to the file to test
[list_end]
[call [fun File] [arg child] [arg cmd] [arg args]]
[para] Parses the options and arguments to the file command to discover which
[para] paths it tries to access and only return the results of its execution
[para] when these path are within the allowed islands of the filesystem.
[para] Arguments:
[list_begin arguments]
[arg_def string child] Identifier of the child interpreter
[arg_def string cmd] Subcommand of the file command
[arg_def string args] Arguments to the file subcommand
[list_end]
[call [fun Open] [arg child] [arg args]]
[para] Parses the options and arguments to the open command to discover which
[para] paths it tries to access and only return the results of its execution
[para] when these path are within the allowed islands of the filesystem.
[para] Arguments:
[list_begin arguments]
[arg_def string child] Identifier of the child interpreter
[arg_def string args] Arguments to the open subcommand
[list_end]
[call [fun Expose] [arg child] [arg cmd] [arg args]]
[para] This procedure allows to callback a command that would typically have
[para] been hidden from a child interpreter. It does not "interp expose" but
[para] rather calls the hidden command, so we can easily revert back.
[para] Arguments:
[list_begin arguments]
[arg_def string child] Identifier of the child interpreter
[arg_def string cmd] Hidden command to call
[arg_def string args] Arguments to the command
[list_end]
[call [fun Glob] [arg child] [arg args]]
[para] Parses the options and arguments to the glob command to discover which
[para] paths it tries to access and only return the results of its execution
[para] when these path are within the allowed islands of the filesystem.
[para] Arguments:
[list_begin arguments]
[arg_def string child] Identifier of the child interpreter
[arg_def string args] Arguments to the glob command
[list_end]
[call [fun Init] [arg child] ]
[para] Initialise child interpreter so that it will be able to perform some
[para] file operations, but only within some islands of the filesystem.
[para] Arguments:
[list_begin arguments]
[arg_def string child] Identifier of the child interpreter
[list_end]
[list_end] [comment {--- end definitions namespace punk::island::system ---}]
[manpage_end]