[libvirt] [PATCH] build: accomodate selinux 2.5 header API change

Eric Blake eblake at redhat.com
Wed Feb 24 22:22:08 UTC 2016


Yet again, selinux has been adding const-correctness; this change
is ABI-compatible, but breaks API, which affects us when we try to
override things in our testsuite:

../../tests/securityselinuxhelper.c:307:24: error: conflicting types for 'selabel_open'
 struct selabel_handle *selabel_open(unsigned int backend,
                        ^~~~~~~~~~~~
In file included from ../../tests/securityselinuxhelper.c:32:0:
/usr/include/selinux/label.h:73:24: note: previous declaration of 'selabel_open' was here

The problem is a new 'const' prior to the second parameter.

Fix it the same way we did in commit 292d3f2d: check for the new
const at configure time.

Signed-off-by: Eric Blake <eblake at redhat.com>
---

Pushing under the build-breaker rule.

 m4/virt-selinux.m4            | 17 ++++++++++++++++-
 tests/securityselinuxhelper.c | 10 ++++++----
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/m4/virt-selinux.m4 b/m4/virt-selinux.m4
index 357b758..a65e978 100644
--- a/m4/virt-selinux.m4
+++ b/m4/virt-selinux.m4
@@ -1,6 +1,6 @@
 dnl The libselinux.so library
 dnl
-dnl Copyright (C) 2012-2014 Red Hat, Inc.
+dnl Copyright (C) 2012-2014, 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
@@ -41,6 +41,21 @@ int setcon(char *context);
     AC_DEFINE_UNQUOTED([VIR_SELINUX_CTX_CONST], [$lv_cv_setcon_const],
       [Define to empty or 'const' depending on how SELinux qualifies its
        security context parameters])
+    # ...and again for 2.5
+    AC_CACHE_CHECK([for selinux selabel_open parameter type],
+                   [lv_cv_selabel_open_const],
+    [AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[
+#include <selinux/selinux.h>
+#include <selinux/label.h>
+struct selabel_handle *selabel_open(unsigned, struct selinux_opt *, unsigned);
+         ]])],
+         [lv_cv_selabel_open_const=''],
+         [lv_cv_selabel_open_const='const'])])
+    AC_DEFINE_UNQUOTED([VIR_SELINUX_OPEN_CONST], [$lv_cv_selabel_open_const],
+      [Define to empty or 'const' depending on how SELinux qualifies its
+       selabel_open parameter])

     AC_MSG_CHECKING([SELinux mount point])
     if test "$with_selinux_mount" = "check" || test -z "$with_selinux_mount"; then
diff --git a/tests/securityselinuxhelper.c b/tests/securityselinuxhelper.c
index 1252c15..2cfa43f 100644
--- a/tests/securityselinuxhelper.c
+++ b/tests/securityselinuxhelper.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2013 Red Hat, Inc.
+ * Copyright (C) 2011-2013, 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
@@ -60,6 +60,7 @@ static const char *(*realselinux_lxc_contexts_path)(void);

 #if HAVE_SELINUX_LABEL_H
 static struct selabel_handle *(*realselabel_open)(unsigned int backend,
+                                                  VIR_SELINUX_OPEN_CONST
                                                   struct selinux_opt *opts,
                                                   unsigned nopts);
 static void (*realselabel_close)(struct selabel_handle *handle);
@@ -304,9 +305,10 @@ const char *selinux_lxc_contexts_path(void)
 #endif

 #if HAVE_SELINUX_LABEL_H
-struct selabel_handle *selabel_open(unsigned int backend,
-                                    struct selinux_opt *opts,
-                                    unsigned nopts)
+struct selabel_handle *
+selabel_open(unsigned int backend,
+             VIR_SELINUX_OPEN_CONST struct selinux_opt *opts,
+             unsigned nopts)
 {
     char *fake_handle;

-- 
2.5.0




More information about the libvir-list mailing list