serve: fix forced command lines containing BORG_ env vars

(cherry picked from commit 88dfb3e9c5)
This commit is contained in:
Marian Beermann 2017-04-01 21:10:31 +02:00 committed by Thomas Waldmann
parent c07c911643
commit 949871d463
2 changed files with 11 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import argparse
import faulthandler
import functools
import inspect
import itertools
import os
import re
import shlex
@ -2060,6 +2061,9 @@ class Archiver:
if cmd is not None and result.func == self.do_serve:
forced_result = result
argv = shlex.split(cmd)
# Drop environment variables (do *not* interpret them) before trying to parse
# the borg command line.
argv = list(itertools.dropwhile(lambda arg: '=' in arg, argv))
result = self.parse_args(argv[1:])
if result.func != forced_result.func:
# someone is trying to execute a different borg subcommand, don't do that!

View File

@ -1800,6 +1800,13 @@ def test_get_args():
'borg init /')
assert args.func == archiver.do_serve
# Check that environment variables in the forced command don't cause issues. If the command
# were not forced, environment variables would be interpreted by the shell, but this does not
# happen for forced commands - we get the verbatim command line and need to deal with env vars.
args = archiver.get_args(['borg', 'serve', ],
'BORG_HOSTNAME_IS_UNIQUE=yes borg serve --info')
assert args.func == archiver.do_serve
class TestBuildFilter:
def test_basic(self):