From b6fa8629dbc858d997253e25fa48172e92435463 Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Thu, 12 Jan 2017 02:39:56 +0100 Subject: [PATCH 1/2] remote: log SSH command line at debug level --- borg/remote.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/borg/remote.py b/borg/remote.py index 00c3114a4..6a6c51f8a 100644 --- a/borg/remote.py +++ b/borg/remote.py @@ -13,9 +13,12 @@ from . import __version__ from .helpers import Error, IntegrityError, sysinfo from .helpers import replace_placeholders from .repository import Repository +from .logger import create_logger import msgpack +logger = create_logger(__name__) + RPC_PROTOCOL_VERSION = 2 BUFSIZE = 10 * 1024 * 1024 @@ -185,6 +188,7 @@ class RemoteRepository: env.pop('LD_LIBRARY_PATH', None) env.pop('BORG_PASSPHRASE', None) # security: do not give secrets to subprocess env['BORG_VERSION'] = __version__ + logger.debug('SSH command line: %s', borg_cmd) self.p = Popen(borg_cmd, bufsize=0, stdin=PIPE, stdout=PIPE, stderr=PIPE, env=env) self.stdin_fd = self.p.stdin.fileno() self.stdout_fd = self.p.stdout.fileno() From 2d2bff9bf6fe03716861f5c621610a88315f8e94 Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Thu, 12 Jan 2017 02:41:29 +0100 Subject: [PATCH 2/2] remote: include unknown data in error message this makes it far, far easier to diagnose issues like an account being locked: Got unexpected RPC data format from server: This account is currently not available. --- borg/remote.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/borg/remote.py b/borg/remote.py index 6a6c51f8a..0944997cb 100644 --- a/borg/remote.py +++ b/borg/remote.py @@ -4,14 +4,16 @@ import logging import os import select import shlex -from subprocess import Popen, PIPE import sys import tempfile +import textwrap +from subprocess import Popen, PIPE from . import __version__ from .helpers import Error, IntegrityError, sysinfo from .helpers import replace_placeholders +from .helpers import bin_to_hex from .repository import Repository from .logger import create_logger @@ -47,7 +49,16 @@ class UnexpectedRPCDataFormatFromClient(Error): class UnexpectedRPCDataFormatFromServer(Error): - """Got unexpected RPC data format from server.""" + """Got unexpected RPC data format from server:\n{}""" + + def __init__(self, data): + try: + data = data.decode()[:128] + except UnicodeDecodeError: + data = data[:128] + data = ['%02X' % byte for byte in data] + data = textwrap.fill(' '.join(data), 16 * 3) + super().__init__(data) class RepositoryServer: # pragma: no cover @@ -350,7 +361,7 @@ This problem will go away as soon as the server has been upgraded to 1.0.7+. self.unpacker.feed(data) for unpacked in self.unpacker: if not (isinstance(unpacked, tuple) and len(unpacked) == 4): - raise UnexpectedRPCDataFormatFromServer() + raise UnexpectedRPCDataFormatFromServer(data) type, msgid, error, res = unpacked if msgid in self.ignore_responses: self.ignore_responses.remove(msgid)