fix permission check in tar/zip generator (gdi)
This commit is contained in:
		
							parent
							
								
									49ffec5320
								
							
						
					
					
						commit
						d89329757e
					
				| @ -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() | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 ed
						ed