get_item_uid_gid: do not require item.uid/gid, see #7249

if uid is not present, fall back to uid_default.
if gid is not present, fall back to gid_default.
This commit is contained in:
Thomas Waldmann 2023-01-14 23:47:18 +01:00
parent d49665526c
commit 4f9cda1aab
No known key found for this signature in database
GPG Key ID: 243ACFA951F78E01
2 changed files with 30 additions and 4 deletions

View File

@ -410,15 +410,15 @@ def get_item_uid_gid(item, *, numeric, uid_forced=None, gid_forced=None, uid_def
uid = uid_forced
else:
uid = None if numeric else user2uid(item.get("user"))
uid = item.uid if uid is None else uid
if uid < 0:
uid = item.get("uid") if uid is None else uid
if uid is None or uid < 0:
uid = uid_default
if gid_forced is not None:
gid = gid_forced
else:
gid = None if numeric else group2gid(item.get("group"))
gid = item.gid if gid is None else gid
if gid < 0:
gid = item.get("gid") if gid is None else gid
if gid is None or gid < 0:
gid = gid_default
return uid, gid

View File

@ -356,3 +356,29 @@ def test_get_item_uid_gid():
# because item uid/gid seems valid, do not use the given uid/gid defaults
assert uid == 9
assert gid == 10
# item metadata only has uid/gid, but no user/group.
item = Item(path="filename", uid=13, gid=14)
uid, gid = get_item_uid_gid(item, numeric=False)
# it'll check user/group first, but as there is nothing in the item, falls back to uid/gid.
assert uid == 13
assert gid == 14
uid, gid = get_item_uid_gid(item, numeric=True)
# does not check user/group, directly returns uid/gid.
assert uid == 13
assert gid == 14
# item metadata has no uid/gid/user/group.
item = Item(path="filename")
uid, gid = get_item_uid_gid(item, numeric=False, uid_default=15)
# as there is nothing, it'll fall back to uid_default/gid_default.
assert uid == 15
assert gid == 0
uid, gid = get_item_uid_gid(item, numeric=True, gid_default=16)
# as there is nothing, it'll fall back to uid_default/gid_default.
assert uid == 0
assert gid == 16