From: "Sean" <spbrogan@outlook.com>
To: devel@edk2.groups.io, vladimir.olovyannikov@broadcom.com,
"Rabeda, Maciej" <maciej.rabeda@linux.intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Subject: Re: [edk2-devel] Http redirection handling using HttpDxe driver
Date: Fri, 28 Aug 2020 20:39:44 -0700 [thread overview]
Message-ID: <BN8PR07MB696234C16A27CA783106E2E3C8530@BN8PR07MB6962.namprd07.prod.outlook.com> (raw)
In-Reply-To: <5afd3d4a6f3b7ebd282b80b77f402d85@mail.gmail.com>
I think this is the similar to issue 1674 which was reported in early 2019.
https://bugzilla.tianocore.org/show_bug.cgi?id=1674
I'll check internally to find out what we ended up doing to work around
it. I think we closed the socket and opened a new one. This was less
than ideal and is not intuitive given the API.
Thanks
Sean
On 8/28/2020 10:04 AM, Vladimir Olovyannikov via groups.io wrote:
>> -----Original Message-----
>> From: Rabeda, Maciej <maciej.rabeda@linux.intel.com>
>> Sent: Friday, August 28, 2020 8:27 AM
>> To: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com>
>> Cc: devel@edk2.groups.io
>> Subject: Re: Http redirection handling using HttpDxe driver
>>
>> Hi Vladimir,
>>
>> I got your message, I will look into it next week.
>> Have a great weekend!
>>
> Thank you Maciej,
> I looked through the code and found that my redirection assumption was
> incorrect.
> Apparently, one must destroy the socket before resubmitting a request for a
> different server.
> I am going to submit patchset v8. Please review it when you have a chance.
> @Laszlo
> This does not affect a direct download when there is no redirection, which
> you tested.
>
> Have a great weekend!
>
> Thank you,
> Vladimir
>> Maciej
>>
>> On 27-Aug-20 21:23, Vladimir Olovyannikov wrote:
>>> Hi Maciej,
>>>
>>> I would like to get your input (and the HttpDxe driver guys) on the
>>> issue I see with Http redirection (using HttpDynamicCommand)
>>> Basically, let's say that we connect to a server "server.com"
>>>
>>> Request:
>>> GET / HTTP/1.1
>>> Host: server.com
>>>
>>> Reply:
>>> HTTP/1.1 301 Moved permanently
>>> Location: www.server.com
>>>
>>> By RFC, the client reissues the request like following and connects to
>>> www.server.com:
>>> Request:
>>> GET / HTTP/1.1
>>> Host: www.server.com
>>>
>>> Reply:
>>> HTTP/1.1 200 OK
>>>
>>> I have an issue of getting EFI_ACCESS_DENIED in SockInterface.c on the
>>> redirection.
>>> The logic is:
>>> 1. Send a request
>>> 2. Parse the response. If there is a redirection code returned, then
>>> a) cancel Http connection
>>> b) resubmit to the proper host with proper host header.
>>>
>>> Obviously, there are no issues with a). However, there is an issue
>>> with b) When the second request is being sent, EfiHttpRequest sets
>>> Configure and Reconfigure flags, closes and cancels Http connection
>>> with HttpCloseConnection/EfiHttpCancel.
>>> Everything is OK at this point. Note that the socket is closed, but
>>> it's ConfiguredState is 1, and is not changed.
>>> Now, HttpInitSession() is called with Configure flag.
>>> It calls into HttpConfigureTcp4(), which in turn calls
>>> Tcp4Configure().
>>> Here everything is fine until
>>> SockConfigure is called.
>>> The SockConfigure checks if ConfigureState is "not configured"
>>> (see above, the ConfigureState is not changed on Http session
>> cancel/close).
>>> So, the SockConfigure returns EFI_ACCESS_DENIED error as the
>>> socket is configured, and this is returned to HttpConfigureTcp4().
>>> Which, in turn, returns an error up, and the Http in
>>> HttpDynamicCommand gets this error, reports it and aborts the operation.
>>>
>>> If I change the line in HttpConfigureTcp4, line 1108 in HttpProto.c
>>> from if (EFI_ERROR (Status)) {
>>> DEBUG ((.....));
>>> return Status;
>>> }
>>> to
>>> if (EFI_ERROR (Status) && (Status != EFI_ACCESS_DENIED)) {
>>> DEBUG ((...));
>>> return Status;
>>> }
>>> then EFI_SUCCESS is returned, socket placeholder is reused, and
>>> multiple redirections works properly (I tried this scheme:
>>> server.com->www.server.com->www1.server.com->got content).
>>> I suspect, it is wrong to make an assumption that the ACCESS_DEINED
>>> returned from Tcp4Configure() would be because of the socket.
>>> Maybe, I am missing something? Can you help?
>>>
>>> Thank you,
>>> Vladimir
>
>
>
next prev parent reply other threads:[~2020-08-29 3:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-27 19:23 Http redirection handling using HttpDxe driver Vladimir Olovyannikov
2020-08-28 15:26 ` Maciej Rabeda
2020-08-28 17:04 ` Vladimir Olovyannikov
2020-08-29 3:39 ` Sean [this message]
2020-08-29 15:53 ` [edk2-devel] " Vladimir Olovyannikov
2020-08-31 18:19 ` Michael Turner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BN8PR07MB696234C16A27CA783106E2E3C8530@BN8PR07MB6962.namprd07.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox