Hello list,
I would like to suggest an enhancement for the proc:system/execute/fork family of functions: it should be possible to control the environment variables of the external process. At the moment, the environment is always inherited from the calling basex process, as far as I can tell.
There are several reasons why it is desirable to control the environment of external processes:
* set variables to values that are not known statically when starting basex * avoid information leaking (restrict environment to the minimal required subset) * control the PATH of the external process
It would be great to have an additional, optional entry in the $options map (maybe named "env" or "environment") that contains a map of environment variables for the external process. If absent, the current behavior (inherited environment) should be used. If the option is given, **only** the environment variables in the map should be used for the external process.
Effectively, the "env"/"environment" option would behave as if it had a default value of `map:merge( available-environment-variables() ! map:entry(., environment-variable(.)) )`
The ProcessBuilder in Java should allow for a straightforward implementation.
What do you think? Cheers, Hauke
Hi Hauke,
Thanks for the feature request, which was straightforward to implement. It has been added to the latest snapshot and will be officially supported with BaseX 12 [1, 2].
Best, Christian
[1] https://files.basex.org/releases/latest/ [2] https://docs.basex.org/12/Process_Functions
On Tue, Jul 16, 2024 at 8:41 AM Hauke Brandes hauke.brandes@parsqube.de wrote:
Hello list,
I would like to suggest an enhancement for the proc:system/execute/fork family of functions: it should be possible to control the environment variables of the external process. At the moment, the environment is always inherited from the calling basex process, as far as I can tell.
There are several reasons why it is desirable to control the environment of external processes:
- set variables to values that are not known statically when starting basex
- avoid information leaking (restrict environment to the minimal
required subset)
- control the PATH of the external process
It would be great to have an additional, optional entry in the $options map (maybe named "env" or "environment") that contains a map of environment variables for the external process. If absent, the current behavior (inherited environment) should be used. If the option is given, **only** the environment variables in the map should be used for the external process.
Effectively, the "env"/"environment" option would behave as if it had a default value of `map:merge( available-environment-variables() ! map:entry(., environment-variable(.)) )`
The ProcessBuilder in Java should allow for a straightforward implementation.
What do you think? Cheers, Hauke
basex-talk@mailman.uni-konstanz.de