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(a)redhat.com>
---
configure.ac | 2 ++
m4/virt-nss.m4 | 51 ++++++++++++++++++++++++++++++++++++++++++++++
tools/Makefile.am | 39 +++++++++++++++++++++++++++++++++++
tools/nss/libvirt_nss.c | 36 ++++++++++++++++++++++++++++++++
tools/nss/libvirt_nss.h | 36 ++++++++++++++++++++++++++++++++
tools/nss/libvirt_nss.syms | 9 ++++++++
6 files changed, 173 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 7d74f53..ba33144 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])
@@ -2893,6 +2894,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 0000000..207cd34
--- /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 <
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
+
+ AM_CONDITIONAL(WITH_NSS, [test "x$with_nss_plugin" = "xyes"])
+ fi
+
+])
+
+AC_DEFUN([LIBVIRT_RESULT_NSS],[
+ LIBVIRT_RESULT([nss], [$with_nss_plugin])
+])
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 0be3567..a850adb 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -417,6 +417,45 @@ 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
+
+if WITH_NSS
+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)
+
+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 \
+ ../gnulib/lib/libgnu.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 0000000..461d8ca
--- /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
+ * <
http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Michal Privoznik <mprivozn(a)redhat.com>
+ */
+#include <config.h>
+
+#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 0000000..b54e5e3
--- /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
+ * <
http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Michal Privoznik <mprivozn(a)redhat.com>
+ */
+
+#ifndef __LIBVIRT_NSS_H__
+# define __LIBVIRT_NSS_H__
+
+# include <nss.h>
+# include <netdb.h>
+
+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 0000000..3246213
--- /dev/null
+++ b/tools/nss/libvirt_nss.syms
@@ -0,0 +1,9 @@
+#
+# Officially exported symbols.
+#
+
+{
+global:
+ blah;
+local: *;
+};
--
2.4.10