Fix build compat with older libselinux for LXC

Most versions of libselinux do not contain the function
selinux_lxc_contexts_path() that the security driver
recently started using for LXC. We must add a conditional
check for it in configure and then disable the LXC security
driver for builds where libselinux lacks this function.

* configure.ac: Check for selinux_lxc_contexts_path
* src/security/security_selinux.c: Disable LXC security
  if selinux_lxc_contexts_path() is missing
This commit is contained in:
Daniel P. Berrange 2012-05-16 14:18:25 +01:00
parent 51bcb09fe9
commit 7ba66ef285
2 changed files with 17 additions and 3 deletions

View File

@ -1360,6 +1360,7 @@ else
fail=0 fail=0
AC_CHECK_FUNC([selinux_virtual_domain_context_path], [], [fail=1]) AC_CHECK_FUNC([selinux_virtual_domain_context_path], [], [fail=1])
AC_CHECK_FUNC([selinux_virtual_image_context_path], [], [fail=1]) AC_CHECK_FUNC([selinux_virtual_image_context_path], [], [fail=1])
AC_CHECK_FUNCS([selinux_lxc_contexts_path])
CFLAGS="$old_cflags" CFLAGS="$old_cflags"
LIBS="$old_libs" LIBS="$old_libs"

View File

@ -127,6 +127,7 @@ err:
} }
#ifdef HAVE_SELINUX_LXC_CONTEXTS_PATH
static int static int
SELinuxLXCInitialize(virSecurityManagerPtr mgr) SELinuxLXCInitialize(virSecurityManagerPtr mgr)
{ {
@ -189,6 +190,15 @@ error:
VIR_FREE(data->content_context); VIR_FREE(data->content_context);
return -1; return -1;
} }
#else
static int
SELinuxLXCInitialize(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED)
{
virReportSystemError(ENOSYS, "%s",
_("libselinux does not support LXC contexts path"));
return -1;
}
#endif
static int static int
@ -443,9 +453,12 @@ SELinuxSecurityDriverProbe(const char *virtDriver)
if (!is_selinux_enabled()) if (!is_selinux_enabled())
return SECURITY_DRIVER_DISABLE; return SECURITY_DRIVER_DISABLE;
if (virtDriver && STREQ(virtDriver, "LXC") && if (virtDriver && STREQ(virtDriver, "LXC")) {
!virFileExists(selinux_lxc_contexts_path())) #if HAVE_SELINUX_LXC_CONTEXTS_PATH
return SECURITY_DRIVER_DISABLE; if (!virFileExists(selinux_lxc_contexts_path()))
#endif
return SECURITY_DRIVER_DISABLE;
}
return SECURITY_DRIVER_ENABLE; return SECURITY_DRIVER_ENABLE;
} }