*/
#if HAVE_DLFCN_H
virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
- const char *configFile,
+ const char *driverName,
+ const char *configDir,
unsigned int flags)
{
void *handle = NULL;
virLockManagerPluginPtr plugin = NULL;
const char *moddir = getenv("LIBVIRT_LOCK_MANAGER_PLUGIN_DIR");
char *modfile = NULL;
+ char *configFile = NULL;
+
+ VIR_DEBUG("name=%s driverName=%s configDir=%s flags=%x",
+ name, driverName, configDir, flags);
+
+ if (virAsprintf(&configFile, "%s/%s-%s.conf",
+ configDir, driverName, name) < 0) {
+ virReportOOMError();
+ return NULL;
+ }
if (STREQ(name, "nop")) {
driver = &virLockDriverNop;
if (virAsprintf(&modfile, "%s/%s.so", moddir, name) < 0) {
virReportOOMError();
- return NULL;
+ goto cleanup;
}
if (access(modfile, R_OK) < 0) {
goto cleanup;
}
+ VIR_FREE(configFile);
VIR_FREE(modfile);
return plugin;
cleanup:
+ VIR_FREE(configFile);
VIR_FREE(plugin);
VIR_FREE(modfile);
if (handle)
#else /* !HAVE_DLFCN_H */
virLockManagerPluginPtr
virLockManagerPluginNew(const char *name ATTRIBUTE_UNUSED,
- const char *configFile ATTRIBUTE_UNUSED,
+ const char *driverName ATTRIBUTE_UNUSED,
+ const char *configDir ATTRIBUTE_UNUSED,
unsigned int flags_unused ATTRIBUTE_UNUSED)
{
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
void virLockManagerSetPluginDir(const char *dir);
virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
- const char *configFile,
+ const char *driverName,
+ const char *configDir,
unsigned int flags);
void virLockManagerPluginRef(virLockManagerPluginPtr plugin);
void virLockManagerPluginUnref(virLockManagerPluginPtr plugin);
}
#endif
- if (!(driver->lockManager = virLockManagerPluginNew("nop", NULL, 0)))
+ if (!(driver->lockManager = virLockManagerPluginNew("nop",
+ "qemu",
+ driver->configBaseDir,
+ 0)))
goto cleanup;
driver->keepAliveInterval = 5;
p = virConfGetValue(conf, "lock_manager");
CHECK_TYPE("lock_manager", VIR_CONF_STRING);
if (p && p->str) {
- char *lockConf;
virLockManagerPluginUnref(driver->lockManager);
- if (virAsprintf(&lockConf, "%s/libvirt/qemu-%s.conf", SYSCONFDIR, p->str) < 0)
- goto no_memory;
-
if (!(driver->lockManager =
- virLockManagerPluginNew(p->str, lockConf, 0)))
+ virLockManagerPluginNew(p->str, "qemu", driver->configBaseDir, 0)))
VIR_ERROR(_("Failed to load lock manager %s"), p->str);
- VIR_FREE(lockConf);
}
GET_VALUE_LONG("max_queued", driver->max_queued);
virDomainObjList domains;
- /* These four directories are ones libvirtd uses (so must be root:root
+ /* These five directories are ones libvirtd uses (so must be root:root
* to avoid security risk from QEMU processes */
+ char *configBaseDir;
char *configDir;
char *autostartDir;
char *logDir;
virStateInhibitCallback callback,
void *opaque)
{
- char *base = NULL;
+ char *base;
char *driverConf = NULL;
int rc;
virConnectPtr conn = NULL;
"%s/log/libvirt/qemu", LOCALSTATEDIR) == -1)
goto out_of_memory;
- if ((base = strdup(SYSCONFDIR "/libvirt")) == NULL)
+ if ((qemu_driver->configBaseDir = strdup(SYSCONFDIR "/libvirt")) == NULL)
goto out_of_memory;
+ base = qemu_driver->configBaseDir;
if (virAsprintf(&qemu_driver->stateDir,
"%s/run/libvirt/qemu", LOCALSTATEDIR) == -1)
}
VIR_FREE(rundir);
- base = virGetUserConfigDirectory();
- if (!base)
+ if (!(qemu_driver->configBaseDir = virGetUserConfigDirectory()))
goto error;
+ base = qemu_driver->configBaseDir;
if (virAsprintf(&qemu_driver->libDir, "%s/qemu/lib", base) == -1)
goto out_of_memory;
if (virAsprintf(&qemu_driver->saveDir, "%s/qemu/save", base) == -1)
virAsprintf(&qemu_driver->autostartDir, "%s/qemu/autostart", base) < 0)
goto out_of_memory;
- VIR_FREE(base);
-
rc = virCgroupForDriver("qemu", &qemu_driver->cgroup, privileged, 1);
if (rc < 0) {
VIR_INFO("Unable to create cgroup for driver: %s",
qemuDriverUnlock(qemu_driver);
if (conn)
virConnectClose(conn);
- VIR_FREE(base);
VIR_FREE(driverConf);
VIR_FREE(membase);
VIR_FREE(mempath);
qemuDriverCloseCallbackShutdown(qemu_driver);
+ VIR_FREE(qemu_driver->configBaseDir);
VIR_FREE(qemu_driver->configDir);
VIR_FREE(qemu_driver->autostartDir);
VIR_FREE(qemu_driver->logDir);