mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-27 18:03:50 +03:00
virSecurityDACTransactionRun: Implement rollback
When iterating over list of paths/disk sources to relabel it may happen that the process fails at some point. In that case, for the sake of keeping seclabel refcount (stored in XATTRs) in sync with reality we have to perform rollback. However, if that fails too the only thing we can do is warn user. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
86def3c88c
commit
06af6609e9
@ -229,7 +229,6 @@ virSecurityDACTransactionRun(pid_t pid ATTRIBUTE_UNUSED,
|
||||
for (i = 0; i < list->nItems; i++) {
|
||||
virSecurityDACChownItemPtr item = list->items[i];
|
||||
|
||||
/* TODO Implement rollback */
|
||||
if (!item->restore) {
|
||||
rv = virSecurityDACSetOwnership(list->manager,
|
||||
item->src,
|
||||
@ -246,6 +245,19 @@ virSecurityDACTransactionRun(pid_t pid ATTRIBUTE_UNUSED,
|
||||
break;
|
||||
}
|
||||
|
||||
for (; rv < 0 && i > 0; i--) {
|
||||
virSecurityDACChownItemPtr item = list->items[i - 1];
|
||||
|
||||
if (!item->restore) {
|
||||
virSecurityDACRestoreFileLabelInternal(list->manager,
|
||||
item->src,
|
||||
item->path);
|
||||
} else {
|
||||
VIR_WARN("Ignoring failed restore attempt on %s",
|
||||
NULLSTR(item->src ? item->src->path : item->path));
|
||||
}
|
||||
}
|
||||
|
||||
if (list->lock)
|
||||
virSecurityManagerMetadataUnlock(list->manager, &state);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user