[jcifs] Re: SMB URL encoding/decoding

James Nord teilo at teilo.net
Sun Feb 24 14:16:36 EST 2002


Michael B Allen wrote:

>On Sat, 23 Feb 2002 20:34:43 -0600
>"Christopher R. Hertel" <crh at ubiqx.org> wrote:
>
>>I think you are both right to some extent here.  Generally speaking an '@'
>>char is in the <reserved> set and should typically by escaped.  However...
>>
>>      net_path      = "//" authority [ abs_path ]
>>      abs_path      = "/"  path_segments
>>      rel_path      = rel_segment [ abs_path ]
>>
>>      path          = [ abs_path | opaque_part ]
>>      path_segments = segment *( "/" segment )
>>      segment       = *pchar *( ";" param )
>>      param         = *pchar
>>      pchar         = unreserved | escaped |
>>                      ":" | "@" | "&" | "=" | "+" | "$" | ","
>>
>>According to all that mess, the "@" is a legal pchar, and path strings are
>>made up of pchars.  So... Yes, the "@" may be used unescaped in a path.
>>
>
>Ok, well then we're doing this all wrong. I want to know how the author
>of this grammer defines "authority" and how to traverse all the characters
>that might apear in the the password.
>
Take everything between the first two // and the next / (or end of 
string if no slash) everything else is <path field>

then if there is an @ (there can only be 0 or 1) then
    everything before is a <userauth>
    everything after is <server field>

Take the <userauth>
    if there is a : (there can only be 0 or 1)
    then everything before is <userinfo field> everything after is 
<password field>

take the <userinfo field>
    if there is a ; (there can be only 0 or 1)
    then everything before the ; is <domain field>
    everything after is <username field>

Then:
    NT Domain = urldecode ( <domain field>)
    username = urldecode (<username field>)
    password = urldecode(<password field>)

    server = urldecode(<server field>)

    path = urldecode<path field>
   
   
Simple ;-)

and to go the other way urlencode...

/James





More information about the jcifs mailing list