From: Paweł Szewczyk
Date: Wed, 23 Aug 2017 10:32:38 +0000 (+0200)
Subject: database: Add oid validation to database abstraction
X-Git-Tag: submit/tizen/20170919.135738~22
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=01e04fc1b2fea007a1f0fa962bc92e465779511d;p=platform%2Fcore%2Fsystem%2Ffaultd.git
database: Add oid validation to database abstraction
Change-Id: I2657bdb8e2eddc7b5b4cd8d44b35a24f99fb8bd3
Signed-off-by: Paweł Szewczyk
---
diff --git a/src/core/database.c b/src/core/database.c
index d4e2ace..99b2398 100644
--- a/src/core/database.c
+++ b/src/core/database.c
@@ -65,6 +65,14 @@ int database_get_by_oid(faultd_oid_t *oid, struct faultd_object *result)
return database_adapter->get_by_oid(database_adapter, oid, result);
}
+bool database_is_oid_valid(faultd_oid_t *oid)
+{
+ if (!database_adapter)
+ return false;
+
+ return database_adapter->is_oid_valid(oid);
+}
+
const char *database_get_id_key(void)
{
if (!database_adapter)
diff --git a/src/core/database.h b/src/core/database.h
index 2946c76..f204fe9 100644
--- a/src/core/database.h
+++ b/src/core/database.h
@@ -38,6 +38,8 @@ struct faultd_database_adapter {
uint32_t *nr);
int (*new_oid)(faultd_oid_t *oid);
+
+ bool (*is_oid_valid)(faultd_oid_t *oid);
};
#define to_database_adapter(MOD) \
@@ -48,6 +50,7 @@ int database_store(struct faultd_object *obj, faultd_oid_t *oid);
int database_get_by_oid(faultd_oid_t *oid, struct faultd_object *result);
int database_load(struct faultd_object *query, struct faultd_object *result, uint32_t *nr);
int database_new_oid(faultd_oid_t *oid);
+bool database_is_oid_valid(faultd_oid_t *oid);
const char *database_get_id_key(void);
#endif /* _DATABASE_H_ */
diff --git a/src/database/database_nop.c b/src/database/database_nop.c
index cf93612..969b353 100644
--- a/src/database/database_nop.c
+++ b/src/database/database_nop.c
@@ -18,6 +18,8 @@
#include "database.h"
+#define NOP_DEFAULT_OID "NOP"
+
struct nop_adapter {
struct faultd_database_adapter database_adapter;
};
@@ -60,10 +62,15 @@ static int nop_load(struct faultd_database_adapter *adapter,
static int nop_new_oid(faultd_oid_t *oid)
{
- memset(oid, 0, sizeof(*oid));
+ strncpy(oid->nop, NOP_DEFAULT_OID, OID_NOP_SIZE);
return 0;
}
+static bool nop_is_oid_valid(faultd_oid_t *oid)
+{
+ return strncmp(oid->nop, NOP_DEFAULT_OID, OID_NOP_SIZE) == 0;
+}
+
static struct nop_adapter nop_adapter = {
.database_adapter = {
.module = {
@@ -78,6 +85,7 @@ static struct nop_adapter nop_adapter = {
.get_by_oid = nop_get_by_oid,
.load = nop_load,
.new_oid = nop_new_oid,
+ .is_oid_valid = nop_is_oid_valid,
}
};
diff --git a/src/database/ejdb.c b/src/database/ejdb.c
index c93e563..3b889e8 100644
--- a/src/database/ejdb.c
+++ b/src/database/ejdb.c
@@ -379,6 +379,12 @@ static int ejdb_new_oid(faultd_oid_t *oid)
return 0;
}
+static bool ejdb_is_oid_valid(faultd_oid_t *oid)
+{
+ return oid->bson.ints[0] != 0 ||
+ oid->bson.ints[1] != 0 ||
+ oid->bson.ints[2] != 0;
+}
static struct ejdb_adapter ejdb_adapter = {
.database_adapter = {
@@ -394,6 +400,7 @@ static struct ejdb_adapter ejdb_adapter = {
.get_by_oid = ejdb_get_by_oid,
.load = ejdb_load,
.new_oid = ejdb_new_oid,
+ .is_oid_valid = ejdb_is_oid_valid,
}
};
diff --git a/src/event_types/action_executed_event.c b/src/event_types/action_executed_event.c
index 4af8362..96827a8 100644
--- a/src/event_types/action_executed_event.c
+++ b/src/event_types/action_executed_event.c
@@ -21,6 +21,7 @@
#include
#include "common.h"
+#include "database.h"
#include "action_executed_event.h"
static int allocate_ae_event(struct faultd_event_type *type,
@@ -106,6 +107,8 @@ static void ae_event_serialize(struct faultd_event *ev, struct faultd_object *ou
struct action_executed_event *ae_ev =
to_action_executed_event(ev);
+ assert(database_is_oid_valid(&ae_ev->reason->oid));
+
faultd_event_serialize_internal(ev, out);
faultd_object_append_oid(out, AE_EV_REASON, &ae_ev->reason->oid);
faultd_object_append_string(out, AE_EV_ACTION, ae_ev->action);
diff --git a/src/event_types/decision_made_event.c b/src/event_types/decision_made_event.c
index fafce4f..fedc736 100644
--- a/src/event_types/decision_made_event.c
+++ b/src/event_types/decision_made_event.c
@@ -21,6 +21,7 @@
#include
#include "common.h"
+#include "database.h"
#include "decision_made_event.h"
static int allocate_dm_event(struct faultd_event_type *type,
@@ -99,6 +100,8 @@ static void dm_event_serialize(struct faultd_event *ev, struct faultd_object *ou
struct decision_made_event *dm_ev =
to_decision_made_event(ev);
+ assert(database_is_oid_valid(&dm_ev->reason->oid));
+
faultd_event_serialize_internal(ev, out);
faultd_object_append_oid(out, DM_EV_REASON, &dm_ev->reason->oid);
faultd_object_append_string(out, DM_EV_WHO, dm_ev->who_made);
diff --git a/src/util/common.h b/src/util/common.h
index 31a0907..1667788 100644
--- a/src/util/common.h
+++ b/src/util/common.h
@@ -74,8 +74,10 @@ enum faultd_type {
TYPE_OBJECT,
};
+#define OID_NOP_SIZE 4
typedef union {
bson_oid_t bson;
+ char nop[OID_NOP_SIZE];
sd_id128_t uuid;
} faultd_oid_t;
diff --git a/tests/unit/test_dbadapter.c b/tests/unit/test_dbadapter.c
index 11f55ec..f2f909f 100644
--- a/tests/unit/test_dbadapter.c
+++ b/tests/unit/test_dbadapter.c
@@ -62,6 +62,11 @@ static int testdb_new_oid(faultd_oid_t *oid)
return 0;
}
+static bool testdb_is_oid_valid(faultd_oid_t *oid)
+{
+ return true;
+}
+
static struct testdb_adapter testdb_adapter = {
.database_adapter = {
.module = {
@@ -76,6 +81,7 @@ static struct testdb_adapter testdb_adapter = {
.get_by_oid = testdb_get_by_oid,
.load = testdb_load,
.new_oid = testdb_new_oid,
+ .is_oid_valid = testdb_is_oid_valid,
}
};