From 050700f079bdd360364aff1428740ed4527f1625 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 24 Jun 2020 12:05:40 +0200 Subject: [PATCH] Fixes #4237 --- lib/core/settings.py | 2 +- lib/utils/sqlalchemy.py | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index b697c0404..62b3779ee 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.6.13" +VERSION = "1.4.6.14" 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/lib/utils/sqlalchemy.py b/lib/utils/sqlalchemy.py index 4a8d1d705..a8f0a7a11 100644 --- a/lib/utils/sqlalchemy.py +++ b/lib/utils/sqlalchemy.py @@ -8,6 +8,7 @@ See the file 'LICENSE' for copying permission import imp import logging import os +import re import sys import traceback import warnings @@ -41,7 +42,12 @@ def getSafeExString(ex, encoding=None): # Cross-referenced function class SQLAlchemy(GenericConnector): def __init__(self, dialect=None): GenericConnector.__init__(self) + self.dialect = dialect + self.address = conf.direct + + if self.dialect: + self.address = re.sub(r"\A.+://", "%s://" % self.dialect, self.address) def connect(self): if _sqlalchemy: @@ -52,18 +58,15 @@ class SQLAlchemy(GenericConnector): if not os.path.exists(self.db): raise SqlmapFilePathException("the provided database file '%s' does not exist" % self.db) - _ = conf.direct.split("//", 1) - conf.direct = "%s////%s" % (_[0], os.path.abspath(self.db)) - - if self.dialect: - conf.direct = conf.direct.replace(conf.dbms, self.dialect, 1) + _ = self.address.split("//", 1) + self.address = "%s////%s" % (_[0], os.path.abspath(self.db)) if self.dialect == "sqlite": - engine = _sqlalchemy.create_engine(conf.direct, connect_args={"check_same_thread": False}) + engine = _sqlalchemy.create_engine(self.address, connect_args={"check_same_thread": False}) elif self.dialect == "oracle": - engine = _sqlalchemy.create_engine(conf.direct) + engine = _sqlalchemy.create_engine(self.address) else: - engine = _sqlalchemy.create_engine(conf.direct, connect_args={}) + engine = _sqlalchemy.create_engine(self.address, connect_args={}) self.connector = engine.connect() except (TypeError, ValueError):