5858from lib .core .convert import getUnicode
5959from lib .core .convert import htmlUnescape
6060from lib .core .convert import stdoutEncode
61- from lib .core .data import cmdLineOptions
61+ from lib .core .data import cmdLineOptions , paths
6262from lib .core .data import conf
6363from lib .core .data import kb
6464from lib .core .data import logger
@@ -2554,7 +2554,7 @@ def initCommonOutputs():
25542554 if line not in kb .commonOutputs [key ]:
25552555 kb .commonOutputs [key ].add (line )
25562556
2557- def getFileItems (filename , commentPrefix = '#' , unicoded = True , lowercase = False , unique = False ):
2557+ def getFileItems (filename , commentPrefix = '#' , unicoded = True , lowercase = False , unique = False , raiseOnError = True ):
25582558 """
25592559 Returns newline delimited items contained inside file
25602560
@@ -2567,7 +2567,7 @@ def getFileItems(filename, commentPrefix='#', unicoded=True, lowercase=False, un
25672567 if filename :
25682568 filename = filename .strip ('"\' ' )
25692569
2570- checkFile (filename )
2570+ checkFile (filename , raiseOnError = raiseOnError )
25712571
25722572 try :
25732573 with openFile (filename , 'r' , errors = "ignore" ) if unicoded else open (filename , 'r' ) as f :
@@ -5599,18 +5599,35 @@ def checkSums():
55995599
56005600 retVal = True
56015601
5602- if paths .get ("DIGEST_FILE" ):
5603- for entry in getFileItems (paths .DIGEST_FILE ):
5604- match = re .search (r"([0-9a-f]+)\s+([^\s]+)" , entry )
5605- if match :
5606- expected , filename = match .groups ()
5607- filepath = os .path .join (paths .SQLMAP_ROOT_PATH , filename ).replace ('/' , os .path .sep )
5608- if not checkFile (filepath , False ):
5609- continue
5610- with open (filepath , "rb" ) as f :
5611- content = f .read ()
5612- if not hashlib .sha256 (content ).hexdigest () == expected :
5613- retVal &= False
5614- break
5602+ for entry in getFileItems (paths .DIGEST_FILE , raiseOnError = False ):
5603+ file_data = entry .split ()
5604+ if len (file_data ) == 2 and len (file_data [0 ]) == 64 :
5605+ filepath = os .path .join (paths .SQLMAP_ROOT_PATH , file_data [1 ]).replace ('/' , os .path .sep )
5606+ content = openFile (filepath , 'rb' ).read ()
5607+ if not hashlib .sha256 (content .encode ('utf-8' )).hexdigest () == file_data [0 ]:
5608+ retVal &= False
5609+ break
5610+
56155611
56165612 return retVal
5613+
5614+
5615+ def updateSums ():
5616+ # Read existing entries to maintain file order
5617+ entries = []
5618+ for entry in getFileItems (paths .DIGEST_FILE ):
5619+ file_data = entry .split ()
5620+ if len (file_data ) == 2 and len (file_data [0 ]) == 64 :
5621+ filepath = os .path .join (paths .SQLMAP_ROOT_PATH , file_data [1 ]).replace ('/' , os .path .sep )
5622+ content = openFile (filepath , 'rb' ).read ()
5623+ newline = b"%s %s\n " % (
5624+ hashlib .sha256 (content .encode ('utf-8' )).hexdigest ().encode ('utf-8' ),
5625+ file_data [1 ].encode ('utf-8' )
5626+ )
5627+ entries .append (newline )
5628+
5629+ # Write updated hashes back to file
5630+ if entries :
5631+ with open (paths .DIGEST_FILE , "wb" ) as f :
5632+ f .write (b"" .join (entries ))
5633+
0 commit comments