提交 63f22dc8 编写于 作者: J Ján Tomko

Create hostdevmgr in UserRuntimeDirectory for session libvirt

Without this, session libvirt won't start if it fails to create
the directory.
上级 1fc4846b
...@@ -89,6 +89,7 @@ static virHostdevManagerPtr ...@@ -89,6 +89,7 @@ static virHostdevManagerPtr
virHostdevManagerNew(void) virHostdevManagerNew(void)
{ {
virHostdevManagerPtr hostdevMgr; virHostdevManagerPtr hostdevMgr;
bool privileged = geteuid() == 0;
if (!(hostdevMgr = virObjectNew(virHostdevManagerClass))) if (!(hostdevMgr = virObjectNew(virHostdevManagerClass)))
return NULL; return NULL;
...@@ -105,6 +106,7 @@ virHostdevManagerNew(void) ...@@ -105,6 +106,7 @@ virHostdevManagerNew(void)
if ((hostdevMgr->activeSCSIHostdevs = virSCSIDeviceListNew()) == NULL) if ((hostdevMgr->activeSCSIHostdevs = virSCSIDeviceListNew()) == NULL)
goto error; goto error;
if (privileged) {
if (VIR_STRDUP(hostdevMgr->stateDir, HOSTDEV_STATE_DIR) < 0) if (VIR_STRDUP(hostdevMgr->stateDir, HOSTDEV_STATE_DIR) < 0)
goto error; goto error;
...@@ -114,6 +116,30 @@ virHostdevManagerNew(void) ...@@ -114,6 +116,30 @@ virHostdevManagerNew(void)
hostdevMgr->stateDir); hostdevMgr->stateDir);
goto error; goto error;
} }
} else {
char *rundir = NULL;
mode_t old_umask;
if (!(rundir = virGetUserRuntimeDirectory()))
goto error;
if (virAsprintf(&hostdevMgr->stateDir, "%s/hostdevmgr", rundir) < 0) {
VIR_FREE(rundir);
goto error;
}
VIR_FREE(rundir);
old_umask = umask(077);
if (virFileMakePath(hostdevMgr->stateDir) < 0) {
umask(old_umask);
virReportError(VIR_ERR_OPERATION_FAILED,
_("Failed to create state dir '%s'"),
hostdevMgr->stateDir);
goto error;
}
umask(old_umask);
}
return hostdevMgr; return hostdevMgr;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册