fix for a bug noticed in a multi target run (log files weren't saved properly - removed buffering as it didn't produce any noticeable results)

This commit is contained in:
Miroslav Stampar 2012-06-05 22:40:55 +00:00
parent f94ebe3107
commit 058a9c59a2
4 changed files with 5 additions and 24 deletions

View File

@ -34,7 +34,6 @@ from lib.core.data import conf
from lib.core.data import kb from lib.core.data import kb
from lib.core.data import logger from lib.core.data import logger
from lib.core.data import paths from lib.core.data import paths
from lib.core.dump import dumper
from lib.core.common import unhandledExceptionMessage from lib.core.common import unhandledExceptionMessage
from lib.core.exception import exceptionsTuple from lib.core.exception import exceptionsTuple
from lib.core.exception import sqlmapSilentQuitException from lib.core.exception import sqlmapSilentQuitException
@ -123,8 +122,6 @@ def main():
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
dumper.flush()
# Reference: http://stackoverflow.com/questions/1635080/terminate-a-multi-thread-python-program # Reference: http://stackoverflow.com/questions/1635080/terminate-a-multi-thread-python-program
if conf.get("threads", 0) > 1 or conf.get("dnsServer", None): if conf.get("threads", 0) > 1 or conf.get("dnsServer", None):
os._exit(0) os._exit(0)

View File

@ -15,6 +15,9 @@ David Alvarez <david.alvarez.s@gmail.com>
Sergio Alves <sergioalexandre.alves@gmail.com> Sergio Alves <sergioalexandre.alves@gmail.com>
for reporting a bug for reporting a bug
Thomas Anderson <darkc0de@live.com.ph>
for reporting a bug
Chip Andrews <chip@sqlsecurity.com> Chip Andrews <chip@sqlsecurity.com>
for his excellent work maintaining the SQL Server versions database for his excellent work maintaining the SQL Server versions database
at SQLSecurity.com and permission to implement the update feature at SQLSecurity.com and permission to implement the update feature

View File

@ -30,7 +30,6 @@ from lib.core.enums import DBMS
from lib.core.exception import sqlmapValueException from lib.core.exception import sqlmapValueException
from lib.core.replication import Replication from lib.core.replication import Replication
from lib.core.settings import BLANK from lib.core.settings import BLANK
from lib.core.settings import BUFFERED_LOG_SIZE
from lib.core.settings import NULL from lib.core.settings import NULL
from lib.core.settings import TRIM_STDOUT_DUMP_SIZE from lib.core.settings import TRIM_STDOUT_DUMP_SIZE
from lib.core.settings import UNICODE_ENCODING from lib.core.settings import UNICODE_ENCODING
@ -45,7 +44,6 @@ class Dump:
def __init__(self): def __init__(self):
self._outputFile = None self._outputFile = None
self._outputFP = None self._outputFP = None
self._outputBP = None
self._lock = threading.Lock() self._lock = threading.Lock()
def _write(self, data, n=True, console=True): def _write(self, data, n=True, console=True):
@ -56,41 +54,27 @@ class Dump:
if kb.get("multiThreadMode"): if kb.get("multiThreadMode"):
self._lock.acquire() self._lock.acquire()
self._outputBP.write(text) self._outputFP.write(text)
if self._outputBP.tell() > BUFFERED_LOG_SIZE:
self.flush()
if kb.get("multiThreadMode"): if kb.get("multiThreadMode"):
self._lock.release() self._lock.release()
kb.dataOutputFlag = True kb.dataOutputFlag = True
def flush(self):
if self._outputBP and self._outputFP and self._outputBP.tell() > 0:
_ = self._outputBP.getvalue()
self._outputBP.truncate(0)
self._outputFP.write(_)
def _formatString(self, inpStr): def _formatString(self, inpStr):
return restoreDumpMarkedChars(getUnicode(inpStr)) return restoreDumpMarkedChars(getUnicode(inpStr))
def setOutputFile(self): def setOutputFile(self):
self._outputFile = "%s%slog" % (conf.outputPath, os.sep) self._outputFile = "%s%slog" % (conf.outputPath, os.sep)
self._outputFP = codecs.open(self._outputFile, "ab", UNICODE_ENCODING) self._outputFP = codecs.open(self._outputFile, "ab", UNICODE_ENCODING)
self._outputBP = StringIO.StringIO()
def getOutputFile(self): def getOutputFile(self):
self.flush()
return self._outputFile return self._outputFile
def string(self, header, data, sort=True): def string(self, header, data, sort=True):
if isinstance(data, (list, tuple, set)): if isinstance(data, (list, tuple, set)):
self.lister(header, data, sort) self.lister(header, data, sort)
elif data:
return
if data:
data = self._formatString(getUnicode(data)) data = self._formatString(getUnicode(data))
if data[-1] == '\n': if data[-1] == '\n':

View File

@ -467,9 +467,6 @@ SLOW_ORDER_COUNT_THRESHOLD = 10000
# Give up on hash recognition if nothing was found in first given number of rows # Give up on hash recognition if nothing was found in first given number of rows
HASH_RECOGNITION_QUIT_THRESHOLD = 10000 HASH_RECOGNITION_QUIT_THRESHOLD = 10000
# Size of a buffer used for log file output
BUFFERED_LOG_SIZE = 10000
# Maximum number of redirections to any single URL - this is needed because of the state that cookies introduce # Maximum number of redirections to any single URL - this is needed because of the state that cookies introduce
MAX_SINGLE_URL_REDIRECTIONS = 4 MAX_SINGLE_URL_REDIRECTIONS = 4