diff --git a/ChangeLog b/ChangeLog index bbe32054..d3101944 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,8 @@ ver. 0.9.1 (2014/xx/xx) - better, faster, stronger * Nginx filter to support missing server_name. Closes gh-676 * fail2ban-regex assertion error caused by miscount missed lines with multiline regex + * Fix actions failing to execute for Python 3.4.0. Work around for + http://bugs.python.org/issue21207 - New features: diff --git a/fail2ban/server/server.py b/fail2ban/server/server.py index 1bf8dcbb..735ce0a9 100644 --- a/fail2ban/server/server.py +++ b/fail2ban/server/server.py @@ -523,11 +523,19 @@ class Server: except (AttributeError, ValueError): maxfd = 256 # default maximum - for fd in range(0, maxfd): - try: - os.close(fd) - except OSError: # ERROR (ignore) - pass + # urandom should not be closed in Python 3.4.0. Fixed in 3.4.1 + # http://bugs.python.org/issue21207 + if sys.version_info[0:3] == (3, 4, 0): # pragma: no cover + urandom_fd = os.open("/dev/urandom", os.O_RDONLY) + for fd in range(0, maxfd): + try: + if not os.path.sameopenfile(urandom_fd, fd): + os.close(fd) + except OSError: # ERROR (ignore) + pass + os.close(urandom_fd) + else: + os.closerange(0, maxfd) # Redirect the standard file descriptors to /dev/null. os.open("/dev/null", os.O_RDONLY) # standard input (0)