Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def extract_yast_packages(data):
""" Extract package metadata from yast metadata file
"""
extracted = extract(data, 'gz')
pkgs = re.findall(b'=Pkg: (.*)', extracted)
plen = len(pkgs)
packages = set()
if plen > 0:
ptext = 'Extracting packages: '
progress_info_s.send(sender=None, ptext=ptext, plen=plen)
for i, pkg in enumerate(pkgs):
progress_update_s.send(sender=None, index=i + 1)
name, version, release, arch = str(pkg).split()
package = PackageString(name=name.lower(),
epoch='',
version=version,
release=release,
arch=arch,
packagetype='R')
packages.add(package)
else:
info_message.send(sender=None, text='No packages found in repo')
return packages
def update_rdns(host):
""" Update the reverse DNS for a host
"""
try:
reversedns = str(gethostbyaddr(host.ipaddress)[0])
except (gaierror, herror):
reversedns = 'None'
host.reversedns = reversedns.lower()
try:
host.save()
except DatabaseError as e:
error_message.send(sender=None, text=e)
def fail(self):
""" Records that the mirror has failed
Disables refresh on a mirror if it fails more than 28 times
"""
text = 'No usable mirror found at {0!s}'.format(self.url)
error_message.send(sender=None, text=text)
self.fail_count = self.fail_count + 1
if self.fail_count > 28:
self.refresh = False
text = 'Mirror has failed more than 28 times, disabling refresh'
error_message.send(sender=None, text=text)
mirrors = highest_package.mirror_set.filter(host_repos)
security = False
# If any of the containing repos are security,
# mark the update as security
for mirror in mirrors:
if mirror.repo.security:
security = True
try:
updates = PackageUpdate.objects.all()
with transaction.atomic():
update, c = updates.get_or_create(
oldpackage=package,
newpackage=highest_package,
security=security)
except IntegrityError as e:
error_message.send(sender=None, text=e)
update = updates.get(oldpackage=package,
newpackage=highest_package,
security=security)
except DatabaseError as e:
error_message.send(sender=None, text=e)
try:
with transaction.atomic():
self.updates.add(update)
info_message.send(sender=None, text='{0!s}'.format(update))
return update.id
except IntegrityError as e:
error_message.send(sender=None, text=e)
except DatabaseError as e:
error_message.send(sender=None, text=e)
except Mirror.DoesNotExist:
if repository:
Mirror.objects.create(repo=repository, url=r_url)
else:
unknown.append(r_url)
else:
repository = mirror.repo
if not repository:
repositories = Repository.objects.all()
try:
with transaction.atomic():
repository, c = repositories.get_or_create(name=r_name,
arch=r_arch,
repotype=r_type)
except IntegrityError as e:
error_message.send(sender=None, text=e)
repository = repositories.get(name=r_name,
arch=r_arch,
repotype=r_type)
except DatabaseError as e:
error_message.send(sender=None, text=e)
if r_id and repository.repo_id != r_id:
repository.repo_id = r_id
with transaction.atomic():
repository.save()
for url in unknown:
Mirror.objects.create(repo=repository, url=url)
for mirror in Mirror.objects.filter(repo=repository).values('url'):
if mirror['url'].find('cdn.redhat.com') != -1 or \
def update_errata(force=False):
""" Update CentOS errata from https://cefs.steve-meier.de/
and mark packages that are security updates
"""
data = download_errata_checksum()
expected_checksum = parse_errata_checksum(data)
data = download_errata()
actual_checksum = get_sha1(data)
if actual_checksum != expected_checksum:
e = 'CEFS checksum did not match, skipping errata parsing'
error_message.send(sender=None, text=e)
else:
if data:
parse_errata(bunzip2(data), force)
mark_security_updates()
except IntegrityError as e:
error_message.send(sender=None, text=e)
update = updates.get(oldpackage=package,
newpackage=highest_package,
security=security)
except DatabaseError as e:
error_message.send(sender=None, text=e)
try:
with transaction.atomic():
self.updates.add(update)
info_message.send(sender=None, text='{0!s}'.format(update))
return update.id
except IntegrityError as e:
error_message.send(sender=None, text=e)
except DatabaseError as e:
error_message.send(sender=None, text=e)
def get_sha(checksum_type, data):
""" Returns the checksum of the data. Returns None otherwise.
"""
if checksum_type == 'sha' or checksum_type == 'sha1':
sha = get_sha1(data)
elif checksum_type == 'sha256':
sha = get_sha256(data)
else:
text = 'Unknown checksum type: {0!s}'.format(checksum_type)
error_message.send(sender=None, text=text)
return sha
package is the pseudo package gpg-pubkey, or if it cannot create it
"""
package = None
name = name.lower()
if name == 'gpg-pubkey':
return
if epoch in [None, 0, '0']:
epoch = ''
try:
with transaction.atomic():
package_names = PackageName.objects.all()
p_name, c = package_names.get_or_create(name=name)
except IntegrityError as e:
error_message.send(sender=None, text=e)
p_name = package_names.get(name=name)
except DatabaseError as e:
error_message.send(sender=None, text=e)
package_arches = PackageArchitecture.objects.all()
with transaction.atomic():
p_arch, c = package_arches.get_or_create(name=arch)
try:
with transaction.atomic():
packages = Package.objects.all()
package, c = packages.get_or_create(name=p_name,
arch=p_arch,
epoch=epoch,
version=version,
release=release,
def checksum_is_valid(sha, checksum, mirror):
""" Compares the computed checksum and the provided checksum. Returns True
if both match.
"""
if sha == checksum:
return True
else:
text = 'Checksum failed for mirror {0!s}'.format(mirror.id)
text += ', not refreshing package metadata'
error_message.send(sender=None, text=text)
text = 'Found sha = {0!s}\nExpected = {1!s}'.format(sha, checksum)
error_message.send(sender=None, text=text)
mirror.last_access_ok = False
return False