On 29.03.2016 12:08, Roman Bogorodskiy wrote: > Michal Privoznik wrote: > >> On 27.03.2016 20:07, Roman Bogorodskiy wrote: >>> * tools/nss/libvirt_nss.[ch]: add BSD-comptabile wrappers and >>> register via the nss_module_register() interface >>> * m4/virt-nss.m4: add checks if we're building NSS for FreeBSD >>> * tools/Makefile.am: handle target library name differences, as >>> Linux needs libnss_libvirt.so.2 and FreeBSD needs >>> nss_libvirt.so.1. Also, different syms files have to be used >>> as Linux needs to export all the methods while FreeBSD >>> only needs to have nss_module_register() >>> * tests/nsstest.c, tests/nssmock.c: s/__linux__/NSS/ >>> * libvirt_nss_bsd.syms: FreeBSD syms file >>> --- >>> m4/virt-nss.m4 | 18 +++++- >>> tests/nssmock.c | 6 +- >>> tests/nsstest.c | 2 +- >>> tools/Makefile.am | 16 ++++- >>> tools/nss/libvirt_nss.c | 139 +++++++++++++++++++++++++++++++++++++++-- >>> tools/nss/libvirt_nss.h | 9 +++ >>> tools/nss/libvirt_nss_bsd.syms | 9 +++ >>> 7 files changed, 189 insertions(+), 10 deletions(-) >>> create mode 100644 tools/nss/libvirt_nss_bsd.syms >>> >>> diff --git a/m4/virt-nss.m4 b/m4/virt-nss.m4 >>> index 3fa4ad3..3d6e8f4 100644 >>> --- a/m4/virt-nss.m4 >>> +++ b/m4/virt-nss.m4 >>> @@ -23,6 +23,7 @@ AC_DEFUN([LIBVIRT_CHECK_NSS],[ >>> [enable Name Servie Switch plugin for resolving guest IP addresses])], >>> [], [with_nss_plugin=check]) >>> >>> + bsd_nss=no >>> fail=0 >>> if test "x$with_nss_plugin" != "xno" ; then >>> AC_CHECK_HEADERS([nss.h], [ >>> @@ -39,11 +40,26 @@ AC_DEFUN([LIBVIRT_CHECK_NSS],[ >>> >>> if test "x$with_nss_plugin" = "xyes" ; then >>> AC_DEFINE_UNQUOTED([NSS], 1, [whether nss plugin is enabled]) >>> + >>> + AC_CHECK_TYPE([struct gaih_addrtuple], >>> + [AC_DEFINE([HAVE_STRUCT_GAIH_ADDRTUPLE], [1], >>> + [Defined if struct gaih_addrtuple exists in nss.h])], >>> + [], [[#include <nss.h> >>> + ]]) >>> + >>> + AC_CHECK_TYPES([ns_mtab, nss_module_unregister_fn], >>> + [AC_DEFINE([HAVE_BSD_NSS], >>> + [1], >>> + [whether using BSD style NSS]) >>> + bsd_nss=yes >>> + ], >>> + [], >>> + [#include <nsswitch.h>]) >>> fi >>> fi >>> >>> AM_CONDITIONAL(WITH_NSS, [test "x$with_nss_plugin" = "xyes"]) >>> - >>> + AM_CONDITIONAL(WITH_BSD_NSS, [test "x$bsd_nss" = "xyes"]) >>> ]) >>> >>> AC_DEFUN([LIBVIRT_RESULT_NSS],[ >>> diff --git a/tests/nssmock.c b/tests/nssmock.c >>> index b4a4260..31b1177 100644 >>> --- a/tests/nssmock.c >>> +++ b/tests/nssmock.c >>> @@ -20,7 +20,7 @@ >>> >>> #include <config.h> >>> >>> -#ifdef __linux__ >>> +#ifdef NSS >>> # include <stdio.h> >>> # include <stdlib.h> >>> # include <dlfcn.h> >>> @@ -107,7 +107,7 @@ open(const char *path, int flags, ...) >>> va_list ap; >>> mode_t mode; >>> va_start(ap, flags); >>> - mode = va_arg(ap, mode_t); >>> + mode = va_arg(ap, int); >> >> Why this change? I mean, even in the context it can be seen that @mode >> is type of mode_t. > > Yeah, I should have mentioned that in the commit log. > > I have an error like this: > > In file included from ../gnulib/lib/stdio.h:51:0, > from nssmock.c:24: > nssmock.c: In function 'open': > nssmock.c:110:27: error: 'mode_t' is promoted to 'int' when passed through '...' [-Werror] > mode = va_arg(ap, mode_t); > ^ > nssmock.c:110:27: note: (so you should pass 'int' not 'mode_t' to 'va_arg') > nssmock.c:110:27: note: if this code is reached, the program will abort > cc1: all warnings being treated as errors > Makefile:4854: recipe for target 'nssmock_la-nssmock.lo' failed > > This is with: > > gcc version 4.8.5 (FreeBSD Ports Collection) > Ah, okay then. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list