]> arthur.barton.de Git - bup.git/commitdiff
vfs: use None for unknown uid/gid
authorJohannes Berg <johannes@sipsolutions.net>
Sat, 8 Feb 2020 21:54:56 +0000 (22:54 +0100)
committerRob Browning <rlb@defaultvalue.org>
Sun, 19 Apr 2020 20:52:32 +0000 (15:52 -0500)
This means we show '?' instead of 0 for unknown UIDs when
numeric output is requested, as it was before.

This also uncovered a forgotten bytes annotation for the
"unknown" string ('?' should be b'?').

Somehow, this new behaviour (of printing 0 instead of ?)
also got quite enshrined in the test suite, fix that too.

And finally, on python 2, fuse doesn't accept None in the
stat struct (but does on python 3, go figure).

Fixes: f76c37383ddb ("Remove vfs (replaced by vfs2)")
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
cmd/fuse-cmd.py
lib/bup/metadata.py
lib/bup/t/tvfs.py
lib/bup/vfs.py
t/test-ls

index dbc0cd1f8db5d6a5738c08f2a2f3f25c87b29b40..2eb28fbcf8c0293844456c51cf9b4c2bdde09182 100755 (executable)
@@ -69,8 +69,8 @@ class BupFs(fuse.Fuse):
         # FIXME: do we want/need to do anything more with nlink?
         st = fuse.Stat(st_mode=meta.mode, st_nlink=1, st_size=meta.size)
         st.st_mode = meta.mode
-        st.st_uid = meta.uid
-        st.st_gid = meta.gid
+        st.st_uid = meta.uid or 0
+        st.st_gid = meta.gid or 0
         st.st_atime = max(0, xstat.fstime_floor_secs(meta.atime))
         st.st_mtime = max(0, xstat.fstime_floor_secs(meta.mtime))
         st.st_ctime = max(0, xstat.fstime_floor_secs(meta.ctime))
index 48b1a07d5009b0f90342a807f561cf9960cb1f8d..d5b4b4ac30e902148c27fa45f27c64508daa1d7b 100644 (file)
@@ -418,8 +418,10 @@ class Metadata:
 
         uid = gid = -1 # By default, do nothing.
         if is_superuser():
-            uid = self.uid
-            gid = self.gid
+            if self.uid is not None:
+                uid = self.uid
+            if self.gid is not None:
+                gid = self.gid
             if not restore_numeric_ids:
                 if self.uid != 0 and self.user:
                     entry = pwd_from_name(self.user)
@@ -1012,7 +1014,7 @@ def summary_bytes(meta, numeric_ids = False, classification = None,
                   human_readable = False):
     """Return bytes containing the "ls -l" style listing for meta.
     Classification may be "all", "type", or None."""
-    user_str = group_str = size_or_dev_str = '?'
+    user_str = group_str = size_or_dev_str = b'?'
     symlink_target = None
     if meta:
         name = meta.path
index a2500f94c58f524546e69aca1f89da9c9b9e9739..2563333a6481ccb1e213a35124799d8f9a4f1588 100644 (file)
@@ -114,7 +114,7 @@ def run_augment_item_meta_tests(repo,
         wvpass(item is not file_item)
         wvpass(isinstance(meta, Metadata))
         wvpasseq(vfs.default_file_mode, meta.mode)
-        wvpasseq((0, 0, 0, 0, 0),
+        wvpasseq((None, None, 0, 0, 0),
                  (meta.uid, meta.gid, meta.atime, meta.mtime, meta.ctime))
     wvpass(augmented.meta.size is None)
     wvpasseq(file_size, augmented_w_size.meta.size)
index 8b4789c02e151e508082684131e66229f8c34352..934ff8189f8c36815f98efb0514ae75f3e02fcc7 100644 (file)
@@ -1112,7 +1112,8 @@ def augment_item_meta(repo, item, include_size=False):
     # m is mode
     meta = Metadata()
     meta.mode = m
-    meta.uid = meta.gid = meta.atime = meta.mtime = meta.ctime = 0
+    meta.uid = meta.gid = None
+    meta.atime = meta.mtime = meta.ctime = 0
     if S_ISLNK(m):
         if isinstance(item, FakeLink):
             target = item.target
index fcff652d4c2008b22891efd273e07f37a96c45de..2912476213ae558ea365c507e19acd3bd59b45dd 100755 (executable)
--- a/t/test-ls
+++ b/t/test-ls
@@ -136,23 +136,23 @@ WVPASSEQ "$(WVPASS bup-ls -l / | tr -s ' ' ' ')" \
 "drwx------ $user/$group 0 2009-10-03 23:48 src"
 
 WVPASSEQ "$(WVPASS bup-ls -lA / | tr -s ' ' ' ')" \
-"drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
+"drwxr-xr-x ?/? 0 1970-01-01 00:00 .tag
 drwx------ $user/$group 0 2009-10-03 23:48 src"
 
 WVPASSEQ "$(WVPASS bup-ls -lAF / | tr -s ' ' ' ')" \
-"drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
+"drwxr-xr-x ?/? 0 1970-01-01 00:00 .tag/
 drwx------ $user/$group 0 2009-10-03 23:48 src/"
 
 WVPASSEQ "$(WVPASS bup-ls -la / | tr -s ' ' ' ')" \
-"drwxr-xr-x 0/0 0 1970-01-01 00:00 .
-drwxr-xr-x 0/0 0 1970-01-01 00:00 ..
-drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
+"drwxr-xr-x ?/? 0 1970-01-01 00:00 .
+drwxr-xr-x ?/? 0 1970-01-01 00:00 ..
+drwxr-xr-x ?/? 0 1970-01-01 00:00 .tag
 drwx------ $user/$group 0 2009-10-03 23:48 src"
 
 WVPASSEQ "$(WVPASS bup-ls -laF / | tr -s ' ' ' ')" \
-"drwxr-xr-x 0/0 0 1970-01-01 00:00 ./
-drwxr-xr-x 0/0 0 1970-01-01 00:00 ../
-drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
+"drwxr-xr-x ?/? 0 1970-01-01 00:00 ./
+drwxr-xr-x ?/? 0 1970-01-01 00:00 ../
+drwxr-xr-x ?/? 0 1970-01-01 00:00 .tag/
 drwx------ $user/$group 0 2009-10-03 23:48 src/"
 
 socket_mode="$(WVPASS ls -l src/socket | cut -b -10)" || exit $?
@@ -252,14 +252,14 @@ $socket_mode $uid/$gid 0 2009-10-03 23:48 socket
 $symlink_mode $uid/$gid $symlink_size $symlink_date symlink -> file"
 
 WVPASSEQ "$(bup-ls -ld "src/latest" | tr -s ' ' ' ')" \
-"lrwxr-xr-x 0/0 17 1970-01-01 00:00 src/latest -> 1977-09-05-125600"
+"lrwxr-xr-x ?/? 17 1970-01-01 00:00 src/latest -> 1977-09-05-125600"
 
 
 WVSTART "$ls_cmd_desc (backup set - long)"
 WVPASSEQ "$(bup-ls -l --numeric-ids src | cut -d' ' -f 1-2)" \
 "drwx------ $uid/$gid
 drwx------ $uid/$gid
-lrwxr-xr-x 0/0"
+lrwxr-xr-x ?/?"
 
 WVPASSEQ "$(bup-ls -ds "src/1977-09-05-125600" | tr -s ' ' ' ')" \
 "$src_tree_hash src/1977-09-05-125600"