From d74a4b23a63f9aa63608fc34ed2c95d61c450eb9 Mon Sep 17 00:00:00 2001 From: Feike Steenbergen Date: Tue, 10 Mar 2020 12:08:29 +0100 Subject: [PATCH] Scrub KUBERNETES_ environment from the postmaster (#1407) The KUBERNETES_ environment variables are not required for PostgreSQL, yet having them exposed to the postmaster will also expose them to backends and to regular database users (using pl/perl for example). --- patroni/__init__.py | 1 + patroni/postgresql/postmaster.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/patroni/__init__.py b/patroni/__init__.py index ba7a803e..8a8899b1 100644 --- a/patroni/__init__.py +++ b/patroni/__init__.py @@ -9,6 +9,7 @@ from patroni.version import __version__ logger = logging.getLogger(__name__) PATRONI_ENV_PREFIX = 'PATRONI_' +KUBERNETES_ENV_PREFIX = 'KUBERNETES_' class Patroni(object): diff --git a/patroni/postgresql/postmaster.py b/patroni/postgresql/postmaster.py index 6ee51d26..b95ead33 100644 --- a/patroni/postgresql/postmaster.py +++ b/patroni/postgresql/postmaster.py @@ -7,7 +7,7 @@ import signal import subprocess import sys -from patroni import PATRONI_ENV_PREFIX +from patroni import PATRONI_ENV_PREFIX, KUBERNETES_ENV_PREFIX # avoid spawning the resource tracker process if sys.version_info >= (3, 8): # pragma: no cover @@ -176,7 +176,8 @@ class PostmasterProcess(psutil.Process): # In order to make everything portable we can't use fork&exec approach here, so we will call # ourselves and pass list of arguments which must be used to start postgres. # On Windows, in order to run a side-by-side assembly the specified env must include a valid SYSTEMROOT. - env = {p: os.environ[p] for p in os.environ if not p.startswith(PATRONI_ENV_PREFIX)} + env = {p: os.environ[p] for p in os.environ if not p.startswith( + PATRONI_ENV_PREFIX) and not p.startswith(KUBERNETES_ENV_PREFIX)} try: proc = PostmasterProcess._from_pidfile(data_dir) if proc and not proc._is_postmaster_process():