X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/6500e0769a56919df1d47759828104a08df850bb..f187ce36cc8d08e9cefc0662102131a139240a23:/acls.c diff --git a/acls.c b/acls.c index ef2751c3..35734bb1 100644 --- a/acls.c +++ b/acls.c @@ -495,9 +495,15 @@ static int get_rsync_acl(const char *fname, rsync_acl *racl, } racl->user_obj = IVAL(buf, 0); + if (racl->user_obj == NO_ENTRY) + racl->user_obj = (mode >> 6) & 7; racl->group_obj = IVAL(buf, 4); + if (racl->group_obj == NO_ENTRY) + racl->group_obj = (mode >> 3) & 7; racl->mask_obj = IVAL(buf, 8); racl->other_obj = IVAL(buf, 12); + if (racl->other_obj == NO_ENTRY) + racl->other_obj = mode & 7; if (cnt) { char *bp = buf + 4*4; @@ -589,9 +595,9 @@ static void send_ida_entries(int f, const ida_entries *idal) const char *name; if (ida->access & NAME_IS_USER) { xbits |= XFLAG_NAME_IS_USER; - name = add_uid(ida->id); + name = numeric_ids ? NULL : add_uid(ida->id); } else - name = add_gid(ida->id); + name = numeric_ids ? NULL : add_gid(ida->id); write_varint(f, ida->id); if (inc_recurse && name) { int len = strlen(name); @@ -1101,6 +1107,9 @@ int default_perms_for_dir(const char *dir) if (sacl == NULL) { /* Couldn't get an ACL. Darn. */ switch (errno) { + case EINVAL: + /* If SMB_ACL_TYPE_DEFAULT isn't valid, then the ACLs must be non-POSIX. */ + break; #ifdef ENOTSUP case ENOTSUP: #endif