AuditTrailContext &client = GetAuditTrailContext(handle);
auto dac = client.createInterface<DiscretionaryAccessControl>();
- int iter = dac.createIterator();
- do {
- std::string log(dac.getIteratorValue(iter));
+ int end = dac.size();
+ for (int i = 0; i < end; i++) {
+ std::string log(dac.get(i));
if (log.size() > 0) {
callback(log.c_str(), user_data);
}
- } while (dac.nextIterator(iter));
- dac.destroyIterator(iter);
+ }
return AUDIT_TRAIL_ERROR_NONE;
}
RET_ON_FAILURE(handle, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
RET_ON_FAILURE(callback, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
- AuditTrailContext &context = GetAuditTrailContext(handle);
- int ret = context.subscribeNotification("DiscretionaryAccessControl", callback, user_data);
+ AuditTrailContext &client = GetAuditTrailContext(handle);
+ int ret = client.subscribeNotification("DiscretionaryAccessControl",
+ [callback, user_data, &client] (std::string name, int position)
+ {
+ auto dac = client.createInterface<DiscretionaryAccessControl>();
+ auto log(dac.get(position));
+ callback(log.c_str(), user_data);
+ });
if (ret < 0)
return AUDIT_TRAIL_ERROR_INVALID_PARAMETER;
AuditTrailContext &client = GetAuditTrailContext(handle);
auto mac = client.createInterface<MandatoryAccessControl>();
- int iter = mac.createIterator();
- do {
- std::string log(mac.getIteratorValue(iter));
+ int end = mac.size();
+ for (int i = 0; i < end; i++) {
+ std::string log(mac.get(i));
if (log.size() > 0) {
callback(log.c_str(), user_data);
}
- } while (mac.nextIterator(iter));
- mac.destroyIterator(iter);
+ }
return AUDIT_TRAIL_ERROR_NONE;
}
RET_ON_FAILURE(handle, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
RET_ON_FAILURE(callback, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
- AuditTrailContext &context = GetAuditTrailContext(handle);
- int ret = context.subscribeNotification("MandatoryAccessControl", callback, user_data);
+ AuditTrailContext &client = GetAuditTrailContext(handle);
+ int ret = client.subscribeNotification("MandatoryAccessControl",
+ [callback, user_data, &client] (std::string name, int position)
+ {
+ auto mac = client.createInterface<MandatoryAccessControl>();
+ auto log(mac.get(position));
+ callback(log.c_str(), user_data);
+ });
if (ret < 0)
return AUDIT_TRAIL_ERROR_INVALID_PARAMETER;
RET_ON_FAILURE(handle, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
RET_ON_FAILURE(callback_id >= 0, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
- AuditTrailContext &context = GetAuditTrailContext(handle);
- int ret = context.unsubscribeNotification(callback_id);
+ AuditTrailContext &client = GetAuditTrailContext(handle);
+ int ret = client.unsubscribeNotification(callback_id);
if (ret)
return AUDIT_TRAIL_ERROR_INVALID_PARAMETER;
AuditTrailContext &client = GetAuditTrailContext(handle);
SystemCall systemCall = client.createInterface<SystemCall>();
- int iter = systemCall.createIterator();
- do {
- std::string log(systemCall.getIteratorValue(iter));
+ int end = systemCall.size();
+ for (int i = 0; i < end; i++) {
+ std::string log(systemCall.get(i));
if (log.size() > 0) {
callback(log.c_str(), user_data);
}
- } while (systemCall.nextIterator(iter));
- systemCall.destroyIterator(iter);
+ }
return AUDIT_TRAIL_ERROR_NONE;
}
RET_ON_FAILURE(handle, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
RET_ON_FAILURE(callback, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
- AuditTrailContext &context = GetAuditTrailContext(handle);
- int ret = context.subscribeNotification("SystemCall", callback, user_data);
+ AuditTrailContext &client = GetAuditTrailContext(handle);
+ int ret = client.subscribeNotification("SystemCall",
+ [callback, user_data, &client] (std::string name, int position)
+ {
+ auto syscall = client.createInterface<SystemCall>();
+ auto log(syscall.get(position));
+ callback(log.c_str(), user_data);
+ });
if (ret < 0)
return AUDIT_TRAIL_ERROR_INVALID_PARAMETER;
RET_ON_FAILURE(handle, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
RET_ON_FAILURE(callback_id >= 0, AUDIT_TRAIL_ERROR_INVALID_PARAMETER);
- AuditTrailContext &context = GetAuditTrailContext(handle);
- int ret = context.unsubscribeNotification(callback_id);
+ AuditTrailContext &client = GetAuditTrailContext(handle);
+ int ret = client.unsubscribeNotification(callback_id);
if (ret)
return AUDIT_TRAIL_ERROR_INVALID_PARAMETER;
}
int AuditTrailContext::subscribeNotification(const std::string& name,
- const SignalListener& listener,
- void* data)
+ const Listener& listener)
{
- auto listenerDispatcher = [listener, data](std::string name, std::string type) {
- listener(type.c_str(), data);
- };
-
try {
- return client->subscribe<std::string, std::string>
- (SUBSCRIBER_REGISTER, name, listenerDispatcher);
+ return client->subscribe<std::string, int>
+ (SUBSCRIBER_REGISTER, name, listener);
} catch (runtime::Exception& e) {
std::cout << e.what() << std::endl;
return -1;
#include <klay/rmi/client.h>
-typedef std::function<void(const char*, void*)> SignalListener;
+typedef std::function<void(std::string, int)> Listener;
class AuditTrailContext final {
public:
int connect(const std::string& address) noexcept;
void disconnect() noexcept;
- int subscribeNotification(const std::string& name, const SignalListener& listener, void* data);
+ int subscribeNotification(const std::string& name, const Listener& listener);
int unsubscribeNotification(int subscriberId);
template<typename Interface, typename... Args>
{
}
-int DiscretionaryAccessControl::createIterator()
+std::string DiscretionaryAccessControl::get(unsigned int pos)
{
try {
- return context->methodCall<int>("DiscretionaryAccessControl::createIterator");
- } catch (runtime::Exception& e) {}
- return -1;
-}
-
-std::string DiscretionaryAccessControl::getIteratorValue(int iterator)
-{
- try {
- return context->methodCall<std::string>("DiscretionaryAccessControl::getIteratorValue", iterator);
+ return context->methodCall<std::string>("DiscretionaryAccessControl::get", pos);
} catch (runtime::Exception& e) {}
return "";
}
-bool DiscretionaryAccessControl::nextIterator(int iterator)
-{
- try {
- return context->methodCall<bool>("DiscretionaryAccessControl::nextIterator", iterator);
- } catch (runtime::Exception& e) {}
- return false;
-}
-
-int DiscretionaryAccessControl::destroyIterator(int iterator)
+unsigned int DiscretionaryAccessControl::size()
{
try {
- return context->methodCall<int>("DiscretionaryAccessControl::destroyIterator", iterator);
+ return context->methodCall<unsigned int>("DiscretionaryAccessControl::size");
} catch (runtime::Exception& e) {}
- return -1;
+ return 0;
}
int DiscretionaryAccessControl::clear()
{
}
-int MandatoryAccessControl::createIterator()
+std::string MandatoryAccessControl::get(unsigned int pos)
{
try {
- return context->methodCall<int>("MandatoryAccessControl::createIterator");
- } catch (runtime::Exception& e) {}
- return -1;
-}
-
-std::string MandatoryAccessControl::getIteratorValue(int iterator)
-{
- try {
- return context->methodCall<std::string>("MandatoryAccessControl::getIteratorValue", iterator);
+ return context->methodCall<std::string>("MandatoryAccessControl::get", pos);
} catch (runtime::Exception& e) {}
return "";
}
-bool MandatoryAccessControl::nextIterator(int iterator)
-{
- try {
- return context->methodCall<bool>("MandatoryAccessControl::nextIterator", iterator);
- } catch (runtime::Exception& e) {}
- return false;
-}
-
-int MandatoryAccessControl::destroyIterator(int iterator)
+unsigned int MandatoryAccessControl::size()
{
try {
- return context->methodCall<int>("MandatoryAccessControl::destroyIterator", iterator);
+ return context->methodCall<unsigned int>("MandatoryAccessControl::size");
} catch (runtime::Exception& e) {}
- return -1;
+ return 0;
}
int MandatoryAccessControl::clear()
{
}
-int SystemCall::createIterator()
+std::string SystemCall::get(unsigned int pos)
{
try {
- return context->methodCall<int>("SystemCall::createIterator");
- } catch (runtime::Exception& e) {}
- return -1;
-}
-
-std::string SystemCall::getIteratorValue(int iterator)
-{
- try {
- return context->methodCall<std::string>("SystemCall::getIteratorValue", iterator);
+ return context->methodCall<std::string>("SystemCall::get", pos);
} catch (runtime::Exception& e) {}
return "";
}
-bool SystemCall::nextIterator(int iterator)
-{
- try {
- return context->methodCall<bool>("SystemCall::nextIterator", iterator);
- } catch (runtime::Exception& e) {}
- return false;
-}
-
-int SystemCall::destroyIterator(int iterator)
+unsigned int SystemCall::size()
{
try {
- return context->methodCall<int>("SystemCall::destroyIterator", iterator);
+ return context->methodCall<unsigned int>("SystemCall::size");
} catch (runtime::Exception& e) {}
- return -1;
+ return 0;
}
int SystemCall::clear()
DiscretionaryAccessControl(AuditTrailControlContext& ctxt);
~DiscretionaryAccessControl();
- int createIterator();
- std::string getIteratorValue(int iterator);
- bool nextIterator(int iterator);
- int destroyIterator(int iterator);
+ std::string get(unsigned int pos);
+ unsigned int size();
int clear();
MandatoryAccessControl(AuditTrailControlContext& ctxt);
~MandatoryAccessControl();
- int createIterator();
- std::string getIteratorValue(int iterator);
- bool nextIterator(int iterator);
- int destroyIterator(int iterator);
+ std::string get(unsigned int pos);
+ unsigned int size();
int clear();
SystemCall(AuditTrailControlContext& ctxt);
~SystemCall();
- int createIterator();
- std::string getIteratorValue(int iterator);
- bool nextIterator(int iterator);
- int destroyIterator(int iterator);
+ std::string get(unsigned int pos);
+ unsigned int size();
int clear();
#include "rmi/discretionary-access-control.h"
-#define AUDIT_RULE_KEY "DiscretionaryAccessControl"
+#define AUDIT_RULE_KEY "DAC"
#define PRIVILEGE_PLATFORM "http://tizen.org/privilege/internal/default/platform"
namespace AuditTrail {
namespace {
std::vector<std::string> logs;
-
-std::unordered_map<int, unsigned long long> iteratorMap;
-int newIteratorId = 0;
+bool enabled;
const std::string keyString = " key=\"" AUDIT_RULE_KEY "\"";
-
netlink::AuditRule ruleDacAccess, ruleDacPerm;
-bool enabled;
} // namespace
DiscretionaryAccessControl::DiscretionaryAccessControl(AuditTrailControlContext &ctx) :
context(ctx)
{
- context.expose(this, "", (int)(DiscretionaryAccessControl::createIterator)());
- context.expose(this, "", (std::string)(DiscretionaryAccessControl::getIteratorValue)(int));
- context.expose(this, "", (bool)(DiscretionaryAccessControl::nextIterator)(int));
- context.expose(this, "", (int)(DiscretionaryAccessControl::destroyIterator)(int));
+ context.expose(this, "", (std::string)(DiscretionaryAccessControl::get)(unsigned int));
+ context.expose(this, "", (unsigned int)(DiscretionaryAccessControl::size)());
context.expose(this, PRIVILEGE_PLATFORM, (int)(DiscretionaryAccessControl::clear)());
context.expose(this, PRIVILEGE_PLATFORM, (int)(DiscretionaryAccessControl::enable)(bool));
context.expose(this, "", (bool)(DiscretionaryAccessControl::isEnabled)());
if (log.substr(keyPos) == keyString) {
log = log.substr(0, keyPos);
logs.push_back(log);
- ctx.notify("DiscretionaryAccessControl", log);
+ ctx.notify("DiscretionaryAccessControl", logs.size() - 1);
}
}
});
{
}
-int DiscretionaryAccessControl::createIterator()
-{
- int iteratorId = -1;
- iteratorMap.erase(newIteratorId);
- iteratorMap.insert({newIteratorId, 0});
-
- iteratorId = newIteratorId;
-
- if (++newIteratorId < 0) {
- newIteratorId = 0;
- }
- return iteratorId;
-}
-
-std::string DiscretionaryAccessControl::getIteratorValue(int iterator)
+std::string DiscretionaryAccessControl::get(unsigned int pos)
{
- auto it = iteratorMap.find(iterator);
- if (it == iteratorMap.end()) {
+ if (pos >= logs.size()) {
return "";
}
- if (it->second >= logs.size()) {
- return "";
- }
-
- return logs[it->second];
+ return logs[pos];
}
-bool DiscretionaryAccessControl::nextIterator(int iterator)
+unsigned int DiscretionaryAccessControl::size()
{
- auto it = iteratorMap.find(iterator);
- if (it != iteratorMap.end()) {
- if (it->second + 1 < logs.size()) {
- it->second++;
- return true;
- }
- }
- return false;
-}
-
-int DiscretionaryAccessControl::destroyIterator(int iterator)
-{
- auto it = iteratorMap.find(iterator);
- if (it != iteratorMap.end()) {
- iteratorMap.erase(it);
- return 0;
- }
- return -1;
+ return logs.size();
}
int DiscretionaryAccessControl::clear()
namespace {
std::vector<std::string> logs;
-
-std::unordered_map<int, unsigned long long> iteratorMap;
-int newIteratorId = 0;
-
bool enabled;
} // namespace
MandatoryAccessControl::MandatoryAccessControl(AuditTrailControlContext &ctx) :
context(ctx)
{
- context.expose(this, "", (int)(MandatoryAccessControl::createIterator)());
- context.expose(this, "", (std::string)(MandatoryAccessControl::getIteratorValue)(int));
- context.expose(this, "", (bool)(MandatoryAccessControl::nextIterator)(int));
- context.expose(this, "", (int)(MandatoryAccessControl::destroyIterator)(int));
+ context.expose(this, "", (std::string)(MandatoryAccessControl::get)(unsigned int));
+ context.expose(this, "", (unsigned int)(MandatoryAccessControl::size)());
context.expose(this, PRIVILEGE_PLATFORM, (int)(MandatoryAccessControl::clear)());
context.expose(this, PRIVILEGE_PLATFORM, (int)(MandatoryAccessControl::enable)(bool));
context.expose(this, "", (bool)(MandatoryAccessControl::isEnabled)());
if (type == AUDIT_AVC && enabled) {
std::string log(buf.begin(), buf.end());
logs.push_back(log);
- ctx.notify("MandatoryAccessControl", log);
+ ctx.notify("MandatoryAccessControl", logs.size() - 1);
}
});
}
{
}
-int MandatoryAccessControl::createIterator()
+std::string MandatoryAccessControl::get(unsigned int pos)
{
- int iteratorId = -1;
- iteratorMap.erase(newIteratorId);
- iteratorMap.insert({newIteratorId, 0});
-
- iteratorId = newIteratorId;
-
- if (++newIteratorId < 0) {
- newIteratorId = 0;
- }
- return iteratorId;
-}
-
-std::string MandatoryAccessControl::getIteratorValue(int iterator)
-{
- auto it = iteratorMap.find(iterator);
- if (it == iteratorMap.end()) {
+ if (pos >= logs.size()) {
return "";
}
- if (it->second >= logs.size()) {
- return "";
- }
-
- return logs[it->second];
-}
-
-bool MandatoryAccessControl::nextIterator(int iterator)
-{
- auto it = iteratorMap.find(iterator);
- if (it != iteratorMap.end()) {
- if (it->second + 1 < logs.size()) {
- it->second++;
- return true;
- }
- }
- return false;
+ return logs[pos];
}
-int MandatoryAccessControl::destroyIterator(int iterator)
+unsigned int MandatoryAccessControl::size()
{
- auto it = iteratorMap.find(iterator);
- if (it != iteratorMap.end()) {
- iteratorMap.erase(it);
- return 0;
- }
- return -1;
+ return logs.size();
}
int MandatoryAccessControl::clear()
#include "rmi/system-call.h"
-#define AUDIT_RULE_KEY "SystemCall"
+#define AUDIT_RULE_KEY "syscall"
#define PRIVILEGE_PLATFORM "http://tizen.org/privilege/internal/default/platform"
namespace AuditTrail {
namespace {
-std::vector<std::string> systemCallLogs;
-
-std::unordered_map<int, unsigned long long> iteratorMap;
-int newIteratorId = 0;
+std::vector<std::string> logs;
+bool enabled;
const std::string keyString = " key=\"" AUDIT_RULE_KEY "\"";
-
netlink::AuditRule ruleAllSyscall;
-bool enabled;
} // namespace
SystemCall::SystemCall(AuditTrailControlContext &ctx) :
context(ctx)
{
- context.expose(this, "", (int)(SystemCall::createIterator)());
- context.expose(this, "", (std::string)(SystemCall::getIteratorValue)(int));
- context.expose(this, "", (bool)(SystemCall::nextIterator)(int));
- context.expose(this, "", (int)(SystemCall::destroyIterator)(int));
+ context.expose(this, "", (std::string)(SystemCall::get)(unsigned int));
+ context.expose(this, "", (unsigned int)(SystemCall::size)());
context.expose(this, PRIVILEGE_PLATFORM, (int)(SystemCall::clear)());
context.expose(this, PRIVILEGE_PLATFORM, (int)(SystemCall::enable)(bool));
context.expose(this, "", (bool)(SystemCall::isEnabled)());
context.createNotification("SystemCall");
-
ruleAllSyscall.setKey(AUDIT_RULE_KEY);
ruleAllSyscall.setAllSystemCalls();
if (log.substr(keyPos) == keyString) {
log = log.substr(0, keyPos);
- systemCallLogs.push_back(log);
- ctx.notify("SystemCall", log);
+ logs.push_back(log);
+ ctx.notify("SystemCall", logs.size() - 1);
}
}
});
{
}
-int SystemCall::createIterator()
-{
- int iteratorId = -1;
- iteratorMap.erase(newIteratorId);
- iteratorMap.insert({newIteratorId, 0});
-
- iteratorId = newIteratorId;
-
- if (++newIteratorId < 0) {
- newIteratorId = 0;
- }
- return iteratorId;
-}
-
-std::string SystemCall::getIteratorValue(int iterator)
+std::string SystemCall::get(unsigned int pos)
{
- auto it = iteratorMap.find(iterator);
- if (it == iteratorMap.end()) {
+ if (pos >= logs.size()) {
return "";
}
- if (it->second >= systemCallLogs.size()) {
- return "";
- }
-
- return systemCallLogs[it->second];
-}
-
-bool SystemCall::nextIterator(int iterator)
-{
- auto it = iteratorMap.find(iterator);
- if (it != iteratorMap.end()) {
- if (it->second + 1 < systemCallLogs.size()) {
- it->second++;
- return true;
- }
- }
- return false;
+ return logs[pos];
}
-int SystemCall::destroyIterator(int iterator)
+unsigned int SystemCall::size()
{
- auto it = iteratorMap.find(iterator);
- if (it != iteratorMap.end()) {
- iteratorMap.erase(it);
- return 0;
- }
- return -1;
+ return logs.size();
}
int SystemCall::clear()
{
- systemCallLogs.clear();
+ logs.clear();
return 0;
}