extern int copy_unsafe_links;
extern int protocol_version;
extern int sanitize_paths;
+extern char *usermap;
+extern char *groupmap;
extern struct stats stats;
extern int copy_unsafe_links;
extern int protocol_version;
extern int sanitize_paths;
+extern char *usermap;
+extern char *groupmap;
extern struct stats stats;
- extern char curr_dir[MAXPATHLEN];
-@@ -742,7 +744,7 @@ static struct file_struct *recv_file_ent
+@@ -733,7 +735,7 @@ static struct file_struct *recv_file_ent
uid = (uid_t)read_varint(f);
if (xflags & XMIT_USER_NAME_FOLLOWS)
uid = recv_user_name(f, uid);
uid = (uid_t)read_varint(f);
if (xflags & XMIT_USER_NAME_FOLLOWS)
uid = recv_user_name(f, uid);
gid_flags = 0;
if (xflags & XMIT_GROUP_NAME_FOLLOWS)
gid = recv_group_name(f, gid, &gid_flags);
gid_flags = 0;
if (xflags & XMIT_GROUP_NAME_FOLLOWS)
gid = recv_group_name(f, gid, &gid_flags);
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," -m, --prune-empty-dirs prune empty directory chains from the file-list\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," -m, --prune-empty-dirs prune empty directory chains from the file-list\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --timeout=TIME set I/O timeout in seconds\n");
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," --timeout=TIME set I/O timeout in seconds\n");
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," --size-only skip files that match in size\n");
-@@ -568,6 +572,8 @@ static struct poptOption long_options[]
- {"files-from", 0, POPT_ARG_STRING, &files_from, 0, 0, 0 },
- {"from0", '0', POPT_ARG_NONE, &eol_nulls, 0, 0, 0},
- {"numeric-ids", 0, POPT_ARG_NONE, &numeric_ids, 0, 0, 0 },
+@@ -601,6 +605,8 @@ static struct poptOption long_options[]
+ {"no-s", 0, POPT_ARG_VAL, &protect_args, 0, 0, 0},
+ {"numeric-ids", 0, POPT_ARG_VAL, &numeric_ids, 1, 0, 0 },
+ {"no-numeric-ids", 0, POPT_ARG_VAL, &numeric_ids, 0, 0, 0 },
+ {"usermap", 0, POPT_ARG_STRING, &usermap, 0, 0, 0 },
+ {"groupmap", 0, POPT_ARG_STRING, &groupmap, 0, 0, 0 },
{"timeout", 0, POPT_ARG_INT, &io_timeout, 0, 0, 0 },
+ {"usermap", 0, POPT_ARG_STRING, &usermap, 0, 0, 0 },
+ {"groupmap", 0, POPT_ARG_STRING, &groupmap, 0, 0, 0 },
{"timeout", 0, POPT_ARG_INT, &io_timeout, 0, 0, 0 },
{"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
{"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
- {"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
-@@ -1857,6 +1863,18 @@ void server_options(char **args,int *arg
- args[ac++] = "--numeric-ids";
+@@ -1935,6 +1941,18 @@ void server_options(char **args, int *ar
+ args[ac++] = "--no-i-r";
--delay-updates put all updated files into place at end
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--delay-updates put all updated files into place at end
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--timeout=TIME set I/O timeout in seconds
-I, --ignore-times don't skip files that match size and time
--size-only skip files that match in size
--timeout=TIME set I/O timeout in seconds
-I, --ignore-times don't skip files that match size and time
--size-only skip files that match in size
the chroot setting affects rsync's ability to look up the names of the
users and groups and what you can do about it.
the chroot setting affects rsync's ability to look up the names of the
users and groups and what you can do about it.
static struct idlist *add_to_list(struct idlist **root, id_t id, char *name,
id_t id2, uint16 flags)
static struct idlist *add_to_list(struct idlist **root, id_t id, char *name,
id_t id2, uint16 flags)
-@@ -227,7 +231,7 @@ gid_t match_gid(gid_t gid, uint16 *flags
+@@ -227,7 +232,7 @@ gid_t match_gid(gid_t gid, uint16 *flags
-@@ -316,7 +320,7 @@ uid_t recv_user_name(int f, uid_t uid)
+@@ -316,7 +321,7 @@ uid_t recv_user_name(int f, uid_t uid)
-@@ -328,7 +332,7 @@ gid_t recv_group_name(int f, gid_t gid,
+@@ -328,7 +333,7 @@ gid_t recv_group_name(int f, gid_t gid,
-@@ -355,17 +359,96 @@ void recv_id_list(int f, struct file_lis
+@@ -355,17 +360,96 @@ void recv_id_list(int f, struct file_lis
#endif
- if (am_root && preserve_uid && !numeric_ids) {
+ if (am_root && preserve_uid && (!numeric_ids || usermap)) {
#endif
- if (am_root && preserve_uid && !numeric_ids) {
+ if (am_root && preserve_uid && (!numeric_ids || usermap)) {
F_OWNER(flist->files[i]) = match_uid(F_OWNER(flist->files[i]));
}
- if (preserve_gid && (!am_root || !numeric_ids)) {
+ if (preserve_gid && (!am_root || !numeric_ids || groupmap)) {
F_OWNER(flist->files[i]) = match_uid(F_OWNER(flist->files[i]));
}
- if (preserve_gid && (!am_root || !numeric_ids)) {
+ if (preserve_gid && (!am_root || !numeric_ids || groupmap)) {
F_GROUP(flist->files[i]) = match_gid(F_GROUP(flist->files[i]),
&flist->files[i]->flags);
}
F_GROUP(flist->files[i]) = match_gid(F_GROUP(flist->files[i]),
&flist->files[i]->flags);
}