24.01.2017 03:35, Matthew Garrett пишет: > Add support for passing ports in HTTP requests. This takes the form of: > (http,serverip:portnum)/file > --- > grub-core/net/http.c | 8 ++++++-- > grub-core/net/net.c | 10 +++++++++- > include/grub/net.h | 1 + > 3 files changed, 16 insertions(+), 3 deletions(-) > > diff --git a/grub-core/net/http.c b/grub-core/net/http.c > index 5aa4ad3..389a78e 100644 > --- a/grub-core/net/http.c > +++ b/grub-core/net/http.c > @@ -309,7 +309,7 @@ http_establish (struct grub_file *file, grub_off_t > offset, int initial) > { > http_data_t data = file->data; > grub_uint8_t *ptr; > - int i; > + int i, port; > struct grub_net_buff *nb; > grub_err_t err; > > @@ -390,8 +390,12 @@ http_establish (struct grub_file *file, grub_off_t > offset, int initial) > grub_netbuff_put (nb, 2); > grub_memcpy (ptr, "\r\n", 2); > > + if (file->device->net->port)
0 is valid port number (at least I am not aware of any RFC that prohibits its use). > + port = file->device->net->port; > + else > + port = HTTP_PORT; > data->sock = grub_net_tcp_open (file->device->net->server, > - HTTP_PORT, http_receive, > + port, http_receive, > http_err, http_err, > file); > if (!data->sock) > diff --git a/grub-core/net/net.c b/grub-core/net/net.c > index 10773fc..585f4f7 100644 > --- a/grub-core/net/net.c > +++ b/grub-core/net/net.c > @@ -1261,7 +1261,7 @@ grub_net_open_real (const char *name) > grub_net_app_level_t proto; > const char *protname, *server; > grub_size_t protnamelen; > - int try; > + int try, port = 0; > > if (grub_strncmp (name, "pxe:", sizeof ("pxe:") - 1) == 0) > { > @@ -1278,7 +1278,14 @@ grub_net_open_real (const char *name) > else > { > const char *comma; > + char *colon; > comma = grub_strchr (name, ','); > + colon = grub_strchr (name, ':'); This conflicts with IPv6 addresses. Similar patches were already posted. I suggested using (proto,server,port). This also allows empty server and still using non-standard port. More general at some point we should hit authentication, and so may need to stuff user/password there. So we need to come up with extensible framework. Putting everything in "server" string may work, but then we need to support IPv6 literals here - [fe80::1]:444 - at least, this is the only way to use server:port I see. Also, we probably need to support escaping of colons. Finally, speaking about user/password, we may need to support user:password@[fe80::1]:456 May be using (net,proto=http,server=xxx,port=yyy,user=uuu,...) which allows adding arbitrary keywords at any time. _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel