|
@@ -1,4 +1,5 @@
|
|
import json
|
|
import json
|
|
|
|
+import os
|
|
from collections import OrderedDict
|
|
from collections import OrderedDict
|
|
from datetime import datetime, timezone
|
|
from datetime import datetime, timezone
|
|
from io import StringIO
|
|
from io import StringIO
|
|
@@ -295,18 +296,22 @@ def test_backup_io_iter():
|
|
|
|
|
|
def test_get_item_uid_gid():
|
|
def test_get_item_uid_gid():
|
|
# test requires that:
|
|
# test requires that:
|
|
- # - a name for user 0 and group 0 exists, usually root:root or root:wheel.
|
|
|
|
|
|
+ # - a user/group name for the current process' real uid/gid exists.
|
|
# - a system user/group udoesnotexist:gdoesnotexist does NOT exist.
|
|
# - a system user/group udoesnotexist:gdoesnotexist does NOT exist.
|
|
|
|
|
|
- user0, group0 = uid2user(0), gid2group(0)
|
|
|
|
|
|
+ try:
|
|
|
|
+ puid, pgid = os.getuid(), os.getgid() # UNIX only
|
|
|
|
+ except AttributeError:
|
|
|
|
+ puid, pgid = 0, 0
|
|
|
|
+ puser, pgroup = uid2user(puid), gid2group(pgid)
|
|
|
|
|
|
# this is intentionally a "strange" item, with not matching ids/names.
|
|
# this is intentionally a "strange" item, with not matching ids/names.
|
|
- item = Item(path="filename", uid=1, gid=2, user=user0, group=group0)
|
|
|
|
|
|
+ item = Item(path="filename", uid=1, gid=2, user=puser, group=pgroup)
|
|
|
|
|
|
uid, gid = get_item_uid_gid(item, numeric=False)
|
|
uid, gid = get_item_uid_gid(item, numeric=False)
|
|
# these are found via a name-to-id lookup
|
|
# these are found via a name-to-id lookup
|
|
- assert uid == 0
|
|
|
|
- assert gid == 0
|
|
|
|
|
|
+ assert uid == puid
|
|
|
|
+ assert gid == pgid
|
|
|
|
|
|
uid, gid = get_item_uid_gid(item, numeric=True)
|
|
uid, gid = get_item_uid_gid(item, numeric=True)
|
|
# these are directly taken from the item.uid and .gid
|
|
# these are directly taken from the item.uid and .gid
|
|
@@ -319,7 +324,7 @@ def test_get_item_uid_gid():
|
|
assert gid == 4
|
|
assert gid == 4
|
|
|
|
|
|
# item metadata broken, has negative ids.
|
|
# item metadata broken, has negative ids.
|
|
- item = Item(path="filename", uid=-1, gid=-2, user=user0, group=group0)
|
|
|
|
|
|
+ item = Item(path="filename", uid=-1, gid=-2, user=puser, group=pgroup)
|
|
|
|
|
|
uid, gid = get_item_uid_gid(item, numeric=True)
|
|
uid, gid = get_item_uid_gid(item, numeric=True)
|
|
# use the uid/gid defaults (which both default to 0).
|
|
# use the uid/gid defaults (which both default to 0).
|
|
@@ -356,3 +361,29 @@ def test_get_item_uid_gid():
|
|
# because item uid/gid seems valid, do not use the given uid/gid defaults
|
|
# because item uid/gid seems valid, do not use the given uid/gid defaults
|
|
assert uid == 9
|
|
assert uid == 9
|
|
assert gid == 10
|
|
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
|