You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fail2ban/fail2ban-0.8.3-inodecheck.p...

36 lines
1.2 KiB

--- fail2ban-0.8.3/server/filter.py.inodecheck 2009-08-27 20:50:22.000000000 +0200
+++ fail2ban-0.8.3/server/filter.py 2009-08-27 20:50:22.000000000 +0200
@@ -31,7 +31,7 @@
from mytime import MyTime
from failregex import FailRegex, Regex, RegexException
-import logging, re
+import logging, re, os
# Gets the instance of the logger.
logSys = logging.getLogger("fail2ban.filter")
@@ -438,6 +438,8 @@
self.__handler = None
# Try to open the file. Raises an exception if an error occured.
handler = open(filename)
+ stats = os.fstat(handler.fileno())
+ self.__ino = stats.st_ino
try:
firstLine = handler.readline()
# Computes the MD5 of the first line.
@@ -464,10 +466,12 @@
firstLine = self.__handler.readline()
# Computes the MD5 of the first line.
myHash = md5.new(firstLine).digest()
- # Compare hash.
- if not self.__hash == myHash:
+ stats = os.fstat(self.__handler.fileno())
+ # Compare hash and inode
+ if self.__hash != myHash or self.__ino != stats.st_ino:
logSys.info("Log rotation detected for %s" % self.__filename)
self.__hash = myHash
+ self.__ino = stats.st_ino
self.__pos = 0
# Sets the file pointer to the last position.
self.__handler.seek(self.__pos)