summaryrefslogtreecommitdiff
path: root/uidlist.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2008-02-14 13:24:16 -0800
committerWayne Davison <wayned@samba.org>2008-02-15 17:39:21 -0800
commit0b52f94da727c4881b58c1cd6f2cf2a824e02b30 (patch)
tree536c0b7111e0868944e7735d09c1bd260ac30aef /uidlist.c
parentf96bac8468f483d99cd150d22f235e2e8dc5ed92 (diff)
downloadrsync-0b52f94da727c4881b58c1cd6f2cf2a824e02b30.tar.gz
Some daemon security improvements, including the new parameters
"charset" and "numeric ids".
Diffstat (limited to 'uidlist.c')
-rw-r--r--uidlist.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/uidlist.c b/uidlist.c
index 48e0318d..bb7a3013 100644
--- a/uidlist.c
+++ b/uidlist.c
@@ -316,6 +316,10 @@ uid_t recv_user_name(int f, uid_t uid)
if (!name)
out_of_memory("recv_user_name");
read_sbuf(f, name, len);
+ if (numeric_ids < 0) {
+ free(name);
+ name = NULL;
+ }
node = recv_add_uid(uid, name); /* node keeps name's memory */
return node->id2;
}
@@ -328,6 +332,10 @@ gid_t recv_group_name(int f, gid_t gid, uint16 *flags_ptr)
if (!name)
out_of_memory("recv_group_name");
read_sbuf(f, name, len);
+ if (numeric_ids < 0) {
+ free(name);
+ name = NULL;
+ }
node = recv_add_gid(gid, name); /* node keeps name's memory */
if (flags_ptr && node->flags & FLAG_SKIP_GROUP)
*flags_ptr |= FLAG_SKIP_GROUP;
@@ -341,13 +349,13 @@ void recv_id_list(int f, struct file_list *flist)
id_t id;
int i;
- if ((preserve_uid || preserve_acls) && !numeric_ids) {
+ if ((preserve_uid || preserve_acls) && numeric_ids <= 0) {
/* read the uid list */
while ((id = read_varint30(f)) != 0)
recv_user_name(f, id);
}
- if ((preserve_gid || preserve_acls) && !numeric_ids) {
+ if ((preserve_gid || preserve_acls) && numeric_ids <= 0) {
/* read the gid list */
while ((id = read_varint30(f)) != 0)
recv_group_name(f, id, NULL);