mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2024-11-25 11:03:47 +03:00
Minor stability patch for multi-threading console output (#3284)
This commit is contained in:
parent
ae6235ce20
commit
ba356baab0
|
@ -913,7 +913,8 @@ def dataToStdout(data, forceOutput=False, bold=False, content_type=None, status=
|
||||||
|
|
||||||
if not kb.get("threadException"):
|
if not kb.get("threadException"):
|
||||||
if forceOutput or not (getCurrentThreadData().disableStdOut or kb.get("wizardMode")):
|
if forceOutput or not (getCurrentThreadData().disableStdOut or kb.get("wizardMode")):
|
||||||
if kb.get("multiThreadMode"):
|
multiThreadMode = isMultiThreadMode()
|
||||||
|
if multiThreadMode:
|
||||||
logging._acquireLock()
|
logging._acquireLock()
|
||||||
|
|
||||||
if isinstance(data, unicode):
|
if isinstance(data, unicode):
|
||||||
|
@ -931,7 +932,7 @@ def dataToStdout(data, forceOutput=False, bold=False, content_type=None, status=
|
||||||
except IOError:
|
except IOError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if kb.get("multiThreadMode"):
|
if multiThreadMode:
|
||||||
logging._releaseLock()
|
logging._releaseLock()
|
||||||
|
|
||||||
kb.prependFlag = isinstance(data, basestring) and (len(data) == 1 and data not in ('\n', '\r') or len(data) > 2 and data[0] == '\r' and data[-1] != '\n')
|
kb.prependFlag = isinstance(data, basestring) and (len(data) == 1 and data not in ('\n', '\r') or len(data) > 2 and data[0] == '\r' and data[-1] != '\n')
|
||||||
|
@ -1982,6 +1983,13 @@ def isHexEncodedString(subject):
|
||||||
|
|
||||||
return re.match(r"\A[0-9a-fA-Fx]+\Z", subject) is not None
|
return re.match(r"\A[0-9a-fA-Fx]+\Z", subject) is not None
|
||||||
|
|
||||||
|
def isMultiThreadMode():
|
||||||
|
"""
|
||||||
|
Checks if running in multi-thread(ing) mode
|
||||||
|
"""
|
||||||
|
|
||||||
|
return threading.activeCount() > 1
|
||||||
|
|
||||||
@cachedmethod
|
@cachedmethod
|
||||||
def getConsoleWidth(default=80):
|
def getConsoleWidth(default=80):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -20,6 +20,7 @@ from lib.core.common import dataToStdout
|
||||||
from lib.core.common import getSafeExString
|
from lib.core.common import getSafeExString
|
||||||
from lib.core.common import getUnicode
|
from lib.core.common import getUnicode
|
||||||
from lib.core.common import isListLike
|
from lib.core.common import isListLike
|
||||||
|
from lib.core.common import isMultiThreadMode
|
||||||
from lib.core.common import normalizeUnicode
|
from lib.core.common import normalizeUnicode
|
||||||
from lib.core.common import openFile
|
from lib.core.common import openFile
|
||||||
from lib.core.common import prioritySortColumns
|
from lib.core.common import prioritySortColumns
|
||||||
|
@ -74,7 +75,8 @@ class Dump(object):
|
||||||
if console:
|
if console:
|
||||||
dataToStdout(text)
|
dataToStdout(text)
|
||||||
|
|
||||||
if kb.get("multiThreadMode"):
|
multiThreadMode = isMultiThreadMode()
|
||||||
|
if multiThreadMode:
|
||||||
self._lock.acquire()
|
self._lock.acquire()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -83,7 +85,7 @@ class Dump(object):
|
||||||
errMsg = "error occurred while writing to log file ('%s')" % getSafeExString(ex)
|
errMsg = "error occurred while writing to log file ('%s')" % getSafeExString(ex)
|
||||||
raise SqlmapGenericException(errMsg)
|
raise SqlmapGenericException(errMsg)
|
||||||
|
|
||||||
if kb.get("multiThreadMode"):
|
if multiThreadMode:
|
||||||
self._lock.release()
|
self._lock.release()
|
||||||
|
|
||||||
kb.dataOutputFlag = True
|
kb.dataOutputFlag = True
|
||||||
|
|
|
@ -1829,7 +1829,6 @@ def _setKnowledgeBaseAttributes(flushAll=True):
|
||||||
kb.matchRatio = None
|
kb.matchRatio = None
|
||||||
kb.maxConnectionsFlag = False
|
kb.maxConnectionsFlag = False
|
||||||
kb.mergeCookies = None
|
kb.mergeCookies = None
|
||||||
kb.multiThreadMode = False
|
|
||||||
kb.negativeLogic = False
|
kb.negativeLogic = False
|
||||||
kb.nullConnection = None
|
kb.nullConnection = None
|
||||||
kb.oldMsf = None
|
kb.oldMsf = None
|
||||||
|
|
|
@ -19,7 +19,7 @@ from lib.core.enums import DBMS_DIRECTORY_NAME
|
||||||
from lib.core.enums import OS
|
from lib.core.enums import OS
|
||||||
|
|
||||||
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
|
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
|
||||||
VERSION = "1.3.1.70"
|
VERSION = "1.3.1.71"
|
||||||
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
|
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
|
||||||
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
|
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
|
||||||
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
|
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
|
||||||
|
|
|
@ -110,7 +110,6 @@ def setDaemon(thread):
|
||||||
def runThreads(numThreads, threadFunction, cleanupFunction=None, forwardException=True, threadChoice=False, startThreadMsg=True):
|
def runThreads(numThreads, threadFunction, cleanupFunction=None, forwardException=True, threadChoice=False, startThreadMsg=True):
|
||||||
threads = []
|
threads = []
|
||||||
|
|
||||||
kb.multiThreadMode = True
|
|
||||||
kb.threadContinue = True
|
kb.threadContinue = True
|
||||||
kb.threadException = False
|
kb.threadException = False
|
||||||
|
|
||||||
|
@ -204,7 +203,6 @@ def runThreads(numThreads, threadFunction, cleanupFunction=None, forwardExceptio
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
kb.multiThreadMode = False
|
|
||||||
kb.bruteMode = False
|
kb.bruteMode = False
|
||||||
kb.threadContinue = True
|
kb.threadContinue = True
|
||||||
kb.threadException = False
|
kb.threadException = False
|
||||||
|
|
|
@ -44,6 +44,7 @@ from lib.core.common import getHostHeader
|
||||||
from lib.core.common import getRequestHeader
|
from lib.core.common import getRequestHeader
|
||||||
from lib.core.common import getSafeExString
|
from lib.core.common import getSafeExString
|
||||||
from lib.core.common import getUnicode
|
from lib.core.common import getUnicode
|
||||||
|
from lib.core.common import isMultiThreadMode
|
||||||
from lib.core.common import logHTTPTraffic
|
from lib.core.common import logHTTPTraffic
|
||||||
from lib.core.common import pushValue
|
from lib.core.common import pushValue
|
||||||
from lib.core.common import popValue
|
from lib.core.common import popValue
|
||||||
|
@ -731,7 +732,7 @@ class Connect(object):
|
||||||
else:
|
else:
|
||||||
logger.debug(warnMsg)
|
logger.debug(warnMsg)
|
||||||
return Connect._retryProxy(**kwargs)
|
return Connect._retryProxy(**kwargs)
|
||||||
elif kb.testMode or kb.multiThreadMode:
|
elif kb.testMode or isMultiThreadMode():
|
||||||
logger.critical(warnMsg)
|
logger.critical(warnMsg)
|
||||||
return None, None, None
|
return None, None, None
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -29,32 +29,32 @@ c1da277517c7ec4c23e953a51b51e203 lib/controller/handler.py
|
||||||
fb6be55d21a70765e35549af2484f762 lib/controller/__init__.py
|
fb6be55d21a70765e35549af2484f762 lib/controller/__init__.py
|
||||||
ed7874be0d2d3802f3d20184f2b280d5 lib/core/agent.py
|
ed7874be0d2d3802f3d20184f2b280d5 lib/core/agent.py
|
||||||
a932126e7d80e545c5d44af178d0bc0c lib/core/bigarray.py
|
a932126e7d80e545c5d44af178d0bc0c lib/core/bigarray.py
|
||||||
2cb5d057cbb1f333dfd42b8c7262d404 lib/core/common.py
|
d6961903f261635b2eb3fe7e9c35e8ce lib/core/common.py
|
||||||
de8d27ae6241163ff9e97aa9e7c51a18 lib/core/convert.py
|
de8d27ae6241163ff9e97aa9e7c51a18 lib/core/convert.py
|
||||||
abcb1121eb56d3401839d14e8ed06b6e lib/core/data.py
|
abcb1121eb56d3401839d14e8ed06b6e lib/core/data.py
|
||||||
db60c6ebb63b72ed119e304b359fc1a6 lib/core/datatype.py
|
db60c6ebb63b72ed119e304b359fc1a6 lib/core/datatype.py
|
||||||
b7c912e2af7a3354f6d7c04f556a80b2 lib/core/decorators.py
|
b7c912e2af7a3354f6d7c04f556a80b2 lib/core/decorators.py
|
||||||
5f4680b769ae07f22157bd832c97cf8f lib/core/defaults.py
|
5f4680b769ae07f22157bd832c97cf8f lib/core/defaults.py
|
||||||
9dfc69ba47209a4ceca494dde9ee8183 lib/core/dicts.py
|
9dfc69ba47209a4ceca494dde9ee8183 lib/core/dicts.py
|
||||||
fd5403505f76eee6829c06b9342e269c lib/core/dump.py
|
4782353a3072e4d17c4e314daf918d8a lib/core/dump.py
|
||||||
5c91145204092b995ed1ac641e9e291d lib/core/enums.py
|
5c91145204092b995ed1ac641e9e291d lib/core/enums.py
|
||||||
84ef8f32e4582fcc294dc14e1997131d lib/core/exception.py
|
84ef8f32e4582fcc294dc14e1997131d lib/core/exception.py
|
||||||
fb6be55d21a70765e35549af2484f762 lib/core/__init__.py
|
fb6be55d21a70765e35549af2484f762 lib/core/__init__.py
|
||||||
18c896b157b03af716542e5fe9233ef9 lib/core/log.py
|
18c896b157b03af716542e5fe9233ef9 lib/core/log.py
|
||||||
fa9f24e88c81a6cef52da3dd5e637010 lib/core/optiondict.py
|
fa9f24e88c81a6cef52da3dd5e637010 lib/core/optiondict.py
|
||||||
bdb5a0e1f40d9c4d43593e25c8c58ec6 lib/core/option.py
|
b56df9d9426027f3450432c2b6428485 lib/core/option.py
|
||||||
fe370021c6bc99daf44b2bfc0d1effb3 lib/core/patch.py
|
fe370021c6bc99daf44b2bfc0d1effb3 lib/core/patch.py
|
||||||
4cfda3735871cd59b213470a0bbc8c3a lib/core/profiling.py
|
4cfda3735871cd59b213470a0bbc8c3a lib/core/profiling.py
|
||||||
5e2c16a8e2daee22dd545df13386e7a3 lib/core/readlineng.py
|
5e2c16a8e2daee22dd545df13386e7a3 lib/core/readlineng.py
|
||||||
7d8a22c582ad201f65b73225e4456170 lib/core/replication.py
|
7d8a22c582ad201f65b73225e4456170 lib/core/replication.py
|
||||||
3179d34f371e0295dd4604568fb30bcd lib/core/revision.py
|
3179d34f371e0295dd4604568fb30bcd lib/core/revision.py
|
||||||
d6269c55789f78cf707e09a0f5b45443 lib/core/session.py
|
d6269c55789f78cf707e09a0f5b45443 lib/core/session.py
|
||||||
6e47f6340889c0241c3055581fd9dd5c lib/core/settings.py
|
77e8b3de0d19deb37e87cf34bdf18a1a lib/core/settings.py
|
||||||
4483b4a5b601d8f1c4281071dff21ecc lib/core/shell.py
|
4483b4a5b601d8f1c4281071dff21ecc lib/core/shell.py
|
||||||
10fd19b0716ed261e6d04f311f6f527c lib/core/subprocessng.py
|
10fd19b0716ed261e6d04f311f6f527c lib/core/subprocessng.py
|
||||||
9c7b5c6397fb3da33e7a4d7876d159c6 lib/core/target.py
|
9c7b5c6397fb3da33e7a4d7876d159c6 lib/core/target.py
|
||||||
7857b24b7865ccb4a05283faa596974d lib/core/testing.py
|
7857b24b7865ccb4a05283faa596974d lib/core/testing.py
|
||||||
203d2082929b4ac5454605c8c7c800a9 lib/core/threads.py
|
e9788d2992f842cf91ab67389bf4372a lib/core/threads.py
|
||||||
2c263c8610667fdc593c50a35ab20f57 lib/core/unescaper.py
|
2c263c8610667fdc593c50a35ab20f57 lib/core/unescaper.py
|
||||||
ff45c74515fecc95277f7b9ad945f17c lib/core/update.py
|
ff45c74515fecc95277f7b9ad945f17c lib/core/update.py
|
||||||
5b3f08208be0579356f78ce5805d37b2 lib/core/wordlist.py
|
5b3f08208be0579356f78ce5805d37b2 lib/core/wordlist.py
|
||||||
|
@ -71,7 +71,7 @@ adcecd2d6a8667b22872a563eb83eac0 lib/parse/payloads.py
|
||||||
e4ea70bcd461f5176867dcd89d372386 lib/request/basicauthhandler.py
|
e4ea70bcd461f5176867dcd89d372386 lib/request/basicauthhandler.py
|
||||||
97b7577fdfe3d8537fe9ea3a070d0507 lib/request/basic.py
|
97b7577fdfe3d8537fe9ea3a070d0507 lib/request/basic.py
|
||||||
fc25d951217077fe655ed2a3a81552ae lib/request/comparison.py
|
fc25d951217077fe655ed2a3a81552ae lib/request/comparison.py
|
||||||
5a1226fc294dd7507be089b5622564d1 lib/request/connect.py
|
27927a37edfa9c2dfb6e5de9e859d10f lib/request/connect.py
|
||||||
7cba86090b02558f04c6692cef66e772 lib/request/direct.py
|
7cba86090b02558f04c6692cef66e772 lib/request/direct.py
|
||||||
2b7509ba38a667c61cefff036ec4ca6f lib/request/dns.py
|
2b7509ba38a667c61cefff036ec4ca6f lib/request/dns.py
|
||||||
ceac6b3bf1f726f8ff43c6814e9d7281 lib/request/httpshandler.py
|
ceac6b3bf1f726f8ff43c6814e9d7281 lib/request/httpshandler.py
|
||||||
|
|
Loading…
Reference in New Issue
Block a user