From 859cb18d5401ceaf678dc4b283b24b9af7f8f827 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Sat, 13 Feb 2016 09:27:50 +0100 Subject: [PATCH] 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 --- configure.ac | 2 ++ m4/virt-nss.m4 | 51 ++++++++++++++++++++++++++++++++++++++ tools/Makefile.am | 38 ++++++++++++++++++++++++++++ tools/nss/libvirt_nss.c | 36 +++++++++++++++++++++++++++ tools/nss/libvirt_nss.h | 36 +++++++++++++++++++++++++++ tools/nss/libvirt_nss.syms | 9 +++++++ 6 files changed, 172 insertions(+) create mode 100644 m4/virt-nss.m4 create mode 100644 tools/nss/libvirt_nss.c create mode 100644 tools/nss/libvirt_nss.h create mode 100644 tools/nss/libvirt_nss.syms diff --git a/configure.ac b/configure.ac index d52ddd72e6..718a4019cf 100644 --- a/configure.ac +++ b/configure.ac @@ -257,6 +257,7 @@ LIBVIRT_CHECK_SSH2 LIBVIRT_CHECK_SYSTEMD_DAEMON LIBVIRT_CHECK_UDEV LIBVIRT_CHECK_WIRESHARK +LIBVIRT_CHECK_NSS LIBVIRT_CHECK_YAJL AC_MSG_CHECKING([for CPUID instruction]) @@ -2843,6 +2844,7 @@ LIBVIRT_RESULT_SSH2 LIBVIRT_RESULT_SYSTEMD_DAEMON LIBVIRT_RESULT_UDEV LIBVIRT_RESULT_WIRESHARK +LIBVIRT_RESULT_NSS LIBVIRT_RESULT_YAJL AC_MSG_NOTICE([ libxml: $LIBXML_CFLAGS $LIBXML_LIBS]) AC_MSG_NOTICE([ dlopen: $DLOPEN_LIBS]) diff --git a/m4/virt-nss.m4 b/m4/virt-nss.m4 new file mode 100644 index 0000000000..3fa4ad30cc --- /dev/null +++ b/m4/virt-nss.m4 @@ -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 . +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]) +]) diff --git a/tools/Makefile.am b/tools/Makefile.am index 0be35672b1..97ae4e10bd 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -417,6 +417,44 @@ CLEANFILES += wireshark/src/plugin.c 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: -rm -rf wireshark/src/libvirt diff --git a/tools/nss/libvirt_nss.c b/tools/nss/libvirt_nss.c new file mode 100644 index 0000000000..461d8cac1e --- /dev/null +++ b/tools/nss/libvirt_nss.c @@ -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 + * . + * + * Authors: + * Michal Privoznik + */ +#include + +#include "libvirt_nss.h" + +int +blah(int c) +{ + return c; +} diff --git a/tools/nss/libvirt_nss.h b/tools/nss/libvirt_nss.h new file mode 100644 index 0000000000..b54e5e361a --- /dev/null +++ b/tools/nss/libvirt_nss.h @@ -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 + * . + * + * Authors: + * Michal Privoznik + */ + +#ifndef __LIBVIRT_NSS_H__ +# define __LIBVIRT_NSS_H__ + +# include +# include + +int blah(int c); +#endif /* __LIBVIRT_NSS_H__ */ diff --git a/tools/nss/libvirt_nss.syms b/tools/nss/libvirt_nss.syms new file mode 100644 index 0000000000..3246213db0 --- /dev/null +++ b/tools/nss/libvirt_nss.syms @@ -0,0 +1,9 @@ +# +# Officially exported symbols. +# + +{ +global: + blah; +local: *; +};