From: Michal Privoznik <[email protected]>

Some functions inside of domain_logcontext call virLogManager
APIs. But that one is available only when remote driver is
enabled (from src/logging/meson.build):

if conf.has('WITH_REMOTE')
  log_driver_lib = static_library(
    'virt_log_driver',
    [
      log_driver_sources,
      log_protocol_generated,
    ],
    ...

Guard calls to virLogManager APIs with #ifdef WITH_REMOTE.

Resolves: https://gitlab.com/libvirt/libvirt/-/issues/842
Signed-off-by: Michal Privoznik <[email protected]>
---
 src/hypervisor/domain_logcontext.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/hypervisor/domain_logcontext.c 
b/src/hypervisor/domain_logcontext.c
index 41d1bbdf64..92f942eb81 100644
--- a/src/hypervisor/domain_logcontext.c
+++ b/src/hypervisor/domain_logcontext.c
@@ -71,7 +71,9 @@ domainLogContextFinalize(GObject *object)
     domainLogContext *ctxt = DOMAIN_LOG_CONTEXT(object);
     VIR_DEBUG("ctxt=%p", ctxt);
 
+#ifdef WITH_REMOTE
     virLogManagerFree(ctxt->manager);
+#endif
     VIR_FREE(ctxt->path);
     VIR_FORCE_CLOSE(ctxt->writefd);
     VIR_FORCE_CLOSE(ctxt->readfd);
@@ -82,8 +84,8 @@ domainLogContextFinalize(GObject *object)
 domainLogContext *
 domainLogContextNew(bool stdioLogD,
                     char *logDir,
-                    const char *driver_name,
-                    virDomainObj *vm,
+                    const char *driver_name G_GNUC_UNUSED,
+                    virDomainObj *vm G_GNUC_UNUSED,
                     bool privileged,
                     const char *basename)
 {
@@ -96,6 +98,7 @@ domainLogContextNew(bool stdioLogD,
     ctxt->path = g_strdup_printf("%s/%s.log", logDir, basename);
 
     if (stdioLogD) {
+#ifdef WITH_REMOTE
         ctxt->manager = virLogManagerNew(privileged);
         if (!ctxt->manager)
             goto error;
@@ -110,6 +113,11 @@ domainLogContextNew(bool stdioLogD,
                                                        &ctxt->pos);
         if (ctxt->writefd < 0)
             goto error;
+#else /* !WITH_REMOTE */
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("logd stdio handler is not supported"));
+        goto error;
+#endif /* !WITH_REMOTE */
     } else {
         if ((ctxt->writefd = open(ctxt->path, O_WRONLY | O_CREAT | O_APPEND, 
S_IRUSR | S_IWUSR)) < 0) {
             virReportSystemError(errno, _("failed to create logfile %1$s"),
@@ -202,6 +210,7 @@ domainLogContextRead(domainLogContext *ctxt,
               (unsigned long long)ctxt->pos);
 
     if (ctxt->manager) {
+#ifdef WITH_REMOTE
         buf = virLogManagerDomainReadLogFile(ctxt->manager,
                                              ctxt->path,
                                              ctxt->inode,
@@ -211,6 +220,11 @@ domainLogContextRead(domainLogContext *ctxt,
         if (!buf)
             return -1;
         buflen = strlen(buf);
+#else /* !WITH_REMOTE */
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("logd stdio handler is not supported"));
+        return -1;
+#endif /* !WITH_REMOTE */
     } else {
         ssize_t got;
 
@@ -315,14 +329,17 @@ domainLogContextGetWriteFD(domainLogContext *ctxt)
 void
 domainLogContextMarkPosition(domainLogContext *ctxt)
 {
-    if (ctxt->manager)
+    if (ctxt->manager) {
+#ifdef WITH_REMOTE
         virLogManagerDomainGetLogFilePosition(ctxt->manager,
                                               ctxt->path,
                                               0,
                                               &ctxt->inode,
                                               &ctxt->pos);
-    else
+#endif /* WITH_REMOTE */
+    } else {
         ctxt->pos = lseek(ctxt->writefd, 0, SEEK_END);
+    }
 }
 
 
-- 
2.52.0

Reply via email to