Browse Source

Merge pull request #7287 from ThomasWaldmann/fix-get-item-uid-gid-win32

fix some uid/gid lookup code / tests for win32
TW 2 years ago
parent
commit
ccbfc4ee95
2 changed files with 23 additions and 12 deletions
  1. 6 0
      src/borg/platform/windows.pyx
  2. 17 12
      src/borg/testsuite/archive.py

+ 6 - 0
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
 
 

+ 17 - 12
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
-
-    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 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)
+        # 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)