Library drda

DRDA Library supporting a very limited subset of operations.

Summary

  • The library currently provides functionality to: (1) Query the server for
basic settings using the getServerInfo function of the helper class. (2) Authenticate to a DB2 server using a plain-text username and password.

The library contains the following classes:

  • DRDA
** Implements the Distributed Relational Database Architecture class .
  • DRDAParameter
** Implements a number of functions to handle DRDA parameters.
  • DDM
** Implements the DDM portion of the DRDA structure
  • Command
** Provides functions for easy creation of the most common DRDAs. ** Implemented as a static class that returns an instance of the DRDA.
  • Helper
** A helper class that provides easy access to the rest of the library
  • DB2Socket
** A smallish socket wrapper that provides fundamental buffering
  • StringUtil
** Provides EBCDIC/ASCII conversion functions
  • Comm
** Provides fundamental communication support (send/receive DRDAPacket)
  • DRDAPacket
** A class holding one or more DRDA's and provides some basic access methods

The following sample code illustrates how scripts can use the Helper class to interface with the library:

db2helper = drda.Helper:new()
status, err = db2helper:connect(host, port)
status, res = db2helper:getServerInfo()
status, err = db2helper:close()

The implementation is based on packet dumps and the excellent decoding provided by Wireshark.

There is some documentation at http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db29.doc.drda/db2z_drda.htm.

Author:

  • Patrik Karlsson <patrik@cqure.net>

Copyright © Same as Nmap--See https://nmap.org/book/man-legal.html

Source: https://svn.nmap.org/nmap/nselib/drda.lua

Functions

__tostring (self)

Converts the DDM object to a string

__tostring (self)

Converts the DDM object to a string

__tostring (self)

Converts the DDM object to a string

ACCRDB (database, rdbaccl, prdid, prddata, typdefnam, crrtkn, typdefovr)

Builds an ACCRDB DRDA packet

ACCSEC (secmec, database)

Builds an ACCSEC DRDA packet

addParameter (self, param)

Adds a DRDA parameter to the table

close (self)

Closes an open connection.

connect (self, host, port)

Connect to the DB2 host

exchDRDAPacket (self, packet)

Sends a packet to the server and receives the response

EXCSAT (extname, srvname, rellev, mgrlvlls, srvclass)

Builds an EXCSAT DRDA packet

fromString (self, str)

Constructs a DDM object from a string

fromString (self, str)

Constructs a DDM object from a string

getData (self)

Returns the data in EBCDIC format

getDataAsASCII (self)

Returns the data portion of the parameter as an ASCII string

getParameter (self, codepoint)

Gets a parameter from the DRDA parameter table

getServerInfo (self)

Returns Server Information (name, platform, version)

isChained (self)

Verifiers if there are additional DRDA's following

login (self, database, username, password)

Login to DB2 database server

new (self, codepoint, format, corelid)

Creates a new DDM packet

new (self, codepoint, format, corelid)

Creates a new DDM packet

padWithChar (str, chr, len)

Pads a string with a character

receive (self, db2socket)

Receives data from the db2socket and builds a DRDA object

SECCHK (secmec, database, username, password)

Builds a SECCHK DRDA packet

send (self, db2socket)

Sends the DRDA over the db2socket

setChained (self, chained)

Set the DRDA as chained (more following)

setDDM (self, ddm)

Sets the DDM

toASCII (ebcdic)

Converts an EBCDIC string to ASCII

toEBCDIC (ascii)

Converts an ASCII string to EBCDIC

Functions

__tostring (self)

Converts the DDM object to a string

Parameters

self
 
__tostring (self)

Converts the DDM object to a string

Parameters

self
 
__tostring (self)

Converts the DDM object to a string

Parameters

self
 
ACCRDB (database, rdbaccl, prdid, prddata, typdefnam, crrtkn, typdefovr)

Builds an ACCRDB DRDA packet

Parameters

database
string containing the database name
rdbaccl
string containing the RDB access manager class
prdid
string containing the product id
prddata
 
typdefnam
string containing the data type definition name
crrtkn
 
typdefovr
string containing the data type definition override

Return value:

drda DRDA instance
ACCSEC (secmec, database)

Builds an ACCSEC DRDA packet

Parameters

secmec
number containing the security mechanism ID
database
string containing the database name

Return value:

drda DRDA instance
addParameter (self, param)

Adds a DRDA parameter to the table

Parameters

self
 
param
DRDAParam containing the parameter to add to the table

Return values:

  1. status bool true on success, false on failure
  2. err string containing the error message if status is false
close (self)

Closes an open connection.

Parameters

self
 

Return values:

  1. Status (true or false).
  2. Error code (if status is false).
connect (self, host, port)

Connect to the DB2 host

Parameters

self
 
host
table
port
table

Return values:

  1. Status (true or false).
  2. Error code (if status is false).
exchDRDAPacket (self, packet)

Sends a packet to the server and receives the response

Parameters

self
 
packet
 

Return values:

  1. status true on success, false on failure
  2. packet an instance of DRDAPacket
EXCSAT (extname, srvname, rellev, mgrlvlls, srvclass)

Builds an EXCSAT DRDA packet

Parameters

extname
string containing the external name
srvname
string containing the server name
rellev
string containing the server product release level
mgrlvlls
string containing the manager level list
srvclass
string containing the server class name

Return value:

drda DRDA instance
fromString (self, str)

Constructs a DDM object from a string

Parameters

self
 
str
containing the data from which to construct the object
fromString (self, str)

Constructs a DDM object from a string

Parameters

self
 
str
containing the data from which to construct the object
getData (self)

Returns the data in EBCDIC format

Parameters

self
 

Return value:

str containing the data portion of the DRDA parameter in EBCDIC
getDataAsASCII (self)

Returns the data portion of the parameter as an ASCII string

Parameters

self
 

Return value:

str containing the data portion of the DRDA parameter as ASCII
getParameter (self, codepoint)

Gets a parameter from the DRDA parameter table

Parameters

self
 
codepoint
number containing the parameter type ro retrieve

Return value:

param DRDAParameter containing the requested parameter
getServerInfo (self)

Returns Server Information (name, platform, version)

Parameters

self
 

Return value:

table containing extname, srvclass, srvname and prodrel
isChained (self)

Verifiers if there are additional DRDA's following

Parameters

self
 

Return value:

true if the DRDA is to be chained, false if it's the last one
login (self, database, username, password)

Login to DB2 database server

Parameters

self
 
database
containing the name of the database
username
containing the authentication username
password
containing the authentication password

Return values:

  1. Status (true or false)
  2. err message (if status if false)
new (self, codepoint, format, corelid)

Creates a new DDM packet

Parameters

self
 
codepoint
 
format
 
corelid
 

Return value:

DDM object
new (self, codepoint, format, corelid)

Creates a new DDM packet

Parameters

self
 
codepoint
 
format
 
corelid
 

Return value:

DDM object
padWithChar (str, chr, len)

Pads a string with a character

Parameters

str
string to pad
chr
char to pad with
len
the total length of the finished string

Return value:

str string containing the padded string
receive (self, db2socket)

Receives data from the db2socket and builds a DRDA object

Parameters

self
 
db2socket
from which to read data

Return values:

  1. Status (true or false).
  2. Data (if status is true) or error string (if status is false).
SECCHK (secmec, database, username, password)

Builds a SECCHK DRDA packet

Parameters

secmec
number containing the security mechanism ID
database
string containing the database name
username
string
password
string

Return value:

drda DRDA instance
send (self, db2socket)

Sends the DRDA over the db2socket

Parameters

self
 
db2socket
DB2Socket over which to send the data

Return values:

  1. Status (true or false).
  2. Error code (if status is false).
setChained (self, chained)

Set the DRDA as chained (more following)

Parameters

self
 
chained
boolean true if more DRDA's are following
setDDM (self, ddm)

Sets the DDM

Parameters

self
 
ddm
DDM to assign to the DRDA

Return value:

status boolean true on success, false on failure
toASCII (ebcdic)

Converts an EBCDIC string to ASCII

Parameters

ebcdic
string containing EBCDIC value

Return value:

string containing ASCII value
toEBCDIC (ascii)

Converts an ASCII string to EBCDIC

Parameters

ascii
string containing the ASCII value

Return value:

string containing the EBCDIC value