On Thu, Feb 23, 2023 at 06:35:55PM +0100, Stefano Brivio wrote: > 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 > Signed-off-by: Stefano Brivio Reviewed-by: David Gibson > --- > log.c | 12 +++++------- > 1 file 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); -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson