Replace smack rule storage with straight-from-db rule loader 14/189014/38
authorKonrad Lipinski <k.lipinski2@partner.samsung.com>
Fri, 14 Sep 2018 12:14:17 +0000 (14:14 +0200)
committerKonrad Lipinski <k.lipinski2@partner.samsung.com>
Wed, 10 Oct 2018 13:53:59 +0000 (15:53 +0200)
commit75293c9c70f3f04c86721039bedfd6e0bf0786a8
tree0df3266bd2eb1ee79895deeab61ccb06ecc03c61
parent4e5b938c96cf8a76606417c4ae2bfadb0b6e7fbe
Replace smack rule storage with straight-from-db rule loader

Details:
* remove %{TZ_SYS_VAR}/security-manager/rules{,-merged} directories
* add security-manager-rules-loader that
** performs database migration/recovery
** writes smack rules from a coherent database directly to load2
* add generate-rule-code generator that translates rule templates
  (*.smack files) into c++ code for use in the loader
* remove security-manager-init-db binary and replace its invocation with
  sh$ security-manager-rules-loader no-load
* replace dd invocation with security-manager-rules-loader in the rule
  loader service
* add explicit dependency to ensure the loader runs before the manager
* refactor manager code
** remove the majority of database migration/recovery code on grounds of
   loader having run beforehand
** replace defensive remnants of said code with an emergency invocation
   sh$ security-manager-rules-loader fallback-only
   to apply fallback on database schmea errors
** remove rule file maintenance (not needed anymore)

TODO:
* *.smack template files are still used by the manager at runtime,
  removing them is optional and would require a substantial refactor
  best placed in a separate commit

Pros:
* optimize flash usage (rule files were prone to quadratic explosion)
* solve database-rulefiles coherence problem
* make the rule loader performance more scalable and typically better
* simplify and speed up the manager a bit by dropping rule file code

Change-Id: I7d79d5ec7e66c9dfe6563dbb3f76bf6ab6669589
37 files changed:
CMakeLists.txt
packaging/security-manager.spec
policy/CMakeLists.txt
policy/generate-rule-code [new file with mode: 0755]
policy/updates/update-policy-to-v7.sh [new file with mode: 0755]
src/client/client-security-manager.cpp
src/common/CMakeLists.txt
src/common/config.cpp
src/common/filesystem.cpp
src/common/include/config.h
src/common/include/filesystem.h
src/common/include/privilege_db.h
src/common/include/service_impl.h
src/common/include/smack-rules.h
src/common/include/utils.h
src/common/privilege_db.cpp
src/common/service_impl.cpp
src/common/smack-rules.cpp
src/dpl/db/include/dpl/db/sql_connection.h
src/server/CMakeLists.txt
src/server/cleanup/security-manager-cleanup.cpp
src/server/init-db/security-manager-init-db.cpp [deleted file]
src/server/main/server-main.cpp
src/server/rules-loader/security-manager-rules-loader.cpp [new file with mode: 0644]
src/server/service/base-service.cpp
src/server/service/include/base-service.h
src/server/service/include/service.h
src/server/service/service.cpp
systemd/security-manager-rules-loader.service.in
test/data/.security-manager-test-rules.db [new file with mode: 0644]
test/data/.security-manager-test-rules.txt [new file with mode: 0644]
test/privilege_db_fixture.cpp
test/privilege_db_fixture.h
test/test_privilege_db_migration.cpp
test/test_privilege_db_privilege.cpp
test/test_privilege_db_transactions.cpp
test/test_smack-rules.cpp