unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#46481: "guix download" with ftp URL doesn't work on IPv6 network
@ 2021-02-13  2:35 Danny Milosavljevic
  2021-02-14  4:08 ` 宋文武
  2021-02-17  9:15 ` bug#46481: Léo Le Bouter via Bug reports for GNU Guix
  0 siblings, 2 replies; 7+ messages in thread
From: Danny Milosavljevic @ 2021-02-13  2:35 UTC (permalink / raw)
  To: 46481

[-- Attachment #1: Type: text/plain, Size: 697 bytes --]

I strongly suspect there to be some problem with the ftp client since
that's the second file that doesn't work using guix download but does work
using wget, on the same computer.

$ guix download ftp://ftp.denx.de/pub/u-boot/u-boot-2021.01.tar.bz2

Starting download of /tmp/guix-file.tORPhj
From ftp://ftp.denx.de/pub/u-boot/u-boot-2021.01.tar.bz2...
Throw to key `ftp-error' with args `(#<input-output: socket 16> "PASV" 425 "You cannot use PASV on IPv6 connections. Use EPSV instead.\r")'.
failed to download "/tmp/guix-file.tORPhj" from "ftp://ftp.denx.de/pub/u-boot/u-boot-2021.01.tar.bz2"
guix download: error: ftp://ftp.denx.de/pub/u-boot/u-boot-2021.01.tar.bz2: download failed

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#46481: "guix download" with ftp URL doesn't work on IPv6 network
  2021-02-13  2:35 bug#46481: "guix download" with ftp URL doesn't work on IPv6 network Danny Milosavljevic
@ 2021-02-14  4:08 ` 宋文武
  2021-02-14 19:28   ` Danny Milosavljevic
  2021-02-17  9:15 ` bug#46481: Léo Le Bouter via Bug reports for GNU Guix
  1 sibling, 1 reply; 7+ messages in thread
From: 宋文武 @ 2021-02-14  4:08 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: 46481

[-- Attachment #1: Type: text/plain, Size: 801 bytes --]

Danny Milosavljevic <dannym@scratchpost.org> writes:

> I strongly suspect there to be some problem with the ftp client since
> that's the second file that doesn't work using guix download but does work
> using wget, on the same computer.
>
> $ guix download ftp://ftp.denx.de/pub/u-boot/u-boot-2021.01.tar.bz2
>
> Starting download of /tmp/guix-file.tORPhj
> From ftp://ftp.denx.de/pub/u-boot/u-boot-2021.01.tar.bz2...
> Throw to key `ftp-error' with args `(#<input-output: socket 16> "PASV" 425 "You cannot use PASV on IPv6 connections. Use EPSV instead.\r")'.
> failed to download "/tmp/guix-file.tORPhj" from "ftp://ftp.denx.de/pub/u-boot/u-boot-2021.01.tar.bz2"
> guix download: error: ftp://ftp.denx.de/pub/u-boot/u-boot-2021.01.tar.bz2: download failed

Yes, with this patch I can get it work:

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ftp-client-Before-PASV-try-EPSV-first-for-IPv6.patch --]
[-- Type: text/x-patch, Size: 2153 bytes --]

From 568ea9cc0e07eab24c7d24e228d7d391f191feca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@member.fsf.org>
Date: Sun, 14 Feb 2021 12:02:57 +0800
Subject: [PATCH] ftp-client: Before 'PASV', try 'EPSV' first for IPv6.

This fixes <https://bugs.gnu.org/46481>.

* guix/ftp-client.scm (ftp-epsv, ftp-passive): New procedure.
(ftp-list, ftp-retr): Replace call to 'ftp-pasv' with 'ftp-passive'.
---
 guix/ftp-client.scm | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/guix/ftp-client.scm b/guix/ftp-client.scm
index 8d5adcb8ed..a72057d3f5 100644
--- a/guix/ftp-client.scm
+++ b/guix/ftp-client.scm
@@ -216,6 +216,19 @@ TIMEOUT, an ETIMEDOUT error is raised."
           (else
            (throw 'ftp-error conn "PASV" 227 message)))))
 
+(define (ftp-epsv conn)
+  (let* ((message (%ftp-command "EPSV" 229 (ftp-connection-socket conn))))
+    (string->number
+     (match:substring
+      (string-match "\\(...([0-9]+).\\)" message) 1))))
+
+(define (ftp-passive conn)
+  "Enter passive mode using EPSV or PASV, return a data connection port on
+success."
+  ;; IPv6 only works with EPSV, so try it first.
+  (or (false-if-exception (ftp-epsv conn))
+      (ftp-pasv conn)))
+
 (define (address-with-port sa port)
   "Return a socket-address object based on SA, but with PORT."
   (let ((fam  (sockaddr:fam sa))
@@ -232,7 +245,7 @@ TIMEOUT, an ETIMEDOUT error is raised."
   (if directory
       (ftp-chdir conn directory))
 
-  (let* ((port (ftp-pasv conn))
+  (let* ((port (ftp-passive conn))
          (ai   (ftp-connection-addrinfo conn))
          (s    (socket (addrinfo:fam ai) (addrinfo:socktype ai)
                        (addrinfo:protocol ai))))
@@ -281,7 +294,7 @@ must be closed before CONN can be used for other purposes."
   ;; Ask for "binary mode".
   (%ftp-command "TYPE I" 200 (ftp-connection-socket conn))
 
-  (let* ((port (ftp-pasv conn))
+  (let* ((port (ftp-passive conn))
          (ai   (ftp-connection-addrinfo conn))
          (s    (with-fluids ((%default-port-encoding #f))
                  (socket (addrinfo:fam ai) (addrinfo:socktype ai)
-- 
2.30.0


[-- Attachment #3: Type: text/plain, Size: 15 bytes --]


Okay to push?

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* bug#46481: "guix download" with ftp URL doesn't work on IPv6 network
  2021-02-14  4:08 ` 宋文武
@ 2021-02-14 19:28   ` Danny Milosavljevic
  2021-02-15  0:40     ` 宋文武
  0 siblings, 1 reply; 7+ messages in thread
From: Danny Milosavljevic @ 2021-02-14 19:28 UTC (permalink / raw)
  To: 宋文武; +Cc: 46481

[-- Attachment #1: Type: text/plain, Size: 7 bytes --]

LGTM!

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#46481: "guix download" with ftp URL doesn't work on IPv6 network
  2021-02-14 19:28   ` Danny Milosavljevic
@ 2021-02-15  0:40     ` 宋文武
  0 siblings, 0 replies; 7+ messages in thread
From: 宋文武 @ 2021-02-15  0:40 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: 46481-done

Danny Milosavljevic <dannym@scratchpost.org> writes:

> LGTM!

Pushed to master, thank you!




^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#46481:
  2021-02-13  2:35 bug#46481: "guix download" with ftp URL doesn't work on IPv6 network Danny Milosavljevic
  2021-02-14  4:08 ` 宋文武
@ 2021-02-17  9:15 ` Léo Le Bouter via Bug reports for GNU Guix
  2021-02-17 10:16   ` bug#46481: Tobias Geerinckx-Rice via Bug reports for GNU Guix
  1 sibling, 1 reply; 7+ messages in thread
From: Léo Le Bouter via Bug reports for GNU Guix @ 2021-02-17  9:15 UTC (permalink / raw)
  To: 46481

[-- Attachment #1: Type: text/plain, Size: 1192 bytes --]

Hello!

It looks like the proposed fix at
858898e348eb300a94b74115328ee39191829bda is causing other issues:

$ guix describe
Generation 27	Feb 17 2021 09:39:49	(current)
  guix 861ba52
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: 861ba5258399360a8f4c4e7cd08958f46d2c2b1e

$ strace guix refresh libgcrypt
....
read(15, "220-Welcome hacker!\r\n220-.\r\n220-"..., 4096) = 701
write(15, "USER anonymous\r\n", 16)     = 16
read(15, "331 Send e-mail address as passw"..., 4096) = 38
write(15, "PASS guix@example.com\r\n", 23) = 23
read(15, "230 User logged in, proceed.\r\n", 4096) = 30
brk(0x1534000)                          = 0x1534000
write(15, "CWD /\r\n", 7)               = 7
read(15, "250 Directory change successful."..., 4096) = 34
write(15, "CWD gcrypt\r\n", 12)         = 12
read(15, "250-This directory is used as FT"..., 4096) = 1106
write(15, "CWD libgcrypt\r\n", 15)      = 15
read(15, "250-This is the stable version o"..., 4096) = 135
write(15, "EPSV\r\n", 6)                = 6
read(15, 
... hangs ...

Should we explicitly check if we are over an IPv6 connection instead?
Is that possible?

Léo

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#46481:
  2021-02-17  9:15 ` bug#46481: Léo Le Bouter via Bug reports for GNU Guix
@ 2021-02-17 10:16   ` Tobias Geerinckx-Rice via Bug reports for GNU Guix
  2021-02-17 11:47     ` bug#46481: Danny Milosavljevic
  0 siblings, 1 reply; 7+ messages in thread
From: Tobias Geerinckx-Rice via Bug reports for GNU Guix @ 2021-02-17 10:16 UTC (permalink / raw)
  To: Léo Le Bouter; +Cc: 46481

[-- Attachment #1: Type: text/plain, Size: 449 bytes --]

Léo Le Bouter via Bug reports for GNU Guix 写道:
> Should we explicitly check if we are over an IPv6 connection 
> instead?
> Is that possible?

My FTP knowledge is about two decades out of date: does an IPv6 
server (de facto) have to support EPSV?

The ‘right’ way would be to send the FEAT command, and check 
whether the server actually supports EPSV.  A bit more 
heavy-weight than your heuristic.

Kind regards,

T G-R

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 247 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#46481:
  2021-02-17 10:16   ` bug#46481: Tobias Geerinckx-Rice via Bug reports for GNU Guix
@ 2021-02-17 11:47     ` Danny Milosavljevic
  0 siblings, 0 replies; 7+ messages in thread
From: Danny Milosavljevic @ 2021-02-17 11:47 UTC (permalink / raw)
  To: 46481; +Cc: lle-bout

[-- Attachment #1: Type: text/plain, Size: 3080 bytes --]

Hi,

On Wed, 17 Feb 2021 11:16:52 +0100
Tobias Geerinckx-Rice via Bug reports for GNU Guix <bug-guix@gnu.org> wrote:

> Léo Le Bouter via Bug reports for GNU Guix 写道:
> > Should we explicitly check if we are over an IPv6 connection 
> > instead?

That sounds very magical.  I mean we can do it as a last resort, I guess.
EPSV is supposed to work with both IPv4 and IPv6.

> > Is that possible?  
> 
> My FTP knowledge is about two decades out of date: does an IPv6 
> server (de facto) have to support EPSV?
> 
> The ‘right’ way would be to send the FEAT command, and check 
> whether the server actually supports EPSV.  A bit more 
> heavy-weight than your heuristic.

Good idea for a workaround, but your suggestion doesn't work with
ftp.gnupg.org:

CWD libgcrypt
250-This is the stable version of Libgcrypt. 
250-For devlopment versions see ../alpha/libgcrypt/.
250 Directory change successful.
FEAT
500 Syntax error, command unrecognized.
HELP
502 Command not implemented.

But this works:

USER anonymous
331 Send e-mail address as password.
PASS a@example.com
230 User logged in, proceed.
EPSV
229 Entering Extended Passive Mode (|||41682|)

And this works:

220 Service ready for new user.
USER anonymous
331 Send e-mail address as password.
PASS a@example.com
230 User logged in, proceed.
CWD /
250 Directory change successful.
EPSV
229 Entering Extended Passive Mode (|||40666|)

And this works:

220 Service ready for new user.
USER anonymous
331 Send e-mail address as password.
PASS a@example.com
230 User logged in, proceed.
CWD /
250 Directory change successful.
CWD gcrypt
[...]
250 Directory change successful.
EPSV
229 Entering Extended Passive Mode (|||41707|)

AND this works:

220 Service ready for new user.
USER anonymous
331 Send e-mail address as password.
PASS a@example.com
230 User logged in, proceed.
CWD /
250 Directory change successful.
CWD gcrypt
[...]
250 Directory change successful.
EPSV
229 Entering Extended Passive Mode (|||41358|)
CWD libgcrypt
250-This is the stable version of Libgcrypt. 
250-For devlopment versions see ../alpha/libgcrypt/.
250 Directory change successful.
EPSV
229 Entering Extended Passive Mode (|||41308|)

But this does not work:

220 Service ready for new user.
USER anonymous
331 Send e-mail address as password.
PASS a@example.com
230 User logged in, proceed.
CWD /
250 Directory change successful.
CWD gcrypt
[...]
250 Directory change successful.
CWD libgcrypt
250-This is the stable version of Libgcrypt. 
250-For devlopment versions see ../alpha/libgcrypt/.
250 Directory change successful.
EPSV
<hangs>

Looks like a straightforward server bug to me.

>250-Please contact ftpmaster@gnupg.org it you have any problems with

Please contact ftpmaster@gnupg.org !

I would not suggest to complicate perfectly valid client code just because the
server does weird stuff--especially when those servers are GNU project servers
anyway.  We can just talk to the server maintainers instead.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-02-17 11:48 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-13  2:35 bug#46481: "guix download" with ftp URL doesn't work on IPv6 network Danny Milosavljevic
2021-02-14  4:08 ` 宋文武
2021-02-14 19:28   ` Danny Milosavljevic
2021-02-15  0:40     ` 宋文武
2021-02-17  9:15 ` bug#46481: Léo Le Bouter via Bug reports for GNU Guix
2021-02-17 10:16   ` bug#46481: Tobias Geerinckx-Rice via Bug reports for GNU Guix
2021-02-17 11:47     ` bug#46481: Danny Milosavljevic

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).