Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def mark_security_updates():
""" For each set of erratum packages, modify any PackageUpdate that
should be marked as a security update.
"""
package_updates = PackageUpdate.objects.all()
errata = Erratum.objects.all()
elen = Erratum.objects.count()
ptext = 'Scanning {0!s} Errata:'.format(elen)
progress_info_s.send(sender=None, ptext=ptext, plen=elen)
for i, erratum in enumerate(errata):
progress_update_s.send(sender=None, index=i + 1)
if erratum.etype == 'security':
for package in erratum.packages.all():
with transaction.atomic():
affected_updates = package_updates.select_for_update(
).filter(newpackage=package)
for affected_update in affected_updates:
affected_update.security = True
affected_update.save()
def parse_errata(data, force):
""" Parse CentOS errata from https://cefs.steve-meier.de/
"""
result = etree.XML(data)
errata_xml = result.findall('*')
elen = len(errata_xml)
ptext = 'Processing {0!s} Errata:'.format(elen)
progress_info_s.send(sender=None, ptext=ptext, plen=elen)
for i, child in enumerate(errata_xml):
progress_update_s.send(sender=None, index=i + 1)
if not check_centos_release(child.findall('os_release')):
continue
e = parse_errata_tag(child.tag, child.attrib, force)
if e is not None:
parse_errata_children(e, child.getchildren())
from reports.models import Report
reports = Report.objects.filter(host=host).order_by('-created')[:3]
report_ids = []
for report in reports:
report_ids.append(report.id)
report.accessed = timestamp
report.save()
del_reports = Report.objects.filter(host=host).exclude(id__in=report_ids)
rlen = del_reports.count()
ptext = 'Cleaning {0!s} old reports'.format(rlen)
progress_info_s.send(sender=None, ptext=ptext, plen=rlen)
for i, report in enumerate(del_reports):
report.delete()
progress_update_s.send(sender=None, index=i + 1)
def process_packages(report, host):
""" Processes the quoted packages string sent with a report
"""
if report.packages:
package_ids = []
packages = parse_packages(report.packages)
progress_info_s.send(sender=None,
ptext='{0!s} packages'.format(str(host)[0:25]),
plen=len(packages))
for i, pkg_str in enumerate(packages):
package = process_package(pkg_str, report.protocol)
if package:
package_ids.append(package.id)
try:
with transaction.atomic():
host.packages.add(package)
except IntegrityError as e:
error_message.send(sender=None, text=e)
except DatabaseError as e:
error_message.send(sender=None, text=e)
else:
if pkg_str[0].lower() != 'gpg-pubkey':
text = 'No package returned for {0!s}'.format(pkg_str)
def process_repos(report, host):
""" Processes the quoted repos string sent with a report
"""
if report.repos:
repo_ids = []
host_repos = HostRepo.objects.filter(host=host)
repos = parse_repos(report.repos)
progress_info_s.send(sender=None,
ptext='{0!s} repos'.format(str(host)[0:25]),
plen=len(repos))
for i, repo_str in enumerate(repos):
repo, priority = process_repo(repo_str, report.arch)
if repo:
repo_ids.append(repo.id)
try:
with transaction.atomic():
hostrepo, c = host_repos.get_or_create(host=host,
repo=repo)
except IntegrityError as e:
error_message.send(sender=None, text=e)
hostrepo = host_repos.get(host=host, repo=repo)
try:
if hostrepo.priority != priority:
hostrepo.priority = priority
def update_mirror_packages(mirror, packages):
""" Updates the packages contained on a mirror, and
removes obsolete packages.
"""
new = set()
old = set()
removals = set()
mirror_packages = mirror.packages.all()
mlen = mirror_packages.count()
ptext = 'Obtaining stored packages: '
progress_info_s.send(sender=None, ptext=ptext, plen=mlen)
for i, package in enumerate(mirror_packages):
progress_update_s.send(sender=None, index=i + 1)
name = str(package.name)
arch = str(package.arch)
strpackage = PackageString(name=name,
epoch=package.epoch,
version=package.version,
release=package.release,
arch=arch,
packagetype=package.packagetype)
old.add(strpackage)
new = packages.difference(old)
removals = old.difference(packages)
nlen = len(new)
@receiver(progress_info_s)
def progress_info_r(**kwargs):
""" Receiver to create a progressbar
"""
ptext = kwargs.get('ptext')
plen = kwargs.get('plen')
if ptext and plen:
create_pbar(ptext, plen)
version = package.version
release = package.release
arch = PackageArchitecture.objects.get(name=package.arch)
packagetype = package.packagetype
p = Package.objects.get(name=package_id,
epoch=epoch,
version=version,
arch=arch,
release=release,
packagetype=packagetype)
from repos.models import MirrorPackage
with transaction.atomic():
MirrorPackage.objects.get(mirror=mirror, package=p).delete()
ptext = 'Adding {0!s} new packages:'.format(nlen)
progress_info_s.send(sender=None, ptext=ptext, plen=nlen)
for i, package in enumerate(new):
progress_update_s.send(sender=None, index=i + 1)
package_names = PackageName.objects.all()
with transaction.atomic():
package_id, c = package_names.get_or_create(name=package.name)
epoch = package.epoch
version = package.version
release = package.release
packagetype = package.packagetype
package_arches = PackageArchitecture.objects.all()
with transaction.atomic():
arch, c = package_arches.get_or_create(name=package.arch)