Skip to content

Commit 5cf3106

Browse files
authored
Merge pull request #2227 from evgenyz/fix-bash-remediation-env
Inherit OpenSCAP environment when executing Bash remediations with `--remediate` option
2 parents ec072be + 2b5cd91 commit 5cf3106

4 files changed

Lines changed: 40 additions & 12 deletions

File tree

src/XCCDF_POLICY/xccdf_policy_remediate.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -483,18 +483,8 @@ static inline int _xccdf_fix_execute(struct xccdf_rule_result *rr, struct xccdf_
483483
NULL
484484
};
485485

486-
char *oscap_bootc_build = getenv("OSCAP_BOOTC_BUILD");
487-
char *oscap_bootc_build_kvarg = NULL;
488-
if (oscap_bootc_build != NULL) {
489-
oscap_bootc_build_kvarg = oscap_sprintf("OSCAP_BOOTC_BUILD=%s", oscap_bootc_build);
490-
}
491-
char *const envp[3] = {
492-
"PATH=/bin:/sbin:/usr/bin:/usr/sbin",
493-
oscap_bootc_build_kvarg,
494-
NULL
495-
};
496-
497-
execve(interpret, argvp, envp);
486+
// We are inheriting openscap environment
487+
execve(interpret, argvp, environ);
498488
/* Wow, execve returned. In this special case, we failed to execute the fix
499489
* and we return 0 from function. At least the following error message will
500490
* indicate the problem in xccdf:message. */

tests/API/XCCDF/unittests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ add_oscap_test("test_remediation_cdata.sh")
9494
add_oscap_test("test_remediation_subs_unresolved.sh")
9595
add_oscap_test("test_remediation_fix_without_system.sh")
9696
add_oscap_test("test_remediation_invalid_characters.sh")
97+
add_oscap_test("test_remediation_environment.sh")
9798
add_oscap_test("test_remediate_simple.sh")
9899
add_oscap_test("test_remediate_perl.sh")
99100
add_oscap_test("test_report_check_with_empty_selector.sh")
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bash
2+
. $builddir/tests/test_common.sh
3+
4+
set -e
5+
set -o pipefail
6+
7+
name=$(basename $0 .sh)
8+
result=$(mktemp -t ${name}.out.XXXXXX)
9+
10+
rm -f remediation.env
11+
12+
CANARY_EXPORTED="CANARY_EXPORTED_VALUE"
13+
export CANARY_EXPORTED
14+
CANARY_PROCESS="CANARY_PROCESS_VALUE" $OSCAP xccdf eval --remediate $srcdir/${name}.xccdf.xml || true
15+
16+
grep -q "${PATH}" remediation.env || die "PATH not found"
17+
grep -q "CANARY_EXPORTED_VALUE" remediation.env || die "CANARY_EXPORTED_VALUE not found"
18+
grep -q "CANARY_PROCESS_VALUE" remediation.env || die "CANARY_PROCESS_VALUE not found"
19+
20+
rm -f remediation.env
21+
rm $result
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Benchmark xmlns="http://checklists.nist.gov/xccdf/1.2" id="xccdf_moc.elpmaxe.www_benchmark_test">
3+
<status>accepted</status>
4+
<version>1.0</version>
5+
<Rule selected="true" id="xccdf_moc.elpmaxe.www_rule_1">
6+
<title>Write some environment variables</title>
7+
<fix system="urn:xccdf:fix:script:sh">
8+
echo "PATH=${PATH}" > remediation.env
9+
echo "CANARY_EXPORTED=${CANARY_EXPORTED}" >> remediation.env
10+
echo "CANARY_PROCESS=${CANARY_PROCESS}" >> remediation.env
11+
</fix>
12+
<check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
13+
<check-content-ref href="test_remediation_simple.oval.xml" name="oval:moc.elpmaxe.www:def:1"/>
14+
</check>
15+
</Rule>
16+
</Benchmark>

0 commit comments

Comments
 (0)