blob: 44c703d043a259ee63ad5ce649ce9e13e09cffc0 [file] [log] [blame]
Ivan Suzdal184c4e32018-06-06 13:55:30 +04001from __future__ import absolute_import
2import tempfile
3import os
4from oscap.utils import build_tailoring, normalize_id, run
5
6def oscap_has_sce():
7 (stdout, _, _) = run('oscap -V')
8 return any([x for x in stdout.splitlines() if x.startswith('SCE Vers')])
9
10def xccdf(benchmark,
11 pillar_data=None,
12 xccdf_version='1.2',
13 profile='default',
14 tailoring_id=None):
15
16 tailoring_file = None
17 profile = normalize_id(profile, xccdf_version=xccdf_version)
18
19 tempdir = tempfile.mkdtemp(prefix='oscap-')
20
21 if pillar_data:
22 if not tailoring_id:
23 raise Exception('Tailoring id must be set!')
24 profile = normalize_id(pillar_data['profile'], typeof='profile')
25 tailoring_file = os.path.join(tempdir, 'tailoring.xml')
26
27 cmd = 'oscap xccdf eval --profile {profile} ' +\
28 '--results results.xml --report report.html'
29 if oscap_has_sce():
30 cmd += ' --sce-results'
31 if tailoring_file:
32 cmd += ' --tailoring-file {tailoring_file}'
33 cmd += ' {benchmark}'
34 cmd = cmd.format(profile=profile,
35 tailoring_file=tailoring_file,
36 benchmark=benchmark)
37
38 if tailoring_file:
39 with open(tailoring_file, 'w') as f:
40 f.write(build_tailoring(pillar_data, tailoring_id))
41
42 stdout, stderr, rc = run(cmd, tempdir)
43 return stdout, stderr, rc, tempdir
44
45def oval(benchmark):
46 tempdir = tempfile.mkdtemp(prefix='oscap-')
47 cmd = 'oscap oval eval --results results.xml --report report.html {}'
48 cmd = cmd.format(benchmark)
49
50 stdout, stderr, rc = run(cmd, tempdir)
51 return stdout, stderr, rc, tempdir