[Samba] Interoperability with MAC OSX clients, resource forks, xattrs

Stefan Rompf stefan at loplof.de
Sun Jan 1 05:15:20 MST 2012


Hi folks,

I wish you all a happy new year!

I want to migrate a fileserver for Windows und MAC OS clients with ancient 
versions of samba and netatalk to samba 3.6 (with a samba 4 domain 
controller), but this raises quite some issues.

The new server should - if possible - not be running netatalk. While the 
package is quite mature, being able to access the same share with both CIFS 
and AFS yields into chaos since OSX. Netatalk saves the resource fork created 
by MAC clients as files into a .AppleDouble subdirectory. When connecting via 
CIFS, OSX uses other ways to save the resource fork. The current server is now 
a mixture of .AppleDouble directories and dot-underscore-files.

I've tested the vfs_streams_xattr module. If alternate data streams are 
available, OSX saves the resource fork into a stream that is converted to an 
extended attribute by this module. Doesn't work - even though the share is on 
XFS that allows 64k per extended attribute, some resource forks are larger and 
cannot be saved then.

vfs_streams_depot is totally unusable. While it can handle large streams and 
therefore resource forks, it stores them into directories named by major/minor 
of the device and inode of the original file. These files cannot be restored 
by standard unix backup tools and the linkage will also be lost if LVM f.e. 
changes the device node.

Right now I'm trying to enable vfs_streams_xattr so that windows can store the 
zone information etc, but force the MAC to save the resource fork into a dot-
underscore file resulting in two files (test.jpg and ._test.jpg f.e.) Not very 
elegant because renames on windows will lose the resource fork, but that would 
be acceptable.

Any hints or ideas on better solutions?

Also I have had some ideas on VFS modules for this purpose:

The generic solution would be to enhance vfs_streams_xattr so that it stores 
small streams in xattrs and large streams into files. These files should be in 
a subdirectory of the directory of the file they belong to and should have a 
recognizable filename. An xattr on the main file could be used as a hint that 
additional streams exist.

The apple specific solution would be a VFS module that intercepts the one 
stream OSX uses for the resource fork and store it into the .AppleDouble 
subdirectory in a format compatible with the netatalk package. The module 
would then be stacked with a vfs_streams module for the other streams. This 
solution would allow better interoperability with the netatalk package.

Thoughts?

Stefan


More information about the samba mailing list