Skip to content

Commit efe36b8

Browse files
committed
Environment variables defined in the container/image configuration
are now loaded in the offline mode (oscap-docker, oscap-podman)
1 parent f47770c commit efe36b8

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

utils/oscap-podman

100644100755
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ else
7979
fi
8080
DIR=$(podman mount $ID) || die
8181

82+
for VAR in `podman inspect $ID --format '{{join .Config.Env " "}}'`; do
83+
eval "export $VAR"
84+
done
85+
8286
export OSCAP_PROBE_ROOT="$(cd "$DIR"; pwd)"
8387
export OSCAP_PROBE_OS_NAME="Linux"
8488
export OSCAP_PROBE_OS_VERSION="$(uname --kernel-release)"

utils/oscap_docker_python/oscap_docker_util.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def _get_dist(self, chroot, target):
115115
if "{0}{1}: true".format(self.CPE, dist) in result.stdout:
116116
return dist
117117

118-
def _get_target_name(self, target):
118+
def _get_target_name_and_config(self, target):
119119
'''
120120
Determines if target is image or container. For images returns full
121121
image name if exists or image ID otherwise. For containers returns
@@ -131,28 +131,31 @@ def _get_target_name(self, target):
131131
name = ", ".join(image["RepoTags"])
132132
else:
133133
name = image["Id"][len("sha256:"):][:10]
134-
return "docker-image://{}".format(name)
134+
return "docker-image://{}".format(name), image["Config"]
135135
except docker.errors.NotFound:
136136
try:
137137
container = client.inspect_container(target)
138138
if container["Name"]:
139139
name = container["Name"].lstrip("/")
140140
else:
141141
name = container["Id"][:10]
142-
return "docker-container://{}".format(name)
142+
return "docker-container://{}".format(name), container["Config"]
143143
except docker.errors.NotFound:
144-
return "unknown"
144+
return "unknown", {}
145145

146146
def oscap_chroot(self, chroot_path, target, *oscap_args):
147147
'''
148148
Wrapper function for executing oscap in a subprocess
149149
'''
150-
151150
os.environ["OSCAP_PROBE_ARCHITECTURE"] = platform.processor()
152151
os.environ["OSCAP_PROBE_ROOT"] = os.path.join(chroot_path)
153152
os.environ["OSCAP_PROBE_OS_NAME"] = platform.system()
154153
os.environ["OSCAP_PROBE_OS_VERSION"] = platform.release()
155-
os.environ["OSCAP_EVALUATION_TARGET"] = self._get_target_name(target)
154+
name, conf = self._get_target_name_and_config(target)
155+
os.environ["OSCAP_EVALUATION_TARGET"] = name
156+
for var in config.get("Env", []):
157+
vname, val = var.split("=", 1)
158+
os.environ[vname] = val
156159
cmd = [self.oscap_binary] + [x for x in oscap_args]
157160
oscap_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
158161
oscap_stdout, oscap_stderr = oscap_process.communicate()

0 commit comments

Comments
 (0)