aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2023-02-23 18:32:20 +0100
committerStefano Brivio <sbrivio@redhat.com>2023-02-27 18:53:38 +0100
commit834b9a30491b0211f59b4e0ac2a79910665f8e0d (patch)
treef94e634fee99243167ebef875cfad078e80b433b
parentbad252687271c0255f6a077f19cbc19aa0427f8d (diff)
downloadpasst-834b9a30491b0211f59b4e0ac2a79910665f8e0d.tar
passt-834b9a30491b0211f59b4e0ac2a79910665f8e0d.tar.gz
passt-834b9a30491b0211f59b4e0ac2a79910665f8e0d.tar.bz2
passt-834b9a30491b0211f59b4e0ac2a79910665f8e0d.tar.lz
passt-834b9a30491b0211f59b4e0ac2a79910665f8e0d.tar.xz
passt-834b9a30491b0211f59b4e0ac2a79910665f8e0d.tar.zst
passt-834b9a30491b0211f59b4e0ac2a79910665f8e0d.zip
log: Send identifier string in log messages, openlog() won't work for us
openlog() can be used to set "ident" and have all the log messages prefixed by it, but only if we call syslog() -- this is implemented by C libraries. We don't log messages with syslog(), though, as we have a custom implementation to ensure we don't need dynamic memory allocation. This means that it's perfectly useless to call openlog(), and that we have to prefix every message we log by the identifier on our own. Reported-by: Andrea Bolognani <abologna@redhat.com> Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Tested-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--log.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/log.c b/log.c
index f23e8ef..bfde6ce 100644
--- a/log.c
+++ b/log.c
@@ -106,7 +106,7 @@ void trace_init(int enable)
}
/**
- * __openlog() - Non-optional openlog() wrapper, to allow custom vsyslog()
+ * __openlog() - Non-optional openlog() implementation, for custom vsyslog()
* @ident: openlog() identity (program name)
* @option: openlog() options
* @facility: openlog() facility (LOG_DAEMON)
@@ -136,8 +136,6 @@ void __openlog(const char *ident, int option, int facility)
log_mask |= facility;
strncpy(log_ident, ident, sizeof(log_ident) - 1);
log_opt = option;
-
- openlog(ident, option, facility);
}
/**
@@ -158,11 +156,11 @@ void __setlogmask(int mask)
*/
void passt_vsyslog(int pri, const char *format, va_list ap)
{
+ int prefix_len, n;
char buf[BUFSIZ];
- int n;
- /* Send without name and timestamp, the system logger should add them */
- n = snprintf(buf, BUFSIZ, "<%i> ", pri);
+ /* Send without timestamp, the system logger should add it */
+ n = prefix_len = snprintf(buf, BUFSIZ, "<%i> %s: ", pri, log_ident);
n += vsnprintf(buf + n, BUFSIZ - n, format, ap);
@@ -170,7 +168,7 @@ void passt_vsyslog(int pri, const char *format, va_list ap)
n += snprintf(buf + n, BUFSIZ - n, "\n");
if (log_opt & LOG_PERROR)
- fprintf(stderr, "%s", buf + sizeof("<0>"));
+ fprintf(stderr, "%s", buf + prefix_len);
if (send(log_sock, buf, n, 0) != n)
fprintf(stderr, "Failed to send %i bytes to syslog\n", n);