+++
title = 'Samba "ea support" Tips'
date = 2012-08-05T05:18:00Z
+++

At home, I use [Samba](http://www.samba.org/) 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](http://technet.microsoft.com/en-us/library/cc732275.aspx) and
[Offline
Files](http://technet.microsoft.com/en-us/library/gg277982%28v=ws.10%29.aspx)
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](http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html#STOREDOSATTRIBUTES)

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`:

```ini
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)