summaryrefslogtreecommitdiff
path: root/xattrs.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2009-08-08 13:21:26 -0700
committerWayne Davison <wayned@samba.org>2009-08-08 13:21:26 -0700
commit0d5ebab1d6df5169c5834c02c978fd5bb67421ca (patch)
tree6489a5bd7de6fbd5ecbe888696fedaf1f1fb5f74 /xattrs.c
parentdab0fb7cf0f63bb6337eaebb69571408f7bed244 (diff)
downloadrsync-0d5ebab1d6df5169c5834c02c978fd5bb67421ca.tar.gz
Add conditional support for excluding types of files from xattr ops.
Diffstat (limited to 'xattrs.c')
-rw-r--r--xattrs.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/xattrs.c b/xattrs.c
index 0eceb393..7df67848 100644
--- a/xattrs.c
+++ b/xattrs.c
@@ -284,6 +284,20 @@ int get_xattr(const char *fname, stat_x *sxp)
{
sxp->xattr = new(item_list);
*sxp->xattr = empty_xattr;
+
+#ifdef NO_SPECIAL_XATTRS
+ if (IS_SPECIAL(sxp->st.st_mode))
+ return 0;
+#endif
+#ifdef NO_DEVICE_XATTRS
+ if (IS_DEVICE(sxp->st.st_mode))
+ return 0;
+#endif
+#ifdef NO_SYMLINK_XATTRS
+ if (S_ISLNK(sxp->st.st_mode))
+ return 0;
+#endif
+
if (rsync_xal_get(fname, sxp->xattr) < 0) {
free_xattr(sxp);
return -1;
@@ -884,6 +898,25 @@ int set_xattr(const char *fname, const struct file_struct *file,
return -1;
}
+#ifdef NO_SPECIAL_XATTRS
+ if (IS_SPECIAL(sxp->st.st_mode)) {
+ errno = ENOTSUP;
+ return -1;
+ }
+#endif
+#ifdef NO_DEVICE_XATTRS
+ if (IS_DEVICE(sxp->st.st_mode)) {
+ errno = ENOTSUP;
+ return -1;
+ }
+#endif
+#ifdef NO_SYMLINK_XATTRS
+ if (S_ISLNK(sxp->st.st_mode)) {
+ errno = ENOTSUP;
+ return -1;
+ }
+#endif
+
ndx = F_XATTR(file);
return rsync_xal_set(fname, lst + ndx, fnamecmp, sxp);
}