From 1ab78ce60e05a2e4768ebef07d56b6c4028673a4 Mon Sep 17 00:00:00 2001 From: Bernardo Damele Date: Tue, 13 Apr 2010 22:43:38 +0000 Subject: [PATCH] Added support to directly connect also to SQLite 2 db file --- lib/core/common.py | 3 ++- plugins/dbms/sqlite/connector.py | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/core/common.py b/lib/core/common.py index b43212dd5..97a7c994f 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -643,7 +643,7 @@ def parseTargetDirect(): "MySQL": [MYSQL_ALIASES, "python-mysqldb", "http://mysql-python.sourceforge.net/"], "PostgreSQL": [PGSQL_ALIASES, "python-psycopg2", "http://initd.org/psycopg/"], "Oracle": [ORACLE_ALIASES, "python cx_Oracle", "http://cx-oracle.sourceforge.net/"], - "SQLite": [SQLITE_ALIASES, "python-pysqlite2", "http://pysqlite.googlecode.com/"], + "SQLite": [SQLITE_ALIASES, "python-pysqlite2 and python-sqlite", "http://pysqlite.googlecode.com/"], "Access": [ACCESS_ALIASES, "python-pyodbc", "http://pyodbc.googlecode.com/"], "Firebird": [FIREBIRD_ALIASES, "python-kinterbasdb", "http://kinterbasdb.sourceforge.net/"] } @@ -679,6 +679,7 @@ def parseTargetDirect(): elif dbmsName == "Oracle": import cx_Oracle elif dbmsName == "SQLite": + import sqlite import sqlite3 elif dbmsName == "Access": import pyodbc diff --git a/plugins/dbms/sqlite/connector.py b/plugins/dbms/sqlite/connector.py index 0a1410841..19997223c 100644 --- a/plugins/dbms/sqlite/connector.py +++ b/plugins/dbms/sqlite/connector.py @@ -23,6 +23,7 @@ Franklin St, Fifth Floor, Boston, MA 02110-1301 USA """ try: + import sqlite import sqlite3 except ImportError, _: pass @@ -52,9 +53,15 @@ class Connector(GenericConnector): self.checkFileDb() try: - self.connector = sqlite3.connect(database=self.db, check_same_thread=False, timeout=conf.timeout) - except sqlite3.OperationalError, msg: - raise sqlmapConnectionException, msg[0] + self.connector = sqlite.connect(database=self.db, check_same_thread=False, timeout=conf.timeout) + except (sqlite.DatabaseError, sqlite.OperationalError), _: + errMsg = "unable to connect using SQLite 2 library, trying with SQLite 3" + logger.error(errMsg) + + try: + self.connector = sqlite3.connect(database=self.db, check_same_thread=False, timeout=conf.timeout) + except (sqlite.DatabaseError, sqlite.OperationalError), msg: + raise sqlmapConnectionException, msg[0] self.setCursor() self.connected()