mirror of https://github.com/borgbackup/borg.git
serve: fix forced command lines containing BORG_ env vars
(cherry picked from commit 88dfb3e9c5
)
This commit is contained in:
parent
c07c911643
commit
949871d463
|
@ -6,6 +6,7 @@ import argparse
|
||||||
import faulthandler
|
import faulthandler
|
||||||
import functools
|
import functools
|
||||||
import inspect
|
import inspect
|
||||||
|
import itertools
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shlex
|
import shlex
|
||||||
|
@ -2060,6 +2061,9 @@ class Archiver:
|
||||||
if cmd is not None and result.func == self.do_serve:
|
if cmd is not None and result.func == self.do_serve:
|
||||||
forced_result = result
|
forced_result = result
|
||||||
argv = shlex.split(cmd)
|
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:])
|
result = self.parse_args(argv[1:])
|
||||||
if result.func != forced_result.func:
|
if result.func != forced_result.func:
|
||||||
# someone is trying to execute a different borg subcommand, don't do that!
|
# someone is trying to execute a different borg subcommand, don't do that!
|
||||||
|
|
|
@ -1800,6 +1800,13 @@ def test_get_args():
|
||||||
'borg init /')
|
'borg init /')
|
||||||
assert args.func == archiver.do_serve
|
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:
|
class TestBuildFilter:
|
||||||
def test_basic(self):
|
def test_basic(self):
|
||||||
|
|
Loading…
Reference in New Issue