mirror of
				https://github.com/ARM-software/devlib.git
				synced 2025-11-04 07:51:21 +00:00 
			
		
		
		
	target/xfer: Fix detection of files with restricted permissions
The command used to detect the presence of a filepath can return the wrong value if only accessible by the superuser. Pass the `as_root` parameter to the detection function to ensure that files that are to be pulled with elevated permissions are also queried with elevated permission.
This commit is contained in:
		@@ -461,7 +461,7 @@ class Target(object):
 | 
				
			|||||||
        once = functools.lru_cache(maxsize=None)
 | 
					        once = functools.lru_cache(maxsize=None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _target_cache = {}
 | 
					        _target_cache = {}
 | 
				
			||||||
        def target_paths_kind(paths):
 | 
					        def target_paths_kind(paths, as_root=False):
 | 
				
			||||||
            def process(x):
 | 
					            def process(x):
 | 
				
			||||||
                x = x.strip()
 | 
					                x = x.strip()
 | 
				
			||||||
                if x == 'notexist':
 | 
					                if x == 'notexist':
 | 
				
			||||||
@@ -481,7 +481,7 @@ class Target(object):
 | 
				
			|||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    for path in _paths
 | 
					                    for path in _paths
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                res = self.execute(cmd)
 | 
					                res = self.execute(cmd, as_root=as_root)
 | 
				
			||||||
                _target_cache.update(zip(_paths, map(process, res.split())))
 | 
					                _target_cache.update(zip(_paths, map(process, res.split())))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return [
 | 
					            return [
 | 
				
			||||||
@@ -490,7 +490,7 @@ class Target(object):
 | 
				
			|||||||
            ]
 | 
					            ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _host_cache = {}
 | 
					        _host_cache = {}
 | 
				
			||||||
        def host_paths_kind(paths):
 | 
					        def host_paths_kind(paths, as_root=False):
 | 
				
			||||||
            def path_kind(path):
 | 
					            def path_kind(path):
 | 
				
			||||||
                if os.path.isdir(path):
 | 
					                if os.path.isdir(path):
 | 
				
			||||||
                    return 'dir'
 | 
					                    return 'dir'
 | 
				
			||||||
@@ -535,9 +535,9 @@ class Target(object):
 | 
				
			|||||||
        def rewrite_dst(src, dst):
 | 
					        def rewrite_dst(src, dst):
 | 
				
			||||||
            new_dst = dst_path_join(dst, os.path.basename(src))
 | 
					            new_dst = dst_path_join(dst, os.path.basename(src))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            src_kind, = src_path_kind([src])
 | 
					            src_kind, = src_path_kind([src], as_root)
 | 
				
			||||||
            # Batch both checks to avoid a costly extra execute()
 | 
					            # Batch both checks to avoid a costly extra execute()
 | 
				
			||||||
            dst_kind, new_dst_kind = dst_paths_kind([dst, new_dst])
 | 
					            dst_kind, new_dst_kind = dst_paths_kind([dst, new_dst], as_root)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if src_kind == 'file':
 | 
					            if src_kind == 'file':
 | 
				
			||||||
                if dst_kind == 'dir':
 | 
					                if dst_kind == 'dir':
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user