diff options
author | Adrian Szyndela <adrian.s@samsung.com> | 2020-11-03 10:42:17 +0100 |
---|---|---|
committer | Adrian Szyndela <adrian.s@samsung.com> | 2020-11-03 10:44:21 +0100 |
commit | bf74e4e0524dc0c525340aad3c688e6bf8dadf43 (patch) | |
tree | 12db76d4783f58dcd4bc1e816af7a2a1baada651 | |
parent | cdaf39ced4a983e3915e331267598921cd04a6ea (diff) | |
download | libdbuspolicy-bf74e4e0524dc0c525340aad3c688e6bf8dadf43.tar.gz libdbuspolicy-bf74e4e0524dc0c525340aad3c688e6bf8dadf43.tar.bz2 libdbuspolicy-bf74e4e0524dc0c525340aad3c688e6bf8dadf43.zip |
serialization: add simple file verification methodsubmit/tizen/20201104.053310accepted/tizen/unified/20201105.124409
Change-Id: I95d3501bcfffa0e4601ee2c3738b38c41b366a44
-rw-r--r-- | src/internal/serializer_direct.cpp | 4 | ||||
-rw-r--r-- | src/internal/storage_backend_direct.cpp | 22 | ||||
-rw-r--r-- | src/internal/storage_backend_direct.hpp | 7 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/internal/serializer_direct.cpp b/src/internal/serializer_direct.cpp index d74ce9b..d90387e 100644 --- a/src/internal/serializer_direct.cpp +++ b/src/internal/serializer_direct.cpp @@ -24,6 +24,7 @@ #include "serialization_traits.hpp" #include "serialized.hpp" #include "serializer_direct.hpp" +#include "storage_backend_direct.hpp" using namespace ldp_serializer; using ldp_serializer::Serialized; @@ -154,7 +155,8 @@ const uint8_t *SerializerDirectImpl::serialize(size_t &size) { serializeSet<ldp_xml_parser::PolicyOwn>(), serializeSet<ldp_xml_parser::PolicySend>(), serializeSet<ldp_xml_parser::PolicyReceive>(), - serializeSet<ldp_xml_parser::PolicyAccess>()}; + serializeSet<ldp_xml_parser::PolicyAccess>(), + ldp_serialized::StorageBackendDirect::currentDbVersion}; size = r.size(); return r.releaseData(); diff --git a/src/internal/storage_backend_direct.cpp b/src/internal/storage_backend_direct.cpp index 455f443..5628b52 100644 --- a/src/internal/storage_backend_direct.cpp +++ b/src/internal/storage_backend_direct.cpp @@ -20,12 +20,32 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ +#include "tslog.hpp" #include "storage_backend_direct.hpp" +#include <cassert> using namespace ldp_serialized; -bool StorageBackendDirect::initFromData(const uint8_t *mem, size_t , bool ) { +const boost::string_ref StorageBackendDirect::currentDbVersion{"Libdbuspolicy direct serialization database, v. 1.0"}; +bool StorageBackendDirect::initFromData(const uint8_t *mem, size_t size, bool verify) { + assert(mem); file = reinterpret_cast<const File*>(mem); + + if (verify) { + bool verified = false; + auto end = mem + size; + auto version = fileGetDbVersion(file); + auto version_uint8 = reinterpret_cast<const uint8_t *>(version); + if (version_uint8 < end) { + auto s = stringGetSize(version); + if (version_uint8 + s < end) + verified = currentDbVersion == stringGetCStr(version); + } + + if (!verified) + file = nullptr; + } + return file != nullptr; } diff --git a/src/internal/storage_backend_direct.hpp b/src/internal/storage_backend_direct.hpp index 4b3b47b..7afb1f7 100644 --- a/src/internal/storage_backend_direct.hpp +++ b/src/internal/storage_backend_direct.hpp @@ -122,6 +122,7 @@ namespace ldp_serialized { * } * } * } + * db_version: string; * * define DecisionItem = { * decision: Decision; @@ -371,6 +372,8 @@ public: { return ptr<ReceiveSetType>(2); } const auto *getAccessSet() const { return ptr<AccessSetType>(3); } + const auto *getDbVersion() const + { return ptr<Str>(4); } }; class StorageBackendDirect { @@ -398,6 +401,8 @@ class StorageBackendDirect { return std::make_pair(false, *container->begin()); } public: + static const boost::string_ref currentDbVersion; + bool initFromData(const uint8_t *serialized_data, size_t size, bool verify = false); void release() {} @@ -412,6 +417,8 @@ public: { return file->getReceiveSet(); } auto fileGetAccessSet(const File *file) const { return file->getAccessSet(); } + auto fileGetDbVersion(const File *file) const + { return file->getDbVersion(); } template <typename PolicyType> auto setGetContextDefault(const Set<PolicyType> *set) const |