mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-12 22:51:29 +00:00
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: Jincheng Miao <jmiao@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com> Tested-by: Scott Sullivan <ssullivan@liquidweb.com>
This commit is contained in:
parent
9b291bbe20
commit
caf164f1e4
@ -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 {
|
|||||||
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
|
|||||||
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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user