Am 09.06.17 um 14:35 schrieb Enrique Catalan:
Here is a good test case of Brian's point that shows more details
about the problem which is when the URL has another URL as a value of
an url var, check this out:
% set
url "/comments/view?object_id=45&return_url=/ticket/view?x=456&ticket_id=90"
if we run "ns_urlencode -part query $url", in the naviserver
implementation that follows the RFC #1738 as per
https://naviserver.sourceforge.io/n/naviserver/files/ns_urlencode.html ,
Dear Enrique,
Since you are using the windows version of NaviServer that Maurizio
provides, you are not using NaviServer 4.99.15, to which this man page
refers, but some newer version (check with [ns_info patchlevel] and/or
[ns_info tag]).
The version on bitbucket conforms to RFC 3986 (see [1] for details).
we get this result:
/comments/view?object_id%3d45%26return_url%3d/ticket/view?x%3d456%26ticket_id%3d90
( it doesn't encode the / and ? in the value of return_url ).
However, if we use the TCL implementation, "::http::formatQuery $url",
which seems to follow a different RFC, RFC #2718, as per
https://www.tcl.tk/man/tcl8.6/TclCmd/http.htm#M11 , we get this result:
%2Fcomments%2Fview%3Fobject_id%3D45%26return_url%3D%2Fticket%2Fview%3Fx%3D456%26ticket_id%3D90
We understand the importance of having the flag -part to encode
separately the path or the query, this is great but our concern is
that when using -query, it doesn't seem to encode the / and ? when
used as value of a variable.
RFC 3986 updates RFC 1738 and obsoletes RFCs 2732, 2396, 1808 The
detailed definition of the encoding of a query RFC 3986 is summarized in
the source code [2]. The definition says clearly
query = *( pchar / "/" / "?" )
which means, that slash and question mark should be unprotected. The
query part is after the "?" which separates the path from the query. In
a path, these characters have to be encoded. Why are you concerned?
-g
PS: RFC 2718 is about URL *schemes" and is cited in the Tcl manpage
about the usage of UTF-8.
[1] https://sourceforge.net/p/naviserver/mailman/message/35747431/
[2]
https://bitbucket.org/naviserver/naviserver/src/15ad74bc59a51bb53f6feef0135049576289a388/nsd/urlencode.c?at=default&fileviewer=file-view-default#urlencode.c-232
Enrique.
On Thu, Jun 8, 2017 at 9:29 PM, Gustaf Neumann <neum...@wu.ac.at
<mailto:neum...@wu.ac.at>> wrote:
Brian,
It is certainly possible to overload every command, but i would
not recommend it, since this can break code in various ways, and i
would not recommend to rely in general on the
non-standard-confoming AOLserver encoding.I would rather recommend
to implement a new function (e.g. ns_urlencode_aol) which can be
used in your UUID implementation. Would this be an acceptable
approach for your system? i could dig out the AOLserver code and
send you such an implementation, in case that would be of use for you.
-g
PS: there are many - also pretty standard - ways to compute an
UUID. An UUID should not depend on an encoding representation,
which is just intended as a temporary representation for transit,
internally everything should work on the decoded values.
Am 08.06.17 um 18:50 schrieb Brian Fenton:
Hi all
I'm back again with more questions about changes to ns_urlencode
in Naviserver.
1.Can someone confirm what is the default for -part, query or
path? From my own tests, it seems to be "query" but I couldn't
see it in the docs here
https://naviserver.sourceforge.io/n/naviserver/files/ns_urlencode.html
<https://naviserver.sourceforge.io/n/naviserver/files/ns_urlencode.html>
2. in the case where the query portion of a URL, has a value
which itself is a url, Naviserver handles this differently than
AOLserver e.g.
ns_urlencode "url=/wf/task?task_id=2" returns:
url%3d/wf/task?task_id%3d2
Under AOLserver, this returns:
url%3d%2fwf%2ftask%3ftask%5fid%3d2
This is something widely used in our application, where we have a
UUID implementation, which relies on encoding and decoding URLs,
and comparing them to cached values. Unfortunately this
difference in how Naviserver and AOLserver implement this is
giving us some issues (of our own making, admittedly).
Has anyone any suggestions for how to obtain the AOLserver
behaviour under Naviserver? Would it be difficult to overload
ns_urlencode?
Would be grateful for any advice.
best wishes
Brian
*From:*Brian Fenton
*Sent:* 12 May 2017 15:18
*To:* naviserver-devel@lists.sourceforge.net
<mailto:naviserver-devel@lists.sourceforge.net>
*Subject:* RE: [naviserver-devel] ns_urlencode on Windows Naviserver
Thanks Gustaf
An issue arose during migration testing which was breaking some
of our existing AOLserver code, then when I saw the documentation
issue, I thought best to check with the list that maybe there was
an issue with the Windows version.
I’ll dig into our code and see what the problem is exactly.
thanks
Brian
*From:*Gustaf Neumann [mailto:neum...@wu.ac.at]
*Sent:* 12 May 2017 14:52
*To:* naviserver-devel@lists.sourceforge.net
<mailto:naviserver-devel@lists.sourceforge.net>
*Subject:* Re: [naviserver-devel] ns_urlencode on Windows Naviserver
Am 12.05.17 um 13:41 schrieb Brian Fenton:
Thank you David
So, assuming the documentation is incorrect
https://naviserver.sourceforge.io/n/naviserver/files/ns_urlencode.html
<https://naviserver.sourceforge.io/n/naviserver/files/ns_urlencode.html>
it seems that the API has been changed from AOLserver.
Brian
Brian, are you worried about the literal comparison in a test
case, or is there a deeper background?
Some more background: ns_urlencode in AOLserver was always
incorrect in respect to the RFCs, which define different
encodings for the "path" and the "query" part of an URL.
Therefore many years ago, NaviServer added flags "-part" to
specify the encoding (implementing an extension of RFC1738 (1994)).
In the (unreleased) tip version of NaviServer on bitbucket, i've
updated the implementation to be in sync with valid RFCs (RFC
3986 for URIs and RFC 6265, cookie encodings). So if one compares
the result of a tip version of NaviServer with the documentation
of the released version, the results differ (btw., the example on
the NaviServer man page is bad). See about the changes in the tip
see e.g. [1] and the following postings.
-g
[1]
https://sourceforge.net/p/naviserver/mailman/naviserver-devel/?limit=50&viewmonth=201703&viewday=22
<https://sourceforge.net/p/naviserver/mailman/naviserver-devel/?limit=50&viewmonth=201703&viewday=22>
--
Univ.Prof. Dr. Gustaf Neumann
WU Vienna
Institute of Information Systems and New Media
Welthandelsplatz 1, A-1020 Vienna, Austria
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org!http://sdm.link/slashdot
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
<mailto:naviserver-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/naviserver-devel
<https://lists.sourceforge.net/lists/listinfo/naviserver-devel>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel