[libvirt] [PATCH] Create temporary dir for socket

to avoid ENAMETOOLONG: https://buildd.debian.org/status/fetch.php?pkg=libvirt&arch=amd64&ver=1.0.0~rc1-1&stamp=1351453521 --- tests/qemumonitortestutils.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index 7133c99..1369cb7 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -424,9 +424,23 @@ static qemuMonitorCallbacks qemuCallbacks = { qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps) { qemuMonitorTestPtr test; - const char *path = abs_builddir "/qemumonitorjsontest.sock"; virDomainChrSourceDef src; + char *tmpdir = NULL, *path = NULL; + char template[] = "/tmp/libvirt_XXXXXX"; + + tmpdir = mkdtemp(template); + if (tmpdir == NULL) { + virReportSystemError(errno, "%s", + "Failed to create temporary directory"); + goto error; + } + + if (virAsprintf(&path, "%s/qemumonitorjsontest.sock", tmpdir) < 0) { + virReportOOMError(); + goto error; + } + memset(&src, 0, sizeof(src)); src.type = VIR_DOMAIN_CHR_TYPE_UNIX; src.data.nix.path = (char *)path; @@ -494,11 +508,15 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps) test->running = true; virMutexUnlock(&test->lock); +cleanup: + if (tmpdir) + rmdir(tmpdir); + VIR_FREE(path); return test; error: qemuMonitorTestFree(test); - return NULL; + goto cleanup; } qemuMonitorPtr qemuMonitorTestGetMonitor(qemuMonitorTestPtr test) -- 1.7.10.4

On 10/29/2012 06:05 AM, Guido Günther wrote:
to avoid ENAMETOOLONG:
https://buildd.debian.org/status/fetch.php?pkg=libvirt&arch=amd64&ver=1.0.0~rc1-1&stamp=1351453521 --- tests/qemumonitortestutils.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)
ACK once you fix this bug:
diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index 7133c99..1369cb7 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -424,9 +424,23 @@ static qemuMonitorCallbacks qemuCallbacks = { qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps) { qemuMonitorTestPtr test;
Uninitialized...
- const char *path = abs_builddir "/qemumonitorjsontest.sock"; virDomainChrSourceDef src;
+ char *tmpdir = NULL, *path = NULL; + char template[] = "/tmp/libvirt_XXXXXX"; + + tmpdir = mkdtemp(template); + if (tmpdir == NULL) { + virReportSystemError(errno, "%s", + "Failed to create temporary directory"); + goto error;
Still uninitialized...
+ } + + if (virAsprintf(&path, "%s/qemumonitorjsontest.sock", tmpdir) < 0) { + virReportOOMError(); + goto error; + } + memset(&src, 0, sizeof(src)); src.type = VIR_DOMAIN_CHR_TYPE_UNIX; src.data.nix.path = (char *)path; @@ -494,11 +508,15 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps) test->running = true; virMutexUnlock(&test->lock);
+cleanup: + if (tmpdir) + rmdir(tmpdir); + VIR_FREE(path); return test;
error: qemuMonitorTestFree(test);
...and freed. Crash-tastic. Also, it might be worth adding a VIR_WARN if the rmdir() fails. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

On Tue, Oct 30, 2012 at 07:08:36AM -0600, Eric Blake wrote:
On 10/29/2012 06:05 AM, Guido Günther wrote:
to avoid ENAMETOOLONG:
https://buildd.debian.org/status/fetch.php?pkg=libvirt&arch=amd64&ver=1.0.0~rc1-1&stamp=1351453521 --- tests/qemumonitortestutils.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)
ACK once you fix this bug:
diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index 7133c99..1369cb7 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -424,9 +424,23 @@ static qemuMonitorCallbacks qemuCallbacks = { qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps) { qemuMonitorTestPtr test;
Uninitialized...
- const char *path = abs_builddir "/qemumonitorjsontest.sock"; virDomainChrSourceDef src;
+ char *tmpdir = NULL, *path = NULL; + char template[] = "/tmp/libvirt_XXXXXX"; + + tmpdir = mkdtemp(template); + if (tmpdir == NULL) { + virReportSystemError(errno, "%s", + "Failed to create temporary directory"); + goto error;
Still uninitialized...
+ } + + if (virAsprintf(&path, "%s/qemumonitorjsontest.sock", tmpdir) < 0) { + virReportOOMError(); + goto error; + } + memset(&src, 0, sizeof(src)); src.type = VIR_DOMAIN_CHR_TYPE_UNIX; src.data.nix.path = (char *)path; @@ -494,11 +508,15 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps) test->running = true; virMutexUnlock(&test->lock);
+cleanup: + if (tmpdir) + rmdir(tmpdir); + VIR_FREE(path); return test;
error: qemuMonitorTestFree(test);
...and freed. Crash-tastic.
Also, it might be worth adding a VIR_WARN if the rmdir() fails.
Fixed and pushed, also added the VIR_WARN. Thanks, -- Guido
-- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
participants (2)
-
Eric Blake
-
Guido Günther