@@ -209,42 +209,60 @@ bool AuditLog::setType(AuditLogType audit_type) {
209
209
210
210
211
211
bool AuditLog::init (std::string *error) {
212
+ audit_log::writer::Writer *tmp_writer;
213
+
214
+ if (m_status == OffAuditLogStatus || m_status == NotSetLogStatus) {
215
+ if (m_writer) {
216
+ delete m_writer;
217
+ m_writer = NULL ;
218
+ }
219
+ return true ;
220
+ }
221
+
212
222
if (m_type == ParallelAuditLogType) {
213
- m_writer = new audit_log::writer::Parallel (this );
223
+ tmp_writer = new audit_log::writer::Parallel (this );
214
224
} else if (m_type == HttpsAuditLogType) {
215
- m_writer = new audit_log::writer::Https (this );
225
+ tmp_writer = new audit_log::writer::Https (this );
216
226
} else {
217
227
/*
218
228
* if (m_type == SerialAuditLogType
219
229
* || m_type == NotSetAuditLogType)
220
230
*
221
231
*/
222
- m_writer = new audit_log::writer::Serial (this );
232
+ tmp_writer = new audit_log::writer::Serial (this );
223
233
}
224
234
225
- if (m_status == OffAuditLogStatus || m_status == NotSetLogStatus) {
226
- return true ;
235
+ if (tmp_writer == NULL ) {
236
+ error->assign (" Writer memory alloc failed!" );
237
+ return false ;
227
238
}
228
239
229
- if (m_writer == NULL || m_writer->init (error) == false ) {
240
+ if (tmp_writer->init (error) == false ) {
241
+ delete tmp_writer;
230
242
return false ;
231
243
}
232
244
233
245
/* Sanity check */
234
246
if (m_status == RelevantOnlyAuditLogStatus) {
235
247
if (m_relevant.empty ()) {
236
248
/*
237
- error->assign("m_relevant cannot be null while status is set to " \
249
+ error->assign("m_relevant cannot be null while status is set to " \
238
250
"RelevantOnly");
239
- return false;
240
- */
251
+ return false;
252
+ */
241
253
// FIXME: this should be a warning. There is not point to
242
254
// have the logs on relevant only if nothing is relevant.
243
255
//
244
256
// Not returning an error to keep the compatibility with v2.
245
257
}
246
258
}
247
259
260
+ if (m_writer) {
261
+ delete m_writer;
262
+ }
263
+
264
+ m_writer = tmp_writer;
265
+
248
266
return true ;
249
267
}
250
268
0 commit comments