Re: leading space char in smb file name

Michael B Allen <[email protected]>
Newsgroups gmane.network.samba.java
Message-ID <CAGMFw4heFM8Z6Js8BZAsLYojAJtg5Q93VE7OQ2OjMd9fdCgBCA@mail.gmail.com>
Thanks Jim,

You were already on the TODO but I updated to note your new post.

Note that the patch from [email protected] on Aug 15, 2011
might be more interesting at first glance. I just put it in the
patches directory. It's called url_leading_space.patch. Not sure if it
properly handles the # symbols though.

Whatever the case, this is already on the TODO list twice.

Mike

On Mon, Apr 16, 2012 at 7:48 AM, Jim Hurne <[email protected]> wrote:
> Hello Michael,
>
> We ran into this problem as well. We also ran into similar problems with
> filenames starting with with ".#" and "..#".  To fix the problems, we ended
> up modifying the jcifs.smb.Handler class which is responsible for parsing
> smb URLs. Our changes are included in the attached patch.
>
> The two issues are a direct result of the differences between HTTP URLs and
> "smb" URLs.  The jcifs.smb.Handler class extends the
> java.net.URLStreamHandler class.  The jcifs.smb.Handler class delegates a
> lot of processing to the URLStreamHandler class. however, the
> URLStreamHandler class parses URLs per the various HTTP specifications.
> which isn't always appropriate for SMB URLs.  Thus, the call to
> super.parseURL is wrapped in code which tries to modify the output to match
> what you would expect for SMB URLs.
>
> To fix the leading whitespace issue, we updated the jcifs.smb.Handler class
> to check the original input (the spec variable) after the call to
> super.parseURL to see if it contained leading whitespace. If it does, then
> the leading whitespace is added back into the path component of the URL.
>
> I know Mike is hesitant to apply the patch to the official JCIFS
> distribution because this is a rather sensitive part of the library (parsing
> URLs affects everything).  However, we've been using it in production for a
> few years in a variety of environments (large and small) without any
> problems.  I've also attached a JUnit 4 test class we used to test the
> modifications.  Nonetheless, the patch comes with no warranty and we cannot
> be held responsible if it doesn't work as expected or causes other problems.
>
> Regards,
>
> Jim Hurne | Software Engineer
> Office: +1.412.422.2499
> 1710 Murray Avenue, Pittsburgh PA 15217 USA
> [email protected] | Connect: www.vivisimo.com
> Vivisimo - Information Optimized
>
>
> On 04/13/2012 10:07 PM, Michael B Allen wrote:
>>
>> On Wed, Apr 11, 2012 at 5:21 PM, Anonymous
>> <[email protected]>  wrote:
>>>
>>> Hi,
>>> I had a problem with the SmbFile.
>>> I had a file with name "smb://server/share/folder/ foo.bar" on a smb
>>> server  ( foo.bar with leading blank). This file was created with jcifs, but
>>> calling
>>> new SmbFile("smb://server/share/folder/").listFiles[0].getName() only
>>> returns "foo.bar" with no leading blank.
>>>
>>> Before I had this problem, I didn't believe that it is possible to have
>>> files with leading blanks...
>>>
>>> I've analyzed the problem, and figured out, that everything is transfered
>>> correct from the server to jcifs.
>>> In the internal variable unc the path is stored with blank, but in canon,
>>> what is used for get name it's not.
>>>
>>> I hope that helps improving jcifs
>>
>> Hi Michael,
>>
>> This is a known problem. It is the java.net.URL class that is doing
>> it. When the listFiles routine calls the SmbFile constructor the name
>> is passed to the URL class which is trimming the space. There are
>> other characters that are known to cause problems like this such as #
>> at the end of names. There's not much we can do about it other than to
>> dump the java.net.URL class at some point but that would require a
>> complete re-write.
>>
>> Note that if you use an SmbFilenameFilter you can get to the
>> un-trimmed filename. But I don't know if that will help you because I
>> don't know if you will be able to create an SmbFile instance with it.
>>
>> Mike
>>
>



-- 
Michael B Allen
Java Active Directory Integration
http://www.ioplex.com/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.