From cb280b817f89386546c58109f2138fea6e0cfc08 Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 13 May 2016 22:16:35 +0200 Subject: [PATCH] csocket multi-set fix: prevent to convert `list`, `dict`, `set` during transfer (send), this offers a sending of 'multi-set' arrays (missed by cherry-picking from multi-set branch) --- fail2ban/client/csocket.py | 4 +++- fail2ban/server/server.py | 4 ++++ fail2ban/server/transmitter.py | 3 ++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/fail2ban/client/csocket.py b/fail2ban/client/csocket.py index 2e22e5ee..45d58cc6 100644 --- a/fail2ban/client/csocket.py +++ b/fail2ban/client/csocket.py @@ -44,7 +44,9 @@ class CSocket: def send(self, msg): # Convert every list member to string - obj = dumps([str(m) for m in msg], HIGHEST_PROTOCOL) + obj = dumps(map( + lambda m: str(m) if not isinstance(m, (list, dict, set)) else m, msg), + HIGHEST_PROTOCOL) self.__csock.send(obj + CSPROTO.END) return self.receive(self.__csock) diff --git a/fail2ban/server/server.py b/fail2ban/server/server.py index 7f75c347..def796a5 100644 --- a/fail2ban/server/server.py +++ b/fail2ban/server/server.py @@ -266,8 +266,10 @@ class Server: flt = self.__jails[name].filter if multiple: for value in value: + logSys.debug(" failregex: %r", value) flt.addFailRegex(value) else: + logSys.debug(" failregex: %r", value) flt.addFailRegex(value) def delFailRegex(self, name, index): @@ -280,8 +282,10 @@ class Server: flt = self.__jails[name].filter if multiple: for value in value: + logSys.debug(" ignoreregex: %r", value) flt.addIgnoreRegex(value) else: + logSys.debug(" ignoreregex: %r", value) flt.addIgnoreRegex(value) def delIgnoreRegex(self, name, index): diff --git a/fail2ban/server/transmitter.py b/fail2ban/server/transmitter.py index 29d6d189..af2d1b53 100644 --- a/fail2ban/server/transmitter.py +++ b/fail2ban/server/transmitter.py @@ -52,7 +52,7 @@ class Transmitter: def proceed(self, command): # Deserialize object - logSys.debug("Command: " + repr(command)) + logSys.debug("Command: %r", command) try: ret = self.__commandHandler(command) ack = 0, ret @@ -263,6 +263,7 @@ class Transmitter: action = self.__server.getAction(name, actionname) if multiple: for cmd in command[3]: + logSys.debug(" %r", cmd) actionkey = cmd[0] if callable(getattr(action, actionkey, None)): actionvalue = json.loads(cmd[1]) if len(cmd)>1 else {}