tests: test multiple includedirs directive 14/230314/2
authorAdrian Szyndela <adrian.s@samsung.com>
Thu, 9 Apr 2020 07:05:50 +0000 (09:05 +0200)
committerAdrian Szyndela <adrian.s@samsung.com>
Thu, 9 Apr 2020 08:53:58 +0000 (10:53 +0200)
This adds a test which checks if the files in all the directories
specified in all the <includedir> directives are parsed.

It breaks the checks during building as it exposes a bug.
The subsequent commit fixes the bug.

Change-Id: I020246138586357717dbee73617182f79176eac9

Makefile.am
src/test-libdbuspolicy1-multiple-includedirs.cpp [new file with mode: 0644]
tests/default_deny/another-system.d/some-service.conf [new file with mode: 0644]
tests/default_deny/system-multiple-includedirs.conf [new file with mode: 0644]
tests/default_deny/system.d/some-service.conf [new file with mode: 0644]
tests/default_deny/yet-another-system.d/some-service.conf [new file with mode: 0644]

index 9f2c98d..aad84e6 100644 (file)
@@ -150,7 +150,8 @@ TESTS = src/test-libdbuspolicy1-ownership \
        src/test-libdbuspolicy1-access-deny-gdi \
        src/test-libdbuspolicy1-send_destination_prefix-deny \
        src/test-libdbuspolicy1-send_destination_prefix-deny-gdi \
-       src/test-serializer
+       src/test-serializer \
+       src/test-libdbuspolicy1-multiple-includedirs
 
 check_PROGRAMS = $(TESTS)
 
@@ -167,6 +168,7 @@ src_test_libdbuspolicy1_access_deny_gdi_SOURCES = src/test-libdbuspolicy1-access
 src_test_libdbuspolicy1_send_destination_prefix_deny_SOURCES = src/test-libdbuspolicy1-send_destination_prefix-deny.cpp
 src_test_libdbuspolicy1_send_destination_prefix_deny_gdi_SOURCES = src/test-libdbuspolicy1-send_destination_prefix-deny-gdi.cpp
 src_test_serializer_SOURCES = src/test-serializer.cpp
+src_test_libdbuspolicy1_multiple_includedirs_SOURCES = src/test-libdbuspolicy1-multiple-includedirs.cpp
 
 noinst_LTLIBRARIES = src/libinternal.la
 src_libinternal_la_SOURCES =\
@@ -193,6 +195,7 @@ src_test_libdbuspolicy1_access_deny_gdi_LDADD = $(TESTS_LDADD)
 src_test_libdbuspolicy1_send_destination_prefix_deny_LDADD = $(TESTS_LDADD)
 src_test_libdbuspolicy1_send_destination_prefix_deny_gdi_LDADD = $(TESTS_LDADD)
 src_test_serializer_LDADD = $(TESTS_LDADD)
+src_test_libdbuspolicy1_multiple_includedirs_LDADD = $(TESTS_LDADD)
 
 if ENABLE_STANDALONE_TESTS
 noinst_LTLIBRARIES += src/libinternalfortests.la
diff --git a/src/test-libdbuspolicy1-multiple-includedirs.cpp b/src/test-libdbuspolicy1-multiple-includedirs.cpp
new file mode 100644 (file)
index 0000000..abdb0e8
--- /dev/null
@@ -0,0 +1,35 @@
+#include "internal/naive_policy_checker.hpp"
+#include "internal/tslog.hpp"
+
+#include <stdexcept>
+#include <iostream>
+
+ldp_xml_parser::Decision test_destination(const ldp_serialized::StorageBackendSerialized &db, const char *destination) {
+       KdbusBusNames names;
+       ldp_xml_parser::MatchItemSend item("ex.ample.interface", "ExampleMember", "/Ex/Ample/Path",
+                       ldp_xml_parser::MessageType::METHOD_CALL, names.addSpaceSeparatedNames(destination));
+
+       return db.getDecisionItemUser(0, item).getDecision();
+}
+
+#define tassert(COND) do { if (!(COND)) throw std::runtime_error("test failed: " #COND); } while (0)
+
+int main() try {
+       tslog::init();
+
+       auto &checker = policy_checker_system();
+       checker.initDb("tests/default_deny/system-multiple-includedirs.conf");
+
+       auto &db = checker.getPolicyDb();
+       tassert(test_destination(db, "org.tizen.test.allow-me-for-root") == ldp_xml_parser::Decision::ALLOW);
+       tassert(test_destination(db, "org.tizen.test.deny-me-for-root") == ldp_xml_parser::Decision::DENY);
+       tassert(test_destination(db, "org.tizen.test.another-allow-me-for-root") == ldp_xml_parser::Decision::ALLOW);
+       tassert(test_destination(db, "org.tizen.test.another-deny-me-for-root") == ldp_xml_parser::Decision::DENY);
+       tassert(test_destination(db, "org.tizen.test.yet-another-allow-me-for-root") == ldp_xml_parser::Decision::ALLOW);
+       tassert(test_destination(db, "org.tizen.test.yet-another-deny-me-for-root") == ldp_xml_parser::Decision::DENY);
+
+       return 0;
+} catch (std::runtime_error &e) {
+       std::cerr << e.what();
+       return 1;
+}
diff --git a/tests/default_deny/another-system.d/some-service.conf b/tests/default_deny/another-system.d/some-service.conf
new file mode 100644 (file)
index 0000000..fae3d97
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE busconfig PUBLIC
+          "-//tizen//DTD D-BUS Bus Configuration 1.0//EN"
+          "http://www.tizen.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+  <policy user="root">
+       <allow send_destination="org.tizen.test.another-allow-me-for-root"/>
+       <deny send_destination="org.tizen.test.another-deny-me-for-root"/>
+  </policy>
+
+</busconfig>
+<!-- vim: set ft=xml: -->
diff --git a/tests/default_deny/system-multiple-includedirs.conf b/tests/default_deny/system-multiple-includedirs.conf
new file mode 100644 (file)
index 0000000..99a7a2e
--- /dev/null
@@ -0,0 +1,20 @@
+<!-- This configuration file controls the systemwide message bus.
+     Add a system-local.conf and edit that rather than changing this
+     file directly. -->
+
+<!-- Note that there are any number of ways you can hose yourself
+     security-wise by screwing up this file; in particular, you
+     probably don't want to listen on any more addresses, add any more
+     auth mechanisms, run as a different user, etc. -->
+
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+  <include>system-base.conf</include>
+
+  <includedir>another-system.d</includedir>
+  <includedir>yet-another-system.d</includedir>
+
+</busconfig>
+<!-- vim: set ft=xml: -->
diff --git a/tests/default_deny/system.d/some-service.conf b/tests/default_deny/system.d/some-service.conf
new file mode 100644 (file)
index 0000000..4252922
--- /dev/null
@@ -0,0 +1,15 @@
+<!DOCTYPE busconfig PUBLIC
+          "-//tizen//DTD D-BUS Bus Configuration 1.0//EN"
+          "http://www.tizen.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+  <policy user="root">
+    <deny send_destination="org.tizen.test.deny-me-for-root"/>
+    <allow send_destination="org.tizen.test.allow-me-for-root"/>
+  </policy>
+
+  <policy context="default">
+    <deny send_destination_prefix="org.tizen.test"/>
+  </policy>
+</busconfig>
+<!-- vim: set ft=xml: -->
diff --git a/tests/default_deny/yet-another-system.d/some-service.conf b/tests/default_deny/yet-another-system.d/some-service.conf
new file mode 100644 (file)
index 0000000..4ec24e9
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE busconfig PUBLIC
+          "-//tizen//DTD D-BUS Bus Configuration 1.0//EN"
+          "http://www.tizen.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+  <policy user="root">
+       <allow send_destination="org.tizen.test.yet-another-allow-me-for-root"/>
+       <deny send_destination="org.tizen.test.yet-another-deny-me-for-root"/>
+  </policy>
+
+</busconfig>
+<!-- vim: set ft=xml: -->