diff -up sos-2.2/sos/policyredhat.py.orig sos-2.2/sos/policyredhat.py --- sos-2.2/sos/policyredhat.py.orig 2011-04-07 11:57:19.000000000 +0100 +++ sos-2.2/sos/policyredhat.py 2011-04-07 11:59:55.000000000 +0100 @@ -24,10 +24,7 @@ from tempfile import gettempdir from sos.helpers import * import random import re -try: - from hashlib import md5 -except ImportError: - from md5 import md5 +import hashlib import rpm import time from subprocess import Popen, PIPE @@ -68,7 +65,7 @@ class SosPolicy: def __init__(self): self.report_file = "" self.report_file_ext = "" - self.report_md5 = "" + self.report_checksum = "" self.reportName = "" self.ticketNumber = "" @@ -306,31 +303,49 @@ class SosPolicy: print _("There was a problem encrypting your report.") sys.exit(1) + def getChecksumAlgorithm(self): + checksum = "md5" + # this is the canonical check for FIPS + try: + fp = open("/proc/sys/crypto/fips_enabled", "r") + except: + return checksum + fips_enabled = fp.read() + if fips_enabled.find("1") >= 0: + checksum = "sha256" + fp.close() + return checksum + def displayResults(self): # make sure a report exists if not self.report_file: return False - # calculate md5 + # determine checksum algo and instantiate + checksum = self.getChecksumAlgorithm() + digest = hashlib.new(checksum) + + # calculate checksum fp = open(self.report_file, "r") - self.report_md5 = md5(fp.read()).hexdigest() + digest.update(fp.read()) fp.close() + self.report_checksum = digest.hexdigest() self.renameResults("sosreport-%s-%s-%s.%s" % (self.reportName, time.strftime("%Y%m%d%H%M%S"), - self.report_md5[-4:], + self.report_checksum[-4:], self.report_file_ext)) - # store md5 into file - fp = open(self.report_file + ".md5", "w") - fp.write(self.report_md5 + "\n") + # store checksum into file + fp = open(self.report_file + "." + checksum, "w") + fp.write(self.report_checksum + "\n") fp.close() print print _("Your sosreport has been generated and saved in:\n %s") % self.report_file print - if len(self.report_md5): - print _("The md5sum is: ") + self.report_md5 + if len(self.report_checksum): + print _("The " + checksum + "sum is: ") + self.report_checksum print print _("Please send this file to your support representative.") print