Refactoring KeyboardInterrupt mess

This commit is contained in:
Miroslav Stampar 2018-12-17 15:00:57 +01:00
parent c497aa98ed
commit 28e7c8f378
3 changed files with 136 additions and 154 deletions

View File

@ -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.2.12.21" VERSION = "1.2.12.22"
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)

View File

@ -172,10 +172,7 @@ def main():
except SqlmapUserQuitException: except SqlmapUserQuitException:
errMsg = "user quit" errMsg = "user quit"
try:
logger.error(errMsg) logger.error(errMsg)
except KeyboardInterrupt:
pass
except (SqlmapSilentQuitException, bdb.BdbQuit): except (SqlmapSilentQuitException, bdb.BdbQuit):
pass pass
@ -185,10 +182,8 @@ def main():
except SqlmapBaseException as ex: except SqlmapBaseException as ex:
errMsg = getSafeExString(ex) errMsg = getSafeExString(ex)
try:
logger.critical(errMsg) logger.critical(errMsg)
except KeyboardInterrupt:
pass
raise SystemExit raise SystemExit
except KeyboardInterrupt: except KeyboardInterrupt:
@ -196,12 +191,9 @@ def main():
except EOFError: except EOFError:
print print
errMsg = "exit"
try: errMsg = "exit"
logger.error(errMsg) logger.error(errMsg)
except KeyboardInterrupt:
pass
except SystemExit: except SystemExit:
pass pass
@ -212,7 +204,6 @@ def main():
excMsg = traceback.format_exc() excMsg = traceback.format_exc()
valid = checkIntegrity() valid = checkIntegrity()
try:
if valid is False: if valid is False:
errMsg = "code integrity check failed (turning off automatic issue creation). " errMsg = "code integrity check failed (turning off automatic issue creation). "
errMsg += "You should retrieve the latest development version from official GitHub " errMsg += "You should retrieve the latest development version from official GitHub "
@ -344,9 +335,6 @@ def main():
dataToStdout(excMsg) dataToStdout(excMsg)
createGithubIssue(errMsg, excMsg) createGithubIssue(errMsg, excMsg)
except KeyboardInterrupt:
pass
finally: finally:
kb.threadContinue = False kb.threadContinue = False
@ -366,26 +354,19 @@ def main():
shutil.rmtree(kb.tempDir, ignore_errors=True) shutil.rmtree(kb.tempDir, ignore_errors=True)
if conf.get("hashDB"): if conf.get("hashDB"):
try:
conf.hashDB.flush(True) conf.hashDB.flush(True)
except KeyboardInterrupt:
pass
if conf.get("harFile"): if conf.get("harFile"):
with openFile(conf.harFile, "w+b") as f: with openFile(conf.harFile, "w+b") as f:
json.dump(conf.httpCollector.obtain(), fp=f, indent=4, separators=(',', ': ')) json.dump(conf.httpCollector.obtain(), fp=f, indent=4, separators=(',', ': '))
if conf.get("api"): if conf.get("api"):
try:
conf.databaseCursor.disconnect() conf.databaseCursor.disconnect()
except KeyboardInterrupt:
pass
if conf.get("dumper"): if conf.get("dumper"):
conf.dumper.flush() conf.dumper.flush()
# short delay for thread finalization # short delay for thread finalization
try:
_ = time.time() _ = time.time()
while threading.activeCount() > 1 and (time.time() - _) > THREAD_FINALIZATION_TIMEOUT: while threading.activeCount() > 1 and (time.time() - _) > THREAD_FINALIZATION_TIMEOUT:
time.sleep(0.01) time.sleep(0.01)
@ -396,15 +377,16 @@ def main():
kb.clear() kb.clear()
conf.disableBanner = True conf.disableBanner = True
main() main()
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
finally: finally:
# 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 threading.activeCount() > 1: if threading.activeCount() > 1:
os._exit(0) os._exit(0)
if __name__ == "__main__":
main()
else: else:
# cancelling postponed imports (because of Travis CI checks) # cancelling postponed imports (because of Travis CI checks)
from lib.controller.controller import start from lib.controller.controller import start

View File

@ -49,7 +49,7 @@ c8c386d644d57c659d74542f5f57f632 lib/core/patch.py
0c3eef46bdbf87e29a3f95f90240d192 lib/core/replication.py 0c3eef46bdbf87e29a3f95f90240d192 lib/core/replication.py
a7db43859b61569b601b97f187dd31c5 lib/core/revision.py a7db43859b61569b601b97f187dd31c5 lib/core/revision.py
fcb74fcc9577523524659ec49e2e964b lib/core/session.py fcb74fcc9577523524659ec49e2e964b lib/core/session.py
8e45f357b6d73d128267f3b66fe5e081 lib/core/settings.py 7d446786d9c7f49c591f382079d39787 lib/core/settings.py
a971ce157d04de96ba6e710d3d38a9a8 lib/core/shell.py a971ce157d04de96ba6e710d3d38a9a8 lib/core/shell.py
a7edc9250d13af36ac0108f259859c19 lib/core/subprocessng.py a7edc9250d13af36ac0108f259859c19 lib/core/subprocessng.py
1581be48127a3a7a9fd703359b6e7567 lib/core/target.py 1581be48127a3a7a9fd703359b6e7567 lib/core/target.py
@ -234,7 +234,7 @@ ec2ba8c757ac96425dcd2b97970edd3a shell/stagers/stager.asp_
0c48ddb1feb7e38a951ef05a0d48e032 shell/stagers/stager.jsp_ 0c48ddb1feb7e38a951ef05a0d48e032 shell/stagers/stager.jsp_
2f9e459a4cf6a58680978cdce5ff7971 shell/stagers/stager.php_ 2f9e459a4cf6a58680978cdce5ff7971 shell/stagers/stager.php_
cd90da0474d7b1a67d7b40d208493375 sqlmapapi.py cd90da0474d7b1a67d7b40d208493375 sqlmapapi.py
55ba3999ab8819e0d34ca075d46fa9dd sqlmap.py 82f2326ec9cc8719859266f72c19f9b3 sqlmap.py
523dab9e1093eb59264c6beb366b255a tamper/0x2char.py 523dab9e1093eb59264c6beb366b255a tamper/0x2char.py
3a1697585ae4e7bf315e9dda97d6f321 tamper/apostrophemask.py 3a1697585ae4e7bf315e9dda97d6f321 tamper/apostrophemask.py
d7a119a74be9b385ee3884fb5e6af041 tamper/apostrophenullencode.py d7a119a74be9b385ee3884fb5e6af041 tamper/apostrophenullencode.py