blob: a1190664234031afacd2edbfee45fd28d376e758 [file] [log] [blame]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The SELinux violation collector gathers information about SELinux audit
// events. Anomaly detector invokes it when it sees a matching line in the
// journal.
#ifndef CRASH_REPORTER_SELINUX_VIOLATION_COLLECTOR_H_
#define CRASH_REPORTER_SELINUX_VIOLATION_COLLECTOR_H_
#include <map>
#include <string>
#include <base/files/file_util.h>
#include <base/macros.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include "crash-reporter/crash_collector.h"
// SELinux violation collector.
class SELinuxViolationCollector : public CrashCollector {
public:
SELinuxViolationCollector();
~SELinuxViolationCollector() override;
// Collects warning.
bool Collect();
protected:
void set_violation_report_path_for_testing(const base::FilePath& file_path) {
violation_report_path_ = file_path;
}
void set_developer_image_for_testing() {
developer_image_for_testing_ = true;
}
private:
friend class SELinuxViolationCollectorTest;
FRIEND_TEST(SELinuxViolationCollectorTest, CollectOK);
FRIEND_TEST(SELinuxViolationCollectorTest, CollectOKWithComm);
FRIEND_TEST(SELinuxViolationCollectorTest, CollectOKWithPid);
FRIEND_TEST(SELinuxViolationCollectorTest, CollectOKWithPidAndComm);
FRIEND_TEST(SELinuxViolationCollectorTest, CollectWithInvalidComm);
FRIEND_TEST(SELinuxViolationCollectorTest, CollectWithLongComm);
FRIEND_TEST(SELinuxViolationCollectorTest, CollectWithNonTerminatedComm);
FRIEND_TEST(SELinuxViolationCollectorTest, CollectSample);
base::FilePath violation_report_path_;
bool developer_image_for_testing_ = false;
int fake_random_for_statistic_sampling_ = -1;
bool LoadSELinuxViolation(std::string* content,
std::string* signature,
std::map<std::string, std::string>* extra_metadata);
bool ShouldDropThisReport();
DISALLOW_COPY_AND_ASSIGN(SELinuxViolationCollector);
};
#endif // CRASH_REPORTER_SELINUX_VIOLATION_COLLECTOR_H_