Make SCS D-Bus independent 40/27040/3
authorMichal Witanowski <m.witanowski@samsung.com>
Mon, 1 Sep 2014 13:14:49 +0000 (15:14 +0200)
committerMichal Witanowski <m.witanowski@samsung.com>
Wed, 3 Sep 2014 16:15:26 +0000 (18:15 +0200)
[Bug/Feature]  Allow to run security-containers-server without dbusd inside
               a container(s).
[Cause]        N/A
[Solution]     Add new value to containers' configs: "enableDbusIntegration".
[Verification] * build, install, run tests
               * run SCS with default configuration
               * run SCS with dbus disabled in one of the containers

Change-Id: If6d42487086a4907b231a8422c49c4cbdedfe18f

28 files changed:
server/configs/containers/business.conf
server/configs/containers/private.conf
server/container-config.hpp
server/container-connection.cpp
server/container.cpp
tests/unit_tests/client/configs/ut-client/containers/console1-dbus.conf
tests/unit_tests/client/configs/ut-client/containers/console2-dbus.conf
tests/unit_tests/client/configs/ut-client/containers/console3-dbus.conf
tests/unit_tests/server/configs/ut-container-admin/containers/buggy.conf.in
tests/unit_tests/server/configs/ut-container-admin/containers/missing.conf
tests/unit_tests/server/configs/ut-container-admin/containers/test-no-shutdown.conf.in
tests/unit_tests/server/configs/ut-container-admin/containers/test.conf.in
tests/unit_tests/server/configs/ut-container/containers/buggy.conf
tests/unit_tests/server/configs/ut-container/containers/test-dbus.conf
tests/unit_tests/server/configs/ut-container/containers/test.conf
tests/unit_tests/server/configs/ut-containers-manager/containers/console1-dbus.conf
tests/unit_tests/server/configs/ut-containers-manager/containers/console1.conf
tests/unit_tests/server/configs/ut-containers-manager/containers/console2-dbus.conf
tests/unit_tests/server/configs/ut-containers-manager/containers/console2.conf
tests/unit_tests/server/configs/ut-containers-manager/containers/console3-dbus.conf
tests/unit_tests/server/configs/ut-containers-manager/containers/console3.conf
tests/unit_tests/server/configs/ut-network-admin/containers/buggy.conf.in
tests/unit_tests/server/configs/ut-network-admin/containers/missing.conf
tests/unit_tests/server/configs/ut-network-admin/containers/test.conf.in
tests/unit_tests/server/configs/ut-server/containers/container1.conf
tests/unit_tests/server/configs/ut-server/containers/container2.conf
tests/unit_tests/server/configs/ut-server/containers/container3.conf
tests/unit_tests/server/ut-containers-manager.cpp

index 1b711b4..1b3502a 100644 (file)
@@ -1,6 +1,7 @@
 {
     "cpuQuotaForeground" : -1,
     "cpuQuotaBackground" : 1000,
+    "enableDbusIntegration" : true,
     "privilege" : 1,
     "switchToDefaultAfterTimeout" : true,
     "config" : "../libvirt-config/business.xml",
index a981caf..62c0f18 100644 (file)
@@ -1,6 +1,7 @@
 {
     "cpuQuotaForeground" : -1,
     "cpuQuotaBackground" : 1000,
+    "enableDbusIntegration" : true,
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
     "config" : "../libvirt-config/private.xml",
index e679abb..b506770 100644 (file)
@@ -49,6 +49,12 @@ struct ContainerConfig {
     bool switchToDefaultAfterTimeout;
 
     /**
+      * Specify, if D-Bus communication with the container will be enabled.
+      * Setting this value to "false" will make the domain API not work inside the container.
+      */
+    bool enableDbusIntegration;
+
+    /**
      * Container's libvirt (XML) config file.
      * Location can be relative to the Container's config file.
      */
@@ -96,6 +102,7 @@ struct ContainerConfig {
     (
         privilege,
         switchToDefaultAfterTimeout,
+        enableDbusIntegration,
         config,
         networkConfig,
         networkFilterConfig,
index d3098aa..7eb8447 100644 (file)
@@ -50,9 +50,8 @@ ContainerConnection::ContainerConnection(const std::string& address, const OnNam
     , mNameLost(false)
 {
     if (address.empty()) {
-        // TODO: this should throw. Don't return cleanly unless the object is fully usable.
-        LOGW("The connection to the container is disabled");
-        return;
+        LOGE("Invalid container connection address");
+        throw ContainerConnectionException("Invalid container connection address");
     }
 
     LOGT("Connecting to DBUS on " << address);
index 62b2c65..60d124e 100644 (file)
@@ -117,14 +117,17 @@ int Container::getPrivilege() const
 void Container::start()
 {
     Lock lock(mReconnectMutex);
-    mConnectionTransport.reset(new ContainerConnectionTransport(mRunMountPoint));
+    if (mConfig.enableDbusIntegration) {
+        mConnectionTransport.reset(new ContainerConnectionTransport(mRunMountPoint));
+    }
     mNetworkAdmin->start();
     mAdmin->start();
-    connect();
+    if (mConfig.enableDbusIntegration) {
+        connect();
+    }
 
-    // Send to the background only after we're connected,
-    // otherwise it'd take ages.
-    LOGD(getId() << ": DBUS connected, sending to the background");
+    // Send to the background only after we're connected, otherwise it'd take ages.
+    LOGD(getId() << ": sending to the background");
     goBackground();
 }
 
@@ -196,7 +199,9 @@ void Container::setDetachOnExit()
     Lock lock(mReconnectMutex);
     mNetworkAdmin->setDetachOnExit();
     mAdmin->setDetachOnExit();
-    mConnectionTransport->setDetachOnExit();
+    if (mConnectionTransport) {
+        mConnectionTransport->setDetachOnExit();
+    }
 }
 
 bool Container::isRunning()
index af3380b..e16f7d6 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 20,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : true,
     "config" : "../libvirt-config/console1-dbus.xml",
     "networkConfig" : "../libvirt-config/network1.xml",
     "networkFilterConfig" : "../libvirt-config/network1-filter.xml",
index 0db0a8a..9aa8e51 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 20,
     "switchToDefaultAfterTimeout" : false,
+    "enableDbusIntegration" : true,
     "config" : "../libvirt-config/console2-dbus.xml",
     "networkConfig" : "../libvirt-config/network2.xml",
     "networkFilterConfig" : "../libvirt-config/network2-filter.xml",
index 14a8a60..09ef262 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 20,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : true,
     "config" : "../libvirt-config/console3-dbus.xml",
     "networkConfig" : "../libvirt-config/network3.xml",
     "networkFilterConfig" : "../libvirt-config/network3-filter.xml",
index 9ebef78..6a0ba2d 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "@SC_TEST_CONFIG_INSTALL_DIR@/server/ut-container-admin/libvirt-config/buggy.xml",
     "networkConfig" : "",
     "networkFilterConfig" : "",
index 1943228..4184401 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "/this/is/a/missing/file/path/missing.xml",
     "networkConfig" : "",
     "networkFilterConfig" : "",
index 2360ac6..995f5ff 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "@SC_TEST_CONFIG_INSTALL_DIR@/server/ut-container-admin/libvirt-config/test-no-shutdown.xml",
     "networkConfig" : "",
     "networkFilterConfig" : "",
index 52da12a..a1d3d53 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "@SC_TEST_CONFIG_INSTALL_DIR@/server/ut-container-admin/libvirt-config/test.xml",
     "networkConfig" : "",
     "networkFilterConfig" : "",
index 5f59a89..5992433 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "/missing/file/path/libvirt.xml",
     "networkConfig" : "../libvirt-config/network.xml",
     "networkFilterConfig" : "../libvirt-config/network-filter.xml",
index f646f80..6301a5a 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : true,
     "config" : "../libvirt-config/test-dbus.xml",
     "networkConfig" : "../libvirt-config/network.xml",
     "networkFilterConfig" : "../libvirt-config/network-filter.xml",
index cfd08c4..111d9ee 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "../libvirt-config/test.xml",
     "networkConfig" : "../libvirt-config/network.xml",
     "networkFilterConfig" : "../libvirt-config/network-filter.xml",
index af3380b..e16f7d6 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 20,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : true,
     "config" : "../libvirt-config/console1-dbus.xml",
     "networkConfig" : "../libvirt-config/network1.xml",
     "networkFilterConfig" : "../libvirt-config/network1-filter.xml",
index e7bcf3f..be47df6 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 20,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "../libvirt-config/console1.xml",
     "networkConfig" : "../libvirt-config/network1.xml",
     "networkFilterConfig" : "../libvirt-config/network1-filter.xml",
index 0db0a8a..9aa8e51 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 20,
     "switchToDefaultAfterTimeout" : false,
+    "enableDbusIntegration" : true,
     "config" : "../libvirt-config/console2-dbus.xml",
     "networkConfig" : "../libvirt-config/network2.xml",
     "networkFilterConfig" : "../libvirt-config/network2-filter.xml",
index 9e0b7c5..4c88170 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "../libvirt-config/console2.xml",
     "networkConfig" : "../libvirt-config/network2.xml",
     "networkFilterConfig" : "../libvirt-config/network2-filter.xml",
index 14a8a60..09ef262 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 20,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : true,
     "config" : "../libvirt-config/console3-dbus.xml",
     "networkConfig" : "../libvirt-config/network3.xml",
     "networkFilterConfig" : "../libvirt-config/network3-filter.xml",
index 6ace25e..d6bc429 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 15,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "../libvirt-config/console3.xml",
     "networkConfig" : "../libvirt-config/network3.xml",
     "networkFilterConfig" : "../libvirt-config/network3-filter.xml",
index 48d0ef8..414b920 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "",
     "networkConfig" : "@SC_TEST_CONFIG_INSTALL_DIR@/server/ut-network-admin/libvirt-config/buggy-network.xml",
     "networkFilterConfig" : "@SC_TEST_CONFIG_INSTALL_DIR@/server/ut-network-admin/libvirt-config/buggy-network-filter.xml",
index b60814d..13ccc44 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "",
     "networkConfig" : "",
     "networkFilterConfig" : "",
index 1dce4ea..be65ee2 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "",
     "networkConfig" : "@SC_TEST_CONFIG_INSTALL_DIR@/server/ut-network-admin/libvirt-config/network.xml",
     "networkFilterConfig" : "@SC_TEST_CONFIG_INSTALL_DIR@/server/ut-network-admin/libvirt-config/network-filter.xml",
index b0f523f..21fb52a 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 20,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "../libvirt-config/container1.xml",
     "networkConfig" : "../libvirt-config/network1.xml",
     "networkFilterConfig" : "../libvirt-config/network1-filter.xml",
index 8a1fde1..6302a39 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 10,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "../libvirt-config/container2.xml",
     "networkConfig" : "../libvirt-config/network2.xml",
     "networkFilterConfig" : "../libvirt-config/network2-filter.xml",
index be23c63..b445156 100644 (file)
@@ -1,6 +1,7 @@
 {
     "privilege" : 15,
     "switchToDefaultAfterTimeout" : true,
+    "enableDbusIntegration" : false,
     "config" : "../libvirt-config/container3.xml",
     "networkConfig" : "../libvirt-config/network3.xml",
     "networkFilterConfig" : "../libvirt-config/network3-filter.xml",
index e578a35..54a34bb 100644 (file)
@@ -732,6 +732,11 @@ BOOST_AUTO_TEST_CASE(ProxyCallTest)
 }
 
 namespace {
+    const DbusAccessory::Dbuses EXPECTED_DBUSES_NO_DBUS = {
+        {"ut-containers-manager-console1", ""},
+        {"ut-containers-manager-console2", ""},
+        {"ut-containers-manager-console3", ""}};
+
     const DbusAccessory::Dbuses EXPECTED_DBUSES_STOPPED = {
         {"ut-containers-manager-console1-dbus", ""},
         {"ut-containers-manager-console2-dbus", ""},
@@ -749,20 +754,26 @@ namespace {
 BOOST_AUTO_TEST_CASE(GetContainerDbusesTest)
 {
     DbusAccessory host(DbusAccessory::HOST_ID);
-
     ContainersManager cm(TEST_DBUS_CONFIG_PATH);
 
     BOOST_CHECK(EXPECTED_DBUSES_STOPPED == host.callMethodGetContainerDbuses());
-
     cm.startAll();
-
     BOOST_CHECK(EXPECTED_DBUSES_STARTED == host.callMethodGetContainerDbuses());
-
     cm.stopAll();
-
     BOOST_CHECK(EXPECTED_DBUSES_STOPPED == host.callMethodGetContainerDbuses());
 }
 
+BOOST_AUTO_TEST_CASE(GetContainerDbusesNoDbusTest)
+{
+    DbusAccessory host(DbusAccessory::HOST_ID);
+    ContainersManager cm(TEST_CONFIG_PATH);
+    BOOST_CHECK(EXPECTED_DBUSES_NO_DBUS == host.callMethodGetContainerDbuses());
+    cm.startAll();
+    BOOST_CHECK(EXPECTED_DBUSES_NO_DBUS == host.callMethodGetContainerDbuses());
+    cm.stopAll();
+    BOOST_CHECK(EXPECTED_DBUSES_NO_DBUS == host.callMethodGetContainerDbuses());
+}
+
 BOOST_AUTO_TEST_CASE(ContainerDbusesSignalsTest)
 {
     Latch signalLatch;