Samba "ea support" Tips

At home, I use Samba as one of the methods for exposing the data on my file server to the rest of my network (the others being SFTP, FTPS, and NFS). In addition, I use Folder Redirection and Offline Files to keep my Documents, Pictures, and Videos folders in sync on all of my machines. In order to maintain the nifty appearance of those special folders, the file attributes for the desktop.ini file in each one must be preserved. Samba can do this in one of two ways:

I prefer the latter method since I also access the files from Linux machines, so changing the permissions of files is not appropriate.

To enable storing of DOS attributes in extended file attributes, the following lines must be added to each share definition in smb.conf:

ea support = yes
map hidden = no
map system = no
map archive = no
map readonly = no
store dos attributes = yes

In order for it to work, though, the filesytem containing the files must support extended attributes. My file server uses XFS, which needs no special mount options. Ext3/4 need the user_xattr mount option set.

On occassion, I have noticed that sometimes, Samba seems to ignore the extended attribute values. Setting file attributes from Windows does nothing (i.e. the changes are not saved), and setting the user.DOSATTRIB extended attribute manually with setfattr has no effect. In all cases that I have encountered, this is because Samba encounters a file or directory from which it cannot read the extended attributes. For me, this has been because I had mounted a different filesystem that did not support extended attributes on a subdirectory of a share. Apparently, once Samba encounters one file it cannot read, it stops processing extended attributes altogether.

The user.DOSATTRIB extended attribute contains a bit field indicating the state of each DOS attribute:

Read-Only = 0x1
Hidden    = 0x2
System    = 0x4
Archive   = 0x20

Use the getfattr command to view the current attributes:

dustin@rigel ~/Documents $ getfattr -n user.DOSATTRIB desktop.ini 
# file: desktop.ini
user.DOSATTRIB="0x6"

Use the setfattr command to manually set a file's attributes:

dustin@rigel ~/Documents $ setfattr -n user.DOSATTRIB -v '"0x6"' desktop.ini

(Note the escaping of the quotes in the value; this is needed to force the extended attribute to contain a string instead of an integer)