[libvirt] [PATCH v2] nss: FreeBSD support

Michal Privoznik mprivozn at redhat.com
Tue Mar 29 10:31:34 UTC 2016


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




More information about the libvir-list mailing list