Initial support for NSS plugin skeleton

Name Service Switch is a glibc feature responsible for many
things. Translating domain names into IP addresses and vice versa
is just one of them. However, currently it's the only
functionality that this commit is tickling. Well, in this commit
the plugin skeleton is introduced. Implementation to come in next
patches.
Because of the future testing, where the implementation is to be
linked with a test, this needs to go into static library. Linking
a program with an .so statically is not portable. Therefore a
dummy libnss_libvirt_impl library is being introduced too.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2016-02-13 09:27:50 +01:00
parent 1ca59d89c6
commit 859cb18d54
6 changed files with 172 additions and 0 deletions

View File

@ -257,6 +257,7 @@ LIBVIRT_CHECK_SSH2
LIBVIRT_CHECK_SYSTEMD_DAEMON LIBVIRT_CHECK_SYSTEMD_DAEMON
LIBVIRT_CHECK_UDEV LIBVIRT_CHECK_UDEV
LIBVIRT_CHECK_WIRESHARK LIBVIRT_CHECK_WIRESHARK
LIBVIRT_CHECK_NSS
LIBVIRT_CHECK_YAJL LIBVIRT_CHECK_YAJL
AC_MSG_CHECKING([for CPUID instruction]) AC_MSG_CHECKING([for CPUID instruction])
@ -2843,6 +2844,7 @@ LIBVIRT_RESULT_SSH2
LIBVIRT_RESULT_SYSTEMD_DAEMON LIBVIRT_RESULT_SYSTEMD_DAEMON
LIBVIRT_RESULT_UDEV LIBVIRT_RESULT_UDEV
LIBVIRT_RESULT_WIRESHARK LIBVIRT_RESULT_WIRESHARK
LIBVIRT_RESULT_NSS
LIBVIRT_RESULT_YAJL LIBVIRT_RESULT_YAJL
AC_MSG_NOTICE([ libxml: $LIBXML_CFLAGS $LIBXML_LIBS]) AC_MSG_NOTICE([ libxml: $LIBXML_CFLAGS $LIBXML_LIBS])
AC_MSG_NOTICE([ dlopen: $DLOPEN_LIBS]) AC_MSG_NOTICE([ dlopen: $DLOPEN_LIBS])

51
m4/virt-nss.m4 Normal file
View File

@ -0,0 +1,51 @@
dnl The libvirt nsswitch plugin
dnl
dnl Copyright (C) 2016 Red Hat, Inc.
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
dnl License as published by the Free Software Foundation; either
dnl version 2.1 of the License, or (at your option) any later version.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Lesser General Public License for more details.
dnl
dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library. If not, see
dnl <http://www.gnu.org/licenses/>.
dnl
AC_DEFUN([LIBVIRT_CHECK_NSS],[
AC_ARG_WITH([nss-plugin],
[AS_HELP_STRING([--with-nss-plugin],
[enable Name Servie Switch plugin for resolving guest IP addresses])],
[], [with_nss_plugin=check])
fail=0
if test "x$with_nss_plugin" != "xno" ; then
AC_CHECK_HEADERS([nss.h], [
with_nss_plugin=yes
],[
if test "x$with_nss_plugin" = "xyes" ; then
fail = 1
fi
])
if test $fail = 1 ; then
AC_MSG_ERROR([Can't build nss plugin without nss.h])
fi
if test "x$with_nss_plugin" = "xyes" ; then
AC_DEFINE_UNQUOTED([NSS], 1, [whether nss plugin is enabled])
fi
fi
AM_CONDITIONAL(WITH_NSS, [test "x$with_nss_plugin" = "xyes"])
])
AC_DEFUN([LIBVIRT_RESULT_NSS],[
LIBVIRT_RESULT([nss], [$with_nss_plugin])
])

View File

@ -417,6 +417,44 @@ CLEANFILES += wireshark/src/plugin.c
endif WITH_WIRESHARK_DISSECTOR endif WITH_WIRESHARK_DISSECTOR
LIBVIRT_NSS_SYMBOL_FILE = \
$(srcdir)/nss/libvirt_nss.syms
LIBVIRT_NSS_SOURCES = \
nss/libvirt_nss.c \
nss/libvirt_nss.h
noinst_LTLIBRARIES += nss/libnss_libvirt_impl.la
nss_libnss_libvirt_impl_la_SOURCES = \
$(LIBVIRT_NSS_SOURCES)
nss_libnss_libvirt_impl_la_CFLAGS = \
$(AM_CFLAGS) \
$(WARN_CFLAGS) \
$(PIE_CFLAGS) \
$(COVERAGE_CFLAGS)
if WITH_NSS
nss_libnss_libvirt_la_SOURCES =
nss_libnss_libvirt_la_LDFLAGS = \
$(VERSION_SCRIPT_FLAGS)$(LIBVIRT_NSS_SYMBOL_FILE) \
$(AM_LDFLAGS) \
-module \
-export-dynamic \
-avoid-version \
-shared \
-shrext .so.2
nss_libnss_libvirt_la_LIBADD = \
nss/libnss_libvirt_impl.la
lib_LTLIBRARIES = \
nss/libnss_libvirt.la
endif WITH_NSS
EXTRA_DIST += $(LIBVIRT_NSS_SYMBOL_FILE) \
$(LIBVIRT_NSS_SOURCES)
clean-local: clean-local:
-rm -rf wireshark/src/libvirt -rm -rf wireshark/src/libvirt

36
tools/nss/libvirt_nss.c Normal file
View File

@ -0,0 +1,36 @@
/*
* libvirt_nss: Name Service Switch plugin
*
* The aim is to enable users and applications to translate
* domain names into IP addresses. However, this is currently
* available only for those domains which gets their IP addresses
* from a libvirt managed network.
*
* Copyright (C) 2016 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*
* Authors:
* Michal Privoznik <mprivozn@redhat.com>
*/
#include <config.h>
#include "libvirt_nss.h"
int
blah(int c)
{
return c;
}

36
tools/nss/libvirt_nss.h Normal file
View File

@ -0,0 +1,36 @@
/*
* libvirt_nss: Name Service Switch plugin
*
* The aim is to enable users and applications to translate
* domain names into IP addresses. However, this is currently
* available only for those domains which gets their IP addresses
* from a libvirt managed network.
*
* Copyright (C) 2016 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*
* Authors:
* Michal Privoznik <mprivozn@redhat.com>
*/
#ifndef __LIBVIRT_NSS_H__
# define __LIBVIRT_NSS_H__
# include <nss.h>
# include <netdb.h>
int blah(int c);
#endif /* __LIBVIRT_NSS_H__ */

View File

@ -0,0 +1,9 @@
#
# Officially exported symbols.
#
{
global:
blah;
local: *;
};