fix permission check in tar/zip generator (gdi)

This commit is contained in:
ed 2021-06-01 03:55:31 +02:00
parent 49ffec5320
commit d89329757e
4 changed files with 19 additions and 10 deletions

View file

@ -135,7 +135,7 @@ class VFS(object):
#
return os.path.realpath(rp)
def ls(self, rem, uname, scandir, lstat=False):
def ls(self, rem, uname, scandir, incl_wo=False, lstat=False):
"""return user-readable [fsdir,real,virt] items at vpath"""
virt_vis = {} # nodes readable by user
abspath = self.canonical(rem)
@ -143,12 +143,12 @@ class VFS(object):
real.sort()
if not rem:
for name, vn2 in sorted(self.nodes.items()):
if (
uname in vn2.uread
or "*" in vn2.uread
or uname in vn2.uwrite
or "*" in vn2.uwrite
):
ok = uname in vn2.uread or "*" in vn2.uread
if not ok and incl_wo:
ok = uname in vn2.uwrite or "*" in vn2.uwrite
if ok:
virt_vis[name] = vn2
# no vfs nodes in the list of real inodes
@ -162,7 +162,7 @@ class VFS(object):
rel is a unix-style user-defined vpath (not vfs-related)
"""
fsroot, vfs_ls, vfs_virt = self.ls(rem, uname, scandir, lstat)
fsroot, vfs_ls, vfs_virt = self.ls(rem, uname, scandir, False, lstat)
rfiles = [x for x in vfs_ls if not stat.S_ISDIR(x[1].st_mode)]
rdirs = [x for x in vfs_ls if stat.S_ISDIR(x[1].st_mode)]

View file

@ -1400,7 +1400,9 @@ class HttpCli(object):
try:
vn, rem = self.auth.vfs.get(top, self.uname, True, False)
fsroot, vfs_ls, vfs_virt = vn.ls(rem, self.uname, not self.args.no_scandir)
fsroot, vfs_ls, vfs_virt = vn.ls(
rem, self.uname, not self.args.no_scandir, True
)
except:
vfs_ls = []
vfs_virt = {}
@ -1565,7 +1567,9 @@ class HttpCli(object):
if v is not None:
return self.tx_zip(k, v, vn, rem, [], self.args.ed)
fsroot, vfs_ls, vfs_virt = vn.ls(rem, self.uname, not self.args.no_scandir)
fsroot, vfs_ls, vfs_virt = vn.ls(
rem, self.uname, not self.args.no_scandir, True
)
stats = {k: v for k, v in vfs_ls}
vfs_ls = [x[0] for x in vfs_ls]
vfs_ls.extend(vfs_virt.keys())

View file

@ -32,6 +32,8 @@ class Cfg(Namespace):
no_zip=False,
no_scandir=False,
no_sendfile=True,
no_rescan=True,
ihead=False,
nih=True,
mtp=[],
mte="a",

View file

@ -91,7 +91,10 @@ class VHttpConn(object):
self.auth = auth
self.log_func = log
self.log_src = "a"
self.lf_url = None
self.hsrv = VHttpSrv()
self.nbyte = 0
self.workload = 0
self.ico = None
self.thumbcli = None
self.t0 = time.time()