66"""
77
88try :
9- import kinterbasdb
9+ import firebirdsql
1010except :
1111 pass
1212
2020
2121class Connector (GenericConnector ):
2222 """
23- Homepage: http ://kinterbasdb.sourceforge.net/
24- User guide: http ://kinterbasdb.sourceforge.net/dist_docs/usage.html
25- Debian package: python-kinterbasdb
23+ Homepage: https ://github.com/nakagami/pyfirebirdsql
24+ User guide: https ://pyfirebirdsql.readthedocs.io/
25+ Debian package: python3-firebirdsql
2626 License: BSD
27+
28+ Note: ported from the (Python 2-only, unmaintained) kinterbasdb driver to firebirdsql
2729 """
2830
2931 # sample usage:
@@ -36,9 +38,8 @@ def connect(self):
3638 self .checkFileDb ()
3739
3840 try :
39- # Reference: http://www.daniweb.com/forums/thread248499.html
40- self .connector = kinterbasdb .connect (host = self .hostname , database = self .db , user = self .user , password = self .password , charset = "UTF8" )
41- except kinterbasdb .OperationalError as ex :
41+ self .connector = firebirdsql .connect (host = self .hostname , database = self .db , port = self .port or 3050 , user = self .user , password = self .password , charset = "UTF8" )
42+ except firebirdsql .OperationalError as ex :
4243 raise SqlmapConnectionException (getSafeExString (ex ))
4344
4445 self .initCursor ()
@@ -47,20 +48,25 @@ def connect(self):
4748 def fetchall (self ):
4849 try :
4950 return self .cursor .fetchall ()
50- except kinterbasdb .OperationalError as ex :
51+ except firebirdsql .OperationalError as ex :
5152 logger .log (logging .WARN if conf .dbmsHandler else logging .DEBUG , "(remote) %s" % getSafeExString (ex ))
5253 return None
5354
54- def execute (self , query ):
55+ def execute (self , query , commit = True ):
5556 try :
5657 self .cursor .execute (query )
57- except kinterbasdb .OperationalError as ex :
58+ except firebirdsql .OperationalError as ex :
5859 logger .log (logging .WARN if conf .dbmsHandler else logging .DEBUG , "(remote) %s" % getSafeExString (ex ))
59- except kinterbasdb .Error as ex :
60+ except firebirdsql .Error as ex :
6061 raise SqlmapConnectionException (getSafeExString (ex ))
6162
62- self .connector .commit ()
63+ # commit non-SELECT (DML) here; select() commits only AFTER fetchall() because a Firebird COMMIT closes
64+ # open cursors (discarding an unfetched result set)
65+ if commit :
66+ self .connector .commit ()
6367
6468 def select (self , query ):
65- self .execute (query )
66- return self .fetchall ()
69+ self .execute (query , commit = False )
70+ retVal = self .fetchall ()
71+ self .connector .commit ()
72+ return retVal
0 commit comments