diff --git a/src/borg/platform/windows.pyx b/src/borg/platform/windows.pyx index 96cd426f0..16b3f1542 100644 --- a/src/borg/platform/windows.pyx +++ b/src/borg/platform/windows.pyx @@ -21,6 +21,9 @@ def uid2user(uid, default=None): @lru_cache(maxsize=None) def user2uid(user, default=None): + if not user: + # user is either None or the empty string + return default return 0 @@ -31,6 +34,9 @@ def gid2group(gid, default=None): @lru_cache(maxsize=None) def group2gid(group, default=None): + if not group: + # group is either None or the empty string + return default return 0 diff --git a/src/borg/testsuite/archive.py b/src/borg/testsuite/archive.py index 27aa4507f..1cc2ffd0c 100644 --- a/src/borg/testsuite/archive.py +++ b/src/borg/testsuite/archive.py @@ -14,7 +14,7 @@ from ..archive import BackupOSError, backup_io, backup_io_iter, get_item_uid_gid from ..helpers import msgpack from ..item import Item, ArchiveItem from ..manifest import Manifest -from ..platform import uid2user, gid2group +from ..platform import uid2user, gid2group, is_win32 @pytest.fixture() @@ -349,18 +349,23 @@ def test_get_item_uid_gid(): assert uid == 7 assert gid == 8 - # item metadata has valid uid/gid, but non-existing user/group names. - item = Item(path="filename", uid=9, gid=10, user="udoesnotexist", group="gdoesnotexist") + if not is_win32: + # due to the hack in borg.platform.windows user2uid / group2gid, these always return 0 + # (no matter which username we ask for) and they never raise a KeyError (like e.g. for + # a non-existing user/group name). Thus, these tests can currently not succeed on win32. - uid, gid = get_item_uid_gid(item, numeric=False) - # because user/group name does not exist here, use valid numeric ids from item metadata. - assert uid == 9 - assert gid == 10 + # item metadata has valid uid/gid, but non-existing user/group names. + item = Item(path="filename", uid=9, gid=10, user="udoesnotexist", group="gdoesnotexist") - uid, gid = get_item_uid_gid(item, numeric=False, uid_default=11, gid_default=12) - # because item uid/gid seems valid, do not use the given uid/gid defaults - assert uid == 9 - assert gid == 10 + uid, gid = get_item_uid_gid(item, numeric=False) + # because user/group name does not exist here, use valid numeric ids from item metadata. + assert uid == 9 + assert gid == 10 + + uid, gid = get_item_uid_gid(item, numeric=False, uid_default=11, gid_default=12) + # 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)