mirror of https://github.com/digint/btrbk
btrbk: validate snapshot_delete_dir
parent
cff6c47900
commit
0a8ac177e7
26
btrbk
26
btrbk
|
|
@ -1412,6 +1412,24 @@ sub btrfs_subvolume_set_readonly($)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub btrfs_snapshot_delete_dir($$)
|
||||||
|
{
|
||||||
|
my $snapshot = shift // die;
|
||||||
|
my $dir = shift // die;
|
||||||
|
my $rel_dir = check_file($dir, { relative => 1 }, sanitize => 1, error_statement => 'for snapshot_delete_dir') // return undef;
|
||||||
|
my $dir_path = $snapshot->{PATH} . '/' . $rel_dir;
|
||||||
|
INFO "[snapshot] delete dir: $dir_path";
|
||||||
|
my $ret = run_cmd(cmd => vinfo_cmd($snapshot, "rm", '-rf', { unsafe => $dir_path } ),
|
||||||
|
rsh => vinfo_rsh($snapshot),
|
||||||
|
);
|
||||||
|
unless(defined($ret)) {
|
||||||
|
ERROR "Failed to delete directory \"$rel_dir\" in snapshot: $snapshot->{PRINT}";
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub btrfs_subvolume_delete($@)
|
sub btrfs_subvolume_delete($@)
|
||||||
{
|
{
|
||||||
my $vol = shift // die;
|
my $vol = shift // die;
|
||||||
|
|
@ -6726,13 +6744,7 @@ MAIN:
|
||||||
my $snapshot_ok = 1;
|
my $snapshot_ok = 1;
|
||||||
if($create_rw) {
|
if($create_rw) {
|
||||||
foreach my $dir (@delete_dirs) {
|
foreach my $dir (@delete_dirs) {
|
||||||
my $dir_path = $snapshot->{PATH} . '/' . $dir;
|
unless(btrfs_snapshot_delete_dir($snapshot, $dir)) {
|
||||||
INFO "[snapshot] delete dir: $dir_path";
|
|
||||||
my $ret = run_cmd(cmd => vinfo_cmd($snapshot, "rm", '-rf', { unsafe => $dir_path } ),
|
|
||||||
rsh => vinfo_rsh($snapshot),
|
|
||||||
);
|
|
||||||
unless(defined($ret)) {
|
|
||||||
ERROR "Failed to delete directory \"$dir\" in snapshot: $snapshot->{PRINT}";
|
|
||||||
$snapshot_ok = 0;
|
$snapshot_ok = 0;
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue