openssl : special treatment for @external (fixes #647)

This commit is contained in:
Massimiliano Culpo 2016-03-31 18:07:44 +02:00
parent 360994b638
commit 837eff1704

View file

@ -30,6 +30,23 @@ def url_for_version(self, version):
# Same idea, but just to avoid issuing the same message multiple times # Same idea, but just to avoid issuing the same message multiple times
warnings_given_to_user = getattr(Openssl, '_warnings_given', {}) warnings_given_to_user = getattr(Openssl, '_warnings_given', {})
if openssl_url is None: if openssl_url is None:
if self.spec.satisfies('@external'):
# The version @external is reserved to system openssl. In that case return a fake url and exit
openssl_url = '@external (reserved version for system openssl)'
if not warnings_given_to_user.get(version, False):
tty.msg('Using openssl@external : the version @external is reserved for system openssl')
warnings_given_to_user[version] = True
else:
openssl_url = self.check_for_outdated_release(version, warnings_given_to_user) # Store the computed URL
openssl_urls[version] = openssl_url
# Store the updated dictionary of URLS
Openssl._openssl_url = openssl_urls
# Store the updated dictionary of warnings
Openssl._warnings_given = warnings_given_to_user
return openssl_url
def check_for_outdated_release(self, version, warnings_given_to_user):
latest = 'http://www.openssl.org/source/openssl-{version}.tar.gz' latest = 'http://www.openssl.org/source/openssl-{version}.tar.gz'
older = 'http://www.openssl.org/source/old/{version_number}/openssl-{version_full}.tar.gz' older = 'http://www.openssl.org/source/old/{version_number}/openssl-{version_full}.tar.gz'
# Try to use the url where the latest tarballs are stored. If the url does not exist (404), then # Try to use the url where the latest tarballs are stored. If the url does not exist (404), then
@ -43,19 +60,13 @@ def url_for_version(self, version):
# Checks if we already warned the user for this particular version of OpenSSL. # Checks if we already warned the user for this particular version of OpenSSL.
# If not we display a warning message and mark this version # If not we display a warning message and mark this version
if not warnings_given_to_user.get(version, False): if not warnings_given_to_user.get(version, False):
tty.warn('This installation depends on an old version of OpenSSL, which may have known security issues. ') tty.warn(
'This installation depends on an old version of OpenSSL, which may have known security issues. ')
tty.warn('Consider updating to the latest version of this package.') tty.warn('Consider updating to the latest version of this package.')
tty.warn('More details at {homepage}'.format(homepage=Openssl.homepage)) tty.warn('More details at {homepage}'.format(homepage=Openssl.homepage))
warnings_given_to_user[version] = True warnings_given_to_user[version] = True
else: else:
openssl_url = latest_url openssl_url = latest_url
# Store the computed URL
openssl_urls[version] = openssl_url
# Store the updated dictionary of URLS
Openssl._openssl_url = openssl_urls
# Store the updated dictionary of warnings
Openssl._warnings_given = warnings_given_to_user
return openssl_url return openssl_url
def install(self, spec, prefix): def install(self, spec, prefix):