]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix return value in virStateInitialize impl for LXC
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 2 Nov 2009 23:18:19 +0000 (18:18 -0500)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 2 Nov 2009 23:20:14 +0000 (18:20 -0500)
The LXC driver was mistakenly returning -1 for lxcStartup()
in scenarios that are not an error. This caused the libvirtd
to quit for unprivileged users. This fixes the return code
of LXC driver, and also adds a "name" field to the virStateDriver
struct and logging to make it easier to find these problems
in the future

* src/driver.h: Add a 'name' field to state driver to allow
  easy identification during failures
* src/libvirt.c: Log name of failed driver for virStateInit
  failures
* src/lxc/lxc_driver.c: Don't return a failure code for
  lxcStartup() if LXC is not available on this host, simply
  disable the driver.
* src/network/bridge_driver.c, src/node_device/node_device_devkit.c,
  src/node_device/node_device_hal.c, src/opennebula/one_driver.c,
  src/qemu/qemu_driver.c, src/remote/remote_driver.c,
  src/secret/secret_driver.c, src/storage/storage_driver.c,
  src/uml/uml_driver.c, src/xen/xen_driver.c: Fill in name
  field in virStateDriver struct

13 files changed:
src/driver.h
src/libvirt.c
src/lxc/lxc_driver.c
src/network/bridge_driver.c
src/node_device/node_device_devkit.c
src/node_device/node_device_hal.c
src/opennebula/one_driver.c
src/qemu/qemu_driver.c
src/remote/remote_driver.c
src/secret/secret_driver.c
src/storage/storage_driver.c
src/uml/uml_driver.c
src/xen/xen_driver.c

index 0c8f9232b85cfcce3c480ccd348d8505d3e2b99f..d4a8b960a1378fcf5fd5b3d922cb5933280285f4 100644 (file)
@@ -731,6 +731,7 @@ typedef struct _virStateDriver virStateDriver;
 typedef virStateDriver *virStateDriverPtr;
 
 struct _virStateDriver {
+    const char *name;
     virDrvStateInitialize  initialize;
     virDrvStateCleanup     cleanup;
     virDrvStateReload      reload;
index 5ddf27a1893e255072b12116279950fee047b702..b0b67c2409aaee661dd51e1a02536de63b09f3ed 100644 (file)
@@ -827,8 +827,11 @@ int virStateInitialize(int privileged) {
 
     for (i = 0 ; i < virStateDriverTabCount ; i++) {
         if (virStateDriverTab[i]->initialize &&
-            virStateDriverTab[i]->initialize(privileged) < 0)
+            virStateDriverTab[i]->initialize(privileged) < 0) {
+            VIR_ERROR("Initialization of %s state driver failed",
+                      virStateDriverTab[i]->name);
             ret = -1;
+        }
     }
     return ret;
 }
index 47e59f65d47d8c028d034d386d164a2d63f62f73..9a5c43a1c70977aab023c7952268e5d17a115708 100644 (file)
@@ -1641,12 +1641,21 @@ static int lxcStartup(int privileged)
      * XXX remove this when valgrind is fixed
      */
     ld = getenv("LD_PRELOAD");
-    if (ld && strstr(ld, "vgpreload"))
-        return -1;
+    if (ld && strstr(ld, "vgpreload")) {
+        VIR_INFO0("Running under valgrind, disabling driver");
+        return 0;
+    }
 
-    /* Check that the user is root */
+    /* Check that the user is root, silently disable if not */
     if (!privileged) {
-        return -1;
+        VIR_INFO0("Not running privileged, disabling driver");
+        return 0;
+    }
+
+    /* Check that this is a container enabled kernel */
+    if (lxcContainerAvailable(0) < 0) {
+        VIR_INFO0("LXC support not available in this kernel, disabling driver");
+        return 0;
     }
 
     if (VIR_ALLOC(lxc_driver) < 0) {
@@ -1658,12 +1667,6 @@ static int lxcStartup(int privileged)
     }
     lxcDriverLock(lxc_driver);
 
-    /* Check that this is a container enabled kernel */
-    if (lxcContainerAvailable(0) < 0) {
-        VIR_INFO0("LXC support not available in this kernel, disabling driver");
-        goto cleanup;
-    }
-
     if (virDomainObjListInit(&lxc_driver->domains) < 0)
         goto cleanup;
 
@@ -2322,6 +2325,7 @@ static virDriver lxcDriver = {
 };
 
 static virStateDriver lxcStateDriver = {
+    .name = "LXC",
     .initialize = lxcStartup,
     .cleanup = lxcShutdown,
     .active = lxcActive,
index 32331016cdca63e91bd968550c05bf25aa90cd76..76caa7e5e06d5f7caec1844e0025feddc3160d44 100644 (file)
@@ -1509,6 +1509,7 @@ static virNetworkDriver networkDriver = {
 };
 
 static virStateDriver networkStateDriver = {
+    "Network",
     networkStartup,
     networkShutdown,
     networkReload,
index a6c79419f0faff8dd21510adb3b9eb13ed878fda..d2ffa1d9314e72ffe7ec9ce809c8357eb7e52546 100644 (file)
@@ -431,6 +431,7 @@ static virDeviceMonitor devkitDeviceMonitor = {
 
 
 static virStateDriver devkitStateDriver = {
+    .name = "DeviceKit",
     .initialize = devkitDeviceMonitorStartup,
     .cleanup = devkitDeviceMonitorShutdown,
     .reload = devkitDeviceMonitorReload,
index 18be5ed9363a233c40109c7f7ea481885275a5af..fe8d1166913fe3e56e3ea130640b4ac743cef418 100644 (file)
@@ -873,6 +873,7 @@ static virDeviceMonitor halDeviceMonitor = {
 
 
 static virStateDriver halStateDriver = {
+    .name = "HAL",
     .initialize = halDeviceMonitorStartup,
     .cleanup = halDeviceMonitorShutdown,
     .reload = halDeviceMonitorReload,
index cffd626cde5244081a226b9253607d8129a67cec..19a335c305c160e3dc2a40609d58b15b72c5acb6 100644 (file)
@@ -761,6 +761,7 @@ static virDriver oneDriver = {
 };
 
 static virStateDriver oneStateDriver = {
+    .name = "OpenNebula",
     .initialize = oneStartup,
     .cleanup    = oneShutdown,
     .active     = oneActive,
index 437a1b4c7990c872f86a6516b08db0219f95b9ef..4eb4b68a745ada31f6ad5867eb964e0f517c520d 100644 (file)
@@ -7154,6 +7154,7 @@ static virDriver qemuDriver = {
 
 
 static virStateDriver qemuStateDriver = {
+    .name = "QEMU",
     .initialize = qemudStartup,
     .cleanup = qemudShutdown,
     .reload = qemudReload,
index a1989999c91c649d1033098da03c63249b271f6d..ee7a04690978869019dba9627a82b08db53a1630 100644 (file)
@@ -8560,6 +8560,7 @@ static virDeviceMonitor dev_monitor = {
 
 #ifdef WITH_LIBVIRTD
 static virStateDriver state_driver = {
+    .name = "Remote",
     .initialize = remoteStartup,
 };
 #endif
index d61c24a96bd3aed850c59403398c9d8b8ac77f44..1d5b4f7991e8c0e607d7417192049f3b7ab8e78f 100644 (file)
@@ -1074,6 +1074,7 @@ static virSecretDriver secretDriver = {
 };
 
 static virStateDriver stateDriver = {
+    .name = "Secret",
     .initialize = secretDriverStartup,
     .cleanup = secretDriverCleanup,
     .reload = secretDriverReload,
index 4f8949b34c7c25452ace61471a6a3bcace598319..80e4543f9919f3ab5b2a824a71d007e2e556c400 100644 (file)
@@ -1744,6 +1744,7 @@ static virStorageDriver storageDriver = {
 
 
 static virStateDriver stateDriver = {
+    .name = "Storage",
     .initialize = storageDriverStartup,
     .cleanup = storageDriverShutdown,
     .reload = storageDriverReload,
index fac3c4ca371b03712563bb9833cbce8da69ee0e1..5c6dbff9a77d9ce5ce4f029776f03315d8b96844 100644 (file)
@@ -1855,6 +1855,7 @@ static virDriver umlDriver = {
 
 
 static virStateDriver umlStateDriver = {
+    .name = "UML",
     .initialize = umlStartup,
     .cleanup = umlShutdown,
     .reload = umlReload,
index f2744b095d61ba60b2ecf3db18689b82168d0920..41f340ced75539cea17a0d22f2399d0bd1cb1784 100644 (file)
@@ -182,6 +182,7 @@ xenInitialize (int privileged ATTRIBUTE_UNUSED)
 }
 
 static virStateDriver state_driver = {
+    .name = "Xen",
     .initialize = xenInitialize,
 };