Add configuration option for enabling or disabling linking with
libcap-ng.  Since capabilities are a security feature, the libcapng
option is handled as follows:

    - no option: use libcapng if it's present

    --disable-libcapng: do not use libcapng

    --enable-libcapng: do use libcapng and fail configuration if
                       it's missing

On Linux, not linking with libcapng makes all OVS daemons fail when
--user option is specified.

Signed-off-by: Andy Zhou <az...@nicira.com>
---
 INSTALL.md        |  7 +++++++
 configure.ac      |  1 +
 lib/automake.mk   |  1 +
 m4/openvswitch.m4 | 36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)

diff --git a/INSTALL.md b/INSTALL.md
index 9dac430..50ab6c7 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -43,6 +43,13 @@ you will need the following software:
     libssl is installed, then Open vSwitch will automatically build
     with support for it.
 
+  - libcap-ng, written by Steve Grubb,  is optional but recommended
+    if you plan to user --user option for running Open vSwitch on
+    Linux with kernel based datapath.  libcap-ng is required to run
+    OVS daemons as a non-root user with dropped root privileges. If
+    libcap-ng is installed, then Open vSwitch will automatically
+    build with support for it.
+
   - Python 2.7.
 
 On Linux, you may choose to compile the kernel module that comes with
diff --git a/configure.ac b/configure.ac
index 36387a1..39055fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -91,6 +91,7 @@ OVS_CHECK_COVERAGE
 OVS_CHECK_NDEBUG
 OVS_CHECK_NETLINK
 OVS_CHECK_OPENSSL
+OVS_CHECK_LIBCAPNG
 OVS_CHECK_LOGDIR
 OVS_CHECK_PYTHON
 OVS_CHECK_DOT
diff --git a/lib/automake.mk b/lib/automake.mk
index 5fdd08f..d8c00da 100644
--- a/lib/automake.mk
+++ b/lib/automake.mk
@@ -8,6 +8,7 @@
 lib_LTLIBRARIES += lib/libopenvswitch.la
 
 lib_libopenvswitch_la_LIBADD = $(SSL_LIBS)
+lib_libopenvswitch_la_LIBADD += $(CAPNG_LDADD)
 
 if WIN32
 lib_libopenvswitch_la_LIBADD += ${PTHREAD_LIBS}
diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4
index 087c7e5..a36e07d 100644
--- a/m4/openvswitch.m4
+++ b/m4/openvswitch.m4
@@ -157,6 +157,42 @@ AC_DEFUN([OVS_CHECK_NETLINK],
                 [Define to 1 if Netlink protocol is available.])
    fi])
 
+dnl Checks for libcap-ng.
+AC_DEFUN([OVS_CHECK_LIBCAPNG],
+  [AC_ARG_ENABLE(
+     [libcapng],
+     [AC_HELP_STRING([--disable-libcapng], [Disable Linux capability 
support])],
+     [case "${enableval}" in
+        (yes) libcapng=true ;;
+        (no)  libcapng=false ;;
+        (*) AC_MSG_ERROR([bad value ${enableval} for --enable-libcapng]) ;;
+      esac],
+     [libcapng=check])
+
+   if test "$libcapng" != false; then
+       AC_CHECK_LIB(cap-ng, [capng_clear], [HAVE_LIBCAPNG=yes])
+
+       if test "$HAVE_LIBCAPNG" != yes; then
+           if test "$libcapng" == true ; then
+                AC_MSG_ERROR([libcap-ng support requested, but not found])
+           fi
+           if test "$libcapng" == check ; then
+                 AC_MSG_WARN([cannot find libcap-ng.
+--user option will not be supported on Linux.
+(you may use --disable-libcapng to suppress this warning). ])
+           fi
+       fi
+   fi
+
+   AC_SUBST([HAVE_LIBCAPNG])
+   AM_CONDITIONAL([HAVE_LIBCAPNG], [test "$HAVE_LIBCAPNG" = yes])
+   if test "$HAVE_LIBCAPNG" = yes; then
+      AC_DEFINE([HAVE_LIBCAPNG], [1],
+                [Define to 1 if libcap-ng is available.])
+      CAPNG_LDADD="-lcap-ng"
+      AC_SUBST([CAPNG_LDADD])
+   fi])
+
 dnl Checks for OpenSSL.
 AC_DEFUN([OVS_CHECK_OPENSSL],
   [AC_ARG_ENABLE(
-- 
1.9.1

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to