Dear sambaphiles,
I hope someone can help me understand why I see inconsistent name
mangling between Samba and Windows 2000.
I am running:
LINUX: smbd Version 2.2.1a on linux kernel 2.4.18
MAC: Mac OS 9.1; DAVE version 2.5.2
WINDOWS 2000 PROFESSION (ServicePack 2)
According to the O'Reilly book, 'Using Samba', given a file named:
antidisestablishmentarianism.txt
According to 'Using Samba', it should mangle to:
ANTID~E3.TXT
This is what smbd 2.2.1a showed me (viewing the file name on the Mac
with DAVE ):
ANTID~7H.TXT
This is what Windows 2000 showed me (viewing the file name on the Mac
with DAVE ):
ANTIDI~1.TXT
I have not changed the default name mangling in smb.conf.
I looked at the latest samba sources in cvs and it appears that there
are a couple of different mangling/hash options so I am suspecting
that Samba is NOT conforming to a standard algorithm to be compatible
with Microsoft.
My purpose is the following:
I create mp3 playlists on Windows or linux (where long file names are
supported).
I want to be able to play the same lists from Mac OS 9 (where long
file names are not supported), after mangling the path names
appropriately to be equal to what the files would look like from the
Mac OS.
Apparently there is a different name mangling algorithm used by
Windows 2000 than by Samba. I would like to support both algorithms
but cannot find any utility to do this and no clear documentation of
how either system performs name mangling.
I don't know for sure who is doing the mangling here.
Is it Samba or DAVE?
Macintosh supports up to 32 char file names and I only observe
mangling for names which exceed 32 chars so I assume that DAVE is the
one doing the mangling, not Samba. Does that make sense?
The DAVE manual just says that 'Short File Names' are used but
doesn't go into detail about the algorithm, so I assumed that the
mangling algorithm must be a standard and that the Samba algorithm
would apply.
Apparently there is no standard since I get different results when
the same filename is viewed from the Windows 2000 share, which
implies that the host OS is doing the name mangling and not DAVE.
Any clues?
Can anyone point me to a better explanation of name mangling?
Thanks,
Greg Keraunen <gk@proliberty.com>
----
I was basing my testing on the following description in:
http://www.oreilly.com/catalog/samba/chapter/book/ch05_04.html
Using Samba
Robert Eckstein, David Collier-Brown, Peter Kelly
1st Edition November 1999
5.4.1 The Samba Mangling Operation
Here is how Samba mangles a long filename into an 8.3 filename:
If the original filename does not begin with a dot, up to
the first five alphanumeric characters that occur before the last dot
(if there is one) are converted to
uppercase. These characters are used as the first five
characters of the 8.3 mangled filename.
If the original filename begins with a dot, the dot is
removed and up to the first five alphanumeric characters that occur
before the last dot (if there is one) are
converted to uppercase. These characters are used as the
first five characters of the 8.3 mangled filename.
These characters are immediately followed a special
mangling character: by default, a tilde (~), although Samba allows
you to change this character.
The base of the long filename before the last period is
hashed into a two-character code; parts of the name after the last
dot may be used if necessary. This two
character code is appended to the 8.3 filename after the
mangling character.
The first three characters after the last dot (if there
is one) of the original filename are converted to uppercase and
appended onto the mangled name as the
extension. If the original filename began with a dot,
three underscores ( _ _ _ ) are used as the extension instead.
Here are some examples:
virtuosity.dat VIRTU~F1.DAT
.htaccess HTACC~U0._ _ _
hello.java HELLO~1F.JAV
team.config.txt TEAMC~04.TXT
antidisestablishmentarianism.txt ANTID~E3.TXT
antidiseast.txt ANTID~9K.TXT