The security.evm extended attribute is fully owned by the Linux kernel
and cannot be directly written from userspace. Therefore, we can always
skip it.
---
 xattrs.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/xattrs.c b/xattrs.c
index b105392..3b72e61 100644
--- a/xattrs.c
+++ b/xattrs.c
@@ -255,6 +255,9 @@ static int rsync_xal_get(const char *fname, item_list *xalp)
                if (user_only ? !HAS_PREFIX(name, USER_PREFIX)
                              : HAS_PREFIX(name, SYSTEM_PREFIX))
                        continue;
+
+               if (!strcmp(name, "security.evm"))
+                       continue;
 #endif
 
                /* No rsync.%FOO attributes are copied w/o 2 -X options. */
@@ -358,6 +361,9 @@ int copy_xattrs(const char *source, const char *dest)
                if (user_only ? !HAS_PREFIX(name, USER_PREFIX)
                              : HAS_PREFIX(name, SYSTEM_PREFIX))
                        continue;
+
+               if (!strcmp(name, "security.evm"))
+                       continue;
 #endif
 
                datum_len = 0;
@@ -828,7 +834,9 @@ void receive_xattr(int f, struct file_struct *file)
                }
 #ifdef HAVE_LINUX_XATTRS
                /* Non-root can only save the user namespace. */
-               if (am_root <= 0 && !HAS_PREFIX(name, USER_PREFIX)) {
+               if (am_root <= 0 &&
+                   (!HAS_PREFIX(name, USER_PREFIX) ||
+                    !strcmp(name, "security.evm"))) {
                        if (!am_root) {
                                free(ptr);
                                continue;
@@ -962,6 +970,11 @@ static int rsync_xal_set(const char *fname, item_list 
*xalp,
        for (i = 0; i < xalp->count; i++) {
                name = rxas[i].name;
 
+#ifdef HAVE_LINUX_XATTRS
+               if (!strcmp(name, "security.evm"))
+                       continue;
+#endif
+
                if (XATTR_ABBREV(rxas[i])) {
                        /* See if the fnamecmp version is identical. */
                        len = name_len = rxas[i].name_len;
@@ -1030,6 +1043,9 @@ static int rsync_xal_set(const char *fname, item_list 
*xalp,
                if (user_only ? !HAS_PREFIX(name, USER_PREFIX)
                              : HAS_PREFIX(name, SYSTEM_PREFIX))
                        continue;
+
+               if (!strcmp(name, "security.evm"))
+                       continue;
 #endif
                if (am_root < 0 && name_len > RPRE_LEN
                 && name[RPRE_LEN] == '%' && strcmp(name, XSTAT_ATTR) == 0)
-- 
2.7.4


-- 
Please use reply-all for most replies to avoid omitting the mailing list.
To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync
Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html

Reply via email to