security_util: Don't error on macOS when getting/setting/moving XATTRs

There are three internal APIs implemented in this security_util
file: virSecurityGetRememberedLabel(),
virSecuritySetRememberedLabel() and
virSecurityMoveRememberedLabel() for getting, setting and moving
remembered seclabel. All three have a special return value of -2
when XATTRs are not supported (for whatever reason) and callers
are expected to handle it gracefully. However, after my commit of
v5.7.0-rc1~115 it may happen that one of the three functions
returned -1 even though XATTRs are not supported (and thus -2
should have been returned).

Fixes: 7cfb7aab57
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
Michal Privoznik 2020-11-02 21:40:18 +01:00
parent 8f0f6ff082
commit d337543f06

View File

@ -269,8 +269,11 @@ virSecurityGetRememberedLabel(const char *name,
*label = NULL;
if (!(ref_name = virSecurityGetRefCountAttrName(name)))
if (!(ref_name = virSecurityGetRefCountAttrName(name))) {
if (errno == ENOSYS)
return -2;
return -1;
}
if (virFileGetXAttrQuiet(path, ref_name, &value) < 0) {
if (errno == ENOSYS || errno == ENODATA || errno == ENOTSUP)
@ -364,8 +367,11 @@ virSecuritySetRememberedLabel(const char *name,
g_autofree char *value = NULL;
unsigned int refcount = 0;
if (!(ref_name = virSecurityGetRefCountAttrName(name)))
if (!(ref_name = virSecurityGetRefCountAttrName(name))) {
if (errno == ENOSYS)
return -2;
return -1;
}
if (virFileGetXAttrQuiet(path, ref_name, &value) < 0) {
if (errno == ENOSYS || errno == ENOTSUP) {
@ -452,8 +458,11 @@ virSecurityMoveRememberedLabel(const char *name,
if (!(ref_name = virSecurityGetRefCountAttrName(name)) ||
!(attr_name = virSecurityGetAttrName(name)) ||
!(timestamp_name = virSecurityGetTimestampAttrName(name)))
!(timestamp_name = virSecurityGetTimestampAttrName(name))) {
if (errno == ENOSYS)
return -2;
return -1;
}
if (virFileGetXAttrQuiet(src, ref_name, &ref_value) < 0) {
if (errno == ENOSYS || errno == ENOTSUP) {