mirror of https://github.com/fail2ban/fail2ban
rewritten preventive measure to convert "unexpected" type before pickled in CS-protocols: don't convert all basic types now (also bool, int etc).
Fixed bug with ignoreself option, which reached fail2ban-server as string 'False' (and not as boolean), so no matter which value was set - it results always in True (see gh-2078).pull/2133/head
parent
e01981cc72
commit
60b36c4213
|
@ -47,9 +47,7 @@ class CSocket:
|
||||||
|
|
||||||
def send(self, msg, nonblocking=False, timeout=None):
|
def send(self, msg, nonblocking=False, timeout=None):
|
||||||
# Convert every list member to string
|
# Convert every list member to string
|
||||||
obj = dumps(map(
|
obj = dumps(map(CSocket.convert, msg), HIGHEST_PROTOCOL)
|
||||||
lambda m: str(m) if not isinstance(m, (list, dict, set)) else m, msg),
|
|
||||||
HIGHEST_PROTOCOL)
|
|
||||||
self.__csock.send(obj + CSPROTO.END)
|
self.__csock.send(obj + CSPROTO.END)
|
||||||
return self.receive(self.__csock, nonblocking, timeout)
|
return self.receive(self.__csock, nonblocking, timeout)
|
||||||
|
|
||||||
|
@ -70,6 +68,14 @@ class CSocket:
|
||||||
pass
|
pass
|
||||||
self.__csock = None
|
self.__csock = None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def convert(m):
|
||||||
|
"""Convert every "unexpected" member of message to string"""
|
||||||
|
if isinstance(m, (basestring, bool, int, float, list, dict, set)):
|
||||||
|
return m
|
||||||
|
else: # pragma: no cover
|
||||||
|
return str(m)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def receive(sock, nonblocking=False, timeout=None):
|
def receive(sock, nonblocking=False, timeout=None):
|
||||||
msg = CSPROTO.EMPTY
|
msg = CSPROTO.EMPTY
|
||||||
|
|
Loading…
Reference in New Issue