From 4a60d777d8a52369afc9eb199f2aadc91c85af83 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Fri, 19 Feb 2016 23:01:20 +0100 Subject: [PATCH] add a simple archivename validator, fixes #680 --- borg/archiver.py | 5 +++-- borg/helpers.py | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/borg/archiver.py b/borg/archiver.py index 910814c46..05d3c5e6f 100644 --- a/borg/archiver.py +++ b/borg/archiver.py @@ -15,7 +15,7 @@ import textwrap import traceback from . import __version__ -from .helpers import Error, location_validator, format_time, format_file_size, \ +from .helpers import Error, location_validator, archivename_validator, format_time, format_file_size, \ parse_pattern, PathPrefixPattern, to_localtime, timestamp, \ get_cache_dir, get_keys_dir, prune_within, prune_split, \ Manifest, remove_surrogates, update_excludes, format_archive, check_extension_modules, Statistics, \ @@ -1050,7 +1050,8 @@ class Archiver: subparser.add_argument('location', metavar='ARCHIVE', type=location_validator(archive=True), help='archive to rename') - subparser.add_argument('name', metavar='NEWNAME', type=str, + subparser.add_argument('name', metavar='NEWNAME', + type=archivename_validator(), help='the new archive name to use') delete_epilog = textwrap.dedent(""" diff --git a/borg/helpers.py b/borg/helpers.py index a710c01a5..b42050459 100644 --- a/borg/helpers.py +++ b/borg/helpers.py @@ -757,6 +757,14 @@ def location_validator(archive=None): return validator +def archivename_validator(): + def validator(text): + if '/' in text or '::' in text or not text: + raise argparse.ArgumentTypeError('Invalid repository name: "%s"' % text) + return text + return validator + + def decode_dict(d, keys, encoding='utf-8', errors='surrogateescape'): for key in keys: if isinstance(d.get(key), bytes):