- Added signal handling in fail2ban-client

- Added a wonderful visual effect when waiting on the server
- Improved error message. Thanks to Yaroslav Halchenko

git-svn-id: https://fail2ban.svn.sourceforge.net/svnroot/fail2ban/trunk@515 a942ae1a-1317-0410-a47c-b1dcaea8d605
0.x
Cyril Jaquier 18 years ago
parent 6cf814245e
commit 26a762ac94

@ -4,9 +4,14 @@
|_| \__,_|_|_/___|_.__/\__,_|_||_| |_| \__,_|_|_/___|_.__/\__,_|_||_|
============================================================= =============================================================
Fail2Ban (version 0.7.6) 2007/01/04 Fail2Ban (version 0.7.7) 2007/??/??
============================================================= =============================================================
ver. 0.7.7 (2007/??/??)
----------
- Added signal handling in fail2ban-client
- Added a wonderful visual effect when waiting on the server
ver. 0.7.6 (2007/01/04) - beta ver. 0.7.6 (2007/01/04) - beta
---------- ----------
- Added a "sleep 1" in redhat-initd. Thanks to Jim Wight - Added a "sleep 1" in redhat-initd. Thanks to Jim Wight

@ -25,7 +25,7 @@ __date__ = "$Date$"
__copyright__ = "Copyright (c) 2004 Cyril Jaquier" __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
__license__ = "GPL" __license__ = "GPL"
import sys, string, os, pickle, re, logging import sys, string, os, pickle, re, logging, signal
import getopt, time, readline, shlex, socket import getopt, time, readline, shlex, socket
# Inserts our own modules path first in the list # Inserts our own modules path first in the list
@ -87,7 +87,7 @@ class Fail2banClient:
print " -i interactive mode" print " -i interactive mode"
print " -v increase verbosity" print " -v increase verbosity"
print " -q decrease verbosity" print " -q decrease verbosity"
print " -x force execution of the server" print " -x force execution of the server (remove socket file)"
print " -h, --help display this help message" print " -h, --help display this help message"
print " -V, --version print the version" print " -V, --version print the version"
print print
@ -103,7 +103,13 @@ class Fail2banClient:
print "Fail2Ban v" + version + " reads log file that contains password failure report" print "Fail2Ban v" + version + " reads log file that contains password failure report"
print "and bans the corresponding IP addresses using firewall rules." print "and bans the corresponding IP addresses using firewall rules."
print print
def __sigTERMhandler(self, signum, frame):
# Print a new line because we probably come from wait
print
logSys.warn("Caught signal %d. Exiting" % signum)
sys.exit(-1)
def __getCmdLineOptions(self, optList): def __getCmdLineOptions(self, optList):
""" Gets the command line options """ Gets the command line options
""" """
@ -180,7 +186,11 @@ class Fail2banClient:
self.__processCmd(self.__stream, False) self.__processCmd(self.__stream, False)
return True return True
except ServerExecutionException: except ServerExecutionException:
logSys.error("Could not start server. Try -x option") logSys.error("Could not start server. Maybe an old " +
"socket file is still present. Try to " +
"remove " + self.__conf["socket"] + ". If " +
"you used fail2ban-client to start the " +
"server, adding the -x option will do it")
return False return False
elif len(cmd) == 1 and cmd[0] == "reload": elif len(cmd) == 1 and cmd[0] == "reload":
if self.__ping(): if self.__ping():
@ -229,18 +239,40 @@ class Fail2banClient:
def __waitOnServer(self): def __waitOnServer(self):
# Wait for the server to start # Wait for the server to start
cnt = 0 cnt = 0
if self.__conf["verbose"] > 1:
pos = 0
delta = 1
mask = "[ ]"
while not self.__ping(): while not self.__ping():
# Wonderful visual :)
if self.__conf["verbose"] > 1:
pos += delta
sys.stdout.write("\rINFO " + mask[:pos] + '#' + mask[pos+1:] +
" Waiting on the server...")
sys.stdout.flush()
if pos > len(mask)-3:
delta = -1
elif pos < 2:
delta = 1
# The server has 30 secondes to start. # The server has 30 secondes to start.
if cnt >= 300: if cnt >= 300:
if self.__conf["verbose"] > 1:
sys.stdout.write('\n')
raise ServerExecutionException("Failed to start server") raise ServerExecutionException("Failed to start server")
time.sleep(0.1) time.sleep(0.1)
cnt += 1 cnt += 1
if self.__conf["verbose"] > 1:
sys.stdout.write('\n')
def start(self, argv): def start(self, argv):
# Command line options # Command line options
self.__argv = argv self.__argv = argv
# Install signal handlers
signal.signal(signal.SIGTERM, self.__sigTERMhandler)
signal.signal(signal.SIGINT, self.__sigTERMhandler)
# Reads the command line options. # Reads the command line options.
try: try:
cmdOpts = 'hc:s:xdviqV' cmdOpts = 'hc:s:xdviqV'

@ -78,7 +78,7 @@ class Fail2banServer:
print " -b start in background" print " -b start in background"
print " -f start in foreground" print " -f start in foreground"
print " -s <FILE> socket path" print " -s <FILE> socket path"
print " -x force execution of the server" print " -x force execution of the server (remove socket file)"
print " -h, --help display this help message" print " -h, --help display this help message"
print " -V, --version print the version" print " -V, --version print the version"
print print

Loading…
Cancel
Save