Skip to content

Commit c93958c

Browse files
authored
Merge pull request #280 from jupyter-on-openshift/master
Add whitelist for environment variables to be inherited from gateway process by kernel.
2 parents 9ffdac2 + 8ebb90b commit c93958c

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

docs/source/config-options.md

+4
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,10 @@ KernelGatewayApp options
179179
Default: None
180180
Runs the notebook (.ipynb) at the given URI on every kernel launched. No
181181
seed by default. (KG_SEED_URI env var)
182+
--KernelGatewayApp.env_process_whitelist=<List>
183+
Default: []
184+
Environment variables allowed to be inherited from current process by a
185+
new kernel.
182186
183187
NotebookHTTPPersonality options
184188
-------------------------------

kernel_gateway/gatewayapp.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
except ImportError:
1818
from urllib.parse import urlparse
1919

20-
from traitlets import Unicode, Integer, default, observe, Type, Instance
20+
from traitlets import Unicode, Integer, default, observe, Type, Instance, List
2121

2222
from jupyter_core.application import JupyterApp, base_aliases
2323
from jupyter_client.kernelspec import KernelSpecManager
@@ -232,6 +232,14 @@ def default_kernel_name_default(self):
232232
def force_kernel_name_default(self):
233233
return os.getenv(self.force_kernel_name_env, '')
234234

235+
env_process_whitelist_env = 'KG_ENV_PROCESS_WHITELIST'
236+
env_process_whitelist = List(config=True,
237+
help="""Environment variables allowed to be inherited from the spawning process by the kernel""")
238+
239+
@default('env_process_whitelist')
240+
def env_process_whitelist_default(self):
241+
return os.getenv(self.env_process_whitelist_env, '').split(',')
242+
235243
api_env = 'KG_API'
236244
api_default_value = 'kernel_gateway.jupyter_websocket'
237245
api = Unicode(api_default_value,
@@ -444,6 +452,7 @@ def init_webapp(self):
444452
kg_expose_headers=self.expose_headers,
445453
kg_max_age=self.max_age,
446454
kg_max_kernels=self.max_kernels,
455+
kg_env_process_whitelist=self.env_process_whitelist,
447456
kg_api=self.api,
448457
kg_personality=self.personality,
449458
# Also set the allow_origin setting used by notebook so that the

kernel_gateway/services/kernels/handlers.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ class MainKernelHandler(TokenAuthorizationMixin,
2323
def env_whitelist(self):
2424
return self.settings['kg_personality'].env_whitelist
2525

26+
@property
27+
def env_process_whitelist(self):
28+
return self.settings['kg_env_process_whitelist']
29+
2630
@gen.coroutine
2731
def post(self):
2832
"""Overrides the super class method to honor the max number of allowed
@@ -53,7 +57,10 @@ def post(self):
5357
# Start with the PATH from the current env. Do not provide the entire environment
5458
# which might contain server secrets that should not be passed to kernels.
5559
env = {'PATH': os.getenv('PATH', '')}
56-
# Whitelist KERNEL_* args and those allowed by configuration
60+
# Whitelist environment variables from current process environment
61+
env.update({key: value for key, value in os.environ.items()
62+
if key in self.env_process_whitelist})
63+
# Whitelist KERNEL_* args and those allowed by configuration from client
5764
env.update({key: value for key, value in model['env'].items()
5865
if key.startswith('KERNEL_') or key in self.env_whitelist})
5966
# No way to override the call to start_kernel on the kernel manager

0 commit comments

Comments
 (0)