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(a)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