sqlmap/plugins/dbms/snowflake/connector.py
Miroslav Štampar d5ff557a13
Some checks are pending
/ build (macos-latest, 3.8) (push) Waiting to run
/ build (ubuntu-latest, pypy-2.7) (push) Waiting to run
/ build (windows-latest, 3.14) (push) Waiting to run
Some more patches for -d
2026-07-11 16:13:12 +02:00

78 lines
2.5 KiB
Python

#!/usr/bin/env python
"""
Copyright (c) 2006-2026 sqlmap developers (https://sqlmap.org)
See the file 'LICENSE' for copying permission
"""
try:
import snowflake.connector
except:
pass
import logging
from lib.core.common import getSafeExString
from lib.core.convert import getText
from lib.core.data import conf
from lib.core.data import logger
from lib.core.exception import SqlmapConnectionException
from plugins.generic.connector import Connector as GenericConnector
class Connector(GenericConnector):
"""
Homepage: https://www.snowflake.com/
User guide: https://docs.snowflake.com/en/developer-guide/python-connector/python-connector
API: https://docs.snowflake.com/en/developer-guide/python-connector/python-connector-api
"""
def __init__(self):
GenericConnector.__init__(self)
def connect(self):
self.initConnection()
# Snowflake's mandatory 'account' identifier is carried in the DSN host field
# (e.g. -d "snowflake://user:pass@ACCOUNT/db"); warehouse/schema are optional. These were previously
# read from self.account/self.warehouse/self.schema which were never set anywhere -> AttributeError on
# every attempt.
self.account = self.hostname
self.warehouse = getattr(self, "warehouse", None)
self.schema = getattr(self, "schema", None)
try:
self.connector = snowflake.connector.connect(
user=self.user,
password=self.password,
account=self.account,
warehouse=self.warehouse,
database=self.db,
schema=self.schema
)
cursor = self.connector.cursor()
cursor.execute("SELECT CURRENT_VERSION()")
cursor.close()
except Exception as ex:
raise SqlmapConnectionException(getSafeExString(ex))
self.initCursor()
self.printConnected()
def fetchall(self):
try:
return self.cursor.fetchall()
except Exception as ex:
logger.log(logging.WARNING if conf.dbmsHandler else logging.DEBUG, "(remote) '%s'" % getSafeExString(ex))
return None
def execute(self, query):
try:
self.cursor.execute(getText(query))
except Exception as ex:
logger.log(logging.WARNING if conf.dbmsHandler else logging.DEBUG, "(remote) '%s'" % getSafeExString(ex))
return None
def select(self, query):
self.execute(query)
return self.fetchall()