logs.clear();
}
- void setCallback(std::function<void(T&)> cb)
+ void setCallback(std::function<void(const size_t)> cb)
{
callback = cb;
}
if (builder.isCompleted()) {
logs.push_back(builder.pop());
if (callback)
- callback(logs.back());
+ callback(logs.size() - 1);
flag = true;
}
return flag;
private:
std::vector<T> logs;
AuditLogBuilder<T> builder;
- std::function<void(T&)> callback;
+ std::function<void(const size_t)> callback;
};
#endif //!__AUDIT_TRAIL_AUDIT_LOGGER_H__
void AuditMessageParser::parse()
{
- std::lock_guard<std::mutex> lock(nlLock);
while (1) {
+ int type = 0;
+ std::string log;
+
try {
+ std::lock_guard<std::mutex> lock(nlLock);
+
auto msg = nl.recv(MSG_DONTWAIT);
- int type = msg.first;
- std::string log(msg.second.begin(), msg.second.end());
+ type = msg.first;
+ log = std::string(msg.second.begin(), msg.second.end());
+ } catch (runtime::Exception &e) {
+ break;
+ }
- if (systemLogs.addMessage(type, log)) {
- auto &parsedSystemLogs = systemLogs.get();
+ if (systemLogs.addMessage(type, log)) {
+ auto &parsedSystemLogs = systemLogs.get();
- if ((parsedSystemLogs[parsedSystemLogs.size() - 1].tag.size() != 0) &&
- (parsedSystemLogs[parsedSystemLogs.size() - 1].tag.compare("smack") != 0)) {
- tagStatistics.addCount(parsedSystemLogs[parsedSystemLogs.size() - 1].tag);
+ if ((parsedSystemLogs[parsedSystemLogs.size() - 1].tag.size() != 0) &&
+ (parsedSystemLogs[parsedSystemLogs.size() - 1].tag.compare("smack") != 0)) {
+ tagStatistics.addCount(parsedSystemLogs[parsedSystemLogs.size() - 1].tag);
- if (parsedSystemLogs[parsedSystemLogs.size() - 1].action.systemCall != 0)
- syscallStatistics.addCount(parsedSystemLogs[parsedSystemLogs.size() - 1].action.systemCall);
- }
+ if (parsedSystemLogs[parsedSystemLogs.size() - 1].action.systemCall != 0)
+ syscallStatistics.addCount(parsedSystemLogs[parsedSystemLogs.size() - 1].action.systemCall);
}
+ break;
+ }
- userLogs.addMessage(type, log);
- } catch (runtime::Exception &e) {
+ if (userLogs.addMessage(type, log)) {
break;
}
}
[callback, user_data, &client] (std::string name, int position)
{
auto manager = client.createInterface<LogManagement>();
- auto log(manager.getSystemLog(position - 1));
+ auto log(manager.getSystemLog(position));
callback(&log, user_data);
});
[callback, user_data, &client] (std::string name, int position)
{
auto manager = client.createInterface<LogManagement>();
- auto log(manager.getUserLog(position - 1));
+ auto log(manager.getUserLog(position));
callback(&log, user_data);
});
*/
#include <unistd.h>
+#include <klay/thread-pool.h>
+
#include "rmi/log-management.h"
#define PRIVILEGE_PLATFORM "http://tizen.org/privilege/internal/default/platform"
-
namespace AuditTrail {
LogManagement::LogManagement(AuditTrailControlContext &ctx) :
context.createNotification("SystemLog");
auto &systemLogs = context.getAuditParser().systemLogs;
- systemLogs.setCallback([&ctx, &systemLogs] (AuditSystemLog &log) {
- ctx.notify("SystemLog", systemLogs.size());
+ systemLogs.setCallback([&ctx] (const size_t index) {
+ ctx.notify("SystemLog", index);
});
auto &userLogs = context.getAuditParser().userLogs;
- userLogs.setCallback([&ctx, &userLogs] (AuditUserLog &log) {
- ctx.notify("UserLog", userLogs.size());
+ userLogs.setCallback([&ctx] (const size_t index) {
+ ctx.notify("UserLog", index);
});
}
#include "server.h"
#include "loader.h"
-#define VCONFKEY_AUDIT_ENABLE "db/audit/enable"
+#define VCONFKEY_AUDIT_ENABLE "db/audit/enable"
+#define NUM_OF_NOTIFIER_THREAD 3
using namespace std::placeholders;
} // namespace
Server::Server() :
- referenceCount(0)
+ referenceCount(0), notifier(NUM_OF_NOTIFIER_THREAD)
{
service.reset(new rmi::Service(SERVICE_SOCKET_PATH));
template <typename... Args>
void notify(const std::string& name, Args&&... args)
{
- service->notify<Args...>(name, std::forward<Args>(args)...);
+ notifier.submit([this, name, &args...]() {
+ service->notify<Args...>(name, std::forward<Args>(args)...);
+ });
}
uid_t getPeerUid() const
int referenceCount;
RuleApplyEngine ruleApplyEngine;
+ runtime::ThreadPool notifier;
};
#endif //__AUDIT_TRAIL_SERVER_H__