diff options
| -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 | """ |
