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:
- Mapping DOS file attributes to UNIX permissions
- Storing the DOS attributes in extended file attributes
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)