From: Michal Privoznik Date: Wed, 18 Jun 2025 06:49:29 +0000 (+0200) Subject: nss: Move logging into a separate file and turn it temporarily on X-Git-Tag: v11.6.0-rc1~80 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf6b390274048f73207324dbe2f1a0fefa43f1ee;p=thirdparty%2Flibvirt.git nss: Move logging into a separate file and turn it temporarily on Currently, when somebody wants to debug the NSS plugin, they have to change a line in libvirt_nss.h (to enable debug printings) and recompile the module. This may work for us, developers, but we can not expect this from users. For now, this turns debug printings unconditionally on. Making it conditional on an envvar is handled in the next commit. Signed-off-by: Michal Privoznik Reviewed-by: Ján Tomko --- diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index 27eabe6565..4ba059b56b 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -1430,7 +1430,7 @@ exclude_file_name_regexp--sc_prohibit_realpath = \ ^(build-aux/syntax-check\.mk|src/cpu_map/sync_qemu_features_i386\.py|tests/virfilemock\.c)$$ exclude_file_name_regexp--sc_prohibit_raw_allocation = \ - ^(docs/advanced-tests\.rst|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c|tools/nss/libvirt_nss(_leases|_macs)?\.[ch])$$ + ^(docs/advanced-tests\.rst|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c|tools/nss/libvirt_nss(_leases|_log|_macs)?\.[ch])$$ exclude_file_name_regexp--sc_prohibit_readlink = \ ^src/(util/virutil|lxc/lxc_container)\.c$$ diff --git a/tools/nss/libvirt_nss.h b/tools/nss/libvirt_nss.h index 84db044409..e09fce9715 100644 --- a/tools/nss/libvirt_nss.h +++ b/tools/nss/libvirt_nss.h @@ -31,35 +31,7 @@ #include #include - -#if 0 -# include -# include -# include -# define NULLSTR(s) ((s) ? (s) : "") -# define ERROR(...) \ -do { \ - int saved_errno = errno; \ - const size_t ebuf_size = 512; \ - g_autofree char *ebuf = calloc(ebuf_size, sizeof(*ebuf)); \ - if (ebuf) \ - strerror_r(saved_errno, ebuf, ebuf_size); \ - fprintf(stderr, "ERROR %s:%d : ", __FUNCTION__, __LINE__); \ - fprintf(stderr, __VA_ARGS__); \ - fprintf(stderr, " : %s\n", NULLSTR(ebuf)); \ - fprintf(stderr, "\n"); \ -} while (0) - -# define DEBUG(...) \ -do { \ - fprintf(stderr, "DEBUG %s:%d : ", __FUNCTION__, __LINE__); \ - fprintf(stderr, __VA_ARGS__); \ - fprintf(stderr, "\n"); \ -} while (0) -#else -# define ERROR(...) do { } while (0) -# define DEBUG(...) do { } while (0) -#endif +#include "libvirt_nss_log.h" #if !defined(LIBVIRT_NSS_GUEST) # define NSS_NAME(s) _nss_libvirt_##s##_r diff --git a/tools/nss/libvirt_nss_log.c b/tools/nss/libvirt_nss_log.c new file mode 100644 index 0000000000..672a170542 --- /dev/null +++ b/tools/nss/libvirt_nss_log.c @@ -0,0 +1,65 @@ +/* + * libvirt_nss_log: Logging for Name Service Switch plugin + * + * Copyright (C) 2025 Red Hat, Inc. + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include + +#undef _GNU_SOURCE + +#include +#include +#include +#include + +#include "libvirt_nss_log.h" +#include "libvirt_nss.h" + +#define NULLSTR(s) ((s) ? (s) : "") + +static const char * __attribute__((returns_nonnull)) +nssLogPriorityToString(nssLogPriority prio) +{ + switch (prio) { + case NSS_DEBUG: + return "DEBUG"; + case NSS_ERROR: + return "ERROR"; + } + + return ""; +} + +void +nssLog(nssLogPriority prio, + const char *func, + int linenr, + const char *fmt, ...) +{ + int saved_errno = errno; + const size_t ebuf_size = 512; + g_autofree char *ebuf = NULL; + va_list ap; + + fprintf(stderr, "%s %s:%d : ", nssLogPriorityToString(prio), func, linenr); + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + + switch (prio) { + case NSS_DEBUG: + break; + + case NSS_ERROR: + ebuf = calloc(ebuf_size, sizeof(*ebuf)); + if (ebuf) + strerror_r(saved_errno, ebuf, ebuf_size); + fprintf(stderr, " : %s", NULLSTR(ebuf)); + break; + } + + fprintf(stderr, "\n"); +} diff --git a/tools/nss/libvirt_nss_log.h b/tools/nss/libvirt_nss_log.h new file mode 100644 index 0000000000..d99d88e711 --- /dev/null +++ b/tools/nss/libvirt_nss_log.h @@ -0,0 +1,25 @@ +/* + * libvirt_nss_log: Logging for Name Service Switch plugin + * + * Copyright (C) 2025 Red Hat, Inc. + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#pragma once + +typedef enum { + NSS_DEBUG, + NSS_ERROR, +} nssLogPriority; + +#define DEBUG(...) \ + nssLog(NSS_DEBUG, __FUNCTION__, __LINE__, __VA_ARGS__) + +#define ERROR(...) \ + nssLog(NSS_ERROR, __FUNCTION__, __LINE__, __VA_ARGS__) + +void +nssLog(nssLogPriority prio, + const char *func, + int linenr, + const char *fmt, ...) __attribute__ ((format(printf, 4, 5))); diff --git a/tools/nss/meson.build b/tools/nss/meson.build index 38bba2d616..5893952adc 100644 --- a/tools/nss/meson.build +++ b/tools/nss/meson.build @@ -13,6 +13,7 @@ endif nss_sources = [ 'libvirt_nss.c', 'libvirt_nss_leases.c', + 'libvirt_nss_log.c', ] nss_guest_sources = [