2323"""
2424
2525from lib .core .agent import agent
26+ from lib .core .common import dataToSessionFile
27+ from lib .core .convert import base64pickle
28+ from lib .core .convert import base64unpickle
2629from lib .core .data import conf
2730from lib .core .data import kb
31+ from lib .core .data import logger
2832from lib .core .settings import SQL_STATEMENTS
2933from lib .utils .timeout import timeout
3034
@@ -42,14 +46,25 @@ def direct(query, content=True):
4246 select = True
4347 break
4448
45- if select :
46- output = timeout ( func = conf . dbmsConnector . select , args = ( query ,), duration = conf . timeout , default = None )
47- else :
49+ logger . log ( 9 , query )
50+
51+ if not select :
4852 output = timeout (func = conf .dbmsConnector .execute , args = (query ,), duration = conf .timeout , default = None )
53+ elif conf .hostname in kb .resumedQueries and query in kb .resumedQueries [conf .hostname ]:
54+ output = base64unpickle (kb .resumedQueries [conf .hostname ][query ][:- 1 ])
55+
56+ infoMsg = "resumed from file '%s': " % conf .sessionFile
57+ infoMsg += "%s..." % str (output )[:20 ]
58+ logger .info (infoMsg )
59+ elif select :
60+ output = timeout (func = conf .dbmsConnector .select , args = (query ,), duration = conf .timeout , default = None )
4961
5062 if output is None or len (output ) == 0 :
5163 return None
5264 elif content :
65+ if conf .hostname not in kb .resumedQueries or ( conf .hostname in kb .resumedQueries and query not in kb .resumedQueries [conf .hostname ] ):
66+ dataToSessionFile ("[%s][%s][%s][%s][%s]\n " % (conf .hostname , kb .injPlace , conf .parameters [kb .injPlace ], query , base64pickle (output )))
67+
5368 if len (output ) == 1 :
5469 if len (output [0 ]) == 1 :
5570 return str (list (output )[0 ][0 ])
0 commit comments