args->driver,
(unsigned char *)args->dom.uuid,
args->dom.name,
+ args->path,
&inode, &offset)) < 0)
goto cleanup;
ino_t inode;
if (virLogHandlerDomainGetLogFilePosition(virLogDaemonGetHandler(logDaemon),
- args->driver,
- (unsigned char *)args->dom.uuid,
- args->dom.name,
+ args->path,
&inode, &offset) < 0)
goto cleanup;
}
if ((data = virLogHandlerDomainReadLogFile(virLogDaemonGetHandler(logDaemon),
- args->driver,
- (unsigned char *)args->dom.uuid,
- args->dom.name,
+ args->path,
args->pos.inode,
args->pos.offset,
args->maxlen)) == NULL)
}
-static char *
-virLogHandlerGetLogFilePathForDomain(virLogHandlerPtr handler,
- const char *driver,
- const unsigned char *domuuid ATTRIBUTE_UNUSED,
- const char *domname)
-{
- char *path;
- if (handler->privileged) {
- if (virAsprintf(&path,
- LOCALSTATEDIR "/log/libvirt/%s/%s.log",
- driver, domname) < 0)
- return NULL;
- } else {
- char *cachedir;
-
- cachedir = virGetUserCacheDirectory();
- if (!cachedir)
- return NULL;
-
- if (virAsprintf(&path,
- "%s/%s/log/%s.log", cachedir, driver, domname) < 0) {
- VIR_FREE(cachedir);
- return NULL;
- }
-
- }
- return path;
-}
-
-
int
virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
const char *driver,
const unsigned char *domuuid,
const char *domname,
+ const char *path,
ino_t *inode,
off_t *offset)
{
size_t i;
virLogHandlerLogFilePtr file = NULL;
int pipefd[2] = { -1, -1 };
- char *path;
virObjectLock(handler);
handler->inhibitor(true, handler->opaque);
- if (!(path = virLogHandlerGetLogFilePathForDomain(handler,
- driver,
- domuuid,
- domname)))
- goto error;
-
for (i = 0; i < handler->nfiles; i++) {
if (STREQ(virRotatingFileWriterGetPath(handler->files[i]->file),
path)) {
goto error;
}
- VIR_FREE(path);
-
*inode = virRotatingFileWriterGetINode(file->file);
*offset = virRotatingFileWriterGetOffset(file->file);
return pipefd[1];
error:
- VIR_FREE(path);
VIR_FORCE_CLOSE(pipefd[0]);
VIR_FORCE_CLOSE(pipefd[1]);
handler->inhibitor(false, handler->opaque);
int
virLogHandlerDomainGetLogFilePosition(virLogHandlerPtr handler,
- const char *driver,
- const unsigned char *domuuid,
- const char *domname,
+ const char *path,
ino_t *inode,
off_t *offset)
{
- char *path;
virLogHandlerLogFilePtr file = NULL;
int ret = -1;
size_t i;
virObjectLock(handler);
- if (!(path = virLogHandlerGetLogFilePathForDomain(handler,
- driver,
- domuuid,
- domname)))
- goto cleanup;
-
for (i = 0; i < handler->nfiles; i++) {
if (STREQ(virRotatingFileWriterGetPath(handler->files[i]->file),
path)) {
if (!file) {
virReportError(VIR_ERR_INTERNAL_ERROR,
- _("No open log file for domain %s"),
- domname);
+ _("No open log file %s"),
+ path);
goto cleanup;
}
ret = 0;
cleanup:
- VIR_FREE(path);
virObjectUnlock(handler);
return ret;
}
char *
virLogHandlerDomainReadLogFile(virLogHandlerPtr handler,
- const char *driver,
- const unsigned char *domuuid,
- const char *domname,
+ const char *path,
ino_t inode,
off_t offset,
size_t maxlen)
{
- char *path;
virRotatingFileReaderPtr file = NULL;
char *data = NULL;
ssize_t got;
virObjectLock(handler);
- if (!(path = virLogHandlerGetLogFilePathForDomain(handler,
- driver,
- domuuid,
- domname)))
- goto error;
-
if (!(file = virRotatingFileReaderNew(path, DEFAULT_MAX_BACKUP)))
goto error;
virRotatingFileReaderFree(file);
virObjectUnlock(handler);
- VIR_FREE(path);
return data;
error:
- VIR_FREE(path);
VIR_FREE(data);
virRotatingFileReaderFree(file);
virObjectUnlock(handler);
const char *driver,
const unsigned char *domuuid,
const char *domname,
+ const char *path,
ino_t *inode,
off_t *offset);
int virLogHandlerDomainGetLogFilePosition(virLogHandlerPtr handler,
- const char *driver,
- const unsigned char *domuuid,
- const char *domname,
+ const char *path,
ino_t *inode,
off_t *offset);
char *virLogHandlerDomainReadLogFile(virLogHandlerPtr handler,
- const char *driver,
- const unsigned char *domuuid,
- const char *domname,
+ const char *path,
ino_t inode,
off_t offset,
size_t maxlen);
const char *driver,
const unsigned char *domuuid,
const char *domname,
+ const char *path,
unsigned int flags,
ino_t *inode,
off_t *offset)
args.driver = (char *)driver;
memcpy(args.dom.uuid, domuuid, VIR_UUID_BUFLEN);
args.dom.name = (char *)domname;
+ args.path = (char *)path;
args.flags = flags;
if (virNetClientProgramCall(mgr->program,
int
virLogManagerDomainGetLogFilePosition(virLogManagerPtr mgr,
- const char *driver,
- const unsigned char *domuuid,
- const char *domname,
+ const char *path,
unsigned int flags,
ino_t *inode,
off_t *offset)
memset(&args, 0, sizeof(args));
memset(&ret, 0, sizeof(ret));
- args.driver = (char *)driver;
- memcpy(args.dom.uuid, domuuid, VIR_UUID_BUFLEN);
- args.dom.name = (char *)domname;
+ args.path = (char *)path;
args.flags = flags;
if (virNetClientProgramCall(mgr->program,
char *
virLogManagerDomainReadLogFile(virLogManagerPtr mgr,
- const char *driver,
- const unsigned char *domuuid,
- const char *domname,
+ const char *path,
ino_t inode,
off_t offset,
size_t maxlen,
memset(&args, 0, sizeof(args));
memset(&ret, 0, sizeof(ret));
- args.driver = (char *)driver;
- memcpy(args.dom.uuid, domuuid, VIR_UUID_BUFLEN);
- args.dom.name = (char *)domname;
+ args.path = (char *)path;
args.flags = flags;
args.pos.inode = inode;
args.pos.offset = offset;
const char *driver,
const unsigned char *domuuid,
const char *domname,
+ const char *path,
unsigned int flags,
ino_t *inode,
off_t *offset);
int virLogManagerDomainGetLogFilePosition(virLogManagerPtr mgr,
- const char *driver,
- const unsigned char *domuuid,
- const char *domname,
+ const char *path,
unsigned int flags,
ino_t *inode,
off_t *offset);
char *virLogManagerDomainReadLogFile(virLogManagerPtr mgr,
- const char *driver,
- const unsigned char *domuuid,
- const char *domname,
+ const char *path,
ino_t inode,
off_t offset,
size_t maxlen,
struct virLogManagerProtocolDomainOpenLogFileArgs {
virLogManagerProtocolNonNullString driver;
virLogManagerProtocolDomain dom;
+ virLogManagerProtocolNonNullString path;
unsigned int flags;
};
};
struct virLogManagerProtocolDomainGetLogFilePositionArgs {
- virLogManagerProtocolNonNullString driver;
- virLogManagerProtocolDomain dom;
+ virLogManagerProtocolNonNullString path;
unsigned int flags;
};
};
struct virLogManagerProtocolDomainReadLogFileArgs {
- virLogManagerProtocolNonNullString driver;
- virLogManagerProtocolDomain dom;
+ virLogManagerProtocolNonNullString path;
virLogManagerProtocolLogFilePosition pos;
unsigned hyper maxlen;
unsigned int flags;
int readfd; /* Only used if manager == NULL */
off_t pos;
ino_t inode; /* Only used if manager != NULL */
- unsigned char uuid[VIR_UUID_BUFLEN]; /* Only used if manager != NULL */
- char *name; /* Only used if manager != NULL */
+ char *path;
virLogManagerPtr manager;
};
{
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
qemuDomainLogContextPtr ctxt = NULL;
- char *logfile = NULL;
if (VIR_ALLOC(ctxt) < 0)
goto error;
ctxt->readfd = -1;
virAtomicIntSet(&ctxt->refs, 1);
+ if (virAsprintf(&ctxt->path, "%s/%s.log", cfg->logDir, vm->def->name) < 0)
+ goto error;
+
if (cfg->stdioLogD) {
ctxt->manager = virLogManagerNew(virQEMUDriverIsPrivileged(driver));
if (!ctxt->manager)
goto error;
- if (VIR_STRDUP(ctxt->name, vm->def->name) < 0)
- goto error;
-
- memcpy(ctxt->uuid, vm->def->uuid, VIR_UUID_BUFLEN);
-
ctxt->writefd = virLogManagerDomainOpenLogFile(ctxt->manager,
"qemu",
vm->def->uuid,
vm->def->name,
+ ctxt->path,
0,
&ctxt->inode,
&ctxt->pos);
if (ctxt->writefd < 0)
goto error;
} else {
- if (virAsprintf(&logfile, "%s/%s.log", cfg->logDir, vm->def->name) < 0)
- goto error;
-
- if ((ctxt->writefd = open(logfile, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR)) < 0) {
+ if ((ctxt->writefd = open(ctxt->path, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR)) < 0) {
virReportSystemError(errno, _("failed to create logfile %s"),
- logfile);
+ ctxt->path);
goto error;
}
if (virSetCloseExec(ctxt->writefd) < 0) {
virReportSystemError(errno, _("failed to set close-on-exec flag on %s"),
- logfile);
+ ctxt->path);
goto error;
}
!virQEMUDriverIsPrivileged(driver) &&
ftruncate(ctxt->writefd, 0) < 0) {
virReportSystemError(errno, _("failed to truncate %s"),
- logfile);
+ ctxt->path);
goto error;
}
if (mode == QEMU_DOMAIN_LOG_CONTEXT_MODE_START) {
- if ((ctxt->readfd = open(logfile, O_RDONLY, S_IRUSR | S_IWUSR)) < 0) {
+ if ((ctxt->readfd = open(ctxt->path, O_RDONLY, S_IRUSR | S_IWUSR)) < 0) {
virReportSystemError(errno, _("failed to open logfile %s"),
- logfile);
+ ctxt->path);
goto error;
}
if (virSetCloseExec(ctxt->readfd) < 0) {
virReportSystemError(errno, _("failed to set close-on-exec flag on %s"),
- logfile);
+ ctxt->path);
goto error;
}
}
if ((ctxt->pos = lseek(ctxt->writefd, 0, SEEK_END)) < 0) {
virReportSystemError(errno, _("failed to seek in log file %s"),
- logfile);
+ ctxt->path);
goto error;
}
}
cleanup:
virObjectUnref(cfg);
- VIR_FREE(logfile);
return ctxt;
error:
size_t buflen;
if (ctxt->manager) {
buf = virLogManagerDomainReadLogFile(ctxt->manager,
- "qemu",
- ctxt->uuid,
- ctxt->name,
+ ctxt->path,
ctxt->inode,
ctxt->pos,
1024 * 128,
{
if (ctxt->manager)
virLogManagerDomainGetLogFilePosition(ctxt->manager,
- "qemu",
- ctxt->uuid,
- ctxt->name,
+ ctxt->path,
0,
&ctxt->inode,
&ctxt->pos);
return;
virLogManagerFree(ctxt->manager);
- VIR_FREE(ctxt->name);
+ VIR_FREE(ctxt->path);
VIR_FORCE_CLOSE(ctxt->writefd);
VIR_FORCE_CLOSE(ctxt->readfd);
VIR_FREE(ctxt);