X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b39f79296a4cea240c659cb7d264035198aa6d44..6694ead8b8bc8ce69fbe98fd68659eaff4aa8bfd:/rsync.h diff --git a/rsync.h b/rsync.h index b85c0bb8..d89aea50 100644 --- a/rsync.h +++ b/rsync.h @@ -146,6 +146,9 @@ #define NO_FILTERS 0 #define SERVER_FILTERS 1 #define ALL_FILTERS 2 +/* Don't let the file be excluded, but check for a filter that might affect + * its attributes via MATCHFLGS_ATTRS. */ +#define ALL_FILTERS_NO_EXCLUDE 3 #define XFLG_FATAL_ERRORS (1<<0) #define XFLG_OLD_PREFIXES (1<<1) @@ -798,6 +801,8 @@ struct map_struct { int status; /* first errno from read errors */ }; +struct chmod_mode_struct; + #define MATCHFLG_WILD (1<<0) /* pattern has '*', '[', and/or '?' */ #define MATCHFLG_WILD2 (1<<1) /* pattern has '**' */ #define MATCHFLG_WILD2_PREFIX (1<<2) /* pattern starts with "**" */ @@ -818,8 +823,18 @@ struct map_struct { #define MATCHFLG_RECEIVER_SIDE (1<<17)/* rule applies to the receiving side */ #define MATCHFLG_CLEAR_LIST (1<<18)/* this item is the "!" token */ #define MATCHFLG_PERISHABLE (1<<19)/* perishable if parent dir goes away */ +#define MATCHFLG_CHMOD (1<<20)/* chmod-tweak matching files */ +#define MATCHFLG_FORCE_OWNER (1<<21)/* force owner of matching files */ +#define MATCHFLG_FORCE_GROUP (1<<22)/* force group of matching files */ #define MATCHFLGS_SIDES (MATCHFLG_SENDER_SIDE | MATCHFLG_RECEIVER_SIDE) +#define MATCHFLGS_ATTRS (MATCHFLG_CHMOD | MATCHFLG_FORCE_OWNER | MATCHFLG_FORCE_GROUP) + +struct filter_chmod_struct { + unsigned int ref_cnt; + char *modestr; + struct chmod_mode_struct *modes; +}; struct filter_struct { struct filter_struct *next; @@ -829,6 +844,11 @@ struct filter_struct { int slash_cnt; struct filter_list_struct *mergelist; } u; + /* TODO: Use an "extras" mechanism to avoid + * allocating this memory when we don't need it. */ + struct filter_chmod_struct *chmod; + uid_t force_uid; + gid_t force_gid; }; struct filter_list_struct {