download: Handle username and password properties for FTP URIs.

* guix/build/download.scm (ftp-fetch): Process username and password from a URI.
This commit is contained in:
Roel Janssen 2017-03-21 12:15:14 +01:00
parent 193420a803
commit a4f5423415
No known key found for this signature in database
GPG Key ID: C3EC1DCA843072E1
1 changed files with 12 additions and 1 deletions

View File

@ -241,7 +241,18 @@ and 'guix publish', something like
(define* (ftp-fetch uri file #:key timeout) (define* (ftp-fetch uri file #:key timeout)
"Fetch data from URI and write it to FILE. Return FILE on success. Bail "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." 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) #\:))
(conn (match userinfo
(("")
(ftp-open (uri-host uri) #:timeout timeout))
(((? string? user))
(ftp-open (uri-host uri) #:timeout timeout
#:username user))
(((? string? user) (? string? pass))
(ftp-open (uri-host uri) #:timeout timeout
#:username user
#:password pass))
(_ (ftp-open (uri-host uri) #:timeout timeout))))
(size (false-if-exception (ftp-size conn (uri-path uri)))) (size (false-if-exception (ftp-size conn (uri-path uri))))
(in (ftp-retr conn (basename (uri-path uri)) (in (ftp-retr conn (basename (uri-path uri))
(dirname (uri-path uri))))) (dirname (uri-path uri)))))