mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-01 10:22:08 +00:00
fix(oci): reject missing managed mount roots
This commit is contained in:
@@ -84,10 +84,7 @@ def remove_empty_format_directories(rootfs, deployment, backed_only=True, target
|
||||
if not paths:
|
||||
return 0
|
||||
flags = os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW
|
||||
try:
|
||||
root = os.open(rootfs, flags)
|
||||
except FileNotFoundError:
|
||||
return 0
|
||||
removed = 0
|
||||
try:
|
||||
for path in paths:
|
||||
@@ -98,8 +95,6 @@ def remove_empty_format_directories(rootfs, deployment, backed_only=True, target
|
||||
os.close(current)
|
||||
current = following
|
||||
removed += int(remove_empty_at(current))
|
||||
except FileNotFoundError:
|
||||
continue
|
||||
except OSError as error:
|
||||
if error.errno in (errno.ELOOP, errno.ENOTDIR):
|
||||
raise ValueError('Symbolic link or invalid managed volume path') from error
|
||||
|
||||
@@ -174,6 +174,21 @@ class FormatDirectoryTests(unittest.TestCase):
|
||||
opened.assert_not_called()
|
||||
|
||||
|
||||
def test_missing_rootfs_is_an_error_without_remove(self):
|
||||
with tempfile.TemporaryDirectory() as tmp, patch.object(volumes.os, 'rmdir') as remove:
|
||||
with self.assertRaises(FileNotFoundError):
|
||||
volumes.remove_empty_format_directories(Path(tmp) / 'missing', {'mounts': [
|
||||
{'container_path': '/config', 'type': 'managed-volume', 'backup': True}]})
|
||||
remove.assert_not_called()
|
||||
|
||||
def test_missing_managed_mount_is_an_error_without_remove(self):
|
||||
with tempfile.TemporaryDirectory() as tmp, patch.object(volumes.os, 'rmdir') as remove:
|
||||
with self.assertRaises(FileNotFoundError):
|
||||
volumes.remove_empty_format_directories(Path(tmp), {'mounts': [
|
||||
{'container_path': '/missing', 'type': 'managed-volume', 'backup': True}]})
|
||||
remove.assert_not_called()
|
||||
|
||||
|
||||
class StartupContractTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
directory = tempfile.TemporaryDirectory(); self.addCleanup(directory.cleanup)
|
||||
|
||||
Reference in New Issue
Block a user