X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/7c15d5aa2fa65886f0130e5350cd2021283b5fda..ffa0c08b45e869703a574fb822c3f2753bbb6ad9:/xattrs.diff diff --git a/xattrs.diff b/xattrs.diff index ff1d1da..cf46b67 100644 --- a/xattrs.diff +++ b/xattrs.diff @@ -36,9 +36,9 @@ TODO: + lib/permstring.o lib/pool_alloc.o lib/sysacls.o lib/sysxattr.o @LIBOBJS@ ZLIBOBJ=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \ zlib/trees.o zlib/zutil.o zlib/adler32.o zlib/compress.o zlib/crc32.o - OBJS1=rsync.o generator.o receiver.o cleanup.o sender.o exclude.o util.o \ - main.o checksum.o match.o syscall.o log.o backup.o - OBJS2=options.o flist.o io.o compat.o hlink.o token.o uidlist.o socket.o \ + OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \ + util.o main.o checksum.o match.o syscall.o log.o backup.o + OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o \ - fileio.o batch.o clientname.o chmod.o acls.o + fileio.o batch.o clientname.o chmod.o acls.o xattr.o OBJS3=progress.o pipe.o @@ -100,9 +100,20 @@ TODO: /* Check to see if this is a device file, or link */ if ((am_root && preserve_devices && IS_DEVICE(file->mode)) +--- old/compat.c ++++ new/compat.c +@@ -58,6 +58,8 @@ void setup_protocol(int f_out,int f_in) + preserve_gid = ++file_extra_cnt; + if (preserve_acls && !am_sender) + preserve_acls = ++file_extra_cnt; ++ if (preserve_xattrs && !am_sender) ++ preserve_xattrs = ++file_extra_cnt; + + if (remote_protocol == 0) { + if (!read_batch) --- old/configure.in +++ new/configure.in -@@ -878,6 +878,40 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_ +@@ -883,6 +883,40 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_ AC_MSG_RESULT(no) ) @@ -145,7 +156,7 @@ TODO: --- old/flist.c +++ new/flist.c -@@ -41,6 +41,7 @@ extern int one_file_system; +@@ -43,6 +43,7 @@ extern int one_file_system; extern int copy_dirlinks; extern int keep_dirlinks; extern int preserve_acls; @@ -153,7 +164,7 @@ TODO: extern int preserve_links; extern int preserve_hard_links; extern int preserve_devices; -@@ -800,6 +801,10 @@ static struct file_struct *recv_file_ent +@@ -865,6 +866,10 @@ static struct file_struct *recv_file_ent if (preserve_acls) receive_acl(file, f); #endif @@ -162,10 +173,10 @@ TODO: + receive_xattr(file, f ); +#endif - return file; - } -@@ -1061,7 +1066,7 @@ static struct file_struct *send_file_nam - unsigned short flags) + if (S_ISREG(mode) || S_ISLNK(mode)) + stats.total_size += file_length; +@@ -1137,7 +1142,7 @@ static struct file_struct *send_file_nam + int flags, int filter_flags) { struct file_struct *file; -#ifdef SUPPORT_ACLS @@ -173,7 +184,7 @@ TODO: statx sx; #endif -@@ -1081,6 +1086,13 @@ static struct file_struct *send_file_nam +@@ -1156,6 +1161,13 @@ static struct file_struct *send_file_nam return NULL; } #endif @@ -187,7 +198,7 @@ TODO: maybe_emit_filelist_progress(flist->count + flist_count_offset); -@@ -1092,6 +1104,10 @@ static struct file_struct *send_file_nam +@@ -1167,6 +1179,10 @@ static struct file_struct *send_file_nam if (preserve_acls) send_acl(&sx, f); #endif @@ -434,7 +445,7 @@ TODO: {"times", 't', POPT_ARG_VAL, &preserve_times, 1, 0, 0 }, {"no-times", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 }, {"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 }, -@@ -1116,6 +1126,17 @@ int parse_arguments(int *argc, const cha +@@ -1122,6 +1132,17 @@ int parse_arguments(int *argc, const cha return 0; #endif @@ -452,16 +463,7 @@ TODO: default: /* A large opt value means that set_refuse_options() -@@ -1255,6 +1276,8 @@ int parse_arguments(int *argc, const cha - preserve_gid = ++flist_extra_cnt; - if (preserve_acls) - preserve_acls = ++flist_extra_cnt; -+ if (preserve_xattrs) -+ preserve_xattrs = ++flist_extra_cnt; - - *argv = poptGetArgs(pc); - *argc = count_args(*argv); -@@ -1570,6 +1593,10 @@ void server_options(char **args,int *arg +@@ -1590,6 +1611,10 @@ void server_options(char **args,int *arg if (preserve_acls) argstr[x++] = 'A'; #endif @@ -469,9 +471,9 @@ TODO: + if (preserve_xattrs) + argstr[x++] = 'X'; +#endif - if (preserve_uid) - argstr[x++] = 'o'; - if (preserve_gid) + if (recurse) + argstr[x++] = 'r'; + if (always_checksum) --- old/rsync.c +++ new/rsync.c @@ -33,6 +33,7 @@ @@ -482,7 +484,7 @@ TODO: extern int preserve_perms; extern int preserve_executability; extern int preserve_times; -@@ -271,6 +272,10 @@ int set_file_attrs(char *fname, struct f +@@ -321,6 +322,10 @@ int set_file_attrs(char *fname, struct f if (daemon_chmod_modes && !S_ISLNK(new_mode)) new_mode = tweak_mode(new_mode, daemon_chmod_modes); @@ -495,7 +497,7 @@ TODO: * will enable owner-writability using chmod, if necessary. --- old/rsync.h +++ new/rsync.h -@@ -516,6 +516,10 @@ struct idev_node { +@@ -554,6 +554,10 @@ struct idev_node { #define ACLS_NEED_MASK 1 #endif @@ -505,16 +507,24 @@ TODO: + #define GID_NONE ((gid_t)-1) - struct file_struct { -@@ -568,6 +572,7 @@ extern int preserve_gid; - #define F_UID(f) REQ_EXTRA(f, preserve_uid)->uid - #define F_GID(f) REQ_EXTRA(f, preserve_gid)->gid + union file_extras { +@@ -574,6 +578,7 @@ extern int file_extra_cnt; + extern int preserve_uid; + extern int preserve_gid; + extern int preserve_acls; ++extern int preserve_xattrs; + + #define FILE_STRUCT_LEN (offsetof(struct file_struct, basename)) + #define EXTRA_LEN (sizeof (union file_extras)) +@@ -607,6 +612,7 @@ extern int preserve_acls; + #define F_OWNER(f) REQ_EXTRA(f, preserve_uid)->unum + #define F_GROUP(f) REQ_EXTRA(f, preserve_gid)->unum #define F_ACL(f) REQ_EXTRA(f, preserve_acls)->unum +#define F_XATTR(f) REQ_EXTRA(f, preserve_xattrs)->unum /* These items are per-entry optional and mutally exclusive: */ - #define F_HL_IDEV(f) OPT_EXTRA(f, LEN64_BUMP(f))->idev -@@ -744,6 +749,9 @@ typedef struct { + #define F_HL_GNUM(f) OPT_EXTRA(f, LEN64_BUMP(f))->num +@@ -798,6 +804,9 @@ typedef struct { struct rsync_acl *acc_acl; /* access ACL */ struct rsync_acl *def_acl; /* default ACL */ #endif @@ -543,9 +553,9 @@ TODO: -o, --owner preserve owner (super-user only) -g, --group preserve group --devices preserve device files (super-user only) -@@ -819,6 +820,11 @@ version makes it incompatible with sendi - rsync unless you double the bf(--acls) option (e.g. bf(-AA)). This - doubling is not needed when pulling files from an older rsync. +@@ -835,6 +836,11 @@ The ACL-sending protocol used by this ve + the patch that was shipped with 2.6.8. Sending ACLs to an older version + of the ACL patch is not supported. +dit(bf(-X, --xattrs)) This option causes rsync to update the remote +extended attributes to be the same as the local ones. This will work @@ -557,7 +567,7 @@ TODO: transfer. The resulting value is treated as though it was the permissions --- old/xattr.c +++ new/xattr.c -@@ -0,0 +1,415 @@ +@@ -0,0 +1,413 @@ +/* + * Extended Attribute support for rsync. + * Written by Jay Fenlason, vaguely based on the ACLs patch. @@ -589,8 +599,6 @@ TODO: +extern int am_root; +extern int read_only; +extern int list_only; -+extern int preserve_xattrs; -+extern unsigned int file_struct_len; + +#define RSYNC_XAL_INITIAL 5 +#define RSYNC_XAL_LIST_INITIAL 100