Roel Janssen writes: >>From e7263ce1d1a242f187c9801b14ea47043f59be8e Mon Sep 17 00:00:00 2001 > From: Roel Janssen > Date: Mon, 20 Mar 2017 12:59:59 +0100 > Subject: [PATCH 2/2] download: Handle username and password properties for FTP > uris. > > guix/build/download.scm (ftp-fetch): Process username and password from a URI. > --- > guix/build/download.scm | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/guix/build/download.scm b/guix/build/download.scm > index 36c815c16..f48da7500 100644 > --- a/guix/build/download.scm > +++ b/guix/build/download.scm > @@ -241,7 +241,14 @@ and 'guix publish', something like > (define* (ftp-fetch uri file #:key timeout) > "Fetch data from URI and write it to FILE. Return FILE on success. Bail > out if the connection could not be established in less than TIMEOUT seconds." > - (let* ((conn (ftp-open (uri-host uri) #:timeout timeout)) > + (let* ((userinfo (string-split (uri-userinfo uri) #\:)) > + (username (if (and (> (length userinfo) 0) > + (not (string= (car userinfo) ""))) > + (car userinfo) #f)) > + (password (if (> (length userinfo) 1) (cadr userinfo) #f)) > + (conn (ftp-open (uri-host uri) #:timeout timeout > + #:username username > + #:password password)) > (size (false-if-exception (ftp-size conn (uri-path uri)))) > (in (ftp-retr conn (basename (uri-path uri)) > (dirname (uri-path uri))))) Hi Roel, The code looks good and seems to work fine, but seeing that this is my first time reviewing a patch to the "inner workings" of Guix, I'll defer to the opinion of someone more experienced.