|
22 | 22 | Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
23 | 23 | """ |
24 | 24 |
|
| 25 | +try: |
| 26 | + import cx_Oracle |
| 27 | +except ImportError, _: |
| 28 | + pass |
| 29 | + |
| 30 | +from lib.core.data import logger |
| 31 | +from lib.core.exception import sqlmapConnectionException |
| 32 | + |
25 | 33 | from plugins.generic.connector import Connector as GenericConnector |
26 | 34 |
|
27 | 35 | class Connector(GenericConnector): |
28 | 36 | """ |
29 | | - Homepage: |
30 | | - User guide: |
31 | | - API: |
| 37 | + Homepage: http://cx-oracle.sourceforge.net/ |
| 38 | + User guide: http://cx-oracle.sourceforge.net/README.txt |
| 39 | + API: http://cx-oracle.sourceforge.net/html/index.html |
| 40 | + Debian package: - |
| 41 | + License: http://cx-oracle.sourceforge.net/LICENSE.txt |
| 42 | +
|
| 43 | + Possible connectors: - |
32 | 44 | """ |
33 | 45 |
|
34 | 46 | def __init__(self): |
35 | 47 | GenericConnector.__init__(self) |
| 48 | + |
| 49 | + def connect(self): |
| 50 | + self.initConnection() |
| 51 | + self.__dsn = cx_Oracle.makedsn(self.hostname, self.port, self.db) |
| 52 | + |
| 53 | + try: |
| 54 | + self.connector = cx_Oracle.connect(dsn=self.__dsn, user=self.user, password=self.password, mode=cx_Oracle.SYSDBA) |
| 55 | + logger.info("successfully connected as SYSDBA") |
| 56 | + except (cx_Oracle.OperationalError, cx_Oracle.DatabaseError), _: |
| 57 | + try: |
| 58 | + self.connector = cx_Oracle.connect(dsn=self.__dsn, user=self.user, password=self.password) |
| 59 | + except (cx_Oracle.OperationalError, cx_Oracle.DatabaseError), msg: |
| 60 | + raise sqlmapConnectionException, msg |
| 61 | + |
| 62 | + self.setCursor() |
| 63 | + self.connected() |
| 64 | + |
| 65 | + def fetchall(self): |
| 66 | + try: |
| 67 | + return self.cursor.fetchall() |
| 68 | + except cx_Oracle.InterfaceError, msg: |
| 69 | + logger.log(8, msg) |
| 70 | + return None |
| 71 | + |
| 72 | + def execute(self, query): |
| 73 | + logger.debug(query) |
| 74 | + |
| 75 | + try: |
| 76 | + self.cursor.execute(query) |
| 77 | + except (cx_Oracle.DatabaseError), msg: |
| 78 | + logger.log(8, msg) |
| 79 | + except cx_Oracle.InternalError, msg: |
| 80 | + raise sqlmapConnectionException, msg |
| 81 | + |
| 82 | + self.connector.commit() |
| 83 | + |
| 84 | + def select(self, query): |
| 85 | + self.execute(query) |
| 86 | + return self.fetchall() |
| 87 | + |
| 88 | + def setCursor(self): |
| 89 | + self.cursor = self.connector.cursor() |
| 90 | + |
| 91 | + def close(self): |
| 92 | + self.cursor.close() |
| 93 | + self.connector.close() |
0 commit comments