diff --git a/lib/core/profiling.py b/lib/core/profiling.py index c1bd8acd5..ec04b59c0 100644 --- a/lib/core/profiling.py +++ b/lib/core/profiling.py @@ -80,15 +80,20 @@ def profile(profileOutputFile=None, dotOutputFile=None, imageOutputFile=None): if isinstance(pydotGraph, list): pydotGraph = pydotGraph[0] - pydotGraph.write_png(imageOutputFile) + try: + pydotGraph.write_png(imageOutputFile) + except OSError: + errMsg = "profiling requires graphviz installed " + errMsg += "(Hint: 'sudo apt-get install graphviz')" + logger.error(errMsg) + else: + infoMsg = "displaying interactive graph with xdot library" + logger.info(infoMsg) - infoMsg = "displaying interactive graph with xdot library" - logger.info(infoMsg) - - # Display interactive Graphviz dot file by using extra/xdot/xdot.py - # http://code.google.com/p/jrfonseca/wiki/XDot - win = xdot.DotWindow() - win.connect('destroy', gtk.main_quit) - win.set_filter("dot") - win.open_file(dotOutputFile) - gtk.main() + # Display interactive Graphviz dot file by using extra/xdot/xdot.py + # http://code.google.com/p/jrfonseca/wiki/XDot + win = xdot.DotWindow() + win.connect('destroy', gtk.main_quit) + win.set_filter("dot") + win.open_file(dotOutputFile) + gtk.main() diff --git a/lib/core/settings.py b/lib/core/settings.py index e3feaf6e5..7003b500f 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -19,7 +19,7 @@ from lib.core.enums import DBMS_DIRECTORY_NAME from lib.core.enums import OS # sqlmap version (...) -VERSION = "1.2.6.28" +VERSION = "1.2.6.29" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" 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) diff --git a/sqlmap.py b/sqlmap.py index 75272136e..62d850da3 100755 --- a/sqlmap.py +++ b/sqlmap.py @@ -143,10 +143,7 @@ def main(): if not conf.updateAll: # Postponed imports (faster start) - if conf.profile: - from lib.core.profiling import profile - profile() - elif conf.smokeTest: + if conf.smokeTest: from lib.core.testing import smokeTest smokeTest() elif conf.liveTest: @@ -154,15 +151,20 @@ def main(): liveTest() else: from lib.controller.controller import start - try: - start() - except thread.error as ex: - if "can't start new thread" in getSafeExString(ex): - errMsg = "unable to start new threads. Please check OS (u)limits" - logger.critical(errMsg) - raise SystemExit - else: - raise + if conf.profile: + from lib.core.profiling import profile + globals()["start"] = start + profile() + else: + try: + start() + except thread.error as ex: + if "can't start new thread" in getSafeExString(ex): + errMsg = "unable to start new threads. Please check OS (u)limits" + logger.critical(errMsg) + raise SystemExit + else: + raise except SqlmapUserQuitException: errMsg = "user quit" diff --git a/txt/checksum.md5 b/txt/checksum.md5 index 71f30de8d..47f7e6b59 100644 --- a/txt/checksum.md5 +++ b/txt/checksum.md5 @@ -43,12 +43,12 @@ cada93357a7321655927fc9625b3bfec lib/core/exception.py e9e32e5afe49ecd644b3a0ca9c9a36fc lib/core/optiondict.py d2672b24ffa985523066613138fccbbd lib/core/option.py c8c386d644d57c659d74542f5f57f632 lib/core/patch.py -7cfd04e583cca782b843f6f6d973981a lib/core/profiling.py +945b313b8bb9713f570f5ebb05416799 lib/core/profiling.py 6f654e1715571eff68a0f8af3d62dcf8 lib/core/readlineng.py 0c3eef46bdbf87e29a3f95f90240d192 lib/core/replication.py a7db43859b61569b601b97f187dd31c5 lib/core/revision.py fcb74fcc9577523524659ec49e2e964b lib/core/session.py -eceda1743cad3fb421344c19ab4148ed lib/core/settings.py +e5a223ce6a904c33c896cc6a6161eb01 lib/core/settings.py 0dfc2ed40adf72e302291f6ecd4406f6 lib/core/shell.py a7edc9250d13af36ac0108f259859c19 lib/core/subprocessng.py 36bd2dc292c0e10e39bd9c43b77fe1bc lib/core/target.py @@ -226,7 +226,7 @@ ec2ba8c757ac96425dcd2b97970edd3a shell/stagers/stager.asp_ 0c48ddb1feb7e38a951ef05a0d48e032 shell/stagers/stager.jsp_ 2f9e459a4cf6a58680978cdce5ff7971 shell/stagers/stager.php_ 4eaeef94314956e4517e5310a28d579a sqlmapapi.py -c5ecca109867f7ce4d325f487cf7badd sqlmap.py +b6e9d67cafb85ff2c3fde165fc577a8d sqlmap.py 1a1e3a78ded58b240c9dbb1b17996acf tamper/0x2char.py 4c3b8a7daa4bff52e01d4168be0eedbe tamper/apostrophemask.py 4115a55b8aba464723d645b7d3156b6e tamper/apostrophenullencode.py