Commit 0d5ebab1 authored by Wayne Davison's avatar Wayne Davison

Add conditional support for excluding types of files from xattr ops.

parent dab0fb7c
......@@ -1476,6 +1476,7 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
#endif
#ifdef SUPPORT_XATTRS
if (preserve_xattrs) {
sx.st.st_mode = file->mode;
if (get_xattr(fname, &sx) < 0) {
io_error |= IOERR_GENERAL;
return NULL;
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment