mirror of
				https://github.com/9001/copyparty.git
				synced 2025-11-03 21:43:12 +00:00 
			
		
		
		
	fix permission check in tar/zip generator (gdi)
This commit is contained in:
		@@ -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)]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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())
 | 
			
		||||
 
 | 
			
		||||
@@ -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",
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
		Reference in New Issue
	
	Block a user