diff options
| author | Alexander Kanavin <alex@linutronix.de> | 2024-10-14 15:35:04 +0200 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2024-10-22 11:16:32 +0100 |
| commit | 74c93ec961d74c5134e7f8b6105d97d9a0fc2f5e (patch) | |
| tree | 96246526deb885b49b7aeb023ab1018a9800c99c | |
| parent | 9eaa1e5024347d097b0cae882037deccc526c545 (diff) | |
| download | poky-74c93ec961d74c5134e7f8b6105d97d9a0fc2f5e.tar.gz | |
bitbake: fetch2/wget: set User-Agent to 'bitbake/version' in checkstatus()
This eliminates the last usage of 'fake mozilla' in bitbake, and
it's then truthful everywhere about presenting itself, or wget
(when that is used).
I understand this will make people nervous so I want to provide
an extended decription.
1. How was this tested?
- bitbake-selftest -k FetchCheckStatusTest
(tests a few hardcoded URIs, all passed)
- bitbake -k -c checkuri world
(runs checkstatus() over all recipes in oe-core, and all passed again -
this hopefully goes a long way to reassure everyone that hosts around
the world and various CDNs typically do not have a problem with user-agent
strings they haven't seen before or bitbake user-agent specifically)
2. What about that removed cloudflare comment?
I digged into git history, and I think it is not fully accurate. First, 'fake
mozilla' agent is used only for checkstatus() - in actual fetching with wget
it is not. And that has not been a problem for anyone.
Second, here's how the comment occured. Usage of 'fake mozilla' was introduced here:
https://git.yoctoproject.org/poky/commit/?h=master&id=ab26fdae9e5ae56bb84196698d3fa4fd568fe903
At that point it did not have to be specifically 'mozilla', the commit message
indicates that any User-Agent would have been ok. Mozilla was simply copied
from upstream version check for convenience.
Later on, the string was updated to a more recent Mozilla:
https://git.yoctoproject.org/poky/commit/?h=master&id=9f123238261a68e37cec634782e9320633cac5d4
The claim in the added comment become something else: that User-Agent *must* a browser,
without evidence or tests. Even though it demonstrably doesn't have to be - wget is ok.
3. What if someone has a server that is ok with wget agent, but not ok with bitbake agent?
Please see point one. It's not impossible but I think it's highly unlikely. I do think
we should rather tell servers the truth, and learn where the actual issues are. Then
we can consider options - whether that would be pretending to be wget, or allowing user-agent
to be configured. We should also add such servers to bitbake-selftest so we know what they
are.
(Bitbake rev: 234f9e810494394527f59fdf22eb86435d046d53)
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | bitbake/lib/bb/fetch2/wget.py | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/bitbake/lib/bb/fetch2/wget.py b/bitbake/lib/bb/fetch2/wget.py index 493a5b62ee..7856d10fa4 100644 --- a/bitbake/lib/bb/fetch2/wget.py +++ b/bitbake/lib/bb/fetch2/wget.py | |||
| @@ -53,11 +53,6 @@ class WgetProgressHandler(bb.progress.LineFilterProgressHandler): | |||
| 53 | class Wget(FetchMethod): | 53 | class Wget(FetchMethod): |
| 54 | """Class to fetch urls via 'wget'""" | 54 | """Class to fetch urls via 'wget'""" |
| 55 | 55 | ||
| 56 | # CDNs like CloudFlare may do a 'browser integrity test' which can fail | ||
| 57 | # with the standard wget/urllib User-Agent, so pretend to be a modern | ||
| 58 | # browser. | ||
| 59 | user_agent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0" | ||
| 60 | |||
| 61 | def check_certs(self, d): | 56 | def check_certs(self, d): |
| 62 | """ | 57 | """ |
| 63 | Should certificates be checked? | 58 | Should certificates be checked? |
| @@ -356,7 +351,7 @@ class Wget(FetchMethod): | |||
| 356 | # Some servers (FusionForge, as used on Alioth) require that the | 351 | # Some servers (FusionForge, as used on Alioth) require that the |
| 357 | # optional Accept header is set. | 352 | # optional Accept header is set. |
| 358 | r.add_header("Accept", "*/*") | 353 | r.add_header("Accept", "*/*") |
| 359 | r.add_header("User-Agent", self.user_agent) | 354 | r.add_header("User-Agent", "bitbake/{}".format(bb.__version__)) |
| 360 | def add_basic_auth(login_str, request): | 355 | def add_basic_auth(login_str, request): |
| 361 | '''Adds Basic auth to http request, pass in login:password as string''' | 356 | '''Adds Basic auth to http request, pass in login:password as string''' |
| 362 | import base64 | 357 | import base64 |
