diff options
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 72 |
1 files changed, 38 insertions, 34 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index fb6138b028..71be6f4b94 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py | |||
@@ -93,28 +93,6 @@ class ParameterError(BBFetchException): | |||
93 | BBFetchException.__init__(self, msg) | 93 | BBFetchException.__init__(self, msg) |
94 | self.args = (message, url) | 94 | self.args = (message, url) |
95 | 95 | ||
96 | class MD5SumError(BBFetchException): | ||
97 | """Exception raised when a MD5 checksum of a file does not match for a downloaded file""" | ||
98 | def __init__(self, path, wanted, got, url): | ||
99 | msg = "File: '%s' has md5 checksum %s when %s was expected (from URL: '%s')" % (path, got, wanted, url) | ||
100 | self.url = url | ||
101 | self.path = path | ||
102 | self.wanted = wanted | ||
103 | self.got = got | ||
104 | BBFetchException.__init__(self, msg) | ||
105 | self.args = (path, wanted, got, url) | ||
106 | |||
107 | class SHA256SumError(MD5SumError): | ||
108 | """Exception raised when a SHA256 checksum of a file does not match for a downloaded file""" | ||
109 | def __init__(self, path, wanted, got, url): | ||
110 | msg = "File: '%s' has sha256 checksum %s when %s was expected (from URL: '%s')" % (path, got, wanted, url) | ||
111 | self.url = url | ||
112 | self.path = path | ||
113 | self.wanted = wanted | ||
114 | self.got = got | ||
115 | BBFetchException.__init__(self, msg) | ||
116 | self.args = (path, wanted, got, url) | ||
117 | |||
118 | class NetworkAccess(BBFetchException): | 96 | class NetworkAccess(BBFetchException): |
119 | """Exception raised when network access is disabled but it is required.""" | 97 | """Exception raised when network access is disabled but it is required.""" |
120 | def __init__(self, url, cmd): | 98 | def __init__(self, url, cmd): |
@@ -271,8 +249,8 @@ def verify_checksum(u, ud, d): | |||
271 | verify the MD5 and SHA256 checksum for downloaded src | 249 | verify the MD5 and SHA256 checksum for downloaded src |
272 | 250 | ||
273 | return value: | 251 | return value: |
274 | - True: checksum matched | 252 | - True: a checksum matched |
275 | - False: checksum unmatched | 253 | - False: neither checksum matched |
276 | 254 | ||
277 | if checksum is missing in recipes file, "BB_STRICT_CHECKSUM" decide the return value. | 255 | if checksum is missing in recipes file, "BB_STRICT_CHECKSUM" decide the return value. |
278 | if BB_STRICT_CHECKSUM = "1" then return false as unmatched, otherwise return true as | 256 | if BB_STRICT_CHECKSUM = "1" then return false as unmatched, otherwise return true as |
@@ -285,20 +263,46 @@ def verify_checksum(u, ud, d): | |||
285 | md5data = bb.utils.md5_file(ud.localpath) | 263 | md5data = bb.utils.md5_file(ud.localpath) |
286 | sha256data = bb.utils.sha256_file(ud.localpath) | 264 | sha256data = bb.utils.sha256_file(ud.localpath) |
287 | 265 | ||
288 | if (ud.md5_expected == None or ud.sha256_expected == None): | 266 | # If strict checking enabled and neither sum defined, raise error |
289 | logger.warn('Missing SRC_URI checksum for %s, consider adding to the recipe:\n' | 267 | strict = bb.data.getVar("BB_STRICT_CHECKSUM", d, True) or None |
290 | 'SRC_URI[%s] = "%s"\nSRC_URI[%s] = "%s"', | 268 | if (strict and ud.md5_expected == None and ud.sha256_expected == None): |
291 | ud.localpath, ud.md5_name, md5data, | 269 | raise FetchError('No checksum specified for %s, please add at least one to the recipe:\n' |
292 | ud.sha256_name, sha256data) | 270 | 'SRC_URI[%s] = "%s"\nSRC_URI[%s] = "%s"', u, |
293 | if bb.data.getVar("BB_STRICT_CHECKSUM", d, True) == "1": | 271 | ud.localpath, ud.md5_name, md5data, |
294 | raise FetchError("No checksum specified for %s." % u, u) | 272 | ud.sha256_name, sha256data) |
295 | return | 273 | |
274 | # Log missing sums so user can more easily add them | ||
275 | if ud.md5_expected == None: | ||
276 | logger.warn('Missing md5 SRC_URI checksum for %s, consider adding to the recipe:\n' | ||
277 | 'SRC_URI[%s] = "%s"', | ||
278 | ud.localpath, ud.md5_name, md5data) | ||
279 | |||
280 | if ud.sha256_expected == None: | ||
281 | logger.warn('Missing sha256 SRC_URI checksum for %s, consider adding to the recipe:\n' | ||
282 | 'SRC_URI[%s] = "%s"', | ||
283 | ud.localpath, ud.sha256_name, sha256data) | ||
284 | |||
285 | md5mismatch = False | ||
286 | sha256mismatch = False | ||
296 | 287 | ||
297 | if ud.md5_expected != md5data: | 288 | if ud.md5_expected != md5data: |
298 | raise MD5SumError(ud.localpath, ud.md5_expected, md5data, u) | 289 | md5mismatch = True |
299 | 290 | ||
300 | if ud.sha256_expected != sha256data: | 291 | if ud.sha256_expected != sha256data: |
301 | raise SHA256SumError(ud.localpath, ud.sha256_expected, sha256data, u) | 292 | sha256mismatch = True |
293 | |||
294 | # We want to alert the user if a checksum is defined in the recipe but | ||
295 | # it does not match. | ||
296 | msg = "" | ||
297 | if md5mismatch and ud.md5_expected: | ||
298 | msg = msg + "\nFile: '%s' has %s checksum %s when %s was expected (from URL: '%s')" % (ud.localpath, 'md5', md5data, ud.md5_expected, u) | ||
299 | |||
300 | if sha256mismatch and ud.sha256_expected: | ||
301 | msg = msg + "\nFile: '%s' has %s checksum %s when %s was expected (from URL: '%s')" % (ud.localpath, 'sha256', sha256data, ud.sha256_expected, u) | ||
302 | |||
303 | if len(msg): | ||
304 | raise FetchError('Checksum mismatch!%s' % msg, u) | ||
305 | |||
302 | 306 | ||
303 | def update_stamp(u, ud, d): | 307 | def update_stamp(u, ud, d): |
304 | """ | 308 | """ |