From b25ca8143abb922aa9771a5e43157b9285496a40 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 24 Feb 2016 15:02:44 -0700 Subject: [PATCH] build: accomodate selinux 2.5 header API change 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 (cherry picked from commit 5ea3a690a28ed1d7ef1253a6e63e236541cceba2) --- 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 357b758306..a65e978465 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 +#include +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 1252c15d32..2cfa43f11f 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; -- GitLab