From 891538ca7e9e6048a183c08ff1dd6e83a89faf83 Mon Sep 17 00:00:00 2001 From: Milkey Mouse Date: Tue, 19 Feb 2019 23:56:20 -0800 Subject: [PATCH 1/2] Emit user-friendly error if repo key is exported to a directory (fixes #4348) (cherry picked from commit 72ebd13e6f0c81726163491f74cda3e14a339db4) --- src/borg/archiver.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/borg/archiver.py b/src/borg/archiver.py index 620ad1dfe..89eba4dc6 100644 --- a/src/borg/archiver.py +++ b/src/borg/archiver.py @@ -352,10 +352,14 @@ class Archiver: if not args.path: self.print_error("output file to export key to expected") return EXIT_ERROR - if args.qr: - manager.export_qr(args.path) - else: - manager.export(args.path) + try: + if args.qr: + manager.export_qr(args.path) + else: + manager.export(args.path) + except IsADirectoryError: + self.print_error("'{}' must be a file, not a directory".format(args.path)) + return EXIT_ERROR return EXIT_SUCCESS @with_repository(lock=False, exclusive=False, manifest=False, cache=False) From 96bd36d37ae6708eeb74c30b2a2cae1186b233d8 Mon Sep 17 00:00:00 2001 From: Milkey Mouse Date: Tue, 19 Feb 2019 23:59:14 -0800 Subject: [PATCH 2/2] Add test for error upon exporting a key to a directory (cherry picked from commit d26264bb7005e4136614810b5ce30f9fb80e036d) --- src/borg/testsuite/archiver.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/borg/testsuite/archiver.py b/src/borg/testsuite/archiver.py index 179b41f82..1789cf31a 100644 --- a/src/borg/testsuite/archiver.py +++ b/src/borg/testsuite/archiver.py @@ -2650,6 +2650,14 @@ class ArchiverTestCase(ArchiverTestCaseBase): assert export_contents.startswith('') assert export_contents.endswith('') + def test_key_export_directory(self): + export_directory = self.output_path + '/exported' + os.mkdir(export_directory) + + self.cmd('init', self.repository_location, '--encryption', 'repokey') + + self.cmd('key', 'export', self.repository_location, export_directory, exit_code=EXIT_ERROR) + def test_key_import_errors(self): export_file = self.output_path + '/exported' self.cmd('init', self.repository_location, '--encryption', 'keyfile')