From a550c6554f86ff678294d8f31ccaa94f821cb396 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 30 Dec 2024 04:09:48 +0200 Subject: [PATCH] Check if backup folder is writable on backup (cherry picked from commit 8aad79fd3e14eb885724a5e5790803c289be2f25) Closes #3961 --- src/NzbDrone.Common/ArchiveService.cs | 17 +++++++++-------- src/NzbDrone.Core/Backup/BackupService.cs | 11 +++++++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/NzbDrone.Common/ArchiveService.cs b/src/NzbDrone.Common/ArchiveService.cs index 800d240ab..d420bbbc0 100644 --- a/src/NzbDrone.Common/ArchiveService.cs +++ b/src/NzbDrone.Common/ArchiveService.cs @@ -42,17 +42,18 @@ namespace NzbDrone.Common public void CreateZip(string path, IEnumerable files) { - using (var zipFile = ZipFile.Create(path)) - { - zipFile.BeginUpdate(); + _logger.Debug("Creating archive {0}", path); - foreach (var file in files) - { - zipFile.Add(file, Path.GetFileName(file)); - } + using var zipFile = ZipFile.Create(path); - zipFile.CommitUpdate(); + zipFile.BeginUpdate(); + + foreach (var file in files) + { + zipFile.Add(file, Path.GetFileName(file)); } + + zipFile.CommitUpdate(); } private void ExtractZip(string compressedFile, string destination) diff --git a/src/NzbDrone.Core/Backup/BackupService.cs b/src/NzbDrone.Core/Backup/BackupService.cs index efaa961bd..e14ea7aed 100644 --- a/src/NzbDrone.Core/Backup/BackupService.cs +++ b/src/NzbDrone.Core/Backup/BackupService.cs @@ -66,12 +66,19 @@ namespace NzbDrone.Core.Backup { _logger.ProgressInfo("Starting Backup"); + var backupFolder = GetBackupFolder(backupType); + _diskProvider.EnsureFolder(_backupTempFolder); - _diskProvider.EnsureFolder(GetBackupFolder(backupType)); + _diskProvider.EnsureFolder(backupFolder); + + if (!_diskProvider.FolderWritable(backupFolder)) + { + throw new UnauthorizedAccessException($"Backup folder {backupFolder} is not writable"); + } var dateNow = DateTime.Now; var backupFilename = $"readarr_backup_v{BuildInfo.Version}_{dateNow:yyyy.MM.dd_HH.mm.ss}.zip"; - var backupPath = Path.Combine(GetBackupFolder(backupType), backupFilename); + var backupPath = Path.Combine(backupFolder, backupFilename); Cleanup();