提交 caf164f1 编写于 作者: J Jincheng Miao 提交者: Eric Blake

test: add user_xattr check for securityselinuxlabeltest

libvirt unit test used setxattr with "user.libvirt.selinux" name to
emulate setfilecon of selinux. But for some old kernel filesystem
(like 2.6.32-431.el6.x86_64), if the filesystem is not mounted with
user_xattr flag, the setxattr with "user.libvirt.selinux" will fail.

So adding testUserXattrEnabled() in securityselinuxlabeltest.c,
if user_xattr is not enabled, skip this case.

The user_xattr is departed in newer kernel, therefore this commit is
only for the compatablity for old kernel.
Signed-off-by: NJincheng Miao <jmiao@redhat.com>
Signed-off-by: NEric Blake <eblake@redhat.com>
Tested-by: NScott Sullivan <ssullivan@liquidweb.com>
上级 9b291bbe
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <selinux/selinux.h> #include <selinux/selinux.h>
#include <selinux/context.h> #include <selinux/context.h>
#include <attr/xattr.h>
#include "internal.h" #include "internal.h"
#include "testutils.h" #include "testutils.h"
...@@ -56,6 +57,35 @@ struct testSELinuxFile { ...@@ -56,6 +57,35 @@ struct testSELinuxFile {
char *context; char *context;
}; };
static int
testUserXattrEnabled(void)
{
int ret = -1;
ssize_t len;
const char *con_value = "system_u:object_r:svirt_image_t:s0:c41,c264";
char *path = NULL;
if (virAsprintf(&path, "%s/securityselinuxlabeldata/testxattr",
abs_srcdir) < 0)
goto cleanup;
if (virFileTouch(path, 0600) < 0)
goto cleanup;
len = setxattr(path, "user.libvirt.selinux", con_value,
strlen(con_value), 0);
if (len < 0) {
if (errno == EOPNOTSUPP)
ret = 0;
goto cleanup;
}
ret = 1;
cleanup:
unlink(path);
VIR_FREE(path);
return ret;
}
static int static int
testSELinuxMungePath(char **path) testSELinuxMungePath(char **path)
...@@ -321,6 +351,12 @@ static int ...@@ -321,6 +351,12 @@ static int
mymain(void) mymain(void)
{ {
int ret = 0; int ret = 0;
int rc = testUserXattrEnabled();
if (rc < 0)
return EXIT_FAILURE;
if (!rc)
return EXIT_AM_SKIP;
if (!(mgr = virSecurityManagerNew("selinux", "QEMU", false, true, false))) { if (!(mgr = virSecurityManagerNew("selinux", "QEMU", false, true, false))) {
virErrorPtr err = virGetLastError(); virErrorPtr err = virGetLastError();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册