HEX
Server: Apache
System: Linux vpshost0650.publiccloud.com.br 4.4.79-grsec-1.lc.x86_64 #1 SMP Wed Aug 2 14:18:21 -03 2017 x86_64
User: bandeirantesbomb3 (10068)
PHP: 8.0.7
Disabled: apache_child_terminate,dl,escapeshellarg,escapeshellcmd,exec,link,mail,openlog,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_check_syntax,php_strip_whitespace,popen,proc_close,proc_open,shell_exec,symlink,system
Upload Files
File: //lib/python2.7/site-packages/centos_package_cron/package_checker.py
import operator
import re
from rpmUtils.miscutils import compareEVR

class PackageChecker:
    def __init__(self, errata_fetcher, package_fetcher, os_fetcher):
        self.errata_fetcher = errata_fetcher
        self.package_fetcher = package_fetcher
        self.os_fetcher = os_fetcher

    def _advisoryPackageMeantForCurrentOs(self, advisory_package):
        os_version = self.os_fetcher.get_top_level_version()
        regex = r'.*el'+os_version+'.*'
        return re.match(regex, advisory_package['release']) != None

    def _compareAdvisoryAgainstInst(self,advisory_package,installed_package):
        return compareEVR( ('', advisory_package['version'], advisory_package['release']), ('', installed_package.version, installed_package.release))

    def match_advisory_against_installed(self,advisory_package,current_installed):
        installed_versions = filter(lambda inst: advisory_package['name'] == inst.name, current_installed)
        if not self._advisoryPackageMeantForCurrentOs(advisory_package):
            return []
        # Deal with cases where both old and new kernel packages are installed
        still_vulnerable = all(self._compareAdvisoryAgainstInst(advisory_package, inst) > 0 for inst in installed_versions)
        return installed_versions if still_vulnerable else []

    def findAdvisoriesOnInstalledPackages(self):
        os_version = self.os_fetcher.get_top_level_version()
        advisories = self.errata_fetcher.get_errata()
        current_installed = self.package_fetcher.fetch_installed_packages()
        results = []
        for advisory in advisories:
            installed_package_match = map(lambda advisory_package: self.match_advisory_against_installed(advisory_package,current_installed),advisory.packages)
            # Need to flatten
            installed_package_match = reduce(operator.add, installed_package_match)
            if len(installed_package_match) > 0 and (os_version in advisory.releases):
                results.append({'advisory': advisory, 'installed_packages':installed_package_match})
        return results