Skip to content
This repository was archived by the owner on Sep 27, 2024. It is now read-only.

Commit d80bb55

Browse files
authored
Merge pull request #248 from jan-cerny/rhbz1640715
Generate result-based remediation from tailored profile
2 parents d776ea6 + 69e988d commit d80bb55

File tree

4 files changed

+45
-25
lines changed

4 files changed

+45
-25
lines changed

include/RemediationRoleSaver.h

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,33 +98,35 @@ class PuppetProfileRemediationSaver : public ProfileBasedRemediationSaver
9898
class ResultBasedProcessRemediationSaver : public RemediationSaverBase
9999
{
100100
public:
101-
ResultBasedProcessRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents,
101+
ResultBasedProcessRemediationSaver(
102+
QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath,
102103
const QString& saveMessage, const QString& filetypeExtension, const QString& filetypeTemplate, const QString& fixType);
103104

104105
private:
105106
virtual void saveToFile(const QString& filename);
106107
SpacelessQTemporaryFile mArfFile;
108+
QString tailoring;
107109
};
108110

109111

110112
class BashResultRemediationSaver : public ResultBasedProcessRemediationSaver
111113
{
112114
public:
113-
BashResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents);
115+
BashResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath);
114116
};
115117

116118

117119
class AnsibleResultRemediationSaver : public ResultBasedProcessRemediationSaver
118120
{
119121
public:
120-
AnsibleResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents);
122+
AnsibleResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath);
121123
};
122124

123125

124126
class PuppetResultRemediationSaver : public ResultBasedProcessRemediationSaver
125127
{
126128
public:
127-
PuppetResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents);
129+
PuppetResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath);
128130
};
129131

130132
#else // i.e. SCAP_WORKBENCH_USE_LIBRARY_FOR_RESULT_BASED_REMEDIATION_ROLES_GENERATION is defined
@@ -133,33 +135,34 @@ class PuppetResultRemediationSaver : public ResultBasedProcessRemediationSaver
133135
class ResultBasedLibraryRemediationSaver : public RemediationSaverBase
134136
{
135137
public:
136-
ResultBasedLibraryRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents,
138+
ResultBasedLibraryRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath,
137139
const QString& saveMessage, const QString& filetypeExtension, const QString& filetypeTemplate, const QString& fixType);
138140

139141
private:
140142
virtual void saveToFile(const QString& filename);
141143
SpacelessQTemporaryFile mArfFile;
144+
QString tailoring;
142145
};
143146

144147

145148
class BashResultRemediationSaver : public ResultBasedLibraryRemediationSaver
146149
{
147150
public:
148-
BashResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents);
151+
BashResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath);
149152
};
150153

151154

152155
class AnsibleResultRemediationSaver : public ResultBasedLibraryRemediationSaver
153156
{
154157
public:
155-
AnsibleResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents);
158+
AnsibleResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath);
156159
};
157160

158161

159162
class PuppetResultRemediationSaver : public ResultBasedLibraryRemediationSaver
160163
{
161164
public:
162-
PuppetResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents);
165+
PuppetResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath);
163166
};
164167

165168
#endif // SCAP_WORKBENCH_USE_LIBRARY_FOR_RESULT_BASED_REMEDIATION_ROLES_GENERATION

include/ResultViewer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ class ResultViewer : public QWidget
9999
/// If user requests to open the file via desktop services
100100
SpacelessQTemporaryFile* mReportFile;
101101
QByteArray mARF;
102+
103+
QString tailoringFilePath;
102104
};
103105

104106
#endif

src/RemediationRoleSaver.cpp

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,16 @@ PuppetProfileRemediationSaver::PuppetProfileRemediationSaver(QWidget* parentWind
164164
{}
165165

166166
#ifndef SCAP_WORKBENCH_USE_LIBRARY_FOR_RESULT_BASED_REMEDIATION_ROLES_GENERATION
167-
ResultBasedProcessRemediationSaver::ResultBasedProcessRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents,
167+
ResultBasedProcessRemediationSaver::ResultBasedProcessRemediationSaver(
168+
QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath,
168169
const QString& saveMessage, const QString& filetypeExtension, const QString& filetypeTemplate, const QString& fixType):
169170
RemediationSaverBase(parentWindow, saveMessage, filetypeExtension, filetypeTemplate, fixType)
170171
{
171172
mArfFile.setAutoRemove(true);
172173
mArfFile.open();
173174
mArfFile.write(arfContents);
174175
mArfFile.close();
176+
tailoring = tailoringFilePath;
175177
}
176178

177179
void ResultBasedProcessRemediationSaver::saveToFile(const QString& filename)
@@ -191,6 +193,11 @@ void ResultBasedProcessRemediationSaver::saveToFile(const QString& filename)
191193
args.append("--result-id");
192194
args.append("");
193195

196+
if (!tailoring.isNull()) {
197+
args.append("--tailoring-file");
198+
args.append(tailoring.toUtf8().constData());
199+
}
200+
194201
args.append(mArfFile.fileName());
195202

196203
// Launching a process and going through its output is something we do already in OscapScannerLocal::evaluate()
@@ -222,30 +229,32 @@ void ResultBasedProcessRemediationSaver::saveToFile(const QString& filename)
222229
}
223230
}
224231

225-
BashResultRemediationSaver::BashResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents):
226-
ResultBasedProcessRemediationSaver(parentWindow, arfContents,
232+
BashResultRemediationSaver::BashResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath):
233+
ResultBasedProcessRemediationSaver(parentWindow, arfContents, tailoringFilePath,
227234
bashSaveMessage, bashFiletypeExtension, bashFiletypeTemplate, bashFixTemplate)
228235
{}
229236

230-
AnsibleResultRemediationSaver::AnsibleResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents):
231-
ResultBasedProcessRemediationSaver(parentWindow, arfContents,
237+
AnsibleResultRemediationSaver::AnsibleResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath):
238+
ResultBasedProcessRemediationSaver(parentWindow, arfContents, tailoringFilePath,
232239
ansibleSaveMessage, ansibleFiletypeExtension, ansibleFiletypeTemplate, ansibleFixType)
233240
{}
234241

235-
PuppetResultRemediationSaver::PuppetResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents):
236-
ResultBasedProcessRemediationSaver(parentWindow, arfContents,
242+
PuppetResultRemediationSaver::PuppetResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath):
243+
ResultBasedProcessRemediationSaver(parentWindow, arfContents, tailoringFilePath,
237244
puppetSaveMessage, puppetFiletypeExtension, puppetFiletypeTemplate, puppetFixType)
238245
{}
239246

240247
#else // i.e. SCAP_WORKBENCH_USE_LIBRARY_FOR_RESULT_BASED_REMEDIATION_ROLES_GENERATION is defined
241-
ResultBasedLibraryRemediationSaver::ResultBasedLibraryRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents,
248+
ResultBasedLibraryRemediationSaver::ResultBasedLibraryRemediationSaver(
249+
QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath,
242250
const QString& saveMessage, const QString& filetypeExtension, const QString& filetypeTemplate, const QString& fixType):
243251
RemediationSaverBase(parentWindow, saveMessage, filetypeExtension, filetypeTemplate, fixType)
244252
{
245253
mArfFile.setAutoRemove(true);
246254
mArfFile.open();
247255
mArfFile.write(arfContents);
248256
mArfFile.close();
257+
tailoring = tailoringFilePath;
249258
}
250259

251260
void ResultBasedLibraryRemediationSaver::saveToFile(const QString& filename)
@@ -282,6 +291,9 @@ void ResultBasedLibraryRemediationSaver::saveToFile(const QString& filename)
282291

283292
if (session == NULL)
284293
throw std::runtime_error("Couldn't get XCCDF session from the report source");
294+
if (!tailoring.isNull()) {
295+
xccdf_session_set_user_tailoring_file(session, tailoring.toUtf8().constData());
296+
}
285297

286298
xccdf_session_set_loading_flags(session, XCCDF_SESSION_LOAD_XCCDF);
287299
if (xccdf_session_load(session) != 0)
@@ -316,18 +328,18 @@ void ResultBasedLibraryRemediationSaver::saveToFile(const QString& filename)
316328
}
317329
}
318330

319-
BashResultRemediationSaver::BashResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents):
320-
ResultBasedLibraryRemediationSaver(parentWindow, arfContents,
331+
BashResultRemediationSaver::BashResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath):
332+
ResultBasedLibraryRemediationSaver(parentWindow, arfContents, tailoringFilePath,
321333
bashSaveMessage, bashFiletypeExtension, bashFiletypeTemplate, bashFixTemplate)
322334
{}
323335

324-
AnsibleResultRemediationSaver::AnsibleResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents):
325-
ResultBasedLibraryRemediationSaver(parentWindow, arfContents,
336+
AnsibleResultRemediationSaver::AnsibleResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath):
337+
ResultBasedLibraryRemediationSaver(parentWindow, arfContents, tailoringFilePath,
326338
ansibleSaveMessage, ansibleFiletypeExtension, ansibleFiletypeTemplate, ansibleFixType)
327339
{}
328340

329-
PuppetResultRemediationSaver::PuppetResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents):
330-
ResultBasedLibraryRemediationSaver(parentWindow, arfContents,
341+
PuppetResultRemediationSaver::PuppetResultRemediationSaver(QWidget* parentWindow, const QByteArray& arfContents, const QString& tailoringFilePath):
342+
ResultBasedLibraryRemediationSaver(parentWindow, arfContents, tailoringFilePath,
331343
puppetSaveMessage, puppetFiletypeExtension, puppetFiletypeTemplate, puppetFixType)
332344
{}
333345

src/ResultViewer.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ void ResultViewer::loadContent(Scanner* scanner)
114114
if (mInputBaseName.endsWith("-xccdf"))
115115
mInputBaseName.chop(QString("-xccdf").length());
116116
}
117+
if (session->isSelectedProfileTailoring()) {
118+
tailoringFilePath = session->getTailoringFilePath();
119+
}
117120

118121
mReport.clear();
119122
scanner->getReport(mReport);
@@ -173,19 +176,19 @@ void ResultViewer::openReport()
173176

174177
void ResultViewer::generateBashRemediationRole()
175178
{
176-
BashResultRemediationSaver remediation(this, mARF);
179+
BashResultRemediationSaver remediation(this, mARF, tailoringFilePath);
177180
remediation.selectFilenameAndSaveRole();
178181
}
179182

180183
void ResultViewer::generateAnsibleRemediationRole()
181184
{
182-
AnsibleResultRemediationSaver remediation(this, mARF);
185+
AnsibleResultRemediationSaver remediation(this, mARF, tailoringFilePath);
183186
remediation.selectFilenameAndSaveRole();
184187
}
185188

186189
void ResultViewer::generatePuppetRemediationRole()
187190
{
188-
PuppetResultRemediationSaver remediation(this, mARF);
191+
PuppetResultRemediationSaver remediation(this, mARF, tailoringFilePath);
189192
remediation.selectFilenameAndSaveRole();
190193
}
191194

0 commit comments

Comments
 (0)