From nobody@FreeBSD.org  Mon Jul 11 17:52:00 2005
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 52D3816A41C
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 11 Jul 2005 17:52:00 +0000 (GMT)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [216.136.204.117])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 220FB43D48
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 11 Jul 2005 17:52:00 +0000 (GMT)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.13.1/8.13.1) with ESMTP id j6BHpxSH016148
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 11 Jul 2005 17:51:59 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.13.1/8.13.1/Submit) id j6BHpxkT016147;
	Mon, 11 Jul 2005 17:51:59 GMT
	(envelope-from nobody)
Message-Id: <200507111751.j6BHpxkT016147@www.freebsd.org>
Date: Mon, 11 Jul 2005 17:51:59 GMT
From: John Baldwin <jhb@FreeBSD.org>
To: freebsd-gnats-submit@FreeBSD.org
Subject: libfetch includes the leading / in FTP URL paths
X-Send-Pr-Version: www-2.3

>Number:         83277
>Category:       bin
>Synopsis:       libfetch includes the leading / in FTP URL paths
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    des
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jul 11 18:00:29 GMT 2005
>Closed-Date:    
>Last-Modified:  Mon Jun  8 16:30:05 UTC 2009
>Originator:     John Baldwin
>Release:        4.8-RELEASE
>Organization:
>Environment:
>Description:
RFC 1738 specifies that the '/' character separating the hostname from the url-path in a FTP url is a separator and should not be treated as a part of the url-path.  Thus, ftp://foobar/baz/blah should retrieve the file 'baz/blah', but instead it tries to retrieve the file '/baz/blah'.      
>How-To-Repeat:
> fetch -vv ftp://yyy:zzz@xxx/foo/bar/baz
scheme:   [ftp]
user:     [yyy]
password: [zzz]
host:     [xxx]
port:     [0]
document: [/foo/bar/baz]
---> xxx:21
looking up xxx
connecting to xxx:21
<<< 220 xxx FTP server (Version 6.00LS) ready.
>Fix:
      
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->des 
Responsible-Changed-By: jhb 
Responsible-Changed-When: Mon Jul 11 19:04:43 GMT 2005 
Responsible-Changed-Why:  
des@ asked me to file a bug report and assign it to him. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=83277 

From: Kyle Larose <kmlarose@csclub.uwaterloo.ca>
To: bug-followup@FreeBSD.org, jhb@FreeBSD.org
Cc: kmlarose@csclub.uwaterloo.ca
Subject: Re: bin/83277: libfetch includes the leading / in FTP URL paths
Date: Fri, 28 Sep 2007 10:32:36 -0400 (EDT)

 --1635847814-580669018-1190989956=:4206
 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
 
 This patch fixes the issue with leading "/" in FTP URL paths. I originally
 wanted to make the change for this in the libfetch call to parse URLs, but
 it turns out that HTTP needs the / included. At least, Apache seemed to 
 not like requests which did not have a leading slash.
 
 So, this basically checks for a leading slash and removes it (note that 
 it will not remove multiple slashes--only the first). The next 
 modification removes the code which assumed that all paths were relative
 to "/" in the _ftp_cwd function.
 
 If the attachment isn't in the right format, or you don't think my 
 solution is ideal, let me know and I'll look into fixing it.
 
 Thanks,
 
 Kyle Larose
 Firmware Engineering Co-op
 www.sandvine.com
 --1635847814-580669018-1190989956=:4206
 Content-Type: TEXT/x-diff; charset=US-ASCII; name=ftp.patch
 Content-Transfer-Encoding: BASE64
 Content-ID: <Pine.LNX.4.64.0709281032360.4206@glucose-fructose.csclub.uwaterloo.ca>
 Content-Description: 
 Content-Disposition: attachment; filename=ftp.patch
 
 LS0tIGZ0cC5jQEAvbWFpbi9zYW5kdmluZV9ic2RfNV9tYWluLzEJMjAwNi0w
 My0xNCAxNDo0NjowNy4wMDAwMDAwMDAgLTA0MDANCisrKyBmdHAuYwkyMDA3
 LTA5LTI3IDE2OjMxOjExLjAwMDAwMDAwMCAtMDQwMA0KQEAgLTIxNywxOCAr
 MjE3LDE2IEBADQogX2Z0cF9jd2QoY29ubl90ICpjb25uLCBjb25zdCBjaGFy
 ICpmaWxlKQ0KIHsNCiAJY2hhciAqczsNCiAJaW50IGU7DQogDQotCWlmICgo
 cyA9IHN0cnJjaHIoZmlsZSwgJy8nKSkgPT0gTlVMTCB8fCBzID09IGZpbGUp
 IHsNCi0JCWUgPSBfZnRwX2NtZChjb25uLCAiQ1dEIC8iKTsNCi0JfSBlbHNl
 IHsNCisJaWYgKChzID0gc3RycmNocihmaWxlLCAnLycpKSAhPSBOVUxMKSB7
 DQogCQllID0gX2Z0cF9jbWQoY29ubiwgIkNXRCAlLipzIiwgcyAtIGZpbGUs
 IGZpbGUpOw0KLQl9DQotCWlmIChlICE9IEZUUF9GSUxFX0FDVElPTl9PSykg
 ew0KLQkJX2Z0cF9zZXRlcnIoZSk7DQotCQlyZXR1cm4gKC0xKTsNCisJCWlm
 IChlICE9IEZUUF9GSUxFX0FDVElPTl9PSykgew0KKwkJCV9mdHBfc2V0ZXJy
 KGUpOw0KKwkJCXJldHVybiAoLTEpOw0KKwkJfQ0KIAl9DQogCXJldHVybiAo
 MCk7DQogfQ0KIA0KIC8qDQpAQCAtOTQzLDExICs5NDEsMTEgQEANCiAJCWZl
 dGNoRnJlZVVSTChwdXJsKTsNCiAJaWYgKGNvbm4gPT0gTlVMTCkNCiAJCXJl
 dHVybiAoTlVMTCk7DQogDQogCS8qIGNoYW5nZSBkaXJlY3RvcnkgKi8NCi0J
 aWYgKF9mdHBfY3dkKGNvbm4sIHVybC0+ZG9jKSA9PSAtMSkNCisJaWYgKF9m
 dHBfY3dkKGNvbm4sIHVybC0+ZG9jWzBdID09ICcvJyA/IHVybC0+ZG9jICsg
 MSA6IHVybC0+ZG9jKSA9PSAtMSkNCiAJCWdvdG8gb3VjaDsNCiANCiAJLyog
 c3RhdCBmaWxlICovDQogCWlmICh1cyAmJiBfZnRwX3N0YXQoY29ubiwgdXJs
 LT5kb2MsIHVzKSA9PSAtMQ0KIAkgICAgJiYgZmV0Y2hMYXN0RXJyQ29kZSAh
 PSBGRVRDSF9QUk9UTw0K
 
 --1635847814-580669018-1190989956=:4206--

From: "Matt Koivisto" <mkoivisto@sandvine.com>
To: <bug-followup@FreeBSD.org>,
	<jhb@FreeBSD.org>
Cc:  
Subject: Re: bin/83277: libfetch includes the leading / in FTP URL paths
Date: Thu, 11 Sep 2008 10:54:17 -0400

 Attached is a patch against HEAD for libfetch. This changes behavior to
 as described in RFC 1738: ftp://foobar/baz/blah will "CWD baz" and
 "RETR blah".  Separately submitted PR patch bin/127280 enables the %2F
 escaped slash handling to allow ftp://foobar/%2Fbaz/blah to "CWD /baz"
 and "RETR blah".
 
 Similarly, ftp://foobar//baz/blah will also "CWD /baz" and "RETR blah".
 This is in violation of RFC 1738, which expects that to "CWD ", "CWD baz",
 'RETR blah". Since all FTP servers that conform to RFC 959 will return a
 5xx error code on a null parameter CWD, this is a reasonable thing to do
 instead.
 
 As a side effect, this fix also restores some previous minor functionality
 about handling extraneous slashes in the document portion of the url that was
 affected by the commit made to close bin/83278.
 
 Consider a ftp server with files:
 
 /file
 /foobar/file
 
 where CWD=/foobar upon connection.
 
 Since this change is not reverse compatible when connecting to ftp servers
 that do not start CWD in the root directory upon connection, the command
 "fetch ftp://<ftpserver>/file" would have fetched the file "/file", will
 now fetch the file "/foobar/file". To retrieve the file "/file" the user
 would have to issue the command "fetch ftp://<ftpserver>/%2Ffile" or
 "fetch ftp://<ftpserver>//file".
 
 
 ------_=_NextPart_001_01C9141E.447A8916
 Content-Type: text/plain;
 	name="libfetch-patch.txt"
 Content-Transfer-Encoding: base64
 Content-Description: libfetch-patch.txt
 Content-Disposition: attachment;
 	filename="libfetch-patch.txt"
 
 LS0tIHNyYy9saWIvbGliZmV0Y2gvZmV0Y2guYworKysgc3JjL2xpYi9saWJmZXRjaC9mZXRjaC5j
 Lm5ldwpAQCAtMzc4LDEzICszNzgsMjcgQEAKIAkJCX0KIAkJcCA9IHE7CiAJfQogCiBub2hvc3Q6
 Ci0JLyogZG9jdW1lbnQgKi8KKwkvKiBkb2N1bWVudAorCSAqCisJICogUkZDIDE3Mzggc3BlY2lm
 ZXMgb21pdHRpbmcgdGhlICIvIiBmcm9tIHRoZSBkb2N1bWVudCwgYW5kIHVzaW5nCisJICogJTJG
 IChlc2NhcGVkICIvIikgdG8gZW5jb2RlIGEgbGVhZGluZyAiLyIgaWYgZGVzaXJlZCBpbiB0aGUK
 KwkgKiBkb2N1bWVudC4gCisJICoKKwkgKiBYWFggVGhlIFJGQyBhbHNvIHNwZWNpZmVzIHRoYXQg
 aW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFsICIvIiBpbiB0aGUKKwkgKiAgICAgZG9jdW1lbnQgKGUu
 Zy4gPG1ldGhvZD46Ly88dXNlcj5APGhvc3Q+Ly9iYXIpIGEgQ1dEIHdpdGggYSBudWxsCisJICog
 ICAgIGFyZ3VtZW50IHNob3VsZCBiZSBpc3N1ZWQuIFRoaXMgY29uZmxpY3RzIHdpdGggYSBGVFAg
 c2VydmVyJ3MKKwkgKiAgICAgY29uZm9ybWFuY2UgdG8gUkZDIDk1OSBhbmQgcmVzdWx0cyBpbiBh
 IDV4eCBlcnJvciBzdGF0dXMgY29kZS4KKwkgKiAgICAgVGhlcmVmb3JlLCB3ZSBhcmUgaW50ZW50
 aW9uYWxseSBicmVha2luZyB3aXRoIHRoYXQgc3BlY2lmaWNhdGlvbgorCSAqICAgICBhbmQgdHJl
 YXRpbmcgYSBkb2N1bWVudCBwb3J0aW9uIG9mIC9iYXIgZXF1aWxpdmFudCB0byAlMkZiYXIKKwkg
 Ki8KIAlpZiAoISpwKQogCQlwID0gIi8iOworCWVsc2UgaWYgKCpwID09ICcvJyAmJiAqKHAgKyAx
 KSAhPSAnXDAnKQorCQkrK3A7CiAKIAlpZiAoc3RyY2FzZWNtcCh1LT5zY2hlbWUsIFNDSEVNRV9I
 VFRQKSA9PSAwIHx8CiAJICAgIHN0cmNhc2VjbXAodS0+c2NoZW1lLCBTQ0hFTUVfSFRUUFMpID09
 IDApIHsKIAkJY29uc3QgY2hhciBoZXhudW1zW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAKLS0t
 IHNyYy9saWIvbGliZmV0Y2gvZnRwLmMKKysrIHNyYy9saWIvbGliZmV0Y2gvZnRwLmMubmV3CkBA
 IC0yNzQsNTkgKzI3NCw4NCBAQAogCWludCBlLCBpLCBsZW47CiAKIAkvKiBJZiBubyBzbGFzaGVz
 IGluIG5hbWUsIG5vIG5lZWQgdG8gY2hhbmdlIGRpcnMuICovCiAJaWYgKChlbmQgPSBzdHJyY2hy
 KGZpbGUsICcvJykpID09IE5VTEwpCiAJCXJldHVybiAoMCk7Ci0JaWYgKChlID0gZnRwX2NtZChj
 b25uLCAiUFdEIikpICE9IEZUUF9XT1JLSU5HX0RJUkVDVE9SWSB8fAotCSAgICAoZSA9IGZ0cF9w
 d2QoY29ubiwgcHdkLCBzaXplb2YocHdkKSkpICE9IEZUUF9PSykgewotCQlmdHBfc2V0ZXJyKGUp
 OwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JZm9yICg7OykgeworCisjaWZkZWYgRlRQX0NPTUJJTkVf
 Q1dEUworCS8qIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGFsbCBpbiBvbmUgY2h1bmsgKGUuZy4s
 IGZvby9iYXIvYmF6KS4gKi8KKwllID0gX2Z0cF9jbWQoY29ubiwgIkNXRCAlLipzIiwgZW5kIC0g
 ZmlsZSArIDEsIGZpbGUpOworCisJaWYgKGUgPT0gRlRQX0ZJTEVfQUNUSU9OX09LKQorCQlyZXR1
 cm4gKDApOworI2VuZGlmIC8qIEZUUF9DT01CSU5FX0NXRFMgKi8KKwkvKiBUaGF0IGRpZG4ndCB3
 b3JrIHNvIGdvIGJhY2sgdG8gbGVnYWN5IGJlaGF2aW9yIChtdWx0aXBsZSBDV0RzKS4gKi8KKwor
 CS8qCisJICogUkZDIDE3Mzggc3BlY2lmZXMgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYWwg
 Ii8iIGluIHRoZQorCSAqIGRvY3VtZW50IChlLmcuIDxtZXRob2Q+Oi8vPHVzZXI+QDxob3N0Pi8v
 YmFyKSBhIENXRCB3aXRoIGEgbnVsbAorCSAqIGFyZ3VtZW50IHNob3VsZCBiZSBpc3N1ZWQuIFRo
 aXMgY29uZmxpY3RzIHdpdGggYSBGVFAgc2VydmVyJ3MKKwkgKiBjb25mb3JtYW5jZSB0byBSRkMg
 OTU5IGFuZCByZXN1bHRzIGluIGEgNXh4IGVycm9yIHN0YXR1cyBjb2RlLgorCSAqIEluc3RlYWQs
 IHRyZWF0IGEgbGl0ZXJhbCAiLyIgYXMgaWYgaXQgd2FzIHNwZWNpZmllZCBieSBhbgorCSAqIGVz
 Y2FwZWQgJTJGLiBmZXRjaFBhcnNlVVJMIHdpbGwgY29udmVydCBhbnkgZXNjYXBlZCAlMkYgc2xh
 c2hlcworCSAqIGludG8gbGl0ZXJhbCBzbGFzaGVzIGZvciBTQ0hFTUVfRlRQIHVybHMuCisJICov
 CisKKwkvKiBMZWFkaW5nIHNsYXNoIGluIGZpbGUgKGFic29sdXRlIHBhdGgpLCBDRFVQIHRvIGFu
 eSBjb21tb24gZGlyICovCisJd2hpbGUgKGZpbGVbMF0gPT0gJy8nICYmIGVuZCAtIGZpbGUgPj0g
 MCkgeworCQlpZiAoKGUgPSBfZnRwX2NtZChjb25uLCAiUFdEIikpICE9IEZUUF9XT1JLSU5HX0RJ
 UkVDVE9SWSB8fAorCQkgICAgKGUgPSBfZnRwX3B3ZChjb25uLCBwd2QsIHNpemVvZihwd2QpKSkg
 IT0gRlRQX09LKSB7CisJCQlmdHBfc2V0ZXJyKGUpOworCQkJcmV0dXJuICgtMSk7CisJCX0KIAkJ
 bGVuID0gc3RybGVuKHB3ZCk7CisJCWlmIChsZW4gPD0gMSkKKwkJCWJyZWFrOworCQkKKwkJLyog
 dHJpbSBhbnkgZXh0cmFuZW91cyBsZWFkaW5nIHNsYXNoZXMgKi8KKwkJd2hpbGUgKGZpbGVbMF0g
 PT0gJy8nICYmIGZpbGVbMV0gPT0gJy8nKQorCQkJKytmaWxlOwogCiAJCS8qIExvb2sgZm9yIGEg
 Y29tbW9uIHByZWZpeCBiZXR3ZWVuIFBXRCBhbmQgZGlyIHRvIGZldGNoLiAqLwogCQlmb3IgKGkg
 PSAwOyBpIDw9IGxlbiAmJiBpIDw9IGVuZCAtIGZpbGU7ICsraSkKIAkJCWlmIChwd2RbaV0gIT0g
 ZmlsZVtpXSkKIAkJCQlicmVhazsKKwogI2lmIDAKLQkJREVCVUcoZnByaW50ZihzdGRlcnIsICJo
 YXZlOiBbJS4qc3wlc11cbiIsIGksIHB3ZCwgcHdkICsgaSkpOwotCQlERUJVRyhmcHJpbnRmKHN0
 ZGVyciwgIndhbnQ6IFslLipzfCVzXVxuIiwgaSwgZmlsZSwgZmlsZSArIGkpKTsKKwkJREVCVUco
 ZnByaW50ZihzdGRlcnIsICJwd2Q6IFslLipzfCVzfCVkXVxuIiwgaSwgcHdkLCBwd2QsIGkpKTsK
 KwkJREVCVUcoZnByaW50ZihzdGRlcnIsICJmaWxlOiBbJS4qc3wlc3wlZF1cbiIsIGksIGZpbGUs
 IGZpbGUsIGkpKTsKICNlbmRpZgorCiAJCS8qIEtlZXAgZ29pbmcgdXAgYSBkaXIgdW50aWwgd2Ug
 aGF2ZSBhIG1hdGNoaW5nIHByZWZpeC4gKi8KLQkJaWYgKHB3ZFtpXSA9PSAnXDAnICYmIChmaWxl
 W2kgLSAxXSA9PSAnLycgfHwgZmlsZVtpXSA9PSAnLycpKQorCQlpZiAocHdkW2ldID09ICdcMCcg
 JiYgZmlsZVtpXSA9PSAnLycpIHsKKwkJCWZpbGUgPSBmaWxlICsgaTsKIAkJCWJyZWFrOwotCQlp
 ZiAoKGUgPSBmdHBfY21kKGNvbm4sICJDRFVQIikpICE9IEZUUF9GSUxFX0FDVElPTl9PSyB8fAot
 CQkgICAgKGUgPSBmdHBfY21kKGNvbm4sICJQV0QiKSkgIT0gRlRQX1dPUktJTkdfRElSRUNUT1JZ
 IHx8Ci0JCSAgICAoZSA9IGZ0cF9wd2QoY29ubiwgcHdkLCBzaXplb2YocHdkKSkpICE9IEZUUF9P
 SykgeworCQl9CisJCisJCWlmICgoZSA9IF9mdHBfY21kKGNvbm4sICJDRFVQIikpICE9IEZUUF9G
 SUxFX0FDVElPTl9PSykgewogCQkJZnRwX3NldGVycihlKTsKIAkJCXJldHVybiAoLTEpOwogCQl9
 CiAJfQogCi0jaWZkZWYgRlRQX0NPTUJJTkVfQ1dEUwotCS8qIFNraXAgbGVhZGluZyBzbGFzaGVz
 LCBldmVuICIvLy8vIi4gKi8KLQlmb3IgKGJlZyA9IGZpbGUgKyBpOyBiZWcgPCBlbmQgJiYgKmJl
 ZyA9PSAnLyc7ICsrYmVnLCArK2kpCi0JCS8qIG5vdGhpbmcgKi8gOwotCi0JLyogSWYgdGhlcmUg
 aXMgbm8gdHJhaWxpbmcgZGlyLCB3ZSdyZSBhbHJlYWR5IHRoZXJlLiAqLwotCWlmIChiZWcgPj0g
 ZW5kKQorCS8qIENoZWNrIGlmIGN3ZCBpcyBub3cgY29ycmVjdCAqLworCWlmICgoZW5kID0gc3Ry
 cmNocihmaWxlLCAnLycpKSA9PSBOVUxMKQogCQlyZXR1cm4gKDApOwogCi0JLyogQ2hhbmdlIHRv
 IHRoZSBkaXJlY3RvcnkgYWxsIGluIG9uZSBjaHVuayAoZS5nLiwgZm9vL2Jhci9iYXopLiAqLwot
 CWUgPSBmdHBfY21kKGNvbm4sICJDV0QgJS4qcyIsIChpbnQpKGVuZCAtIGJlZyksIGJlZyk7Ci0J
 aWYgKGUgPT0gRlRQX0ZJTEVfQUNUSU9OX09LKQotCQlyZXR1cm4gKDApOwotI2VuZGlmIC8qIEZU
 UF9DT01CSU5FX0NXRFMgKi8KKwkvKiBDV0QgdG8gY29ycmVjdCBkaXJlY3RvcnkgKi8KKwlmb3Ig
 KDs7KSB7CisJCS8qIHRyaW0gYW55IGV4dHJhbmVvdXMgbGVhZGluZyBzbGFzaGVzICovCisJCXdo
 aWxlICgqZmlsZSA9PSAnLycpCisJCQkrK2ZpbGU7CiAKLQkvKiBUaGF0IGRpZG4ndCB3b3JrIHNv
 IGdvIGJhY2sgdG8gbGVnYWN5IGJlaGF2aW9yIChtdWx0aXBsZSBDV0RzKS4gKi8KLQlmb3IgKGJl
 ZyA9IGZpbGUgKyBpOyBiZWcgPCBlbmQ7IGJlZyA9IGZpbGUgKyBpICsgMSkgewotCQl3aGlsZSAo
 KmJlZyA9PSAnLycpCi0JCQkrK2JlZywgKytpOwotCQlmb3IgKCsraTsgZmlsZSArIGkgPCBlbmQg
 JiYgZmlsZVtpXSAhPSAnLyc7ICsraSkKLQkJCS8qIG5vdGhpbmcgKi8gOwotCQllID0gZnRwX2Nt
 ZChjb25uLCAiQ1dEICUuKnMiLCBmaWxlICsgaSAtIGJlZywgYmVnKTsKKwkJYmVnPWZpbGU7CisJ
 CWlmICgoZmlsZSA9IHN0cmNocihmaWxlLCAnLycpKSA9PSBOVUxMKQorCQkJYnJlYWs7CisjaWYg
 MAorCQlERUJVRyhmcHJpbnRmKHN0ZGVyciwgImN3ZDogWyUuKnN8JXN8JWRdXG4iLCBmaWxlIC0g
 YmVnLCBiZWcsIGZpbGUsIGZpbGUgLSBiZWcpKTsKKyNlbmRpZgorCQllID0gX2Z0cF9jbWQoY29u
 biwgIkNXRCAlLipzIiwgZmlsZSAtIGJlZywgYmVnKTsKIAkJaWYgKGUgIT0gRlRQX0ZJTEVfQUNU
 SU9OX09LKSB7CiAJCQlmdHBfc2V0ZXJyKGUpOwogCQkJcmV0dXJuICgtMSk7CiAJCX0KIAl9Cgot
 LS0gc3JjL2xpYi9saWJmZXRjaC9odHRwLmMKKysrIHNyYy9saWIvbGliZmV0Y2gvaHR0cC5jLm5l
 dwpAQCAtODY3LDE3ICs4NjcsMTcgQEAKIAkJCSAgICBzaXplb2YoaGJ1ZikgLSBzdHJsZW4oaGJ1
 ZiksICI6JWQiLCB1cmwtPnBvcnQpOwogCQl9CiAKIAkJLyogc2VuZCByZXF1ZXN0ICovCiAJCWlm
 ICh2ZXJib3NlKQotCQkJZmV0Y2hfaW5mbygicmVxdWVzdGluZyAlczovLyVzJXMiLAorCQkJZmV0
 Y2hfaW5mbygicmVxdWVzdGluZyAlczovLyVzLyVzIiwKIAkJCSAgICB1cmwtPnNjaGVtZSwgaG9z
 dCwgdXJsLT5kb2MpOwogCQlpZiAocHVybCkgewotCQkJaHR0cF9jbWQoY29ubiwgIiVzICVzOi8v
 JXMlcyBIVFRQLzEuMSIsCisJCQlodHRwX2NtZChjb25uLCAiJXMgJXM6Ly8lcy8lcyBIVFRQLzEu
 MSIsCiAJCQkgICAgb3AsIHVybC0+c2NoZW1lLCBob3N0LCB1cmwtPmRvYyk7CiAJCX0gZWxzZSB7
 Ci0JCQlodHRwX2NtZChjb25uLCAiJXMgJXMgSFRUUC8xLjEiLAorCQkJaHR0cF9jbWQoY29ubiwg
 IiVzIC8lcyBIVFRQLzEuMSIsCiAJCQkgICAgb3AsIHVybC0+ZG9jKTsKIAkJfQogCiAJCS8qIHZp
 cnR1YWwgaG9zdCAqLwogCQlodHRwX2NtZChjb25uLCAiSG9zdDogJXMiLCBob3N0KTsKQEAgLTkw
 NiwxMSArOTA2LDExIEBACiAJCX0KIAogCQkvKiBvdGhlciBoZWFkZXJzICovCiAJCWlmICgocCA9
 IGdldGVudigiSFRUUF9SRUZFUkVSIikpICE9IE5VTEwgJiYgKnAgIT0gJ1wwJykgewogCQkJaWYg
 KHN0cmNhc2VjbXAocCwgImF1dG8iKSA9PSAwKQotCQkJCWh0dHBfY21kKGNvbm4sICJSZWZlcmVy
 OiAlczovLyVzJXMiLAorCQkJCWh0dHBfY21kKGNvbm4sICJSZWZlcmVyOiAlczovLyVzLyVzIiwK
 IAkJCQkgICAgdXJsLT5zY2hlbWUsIGhvc3QsIHVybC0+ZG9jKTsKIAkJCWVsc2UKIAkJCQlodHRw
 X2NtZChjb25uLCAiUmVmZXJlcjogJXMiLCBwKTsKIAkJfQogCQlpZiAoKHAgPSBnZXRlbnYoIkhU
 VFBfVVNFUl9BR0VOVCIpKSAhPSBOVUxMICYmICpwICE9ICdcMCcpCg==
 
 ------_=_NextPart_001_01C9141E.447A8916--


From: Ed Maste <emaste@freebsd.org>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/83277: libfetch includes the leading / in FTP URL paths
Date: Wed, 3 Jun 2009 21:25:51 -0400


 Testing shows this patch introduces a bug when libfetch is used to
 retrieve multiple files by FTP in the same connection.
 
 i.e.
 
 f = fetchGetURL(url1, "");
 fclose(f);
 f = fetchGetURL(url2, "");
 fclose(f);

From: "Kirill Stepanchuk" <kstepanchuk@sandvine.com>
To: <bug-followup@FreeBSD.org>,
	<jhb@FreeBSD.org>
Cc:  
Subject: Re: bin/83277: libfetch includes the leading / in FTP URL paths
Date: Mon, 8 Jun 2009 11:57:31 -0400

 This is a multi-part message in MIME format.
 
 ------_=_NextPart_001_01C9E851.D4A51010
 Content-Type: multipart/alternative;
 	boundary="----_=_NextPart_002_01C9E851.D4A51010"
 
 
 ------_=_NextPart_002_01C9E851.D4A51010
 Content-Type: text/plain;
 	charset="us-ascii"
 Content-Transfer-Encoding: quoted-printable
 
 Here is a change for libfetch to make it CWD properly if the ftp session
 does not start in "/". Libfetch will now prepend the starting directory
 to any CWD, unless the url specifies an absolute path such as=20
 ftp://host//absolute.txt <ftp://host/absolute.txt>=20
 
 =20
 
 I have created two diffs. One against Matt's changes that strip the
 leading slash that is taken from the host portion. Another is against
 HEAD, with the diff stripping the leading slash itself. The changes are
 in ftp_cwd(...) and in ftp_connect(...) functions.
 
 =20
 
 =20
 
 
 ------_=_NextPart_002_01C9E851.D4A51010
 Content-Type: text/html;
 	charset="us-ascii"
 Content-Transfer-Encoding: quoted-printable
 
 <html xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
 xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
 xmlns=3D"http://www.w3.org/TR/REC-html40">
 
 <head>
 <meta http-equiv=3DContent-Type content=3D"text/html; =
 charset=3Dus-ascii">
 <meta name=3DGenerator content=3D"Microsoft Word 11 (filtered medium)">
 <style>
 <!--
  /* Style Definitions */
  p.MsoNormal, li.MsoNormal, div.MsoNormal
 	{margin:0in;
 	margin-bottom:.0001pt;
 	font-size:12.0pt;
 	font-family:"Times New Roman";}
 a:link, span.MsoHyperlink
 	{color:blue;
 	text-decoration:underline;}
 a:visited, span.MsoHyperlinkFollowed
 	{color:purple;
 	text-decoration:underline;}
 span.EmailStyle17
 	{mso-style-type:personal-compose;
 	font-family:Arial;
 	color:windowtext;}
 @page Section1
 	{size:8.5in 11.0in;
 	margin:1.0in 1.25in 1.0in 1.25in;}
 div.Section1
 	{page:Section1;}
 -->
 </style>
 
 </head>
 
 <body lang=3DEN-US link=3Dblue vlink=3Dpurple>
 
 <div class=3DSection1>
 
 <p class=3DMsoNormal><font size=3D2 face=3DArial><span =
 style=3D'font-size:10.0pt;
 font-family:Arial'>Here is a change for libfetch to make it CWD properly =
 if the
 ftp session does not start in &#8220;/&#8221;. Libfetch will now prepend =
 the
 starting directory to any CWD, unless the url specifies an absolute path =
 such
 as <a =
 href=3D"ftp://host/absolute.txt">ftp://host//absolute.txt</a><o:p></o:p><=
 /span></font></p>
 
 <p class=3DMsoNormal><font size=3D2 face=3DArial><span =
 style=3D'font-size:10.0pt;
 font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>
 
 <p class=3DMsoNormal><font size=3D2 face=3DArial><span =
 style=3D'font-size:10.0pt;
 font-family:Arial'>I have created two diffs. One against Matt&#8217;s =
 changes
 that strip the leading slash that is taken from the host portion. =
 Another is
 against HEAD, with the diff stripping the leading slash itself. The =
 changes are
 in ftp_cwd(&#8230;) and in ftp_connect(&#8230;) =
 functions.<o:p></o:p></span></font></p>
 
 <p class=3DMsoNormal><font size=3D2 face=3DArial><span =
 style=3D'font-size:10.0pt;
 font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>
 
 <p class=3DMsoNormal><font size=3D2 face=3DArial><span =
 style=3D'font-size:10.0pt;
 font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>
 
 </div>
 
 </body>
 
 </html>
 
 ------_=_NextPart_002_01C9E851.D4A51010--
 
 ------_=_NextPart_001_01C9E851.D4A51010
 Content-Type: application/octet-stream;
 	name="noslash.diff"
 Content-Transfer-Encoding: base64
 Content-Description: noslash.diff
 Content-Disposition: attachment;
 	filename="noslash.diff"
 
 LS0tIGNvbW1vbi5oLm9yaWcJMjAwOS0wNi0wNSAxODowMDoxMC40MzUwNzg3MDAgLTA0MDAKKysr
 IGNvbW1vbi5oCTIwMDktMDYtMDUgMTc6NTk6MDcuMDc0ODQ4OTAwIC0wNDAwCkBAIC01MSw2ICs1
 MSw3IEBACiAJY2hhcgkJKmJ1ZjsJCS8qIGJ1ZmZlciAqLwogCXNpemVfdAkJIGJ1ZnNpemU7CS8q
 IGJ1ZmZlciBzaXplICovCiAJc2l6ZV90CQkgYnVmbGVuOwkvKiBsZW5ndGggb2YgYnVmZmVyIGNv
 bnRlbnRzICovCisJY2hhcgkJIHN0YXJ0cHdkW1BBVEhfTUFYXTsgLyogc3RhcnRpbmcgZGlyZWN0
 b3J5ICovCiAJaW50CQkgZXJyOwkJLyogbGFzdCBwcm90b2NvbCByZXBseSBjb2RlICovCiAjaWZk
 ZWYgV0lUSF9TU0wKIAlTU0wJCSpzc2w7CQkvKiBTU0wgaGFuZGxlICovCi0tLSBmdHAuYy5vcmln
 CTIwMDktMDYtMDUgMTc6NTg6NTcuMTI5NTgwNzAwIC0wNDAwCisrKyBmdHAuYwkyMDA5LTA2LTA1
 IDE3OjU4OjQxLjMyMzMxNjEwMCAtMDQwMApAQCAtMjY2LDcgKzI2NiwxNyBAQAogCWNvbnN0IGNo
 YXIgKmJlZywgKmVuZDsKIAljaGFyIHB3ZFtQQVRIX01BWF07CiAJaW50IGUsIGksIGxlbjsKKwlj
 aGFyIGFic2ZpbGVbUEFUSF9NQVhdOwogCisJaWYgKGZpbGVbMF0gPT0gJy8nKSB7IC8qIGFic29s
 dXRlIHBhdGggcmVxdWVzdGVkICovCisJICAgIC8qIGRvIG5vdGhpbmcsIENXRHMgd2lsbCBoYXBw
 ZW4gcHJvcGVybHkgKi8KKwl9IGVsc2UgaWYgKCFzdHJjbXAoY29ubi0+c3RhcnRwd2QsICIvIikp
 IHsgLyogc3RhcnRpbmcgZGlyZWN0b3J5IGlzICIvIiAqLworCSAgICBzbnByaW50ZihhYnNmaWxl
 LCBQQVRIX01BWCwgIi8lcyIsIGZpbGUpOworCSAgICBmaWxlID0gYWJzZmlsZTsKKwl9IGVsc2Ug
 eyAgLyogc3RhcnRpbmcgZGlyZWN0b3J5IHdhcyBub3QgIi8iIGFuZCByZWxhdGl2ZSBwYXRoIHJl
 cXVlc3RlZCAqLworCSAgICBzbnByaW50ZihhYnNmaWxlLCBQQVRIX01BWCwgIiVzLyVzIiwgY29u
 bi0+c3RhcnRwd2QsIGZpbGUpOworCSAgICBmaWxlID0gYWJzZmlsZTsKKwl9CiAJLyogSWYgbm8g
 c2xhc2hlcyBpbiBuYW1lLCBubyBuZWVkIHRvIGNoYW5nZSBkaXJzLiAqLwogCWlmICgoZW5kID0g
 c3RycmNocihmaWxlLCAnLycpKSA9PSBOVUxMKQogCQlyZXR1cm4gKDApOwpAQCAtMTAxMiw3ICsx
 MDIyLDEyIEBACiAJCWdvdG8gZm91Y2g7CiAKIAkvKiBUT0RPOiBSZXF1ZXN0IGV4dGVuZGVkIGZl
 YXR1cmVzIHN1cHBvcnRlZCwgaWYgYW55IChSRkMgMzY1OSkuICovCi0KKwkvKiBHZXQgc3RhcnRp
 bmcgUFdEIGFuZCBzdG9yZSBpbiBjb25uZWN0aW9uICovCisJaWYgKChlID0gX2Z0cF9jbWQoY29u
 biwgIlBXRCIpKSAhPSBGVFBfV09SS0lOR19ESVJFQ1RPUlkgfHwKKwkJLyogY29ubi0+c3RhcnRw
 d2RbXSBpcyBkZWNsYXJlZCB0byBiZSBQQVRIX01BWCBpbiBjb21tb24uaCAqLworCSAgICAoZSA9
 IF9mdHBfcHdkKGNvbm4sIGNvbm4tPnN0YXJ0cHdkLCBQQVRIX01BWCkpICE9IEZUUF9PSykKKwkJ
 Z290byBmb3VjaDsKKwkKIAkvKiBkb25lICovCiAJcmV0dXJuIChjb25uKTsKIAo=
 
 ------_=_NextPart_001_01C9E851.D4A51010
 Content-Type: application/octet-stream;
 	name="HEAD.diff"
 Content-Transfer-Encoding: base64
 Content-Description: HEAD.diff
 Content-Disposition: attachment;
 	filename="HEAD.diff"
 
 LS0tIGNvbW1vbi5oLm9yaWcJMjAwOS0wNi0wOCAxMTo0MDoyMS4xNTg3MTU3MDAgLTA0MDAKKysr
 IGNvbW1vbi5oCTIwMDktMDYtMDggMTE6Mzk6NDcuOTA2MDc3NjAwIC0wNDAwCkBAIC01MSw2ICs1
 MSw3IEBACiAJY2hhcgkJKmJ1ZjsJCS8qIGJ1ZmZlciAqLwogCXNpemVfdAkJIGJ1ZnNpemU7CS8q
 IGJ1ZmZlciBzaXplICovCiAJc2l6ZV90CQkgYnVmbGVuOwkvKiBsZW5ndGggb2YgYnVmZmVyIGNv
 bnRlbnRzICovCisJY2hhcgkJIHN0YXJ0cHdkW1BBVEhfTUFYXTsgLyogc3RhcnRpbmcgZGlyZWN0
 b3J5ICovCiAJaW50CQkgZXJyOwkJLyogbGFzdCBwcm90b2NvbCByZXBseSBjb2RlICovCiAjaWZk
 ZWYgV0lUSF9TU0wKIAlTU0wJCSpzc2w7CQkvKiBTU0wgaGFuZGxlICovCi0tLSBmdHAuYy5vcmln
 CTIwMDktMDYtMDggMTE6NDA6MzguODA4MDcyNzAwIC0wNDAwCisrKyBmdHAuYwkyMDA5LTA2LTA4
 IDExOjM5OjQ3LjkzNzMxNTQwMCAtMDQwMApAQCAtMjcyLDcgKzI3MiwxOSBAQAogCWNvbnN0IGNo
 YXIgKmJlZywgKmVuZDsKIAljaGFyIHB3ZFtQQVRIX01BWF07CiAJaW50IGUsIGksIGxlbjsKKyAg
 ICAgICAgY2hhciBhYnNmaWxlW1BBVEhfTUFYXTsKIAorCS8qIGZpbGUgaW5jbHVkZXMgdGhlIGxl
 YWRpbmcgc2xhc2ggZnJvbSB0aGUgaG9zdCBwb3J0aW9uICovCisJZmlsZSsrOworICAgICAgICBp
 ZiAoZmlsZVswXSA9PSAnLycpIHsgLyogYWJzb2x1dGUgcGF0aCByZXF1ZXN0ZWQgKi8KKyAgICAg
 ICAgICAgIC8qIGRvIG5vdGhpbmcsIENXRHMgd2lsbCBoYXBwZW4gcHJvcGVybHkgKi8KKyAgICAg
 ICAgfSBlbHNlIGlmICghc3RyY21wKGNvbm4tPnN0YXJ0cHdkLCAiLyIpKSB7IC8qIHN0YXJ0aW5n
 IGRpcmVjdG9yeSBpcyAiLyIgKi8KKyAgICAgICAgICAgIHNucHJpbnRmKGFic2ZpbGUsIFBBVEhf
 TUFYLCAiLyVzIiwgZmlsZSk7CisgICAgICAgICAgICBmaWxlID0gYWJzZmlsZTsKKyAgICAgICAg
 fSBlbHNlIHsgIC8qIHN0YXJ0aW5nIGRpcmVjdG9yeSB3YXMgbm90ICIvIiBhbmQgcmVsYXRpdmUg
 cGF0aCByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICAgIHNucHJpbnRmKGFic2ZpbGUsIFBBVEhfTUFY
 LCAiJXMvJXMiLCBjb25uLT5zdGFydHB3ZCwgZmlsZSk7CisgICAgICAgICAgICBmaWxlID0gYWJz
 ZmlsZTsKKyAgICAgICAgfQogCS8qIElmIG5vIHNsYXNoZXMgaW4gbmFtZSwgbm8gbmVlZCB0byBj
 aGFuZ2UgZGlycy4gKi8KIAlpZiAoKGVuZCA9IHN0cnJjaHIoZmlsZSwgJy8nKSkgPT0gTlVMTCkK
 IAkJcmV0dXJuICgwKTsKQEAgLTk5Myw2ICsxMDA1LDExIEBACiAJCWdvdG8gZm91Y2g7CiAKIAkv
 KiBUT0RPOiBSZXF1ZXN0IGV4dGVuZGVkIGZlYXR1cmVzIHN1cHBvcnRlZCwgaWYgYW55IChSRkMg
 MzY1OSkuICovCisgICAgICAgIC8qIEdldCBzdGFydGluZyBQV0QgYW5kIHN0b3JlIGluIGNvbm5l
 Y3Rpb24gKi8KKyAgICAgICAgaWYgKChlID0gZnRwX2NtZChjb25uLCAiUFdEIikpICE9IEZUUF9X
 T1JLSU5HX0RJUkVDVE9SWSB8fAorICAgICAgICAgICAgICAgIC8qIGNvbm4tPnN0YXJ0cHdkW10g
 aXMgZGVjbGFyZWQgdG8gYmUgUEFUSF9NQVggaW4gY29tbW9uLmggKi8KKyAgICAgICAgICAgIChl
 ID0gZnRwX3B3ZChjb25uLCBjb25uLT5zdGFydHB3ZCwgUEFUSF9NQVgpKSAhPSBGVFBfT0spCisg
 ICAgICAgICAgICAgICAgZ290byBmb3VjaDsKIAogCS8qIGRvbmUgKi8KIAlyZXR1cm4gKGNvbm4p
 Owo=
 
 ------_=_NextPart_001_01C9E851.D4A51010--

From: "Kirill Stepanchuk" <kstepanchuk@sandvine.com>
To: <bug-followup@FreeBSD.org>,
	<jhb@FreeBSD.org>
Cc:  
Subject: RE: Re: bin/83277: libfetch includes the leading / in FTP URL paths
Date: Mon, 8 Jun 2009 12:23:29 -0400

 Heh, weird how the message got clobbered. Sorry about that. Here is what
 I intended to send:
 ----------------------
 Here is a change for libfetch to make it CWD properly if the ftp session
 does not start in "/". Libfetch will now prepend the starting directory
 to any CWD, unless the url specifies an absolute path such as
 ftp://host//absolute.txt
 
 I have created two diffs. One against Matt's changes that strip the
 leading slash that is taken from the host portion. Another is against
 HEAD, with the diff stripping the leading slash itself. The changes are
 in ftp_cwd(...) and in ftp_connect(...) functions.
 
 
>Unformatted:
 >>> USER yyy
 <<< 331 Password required for yyy.
 >>> PASS zzz
 <<< 230 User yyy logged in.
 >>> TYPE I
 <<< 200 Type set to I.
 >>> CWD /foo/bar
 <<< 550 /foo/bar: No such file or directory.
 fetch: ftp://yyy:zzz@xxx/foo/bar/baz: File unavailable (e.g., file not found, no access)
 
