Skip to content

Commit 0e8d857

Browse files
committed
adding a DB2 patch from smcintyre@securestate.com
1 parent 079e0e1 commit 0e8d857

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

plugins/dbms/db2/fingerprint.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from lib.core.data import kb
1616
from lib.core.data import logger
1717
from lib.core.enums import DBMS
18+
from lib.core.enums import OS
1819
from lib.core.session import setDbms
1920
from lib.core.settings import DB2_ALIASES
2021
from lib.request import inject
@@ -110,3 +111,61 @@ def checkDbms(self):
110111
logger.warn(warnMsg)
111112

112113
return False
114+
115+
def checkDbmsOs(self, detailed=False):
116+
if Backend.getOs():
117+
return
118+
119+
infoMsg = "fingerprinting the back-end DBMS operating system "
120+
infoMsg += "version and service pack"
121+
logger.info(infoMsg)
122+
123+
query = "(SELECT LENGTH(OS_NAME) FROM SYSIBMADM.ENV_SYS_INFO WHERE OS_NAME LIKE '%WIN%')>0"
124+
result = inject.checkBooleanExpression(query)
125+
126+
if not result:
127+
Backend.setOs(OS.LINUX)
128+
else:
129+
Backend.setOs(OS.WINDOWS)
130+
131+
infoMsg = "the back-end DBMS operating system is %s" % Backend.getOs()
132+
133+
if result:
134+
versions = { "2003": ("5.2", (2, 1)),
135+
"2008": ("7.0", (1,)),
136+
"2000": ("5.0", (4, 3, 2, 1)),
137+
"7": ("6.1", (1, 0)),
138+
"XP": ("5.1", (2, 1)),
139+
"NT": ("4.0", (6, 5, 4, 3, 2, 1)) }
140+
141+
# Get back-end DBMS underlying operating system version
142+
for version, data in versions.items():
143+
query = "(SELECT LENGTH(OS_VERSION) FROM SYSIBMADM.ENV_SYS_INFO WHERE OS_VERSION = '%s')>0" % data[0]
144+
result = inject.checkBooleanExpression(query)
145+
146+
if result:
147+
Backend.setOsVersion(version)
148+
infoMsg += " %s" % Backend.getOsVersion()
149+
break
150+
151+
if not Backend.getOsVersion():
152+
return
153+
154+
# Get back-end DBMS underlying operating system service pack
155+
for sp in versions[Backend.getOsVersion()][1]:
156+
query = "(SELECT LENGTH(OS_RELEASE) FROM SYSIBMADM.ENV_SYS_INFO WHERE OS_RELEASE LIKE '%Service Pack " + str(sp) + "%')>0"
157+
result = inject.checkBooleanExpression(query)
158+
159+
if result:
160+
Backend.setOsServicePack(sp)
161+
break
162+
163+
if not Backend.getOsServicePack():
164+
Backend.setOsServicePack(0)
165+
debugMsg = "assuming the operating system has no service pack"
166+
logger.debug(debugMsg)
167+
168+
if Backend.getOsVersion():
169+
infoMsg += " Service Pack %d" % Backend.getOsServicePack()
170+
171+
logger.info(infoMsg)

0 commit comments

Comments
 (0)