提交 26f47e6a 编写于 作者: C Cédric Bosdonnat 提交者: Eric Blake

build: fix build with libselinux 2.3

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: NEric Blake <eblake@redhat.com>
(cherry picked from commit 292d3f2d)
上级 38dce339
dnl The libselinux.so library dnl The libselinux.so library
dnl dnl
dnl Copyright (C) 2012-2013 Red Hat, Inc. dnl Copyright (C) 2012-2014 Red Hat, Inc.
dnl dnl
dnl This library is free software; you can redistribute it and/or dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public dnl modify it under the terms of the GNU Lesser General Public
...@@ -28,6 +28,21 @@ AC_DEFUN([LIBVIRT_CHECK_SELINUX],[ ...@@ -28,6 +28,21 @@ AC_DEFUN([LIBVIRT_CHECK_SELINUX],[
[with_selinux_mount=check]) [with_selinux_mount=check])
if test "$with_selinux" = "yes"; then 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]) AC_MSG_CHECKING([SELinux mount point])
if test "$with_selinux_mount" = "check" || test -z "$with_selinux_mount"; then if test "$with_selinux_mount" = "check" || test -z "$with_selinux_mount"; then
if test -d /sys/fs/selinux ; then if test -d /sys/fs/selinux ; then
......
...@@ -156,7 +156,11 @@ int getpidcon(pid_t pid, security_context_t *context) ...@@ -156,7 +156,11 @@ int getpidcon(pid_t pid, security_context_t *context)
return getpidcon_raw(pid, 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) int setcon_raw(security_context_t context)
#endif
{ {
if (!is_selinux_enabled()) { if (!is_selinux_enabled()) {
errno = EINVAL; errno = EINVAL;
...@@ -165,13 +169,21 @@ int setcon_raw(security_context_t context) ...@@ -165,13 +169,21 @@ int setcon_raw(security_context_t context)
return setenv("FAKE_SELINUX_CONTEXT", context, 1); return setenv("FAKE_SELINUX_CONTEXT", context, 1);
} }
#ifdef SELINUX_CTX_CHAR_PTR
int setcon(const char *context)
#else
int setcon(security_context_t context) int setcon(security_context_t context)
#endif
{ {
return setcon_raw(context); 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) int setfilecon_raw(const char *path, security_context_t con)
#endif
{ {
const char *constr = con; const char *constr = con;
if (STRPREFIX(path, abs_builddir "/securityselinuxlabeldata/nfs/")) { if (STRPREFIX(path, abs_builddir "/securityselinuxlabeldata/nfs/")) {
...@@ -182,7 +194,11 @@ int setfilecon_raw(const char *path, security_context_t con) ...@@ -182,7 +194,11 @@ int setfilecon_raw(const char *path, security_context_t con)
constr, strlen(constr), 0); 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) int setfilecon(const char *path, security_context_t con)
#endif
{ {
return setfilecon_raw(path, con); return setfilecon_raw(path, con);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册