]> xenbits.xensource.com Git - libvirt.git/commitdiff
build: fix build with libselinux 2.3
authorCédric Bosdonnat <cbosdonnat@suse.com>
Wed, 28 May 2014 12:44:08 +0000 (14:44 +0200)
committerEric Blake <eblake@redhat.com>
Wed, 28 May 2014 18:17:04 +0000 (12:17 -0600)
Several function signatures changed in libselinux 2.3, now taking
a 'const char *' instead of 'security_context_t'.  The latter is
defined in selinux/selinux.h as

  typedef char *security_context_t;

Signed-off-by: Eric Blake <eblake@redhat.com>
m4/virt-selinux.m4
tests/securityselinuxhelper.c

index 003c2a8685f9ed8fdf416dcc6cc79c1d373188ca..1d899d5beaa6c98363b1f77d7cdac199e79bf53a 100644 (file)
@@ -1,6 +1,6 @@
 dnl The libselinux.so library
 dnl
-dnl Copyright (C) 2012-2013 Red Hat, Inc.
+dnl Copyright (C) 2012-2014 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
@@ -28,6 +28,21 @@ AC_DEFUN([LIBVIRT_CHECK_SELINUX],[
     [with_selinux_mount=check])
 
   if test "$with_selinux" = "yes"; then
+    # libselinux changed signatures between 2.2 and 2.3
+    AC_CACHE_CHECK([for selinux setcon parameter type], [gt_cv_setcon_param],
+    [AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[
+#include <selinux/selinux.h>
+int setcon(const security_context_t context);
+         ]])],
+         [gt_cv_setcon_param='security_context_t'],
+         [gt_cv_setcon_param='const char*'])])
+    if test "$gt_cv_setcon_param" = 'const char*'; then
+       AC_DEFINE_UNQUOTED([SELINUX_CTX_CHAR_PTR], 1,
+                          [SELinux uses newer char * for security context])
+    fi
+
     AC_MSG_CHECKING([SELinux mount point])
     if test "$with_selinux_mount" = "check" || test -z "$with_selinux_mount"; then
       if test -d /sys/fs/selinux ; then
index dbc4c2956320a9db42859dcaa53fb8d278b908f7..af4fae4ddce92b5c1586feb5b4c3eca56d24301c 100644 (file)
@@ -156,7 +156,11 @@ int getpidcon(pid_t pid, security_context_t *context)
     return getpidcon_raw(pid, context);
 }
 
+#ifdef SELINUX_CTX_CHAR_PTR
+int setcon_raw(const char *context)
+#else
 int setcon_raw(security_context_t context)
+#endif
 {
     if (!is_selinux_enabled()) {
         errno = EINVAL;
@@ -165,13 +169,21 @@ int setcon_raw(security_context_t context)
     return setenv("FAKE_SELINUX_CONTEXT", context, 1);
 }
 
+#ifdef SELINUX_CTX_CHAR_PTR
+int setcon(const char *context)
+#else
 int setcon(security_context_t context)
+#endif
 {
     return setcon_raw(context);
 }
 
 
+#ifdef SELINUX_CTX_CHAR_PTR
+int setfilecon_raw(const char *path, const char *con)
+#else
 int setfilecon_raw(const char *path, security_context_t con)
+#endif
 {
     const char *constr = con;
     if (STRPREFIX(path, abs_builddir "/securityselinuxlabeldata/nfs/")) {
@@ -182,7 +194,11 @@ int setfilecon_raw(const char *path, security_context_t con)
                     constr, strlen(constr), 0);
 }
 
+#ifdef SELINUX_CTX_CHAR_PTR
+int setfilecon(const char *path, const char *con)
+#else
 int setfilecon(const char *path, security_context_t con)
+#endif
 {
     return setfilecon_raw(path, con);
 }